Skip to content

Commit

Permalink
Allow overriding of ZoneId. Fixes #65 (#67)
Browse files Browse the repository at this point in the history
  • Loading branch information
mattmook authored Sep 21, 2020
1 parent 0c89d59 commit aadc581
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ internal class JodaTimeResolver : Resolver {
return if (hasJodaTime) {
when (obj) {
Instant::class -> context.generateInstant()
LocalDate::class -> LocalDate(context.generateInstant(), context.randomDateTimeZone())
LocalTime::class -> LocalTime(context.generateInstant(), context.randomDateTimeZone())
LocalDateTime::class -> LocalDateTime(context.generateInstant(), context.randomDateTimeZone())
DateTime::class -> DateTime(context.generateInstant(), context.randomDateTimeZone())
LocalDate::class -> LocalDate(context.generateInstant(), context.generateDateTimeZone())
LocalTime::class -> LocalTime(context.generateInstant(), context.generateDateTimeZone())
LocalDateTime::class -> LocalDateTime(context.generateInstant(), context.generateDateTimeZone())
DateTime::class -> DateTime(context.generateInstant(), context.generateDateTimeZone())
Period::class -> context.generatePeriod()
Duration::class -> context.generateDuration()
DateTimeZone::class -> context.randomDateTimeZone()
Expand All @@ -54,6 +54,8 @@ internal class JodaTimeResolver : Resolver {

private fun Context.generateInstant(): Instant = Instant(resolve(typeOf<Date>()) as Date)

private fun Context.generateDateTimeZone(): DateTimeZone = resolve(typeOf<DateTimeZone>()) as DateTimeZone

private fun Context.randomDateTimeZone(): DateTimeZone =
DateTimeZone.forID(DateTimeZone.getAvailableIDs().random(random))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ internal class ThreeTenResolver : Resolver {

private fun Context.generateInstant(): Instant = DateTimeUtils.toInstant(resolve(typeOf<Date>()) as Date)

private fun Context.generateZonedDateTime(): ZonedDateTime = generateInstant().atZone(randomZoneId())
private fun Context.generateZonedDateTime(): ZonedDateTime =
generateInstant().atZone(resolve(typeOf<ZoneId>()) as ZoneId)

private fun Context.randomZoneId(): ZoneId = ZoneId.of(ZoneId.getAvailableZoneIds().random(random))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ internal class TimeResolver : Resolver {

private fun Context.generateInstant(): Instant = (resolve(typeOf<Date>()) as Date).toInstant()

private fun Context.generateZonedDateTime(): ZonedDateTime = generateInstant().atZone(randomZoneId())
private fun Context.generateZonedDateTime(): ZonedDateTime =
generateInstant().atZone(resolve(typeOf<ZoneId>()) as ZoneId)

private fun Context.randomZoneId(): ZoneId = ZoneId.of(ZoneId.getAvailableZoneIds().random(random))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.appmattus.kotlinfixture.assertIsRandom
import com.appmattus.kotlinfixture.config.Configuration
import com.appmattus.kotlinfixture.config.ConfigurationBuilder
import com.appmattus.kotlinfixture.config.before
import com.appmattus.kotlinfixture.kotlinFixture
import org.joda.time.DateTime
import org.joda.time.DateTimeZone
import org.joda.time.Duration
Expand All @@ -37,6 +38,7 @@ import org.junit.runners.Parameterized
import java.util.Date
import kotlin.reflect.KClass
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
import kotlin.test.assertTrue

Expand All @@ -48,7 +50,7 @@ class JodaTimeResolverTest {

private val context = TestContext(
ConfigurationBuilder().apply { factory<Date> { before(now) } }.build(),
CompositeResolver(JodaTimeResolver(), FactoryResolver())
CompositeResolver(JodaTimeResolver(), FactoryResolver(), KTypeResolver())
)

@Test
Expand All @@ -68,6 +70,17 @@ class JodaTimeResolverTest {
}
}
}

@Test
fun `Can override DateTimeZone when creating DateTime`() {
repeat(100) {
val dateTime = kotlinFixture {
factory<DateTimeZone> { DateTimeZone.forID("Europe/London") }
} <DateTime>()

assertEquals("Europe/London", dateTime.zone.id)
}
}
}

@RunWith(Parameterized::class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.appmattus.kotlinfixture.assertIsRandom
import com.appmattus.kotlinfixture.config.Configuration
import com.appmattus.kotlinfixture.config.ConfigurationBuilder
import com.appmattus.kotlinfixture.config.before
import com.appmattus.kotlinfixture.kotlinFixture
import org.junit.experimental.runners.Enclosed
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
Expand All @@ -44,6 +45,7 @@ import org.threeten.bp.ZonedDateTime
import java.util.Date
import kotlin.reflect.KClass
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
import kotlin.test.assertTrue

Expand All @@ -55,7 +57,7 @@ class ThreeTenResolverTest {

private val context = TestContext(
ConfigurationBuilder().apply { factory<Date> { before(now) } }.build(),
CompositeResolver(ThreeTenResolver(), FactoryResolver())
CompositeResolver(ThreeTenResolver(), FactoryResolver(), KTypeResolver())
)

@Test
Expand All @@ -75,6 +77,17 @@ class ThreeTenResolverTest {
}
}
}

@Test
fun `Can override ZoneId when creating ZonedDateTime`() {
repeat(100) {
val zonedDateTime = kotlinFixture {
factory<ZoneId> { ZoneId.of("Europe/London") }
} <ZonedDateTime>()

assertEquals("Europe/London", zonedDateTime.zone.id)
}
}
}

@RunWith(Parameterized::class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.appmattus.kotlinfixture.assertIsRandom
import com.appmattus.kotlinfixture.config.Configuration
import com.appmattus.kotlinfixture.config.ConfigurationBuilder
import com.appmattus.kotlinfixture.config.before
import com.appmattus.kotlinfixture.kotlinFixture
import org.junit.experimental.runners.Enclosed
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
Expand All @@ -44,6 +45,7 @@ import java.util.Date
import java.util.TimeZone
import kotlin.reflect.KClass
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotNull
import kotlin.test.assertTrue

Expand All @@ -55,7 +57,7 @@ class TimeResolverTest {

private val context = TestContext(
ConfigurationBuilder().apply { factory<Date> { before(now) } }.build(),
CompositeResolver(TimeResolver(), FactoryResolver())
CompositeResolver(TimeResolver(), FactoryResolver(), KTypeResolver())
)

@Test
Expand All @@ -75,6 +77,17 @@ class TimeResolverTest {
}
}
}

@Test
fun `Can override ZoneId when creating ZonedDateTime`() {
repeat(100) {
val zonedDateTime = kotlinFixture {
factory<ZoneId> { ZoneId.of("Europe/London") }
} <ZonedDateTime>()

assertEquals("Europe/London", zonedDateTime.zone.id)
}
}
}

@RunWith(Parameterized::class)
Expand Down

0 comments on commit aadc581

Please sign in to comment.