Skip to content

Commit

Permalink
#481 accept date and time as string in ISO 8601 format for ChronoLoca…
Browse files Browse the repository at this point in the history
…lDateTime [WIP] (#528)
  • Loading branch information
rkiselev authored and robstoll committed Jul 13, 2020
1 parent d63a895 commit def1fc9
Show file tree
Hide file tree
Showing 6 changed files with 128 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ import java.time.LocalDate
import java.time.LocalDateTime
import java.time.chrono.ChronoLocalDate
import java.time.chrono.ChronoLocalDateTime
import java.time.format.DateTimeFormatter

class ChronoLocalDateTimeAssertionSpec : Spek({
include(ChronoLocalDateTimeSpec)
include(StringSpec)
}) {
object ChronoLocalDateTimeSpec : ch.tutteli.atrium.specs.integration.ChronoLocalDateTimeAssertionSpec(
fun1(Expect<ChronoLocalDateTime<*>>::isBefore),
Expand All @@ -20,12 +22,22 @@ class ChronoLocalDateTimeAssertionSpec : Spek({
fun1(Expect<ChronoLocalDateTime<*>>::isEqual)
)

object StringSpec : ch.tutteli.atrium.specs.integration.ChronoLocalDateTimeAssertionSpec(
fun1(Companion::isBefore),
//TODO #481 introduce more companions
fun1(Expect<ChronoLocalDateTime<*>>::isBeforeOrEqual),
fun1(Expect<ChronoLocalDateTime<*>>::isAfter),
fun1(Expect<ChronoLocalDateTime<*>>::isAfterOrEqual),
fun1(Expect<ChronoLocalDateTime<*>>::isEqual)
)

companion object {
fun isBefore(
expect: Expect<ChronoLocalDateTime<*>>,
expected: ChronoLocalDateTime<*>
): Expect<ChronoLocalDateTime<*>> =
//TODO #481 turn into string in ISO format
//expect.isBefore(expected.format(DateTimeFormatter.ISO_DATE_TIME))
expect.isBefore(expected)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,14 @@ fun <T : ChronoLocalDateTime<out ChronoLocalDate>> AssertionContainer<T>.isAfter
fun <T : ChronoLocalDateTime<out ChronoLocalDate>> AssertionContainer<T>.isAfterOrEqual(expected: ChronoLocalDateTime<*>): Assertion = _chronoLocalDateTimeImpl.isAfterOrEqual(this, expected)

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> AssertionContainer<T>.isEqual(expected: ChronoLocalDateTime<*>): Assertion = _chronoLocalDateTimeImpl.isEqual(this, expected)

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> AssertionContainer<T>.isBefore(expected: String): Assertion = _chronoLocalDateTimeImpl.isBefore(this, expected)

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> AssertionContainer<T>.isBeforeOrEqual(expected: String): Assertion = _chronoLocalDateTimeImpl.isBeforeOrEqual(this, expected)

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> AssertionContainer<T>.isAfter(expected: String): Assertion = _chronoLocalDateTimeImpl.isAfter(this, expected)

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> AssertionContainer<T>.isAfterOrEqual(expected: String): Assertion = _chronoLocalDateTimeImpl.isAfterOrEqual(this, expected)

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> AssertionContainer<T>.isEqual(expected: String): Assertion = _chronoLocalDateTimeImpl.isEqual(this, expected)

Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,30 @@ interface ChronoLocalDateTimeAssertions {
container: AssertionContainer<T>,
expected: ChronoLocalDateTime<*>
): Assertion

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isBefore(
container: AssertionContainer<T>,
expected: String
): Assertion

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isBeforeOrEqual(
container: AssertionContainer<T>,
expected: String
): Assertion

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isAfter(
container: AssertionContainer<T>,
expected: String
): Assertion

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isAfterOrEqual(
container: AssertionContainer<T>,
expected: String
): Assertion

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isEqual(
container: AssertionContainer<T>,
expected: String
): Assertion

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ package ch.tutteli.atrium.logic.impl

import ch.tutteli.atrium.assertions.Assertion
import ch.tutteli.atrium.creating.AssertionContainer
import ch.tutteli.atrium.logic.ChronoLocalDateTimeAssertions
import ch.tutteli.atrium.logic.createDescriptiveAssertion
import ch.tutteli.atrium.logic.*
import ch.tutteli.atrium.translations.DescriptionDateTimeLikeAssertion.*
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.chrono.ChronoLocalDate
import java.time.chrono.ChronoLocalDateTime

Expand All @@ -19,29 +20,62 @@ class DefaultChronoLocalDateTimeAssertions : ChronoLocalDateTimeAssertions {
expected: ChronoLocalDateTime<*>
): Assertion = container.createDescriptiveAssertion(IS_BEFORE, expected) { it.isBefore(expected) }

override fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isBefore(
container: AssertionContainer<T>,
expected: String
): Assertion = container.isBefore(stringToLocalDateTime(expected))

override fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isBeforeOrEqual(
container: AssertionContainer<T>,
expected: ChronoLocalDateTime<*>
): Assertion = container.createDescriptiveAssertion(IS_BEFORE_OR_EQUAL, expected) {
it.isBefore(expected) || it.isEqual(expected)
}

override fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isBeforeOrEqual(
container: AssertionContainer<T>,
expected: String
): Assertion = container.isBeforeOrEqual(stringToLocalDateTime(expected))

override fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isAfter(
container: AssertionContainer<T>,
expected: ChronoLocalDateTime<*>
): Assertion = container.createDescriptiveAssertion(IS_AFTER, expected) { it.isAfter(expected) }

override fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isAfter(
container: AssertionContainer<T>,
expected: String
): Assertion = container.isAfter(stringToLocalDateTime(expected))

override fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isAfterOrEqual(
container: AssertionContainer<T>,
expected: ChronoLocalDateTime<*>
): Assertion = container.createDescriptiveAssertion(IS_AFTER_OR_EQUAL, expected) {
it.isAfter(expected) || it.isEqual(expected)
}

override fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isAfterOrEqual(
container: AssertionContainer<T>,
expected: String
): Assertion = container.isAfterOrEqual(stringToLocalDateTime(expected))

override fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isEqual(
container: AssertionContainer<T>,
expected: ChronoLocalDateTime<*>
): Assertion = container.createDescriptiveAssertion(IS_EQUAL_TO, expected) {
it.isEqual(expected)
}

override fun <T : ChronoLocalDateTime<out ChronoLocalDate>> isEqual(
container: AssertionContainer<T>,
expected: String
): Assertion = container.isEqual(stringToLocalDateTime(expected))

private fun stringToLocalDateTime(data: String): LocalDateTime {
return if (data.contains("T")) {
LocalDateTime.parse(data)
} else {
LocalDate.parse(data).atStartOfDay()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import ch.tutteli.atrium.assertions.Assertion
import ch.tutteli.atrium.assertions.builders.assertionBuilder
import ch.tutteli.atrium.creating.Expect
import ch.tutteli.atrium.translations.DescriptionDateTimeLikeAssertion.*
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.chrono.ChronoLocalDate
import java.time.chrono.ChronoLocalDateTime

Expand All @@ -19,6 +21,9 @@ import java.time.chrono.ChronoLocalDateTime
fun <T : ChronoLocalDateTime<*>> _isBefore(expect: Expect<T>, expected: ChronoLocalDateTime<*>): Assertion =
assertionBuilder.createDescriptive(expect, IS_BEFORE, expected) { it.isBefore(expected) }

fun <T : ChronoLocalDateTime<*>> _isBefore(expect: Expect<T>, expected: String): Assertion =
assertionBuilder.createDescriptive(expect, IS_BEFORE, expected) { it.isBefore(stringToLocalDateTime(expected)) }

@Suppress("DeprecatedCallableAddReplaceWith")
@Deprecated("use the function from atrium-logic instead, will be removed with 1.0.0")
fun <T : ChronoLocalDateTime<out ChronoLocalDate>> _isBeforeOrEquals(
Expand All @@ -29,6 +34,13 @@ fun <T : ChronoLocalDateTime<out ChronoLocalDate>> _isBeforeOrEquals(
it.isBefore(expected) || it.isEqual(expected)
}

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> _isBeforeOrEquals(
expect: Expect<T>,
expected: String
): Assertion = assertionBuilder.createDescriptive(expect, IS_BEFORE_OR_EQUAL, expected) {
it.isBefore(stringToLocalDateTime(expected)) || it.isEqual(stringToLocalDateTime(expected))
}

@Suppress("DeprecatedCallableAddReplaceWith")
@Deprecated("use the function from atrium-logic instead, will be removed with 1.0.0")
fun <T : ChronoLocalDateTime<out ChronoLocalDate>> _isAfter(
Expand All @@ -38,6 +50,13 @@ fun <T : ChronoLocalDateTime<out ChronoLocalDate>> _isAfter(

@Suppress("DeprecatedCallableAddReplaceWith")
@Deprecated("use the function from atrium-logic instead, will be removed with 1.0.0")
fun <T : ChronoLocalDateTime<out ChronoLocalDate>> _isAfter(
expect: Expect<T>,
expected: String
): Assertion = assertionBuilder.createDescriptive(expect, IS_AFTER, expected) {
it.isAfter(stringToLocalDateTime(expected))
}

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> _isAfterOrEquals(
expect: Expect<T>,
expected: ChronoLocalDateTime<*>
Expand All @@ -47,9 +66,31 @@ fun <T : ChronoLocalDateTime<out ChronoLocalDate>> _isAfterOrEquals(

@Suppress("DeprecatedCallableAddReplaceWith")
@Deprecated("use the function from atrium-logic instead, will be removed with 1.0.0")
fun <T : ChronoLocalDateTime<out ChronoLocalDate>> _isAfterOrEquals(
expect: Expect<T>,
expected: String
): Assertion = assertionBuilder.createDescriptive(expect, IS_AFTER_OR_EQUAL, expected) {
it.isAfter(stringToLocalDateTime(expected)) || it.isEqual(stringToLocalDateTime(expected))
}

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> _isEqual(
expect: Expect<T>,
expected: ChronoLocalDateTime<*>
): Assertion = assertionBuilder.createDescriptive(expect, IS_EQUAL_TO, expected) {
it.isEqual(expected)
}

fun <T : ChronoLocalDateTime<out ChronoLocalDate>> _isEqual(
expect: Expect<T>,
expected: String
): Assertion = assertionBuilder.createDescriptive(expect, IS_EQUAL_TO, expected) {
it.isEqual(stringToLocalDateTime(expected))
}

private fun stringToLocalDateTime(data: String): LocalDateTime {
return if (data.contains("T")) {
LocalDateTime.parse(data)
} else {
LocalDate.parse(data).atStartOfDay()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ import ch.tutteli.atrium.assertions.Assertion
import ch.tutteli.atrium.creating.Expect
import ch.tutteli.atrium.domain.creating.ChronoLocalDateTimeAssertions
import ch.tutteli.atrium.domain.robstoll.lib.creating.*
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.chrono.ChronoLocalDate
import java.time.chrono.ChronoLocalDateTime

Expand Down

0 comments on commit def1fc9

Please sign in to comment.