Skip to content

Commit aadc581

Browse files
authored
Allow overriding of ZoneId. Fixes #65 (#67)
1 parent 0c89d59 commit aadc581

File tree

6 files changed

+52
-9
lines changed

6 files changed

+52
-9
lines changed

fixture/src/main/kotlin/com/appmattus/kotlinfixture/resolver/JodaTimeResolver.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ internal class JodaTimeResolver : Resolver {
3737
return if (hasJodaTime) {
3838
when (obj) {
3939
Instant::class -> context.generateInstant()
40-
LocalDate::class -> LocalDate(context.generateInstant(), context.randomDateTimeZone())
41-
LocalTime::class -> LocalTime(context.generateInstant(), context.randomDateTimeZone())
42-
LocalDateTime::class -> LocalDateTime(context.generateInstant(), context.randomDateTimeZone())
43-
DateTime::class -> DateTime(context.generateInstant(), context.randomDateTimeZone())
40+
LocalDate::class -> LocalDate(context.generateInstant(), context.generateDateTimeZone())
41+
LocalTime::class -> LocalTime(context.generateInstant(), context.generateDateTimeZone())
42+
LocalDateTime::class -> LocalDateTime(context.generateInstant(), context.generateDateTimeZone())
43+
DateTime::class -> DateTime(context.generateInstant(), context.generateDateTimeZone())
4444
Period::class -> context.generatePeriod()
4545
Duration::class -> context.generateDuration()
4646
DateTimeZone::class -> context.randomDateTimeZone()
@@ -54,6 +54,8 @@ internal class JodaTimeResolver : Resolver {
5454

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

57+
private fun Context.generateDateTimeZone(): DateTimeZone = resolve(typeOf<DateTimeZone>()) as DateTimeZone
58+
5759
private fun Context.randomDateTimeZone(): DateTimeZone =
5860
DateTimeZone.forID(DateTimeZone.getAvailableIDs().random(random))
5961

fixture/src/main/kotlin/com/appmattus/kotlinfixture/resolver/ThreeTenResolver.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ internal class ThreeTenResolver : Resolver {
7878

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

81-
private fun Context.generateZonedDateTime(): ZonedDateTime = generateInstant().atZone(randomZoneId())
81+
private fun Context.generateZonedDateTime(): ZonedDateTime =
82+
generateInstant().atZone(resolve(typeOf<ZoneId>()) as ZoneId)
8283

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

fixture/src/main/kotlin/com/appmattus/kotlinfixture/resolver/TimeResolver.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ internal class TimeResolver : Resolver {
7979

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

82-
private fun Context.generateZonedDateTime(): ZonedDateTime = generateInstant().atZone(randomZoneId())
82+
private fun Context.generateZonedDateTime(): ZonedDateTime =
83+
generateInstant().atZone(resolve(typeOf<ZoneId>()) as ZoneId)
8384

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

fixture/src/test/kotlin/com/appmattus/kotlinfixture/resolver/JodaTimeResolverTest.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.appmattus.kotlinfixture.assertIsRandom
2222
import com.appmattus.kotlinfixture.config.Configuration
2323
import com.appmattus.kotlinfixture.config.ConfigurationBuilder
2424
import com.appmattus.kotlinfixture.config.before
25+
import com.appmattus.kotlinfixture.kotlinFixture
2526
import org.joda.time.DateTime
2627
import org.joda.time.DateTimeZone
2728
import org.joda.time.Duration
@@ -37,6 +38,7 @@ import org.junit.runners.Parameterized
3738
import java.util.Date
3839
import kotlin.reflect.KClass
3940
import kotlin.test.Test
41+
import kotlin.test.assertEquals
4042
import kotlin.test.assertNotNull
4143
import kotlin.test.assertTrue
4244

@@ -48,7 +50,7 @@ class JodaTimeResolverTest {
4850

4951
private val context = TestContext(
5052
ConfigurationBuilder().apply { factory<Date> { before(now) } }.build(),
51-
CompositeResolver(JodaTimeResolver(), FactoryResolver())
53+
CompositeResolver(JodaTimeResolver(), FactoryResolver(), KTypeResolver())
5254
)
5355

5456
@Test
@@ -68,6 +70,17 @@ class JodaTimeResolverTest {
6870
}
6971
}
7072
}
73+
74+
@Test
75+
fun `Can override DateTimeZone when creating DateTime`() {
76+
repeat(100) {
77+
val dateTime = kotlinFixture {
78+
factory<DateTimeZone> { DateTimeZone.forID("Europe/London") }
79+
} <DateTime>()
80+
81+
assertEquals("Europe/London", dateTime.zone.id)
82+
}
83+
}
7184
}
7285

7386
@RunWith(Parameterized::class)

fixture/src/test/kotlin/com/appmattus/kotlinfixture/resolver/ThreeTenResolverTest.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.appmattus.kotlinfixture.assertIsRandom
2222
import com.appmattus.kotlinfixture.config.Configuration
2323
import com.appmattus.kotlinfixture.config.ConfigurationBuilder
2424
import com.appmattus.kotlinfixture.config.before
25+
import com.appmattus.kotlinfixture.kotlinFixture
2526
import org.junit.experimental.runners.Enclosed
2627
import org.junit.runner.RunWith
2728
import org.junit.runners.Parameterized
@@ -44,6 +45,7 @@ import org.threeten.bp.ZonedDateTime
4445
import java.util.Date
4546
import kotlin.reflect.KClass
4647
import kotlin.test.Test
48+
import kotlin.test.assertEquals
4749
import kotlin.test.assertNotNull
4850
import kotlin.test.assertTrue
4951

@@ -55,7 +57,7 @@ class ThreeTenResolverTest {
5557

5658
private val context = TestContext(
5759
ConfigurationBuilder().apply { factory<Date> { before(now) } }.build(),
58-
CompositeResolver(ThreeTenResolver(), FactoryResolver())
60+
CompositeResolver(ThreeTenResolver(), FactoryResolver(), KTypeResolver())
5961
)
6062

6163
@Test
@@ -75,6 +77,17 @@ class ThreeTenResolverTest {
7577
}
7678
}
7779
}
80+
81+
@Test
82+
fun `Can override ZoneId when creating ZonedDateTime`() {
83+
repeat(100) {
84+
val zonedDateTime = kotlinFixture {
85+
factory<ZoneId> { ZoneId.of("Europe/London") }
86+
} <ZonedDateTime>()
87+
88+
assertEquals("Europe/London", zonedDateTime.zone.id)
89+
}
90+
}
7891
}
7992

8093
@RunWith(Parameterized::class)

fixture/src/test/kotlin/com/appmattus/kotlinfixture/resolver/TimeResolverTest.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.appmattus.kotlinfixture.assertIsRandom
2222
import com.appmattus.kotlinfixture.config.Configuration
2323
import com.appmattus.kotlinfixture.config.ConfigurationBuilder
2424
import com.appmattus.kotlinfixture.config.before
25+
import com.appmattus.kotlinfixture.kotlinFixture
2526
import org.junit.experimental.runners.Enclosed
2627
import org.junit.runner.RunWith
2728
import org.junit.runners.Parameterized
@@ -44,6 +45,7 @@ import java.util.Date
4445
import java.util.TimeZone
4546
import kotlin.reflect.KClass
4647
import kotlin.test.Test
48+
import kotlin.test.assertEquals
4749
import kotlin.test.assertNotNull
4850
import kotlin.test.assertTrue
4951

@@ -55,7 +57,7 @@ class TimeResolverTest {
5557

5658
private val context = TestContext(
5759
ConfigurationBuilder().apply { factory<Date> { before(now) } }.build(),
58-
CompositeResolver(TimeResolver(), FactoryResolver())
60+
CompositeResolver(TimeResolver(), FactoryResolver(), KTypeResolver())
5961
)
6062

6163
@Test
@@ -75,6 +77,17 @@ class TimeResolverTest {
7577
}
7678
}
7779
}
80+
81+
@Test
82+
fun `Can override ZoneId when creating ZonedDateTime`() {
83+
repeat(100) {
84+
val zonedDateTime = kotlinFixture {
85+
factory<ZoneId> { ZoneId.of("Europe/London") }
86+
} <ZonedDateTime>()
87+
88+
assertEquals("Europe/London", zonedDateTime.zone.id)
89+
}
90+
}
7891
}
7992

8093
@RunWith(Parameterized::class)

0 commit comments

Comments
 (0)