Best Kotest code snippet using io.kotest.property.arbitrary.dates.Arb.Companion.yearMonth
dates.kt
Source:dates.kt
1package io.kotest.property.arbitrary2import io.kotest.property.Arb3import java.time.Instant4import java.time.LocalDate5import java.time.LocalDateTime6import java.time.LocalTime7import java.time.Period8import java.time.Year.isLeap9import java.time.YearMonth10import java.time.temporal.ChronoUnit11import java.time.temporal.TemporalQueries.localDate12import java.time.temporal.TemporalQueries.localTime13import kotlin.random.Random14/**15 * Arberates a random [Period]s.16 *17 * This generator creates randomly generated Periods, with years less than or equal to [maxYear].18 *19 * If [maxYear] is 0, only random months and days will be generated.20 *21 * Months will always be in range [0..11]22 * Days will always be in range [0..31]23 */24fun Arb.Companion.period(maxYear: Int = 10): Arb<Period> = arbitrary(listOf(Period.ZERO)) {25 Period.of(26 (0..maxYear).random(it.random),27 (0..11).random(it.random),28 (0..31).random(it.random)29 )30}31fun Arb.Companion.localDate() = Arb.Companion.localDate(LocalDate.of(1970, 1, 1), LocalDate.of(2030, 12, 31))32/**33 * Arberates a stream of random LocalDates34 *35 * This generator creates randomly generated LocalDates, in the range [[minDate, maxDate]].36 *37 * If any of the years in the range contain a leap year, the date [29/02/YEAR] will always be a constant value of this38 * generator.39 *40 * @see [localDateTime]41 * @see [localTime]42 */43fun Arb.Companion.localDate(44 minDate: LocalDate = LocalDate.of(1970, 1, 1),45 maxDate: LocalDate = LocalDate.of(2030, 12, 31)46): Arb<LocalDate> {47 val leapYears = (minDate.year..maxDate.year).filter { isLeap(it.toLong()) }48 val february28s = leapYears.map { LocalDate.of(it, 2, 28) }49 val february29s = february28s.map { it.plusDays(1) }50 return arbitrary(february28s + february29s + minDate + maxDate) {51 minDate.plusDays(it.random.nextLong(ChronoUnit.DAYS.between(minDate, maxDate)))52 }.filter { it in minDate..maxDate }53}54/**55 * Arberates a stream of random LocalTimes56 *57 * This generator creates randomly generated LocalTimes.58 *59 * @see [localDateTime]60 * @see [localDate]61 */62fun Arb.Companion.localTime(): Arb<LocalTime> = arbitrary(listOf(LocalTime.of(23, 59, 59), LocalTime.of(0, 0, 0))) {63 LocalTime.of(it.random.nextInt(24), it.random.nextInt(60), it.random.nextInt(60))64}65/**66 * Arberates a stream of random LocalDateTimes67 *68 * This generator creates randomly generated LocalDates, in the range [[minYear, maxYear]].69 *70 * If any of the years in the range contain a leap year, the date [29/02/YEAR] will always be a constant value of this71 * generator.72 *73 * @see [localDateTime]74 * @see [localTime]75 */76fun Arb.Companion.localDateTime(77 minYear: Int? = null,78 maxYear: Int79): Arb<LocalDateTime> {80 return localDateTime(minYear ?: 1970, maxYear)81}82/**83 * Arberates a stream of random LocalDateTimes84 *85 * This generator creates randomly generated LocalDates, in the range [[minYear, maxYear]].86 *87 * If any of the years in the range contain a leap year, the date [29/02/YEAR] will always be a constant value of this88 * generator.89 *90 * @see [localDateTime]91 * @see [localTime]92 */93fun Arb.Companion.localDateTime(94 minYear: Int,95 maxYear: Int? = null96): Arb<LocalDateTime> {97 return localDateTime(minYear, maxYear ?: 2030)98}99/**100 * Arberates a stream of random LocalDateTimes101 *102 * This generator creates randomly generated LocalDates, in the range [[minYear, maxYear]].103 *104 * If any of the years in the range contain a leap year, the date [29/02/YEAR] will always be a constant value of this105 * generator.106 *107 * @see [localDateTime]108 * @see [localTime]109 */110fun Arb.Companion.localDateTime(111 minYear: Int,112 maxYear: Int113): Arb<LocalDateTime> {114 return localDateTime(115 minLocalDateTime = LocalDateTime.of(minYear, 1, 1, 0, 0),116 maxLocalDateTime = LocalDateTime.of(maxYear, 12, 31, 23, 59)117 )118}119/**120 * Arberates a stream of random LocalDateTimes121 *122 * This generator creates randomly generated LocalDates, in the range [[minLocalDateTime, maxLocalDateTime]].123 *124 * If any of the years in the range contain a leap year, the date [29/02/YEAR] will always be a constant value of this125 * generator.126 *127 * @see [localDateTime]128 * @see [localTime]129 */130fun Arb.Companion.localDateTime(131 minLocalDateTime: LocalDateTime = LocalDateTime.of(1970, 1, 1, 0, 0),132 maxLocalDateTime: LocalDateTime = LocalDateTime.of(2030, 12, 31, 23, 59)133): Arb<LocalDateTime> {134 return arbitrary(135 edgecaseFn = {136 generateSequence {137 val date = localDate(minLocalDateTime.toLocalDate(), maxLocalDateTime.toLocalDate()).edgecase(it)138 val time = localTime().edgecase(it)139 if (date == null || time == null) null else date.atTime(time)140 }.find { !it.isBefore(minLocalDateTime) && !it.isAfter(maxLocalDateTime) }141 },142 sampleFn = {143 generateSequence {144 val date = localDate(minLocalDateTime.toLocalDate(), maxLocalDateTime.toLocalDate()).single(it)145 val time = localTime().single(it)146 date.atTime(time)147 }.first { !it.isBefore(minLocalDateTime) && !it.isAfter(maxLocalDateTime) }148 }149 )150}151/**152 * Arberates a stream of random YearMonth153 *154 * If any of the years in the range contain a leap year, the date [02/YEAR] will always be a constant value of this155 * generator.156 *157 * This generator creates randomly generated YearMonth, in the range [[minYearMonth, maxYearMonth]].158 *159 * @see [yearMonth]160 */161fun Arb.Companion.yearMonth(162 minYearMonth: YearMonth = YearMonth.of(1970, 1),163 maxYearMonth: YearMonth = YearMonth.of(2030, 12)164): Arb<YearMonth> {165 val leapYears = (minYearMonth.year..maxYearMonth.year).filter { isLeap(it.toLong()) }166 val february = leapYears.map { YearMonth.of(it, 2) }167 return arbitrary(february + minYearMonth + maxYearMonth) {168 minYearMonth.plusMonths(it.random.nextLong(ChronoUnit.MONTHS.between(minYearMonth, maxYearMonth)))169 }.filter { it in minYearMonth..maxYearMonth }170}171typealias InstantRange = ClosedRange<Instant>172fun InstantRange.random(random: Random): Instant {173 try {174 val seconds = (start.epochSecond..endInclusive.epochSecond).random(random)175 val nanos = when {176 seconds == start.epochSecond && seconds == endInclusive.epochSecond -> start.nano..endInclusive.nano177 seconds == start.epochSecond -> start.nano..999_999_999178 seconds == endInclusive.epochSecond -> 0..endInclusive.nano179 else -> 0..999_999_999180 }.random(random)181 return Instant.ofEpochSecond(seconds, nanos.toLong())182 } catch (e: IllegalArgumentException) {183 throw NoSuchElementException(e.message)184 }185}186/**187 * Arberates a stream of random [Instant]188 */189fun Arb.Companion.instant(range: InstantRange): Arb<Instant> =190 arbitrary(listOf(range.start, range.endInclusive)) {191 range.random(it.random)192 }193/**194 * Arberates a stream of random [Instant]195 */196fun Arb.Companion.instant(197 minValue: Instant = Instant.MIN,198 maxValue: Instant = Instant.MAX199) = instant(minValue..maxValue)...
Arb.Companion.yearMonth
Using AI Code Generation
1+import io.kotest.property.arbitrary.yearMonth2+import io.kotest.property.arbitrary.yearMonths3+import io.kotest.property.arbitrary.yearMonthsBetween4+import io.kotest.property.arbitrary.yearMonthsBetweenInclusive5+import java.time.YearMonth6+class YearMonthTest : StringSpec({7+ "YearMonth should be generated between two YearMonth values" {8+ forAll(yearMonthsBetween(YearMonth.of(2010, 1), YearMonth.of(2019, 1))) {9+ }10+ }11+ "YearMonth should be generated between two YearMonth values inclusive" {12+ forAll(yearMonthsBetweenInclusive(YearMonth.of(2010, 1), YearMonth.of(2019, 1))) {13+ }14+ }15+ "YearMonth should be generated between two YearMonth values inclusive with a step" {16+ forAll(yearMonthsBetweenInclusive(YearMonth.of(2010, 1), YearMonth.of(2019, 1), 2)) {17+ }18+ }19+ "YearMonth should be generated between two YearMonth values with a step" {20+ forAll(yearMonthsBetween(YearMonth.of(2010, 1), YearMonth.of(2019, 1), 2)) {21+ }22+ }23+ "YearMonth should be generated between two YearMonth values with a step of 0" {24+ shouldThrow<IllegalArgumentException> {25+ yearMonthsBetween(YearMonth.of(2010, 1), YearMonth.of(2019, 1), 0)26+ }27+ }28+ "YearMonth should be generated between two YearMonth values inclusive with a step of 0" {29+ shouldThrow<IllegalArgumentException> {30+ yearMonthsBetweenInclusive(YearMonth.of(2010, 1), YearMonth.of(2019, 1), 0)31+ }32+ }
Arb.Companion.yearMonth
Using AI Code Generation
1val yearMonthArb = Arb.yearMonth()2val yearMonthArb = Arb.yearMonth(2019)3val yearMonthArb = Arb.yearMonth(2019, Month.MAY)4val yearMonthArb = Arb.yearMonth(2019, Month.MAY, 2020, Month.JULY)5val yearMonthArb = Arb.yearMonth(2019, Month.MAY, 2020, Month.JULY)6val yearMonthArb = Arb.yearMonth(2019, 2020, Month.MAY)7val yearMonthArb = Arb.yearMonth(2019, 2020, Month.MAY, Month.JULY)8val yearMonthArb = Arb.yearMonth(2019, 2020, Month.MAY, Month.JULY)9val yearMonthArb = Arb.yearMonth(2019, 2020)
Arb.Companion.yearMonth
Using AI Code Generation
1val yearMonthArb = Arb.yearMonth()2val monthDayArb = Arb.monthDay()3val weekDayArb = Arb.weekDay()4val zoneIdArb = Arb.zoneId()5val zoneOffsetArb = Arb.zoneOffset()6val offsetDateTimeArb = Arb.offsetDateTime()7val offsetTimeArb = Arb.offsetTime()8val zonedDateTimeArb = Arb.zonedDateTime()9val instantArb = Arb.instant()10val durationArb = Arb.duration()11val periodArb = Arb.period()12val dateArb = Arb.date()13val timeArb = Arb.time()
Arb.Companion.yearMonth
Using AI Code Generation
1+val arbYearMonth: Arb<YearMonth> = Arb.yearMonth()2+val arbYearMonth: Arb<YearMonth> = Arb.yearMonth()3+val arbYearMonth: Arb<YearMonth> = Arb.yearMonth()4+val arbYearMonth: Arb<YearMonth> = Arb.yearMonth()5+val arbYearMonth: Arb<YearMonth> = Arb.yearMonth()6+val arbYearMonth: Arb<YearMonth> = Arb.yearMonth()7+val arbYearMonth: Arb<YearMonth> = Arb.yearMonth()8+val arbYearMonth: Arb<YearMonth> = Arb.yearMonth()9+val arbYearMonth: Arb<YearMonth> = Arb.yearMonth()
Arb.Companion.yearMonth
Using AI Code Generation
1val yearMonthArb = Arb.yearMonth()2val yearMonthList = yearMonthArb.take(10).toList()3println(yearMonthList)4val yearMonthDayArb = Arb.yearMonthDay()5val yearMonthDayList = yearMonthDayArb.take(10).toList()6println(yearMonthDayList)7val zoneOffsetArb = Arb.zoneOffset()8val zoneOffsetList = zoneOffsetArb.take(10).toList()9println(zoneOffsetList)10val zoneRegionArb = Arb.zoneRegion()11val zoneRegionList = zoneRegionArb.take(10).toList()12println(zoneRegionList)13val zoneRulesArb = Arb.zoneRules()14val zoneRulesList = zoneRulesArb.take(10).toList()15println(zoneRulesList)16val zoneRulesGroupArb = Arb.zoneRulesGroup()17val zoneRulesGroupList = zoneRulesGroupArb.take(10).toList()18println(zoneRulesGroupList)19val zoneRulesProviderArb = Arb.zoneRulesProvider()20val zoneRulesProviderList = zoneRulesProviderArb.take(10).toList()21println(zoneRulesProviderList)22val zoneRulesProvidersArb = Arb.zoneRulesProviders()23val zoneRulesProvidersList = zoneRulesProvidersArb.take(10).toList()
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!