Best Kotest code snippet using io.kotest.property.arbitrary.date.Arb.Companion.datetime
CustomGen.kt
Source:CustomGen.kt  
1package com.thejuki.kformmaster2import android.R3import android.widget.ArrayAdapter4import com.thejuki.kformmaster.helper.FormLayouts5import com.thejuki.kformmaster.model.*6import io.kotest.property.Arb7import io.kotest.property.arbitrary.*8import io.mockk.mockk9import org.threeten.bp.ZoneId10import org.threeten.bp.format.DateTimeFormatter11import java.text.SimpleDateFormat12import java.util.*13/**14 * Custom Gen15 *16 * Custom Generators for the Great Form Unit Tests17 *18 * @author **TheJuki** ([GitHub](https://github.com/TheJuki))19 * @version 1.020 */21interface CustomGen {22    companion object {23        /**24         * Generates a FormLayouts object25         */26        val formLayouts = arbitrary {27            FormLayouts(28                Arb.int(-100, 100).next() // header29                , Arb.int(-100, 100).next() // text30                , Arb.int(-100, 100).next() // textArea31                , Arb.int(-100, 100).next() // number32                , Arb.int(-100, 100).next() // email33                , Arb.int(-100, 100).next() // password34                , Arb.int(-100, 100).next() // phone35                , Arb.int(-100, 100).next() // autoComplete36                , Arb.int(-100, 100).next() // autoCompleteToken37                , Arb.int(-100, 100).next() // button38                , Arb.int(-100, 100).next() // date39                , Arb.int(-100, 100).next() // time40                , Arb.int(-100, 100).next() // dateTime41                , Arb.int(-100, 100).next() // dropDown42                , Arb.int(-100, 100).next() // multiCheckBox43                , Arb.int(-100, 100).next() // switch44                , Arb.int(-100, 100).next() // checkBox45                , Arb.int(-100, 100).next() // slider46                , Arb.int(-100, 100).next() // label47                , Arb.int(-100, 100).next() // textView48                , Arb.int(-100, 100).next() // segmented49                , Arb.int(-100, 100).next() // segmentedInlineTitle50                , Arb.int(-100, 100).next() // progress51                , Arb.int(-100, 100).next() // image52                , Arb.int(-100, 100).next() // inlineDateTimePicker53            )54        }55        /**56         * Generates a BaseFormElement57         */58        val baseFormElement = arbitrary {59            generateBaseFields(BaseFormElement())60        }61        /**62         * Generates a FormHeader63         */64        val formHeader = arbitrary {65            FormHeader().apply { title = Arb.string().next() }66        }67        /**68         * Generates a FormSingleLineEditTextElement69         */70        val formSingleLineEditTextElement = arbitrary {71            generateBaseFields(FormSingleLineEditTextElement()) as FormSingleLineEditTextElement72        }73        /**74         * Generates a FormMultiLineEditTextElement75         */76        val formMultiLineEditTextElement = arbitrary {77            generateBaseFields(FormMultiLineEditTextElement()) as FormMultiLineEditTextElement78        }79        /**80         * Generates a FormEmailEditTextElement81         */82        val formEmailEditTextElement = arbitrary {83            val element = generateBaseFields(FormEmailEditTextElement()) as FormEmailEditTextElement84            element.value = Arb.shuffle(85                listOf(86                    "test@example.com",87                    "test.tester@example2.org",88                    "email@example.test.edu"89                )90            ).next()[0]91            element.validityCheck = {92                ("[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +93                        "\\@" +94                        "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" +95                        "(" +96                        "\\." +97                        "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" +98                        ")+").toRegex().matches(element.value ?: "")99            }100            element101        }102        /**103         * Generates a FormPasswordEditTextElement104         */105        val formPasswordEditTextElement = arbitrary {106            generateBaseFields(FormPasswordEditTextElement()) as FormPasswordEditTextElement107        }108        /**109         * Generates a FormPhoneEditTextElement110         */111        val formPhoneEditTextElement = arbitrary {112            generateBaseFields(FormPhoneEditTextElement()) as FormPhoneEditTextElement113        }114        /**115         * Generates a FormNumberEditTextElement116         */117        val formNumberEditTextElement = arbitrary {118            generateBaseFields(FormNumberEditTextElement()) as FormNumberEditTextElement119        }120        /**121         * Generates a FormTextViewElement122         */123        val formTextViewElement = arbitrary {124            FormTextViewElement().apply {125                title = Arb.string().next()126                value = Arb.string().next()127            }128        }129        /**130         * Generates a formLabelElement131         */132        val formLabelElement = arbitrary {133            FormLabelElement().apply {134                title = Arb.string().next()135            }136        }137        /**138         * Generates a FormSegmentedElement139         */140        val formSegmentedElement = arbitrary {141            val element = generateBaseFields(FormSegmentedElement()) as FormSegmentedElement<String>142            element.horizontal = Arb.boolean().next()143            element.options = Arb.list(Arb.string()).next()144            element.drawableDirection =145                Arb.shuffle(FormSegmentedElement.DrawableDirection.values().asList()).next()[0]146            element147        }148        /**149         * Generates a FormPickerDropDownElement150         */151        val formPickerDropDownElement = arbitrary {152            val element =153                generateBaseFields(FormPickerDropDownElement()) as FormPickerDropDownElement<String>154            element.dialogTitle = Arb.string().next()155            element.arrayAdapter = null156            element.options = Arb.list(Arb.string()).next()157            element.theme = Random().nextInt(100)158            element.displayValueFor = {159                element.value ?: ""160            }161            element162        }163        /**164         * Generates a FormPickerMultiCheckBoxElement165         */166        val formPickerMultiCheckBoxElement = arbitrary {167            @Suppress("UNCHECKED_CAST")168            val element =169                generateBaseFieldsWithList(FormPickerMultiCheckBoxElement()) as FormPickerMultiCheckBoxElement<String, List<String>>170            element.dialogTitle = Arb.string().next()171            element.options = Arb.list(Arb.string()).next()172            element.theme = Random().nextInt(100)173            element174        }175        /**176         * Generates a FormAutoCompleteElement177         */178        val formAutoCompleteElement = arbitrary {179            val element =180                generateBaseFields(FormAutoCompleteElement()) as FormAutoCompleteElement<String>181            element.typedString = element.valueAsString182            element.dropdownWidth = Arb.int().next()183            val listOfOptions = Arb.list(Arb.string()).next()184            element.options = listOfOptions185            element.arrayAdapter = ArrayAdapter(mockk(), R.layout.simple_list_item_1, listOfOptions)186            element187        }188        /**189         * Generates a FormTokenAutoCompleteElement190         */191        val formTokenAutoCompleteElement = arbitrary {192            val element =193                generateBaseFieldsWithList(FormTokenAutoCompleteElement()) as FormTokenAutoCompleteElement<List<String>>194            element.dropdownWidth = Arb.int().next()195            val listOfOptions = Arb.list(Arb.string()).next()196            element.options = listOfOptions197            element.arrayAdapter = ArrayAdapter(mockk(), R.layout.simple_list_item_1, listOfOptions)198            element199        }200        /**201         * Generates a FormCheckBoxElement202         */203        val formCheckBoxElement = arbitrary {204            val element = generateBaseFields(FormCheckBoxElement()) as FormCheckBoxElement<String>205            element.checkedValue = element.valueAsString206            element.unCheckedValue = Arb.string().next()207            element208        }209        /**210         * Generates a FormSwitchElement211         */212        val formSwitchElement = arbitrary {213            val element = generateBaseFields(FormSwitchElement()) as FormSwitchElement<String>214            element.onValue = element.valueAsString215            element.offValue = Arb.string().next()216            element217        }218        /**219         * Generates a FormSliderElement220         */221        val formSliderElement = arbitrary {222            val element = FormSliderElement()223            element.title = Arb.string().next()224            element.max = Random().nextInt(100)225            element.min = Random().nextInt(element.max)226            element.value = Random().nextInt(element.max - element.min) + element.min227            element.steps = Random().nextInt(element.max - element.min + 1) + element.min228            element229        }230        /**231         * Generates a FormProgressElement232         */233        val formProgressElement = arbitrary {234            val element = FormProgressElement()235            element.title = Arb.string().next()236            element.max = Random().nextInt(100)237            element.min = Random().nextInt(element.max)238            element.progress = Random().nextInt(element.max - element.min) + element.min239            element.secondaryProgress = Random().nextInt(element.max - element.min) + element.min240            element.indeterminate = Arb.boolean().next()241            element.progressBarStyle =242                Arb.shuffle(FormProgressElement.ProgressBarStyle.values().asList()).next()[0]243            element244        }245        /**246         * Generates a FormImageElement247         */248        val formImageElement = arbitrary {249            val element = FormImageElement()250            element.value = "https://example.com/image.jpg"251            element.applyCircleCrop = false252            element.theme = Random().nextInt(100)253            element.defaultImage = Random().nextInt(100)254            element.imagePickerOptions = {255                it.cropX = Random().nextFloat()256                it.cropY = Random().nextFloat()257                it.maxWidth = Random().nextInt(100)258                it.maxHeight = Random().nextInt(100)259                it.maxSize = Random().nextInt(100)260            }261            element.onSelectImage = { uri, _ ->262                println("\nNew Image = ${uri?.path}")263            }264            element265        }266        /**267         * Generates a FormPickerDateElement268         */269        val formPickerDateElement = arbitrary {270            val dateFormat = SimpleDateFormat("MM/dd/yyyy", Locale.US)271            val element = FormPickerDateElement()272            element.title = Arb.string().next()273            element.hint = Arb.string().next()274            element.value = FormPickerDateElement.DateHolder(Date(), dateFormat)275            element.minimumDate = dateFormat.parse("01/01/2018")276            element.maximumDate = dateFormat.parse("12/15/2025")277            element.theme = Random().nextInt(100)278            element279        }280        /**281         * Generates a FormPickerTimeElement282         */283        val formPickerTimeElement = arbitrary {284            val dateFormat = SimpleDateFormat("hh:mm a", Locale.US)285            val element = FormPickerTimeElement()286            element.title = Arb.string().next()287            element.hint = Arb.string().next()288            element.value = FormPickerTimeElement.TimeHolder(Date(), dateFormat)289            element.theme = Random().nextInt(100)290            element291        }292        /**293         * Generates a FormPickerDateTimeElement294         */295        val formPickerDateTimeElement = arbitrary {296            val dateFormat = SimpleDateFormat("MM/dd/yyyy hh:mm a", Locale.US)297            val element = FormPickerDateTimeElement()298            element.title = Arb.string().next()299            element.hint = Arb.string().next()300            element.value = FormPickerDateTimeElement.DateTimeHolder(Date(), dateFormat)301            element.minimumDate = dateFormat.parse("01/01/2018 12:00 AM")302            element.maximumDate = dateFormat.parse("12/15/2025 12:00 PM")303            element.theme = Random().nextInt(100)304            element305        }306        /**307         * Generates a FormInlineDatePickerElement308         */309        val formInlineDatePickerElement = arbitrary {310            val element = FormInlineDatePickerElement()311            element.title = Arb.string().next()312            element.hint = Arb.string().next()313            element.value = org.threeten.bp.LocalDateTime.now(ZoneId.of("UTC"))314            element.dateTimeFormatter = DateTimeFormatter.ISO_DATE_TIME315            element.dateTimePickerFormatter = DateTimeFormatter.ISO_DATE316            element.startDate = org.threeten.bp.LocalDateTime.now(ZoneId.of("UTC")).toLocalDate()317            element.allDay = Arb.boolean().next()318            element.pickerType =319                Arb.shuffle(FormInlineDatePickerElement.PickerType.values().asList()).next()[0]320            element.linkedPicker = FormInlineDatePickerElement()321            element322        }323        /**324         * Generates a FormButtonElement325         */326        val formButtonElement = arbitrary {327            FormButtonElement().setValue(Arb.string().next()) as FormButtonElement328        }329        /**330         * Generates base form field values331         */332        private fun generateBaseFields(element: BaseFormElement<String>) =333            element.apply {334                title = Arb.string().next()335                value = Arb.string().next()336                tag = Arb.int().next()337                hint = Arb.string().next()338                visible = Arb.boolean().next()339                enabled = Arb.boolean().next()340                editViewGravity = Arb.int().next()341                maxLines = Arb.int(1, 100).next()342                error = if (Arb.boolean().next()) Arb.string().next() else null343                valueObservers.add { newValue, elementRef -> println("New Value = $newValue {$elementRef}") }344            }345        private fun generateBaseFieldsWithList(element: BaseFormElement<List<String>>) =346            element.apply {347                title = Arb.string().next()348                value = Arb.list(Arb.string()).next()349                tag = Arb.int().next()350                hint = Arb.string().next()351                visible = Arb.boolean().next()352                enabled = Arb.boolean().next()353                editViewGravity = Arb.int().next()354                maxLines = Arb.int(1, 100).next()355                error = if (Arb.boolean().next()) Arb.string().next() else null356                valueObservers.add { newValue, elementRef -> println("\nNew Value = $newValue {$elementRef}") }357            }358        /**359         * Verifies some base form fields360         */361        fun verifyBaseFormElement(element: BaseFormElement<*>) =362            (element.value != null) &&363                    (element.hint != null) &&364                    element.valueObservers.isNotEmpty()365    }366}...dates.kt
Source:dates.kt  
1package io.kotest.property.kotlinx.datetime2import io.kotest.property.Arb3import io.kotest.property.arbitrary.arbitrary4import io.kotest.property.arbitrary.next5import kotlinx.datetime.Clock6import kotlinx.datetime.DateTimeUnit7import kotlinx.datetime.LocalDate8import kotlinx.datetime.LocalDateTime9import kotlinx.datetime.TimeZone10import kotlinx.datetime.atTime11import kotlinx.datetime.plus12import kotlinx.datetime.toLocalDateTime13import kotlin.random.nextInt14/**15 * Returns an [Arb] where each value is a [LocalDate], with a random day, and a year in the given range.16 *17 * The default year range is 1970 to the current year, as derived from the system clock and system timezone.18 */19fun Arb.Companion.date(20   yearRange: IntRange = 1970..Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).year,21): Arb<LocalDate> = arbitrary {22   LocalDate(it.random.nextInt(yearRange), 1, 1).plus(it.random.nextInt(0..364), DateTimeUnit.DAY)23}24/**25 * Returns an [Arb] where each value is a [LocalDateTime], with a random day, random time, and a year26 * in the given range.27 *28 * The default year range is 1970 to the current year, as derived from the system clock and system timezone.29 * The default hour range is 0..23.30 * The default minute range is 0..59.31 * The default second range is 0..59.32 */33fun Arb.Companion.datetime(34   yearRange: IntRange = 1970..Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).year,35   hourRange: IntRange = 0..23,36   minuteRange: IntRange = 0..59,37   secondRange: IntRange = 0..59,38): Arb<LocalDateTime> = arbitrary {39   Arb.date(yearRange)40      .next(it)41      .atTime(it.random.nextInt(hourRange), it.random.nextInt(minuteRange), it.random.nextInt(secondRange))42}...date.kt
Source:date.kt  
1package io.kotest.property.arbitrary2import io.kotest.property.Arb3import kotlin.js.Date4import kotlin.random.nextInt5fun Arb.Companion.date(minYear: Int = 1970, maxYear: Int = 2030): Arb<Date> = date(minYear..maxYear)6fun Arb.Companion.date(yearRange: IntRange): Arb<Date> = arbitrary {7   val randomMonth = it.random.nextInt(1, 12)8   val randomDay = when (randomMonth) {9      2 -> it.random.nextInt(1, 29)10      4, 6, 9, 11 -> it.random.nextInt(1, 31)11      else -> it.random.nextInt(1, 32)12   }13   val randomYear = it.random.nextInt(yearRange)14   Date(randomYear, randomMonth, randomDay)15}16fun Arb.Companion.datetime(minYear: Int = 1970, maxYear: Int = 2030): Arb<Date> = datetime(minYear..maxYear)17fun Arb.Companion.datetime(yearRange: IntRange): Arb<Date> = arbitrary {18   val randomMonth = it.random.nextInt(1, 12)19   val randomDay = when (randomMonth) {20      2 -> it.random.nextInt(1, 29)21      4, 6, 9, 11 -> it.random.nextInt(1, 31)22      else -> it.random.nextInt(1, 32)23   }24   val randomYear = it.random.nextInt(yearRange)25   val randomHour = it.random.nextInt(0, 24)26   val randomMinute = it.random.nextInt(0, 60)27   val randomSecond = it.random.nextInt(0, 60)28   Date(randomYear, randomMonth, randomDay, randomHour, randomMinute, randomSecond)29}...transactions.kt
Source:transactions.kt  
1package io.kotest.property.arbs.payments2import io.kotest.property.Arb3import io.kotest.property.arbitrary.bind4import io.kotest.property.arbitrary.enum5import io.kotest.property.arbitrary.int6import io.kotest.property.arbitrary.long7import io.kotest.property.arbs.geo.Country8import io.kotest.property.arbs.geo.country9import io.kotest.property.kotlinx.datetime.datetime10import kotlinx.datetime.LocalDateTime11enum class CardType {12  Visa, Mastercard, Amex, Discover, Paypal, GooglePay, ApplePay13}14enum class TransactionType {15  Online, InStore, Recurring16}17data class Transaction(18  val date: LocalDateTime,19  val txType: TransactionType,20  val cardNumber: String,21  val cardType: CardType,22  val country: Country,23  val amount: Int,24)25fun Arb.Companion.transactions() = Arb.bind(26  Arb.datetime(),27  Arb.enum<TransactionType>(),28  Arb.enum<CardType>(),29  Arb.long(100000000000..10000000000000L),30  Arb.int(100..1000000),31  Arb.country(),32) { date, txType, cardType, number, amount, country ->33  Transaction(date, txType, number.toString().padStart(16, '4'), cardType, country, amount)34}...airjourney.kt
Source:airjourney.kt  
1package io.kotest.property.arbs.travel2import io.kotest.property.Arb3import io.kotest.property.arbitrary.bind4import io.kotest.property.arbitrary.numericDoubles5import io.kotest.property.kotlinx.datetime.datetime6import kotlinx.datetime.LocalDateTime7data class AirJourney(8  val departure: Airport,9  val arrival: Airport,10  val departureTime: LocalDateTime,11  val arrivalTime: LocalDateTime,12  val distanceKm: Double,13  val airline: Airline,14)15fun Arb.Companion.airJourney() = Arb.bind(16  Arb.airport(),17  Arb.airport(),18  Arb.datetime(),19  Arb.datetime(),20  Arb.airline(),21  Arb.numericDoubles(100.0, 5000.0),22) { departure, arrival, dtime, atime, airline, distance ->23  AirJourney(departure, arrival, dtime, atime, distance, airline)24}...Arb.Companion.datetime
Using AI Code Generation
1val arbDateTime = Arb.datetime()2val arbDate = Arb.date()3val arbTime = Arb.time()4val arbYear = Arb.year()5val arbMonth = Arb.month()6val arbDay = Arb.day()7val arbHour = Arb.hour()8val arbMinute = Arb.minute()9val arbSecond = Arb.second()10val arbNanosecond = Arb.nanosecond()11val arbZoneId = Arb.zoneId()12val arbZoneOffset = Arb.zoneOffset()13val arbInstant = Arb.instant()14val arbDuration = Arb.duration()15val arbPeriod = Arb.period()16val arbYearMonth = Arb.yearMonth()17val arbMonthDay = Arb.monthDay()18val arbLocalDate = Arb.localDate()Arb.Companion.datetime
Using AI Code Generation
1val arb = Arb.datetime()2val arb = Arb.date()3val arb = Arb.time()4val arb = Arb.duration()5val arb = Arb.period()6val arb = Arb.instant()7val arb = Arb.zoneId()8val arb = Arb.zoneOffset()9val arb = Arb.dayOfWeek()10val arb = Arb.month()11val arb = Arb.monthDay()12val arb = Arb.year()13val arb = Arb.yearMonth()14val arb = Arb.zonedDateTime()15val arb = Arb.offsetTime()16val arb = Arb.offsetDateTime()17val arb = Arb.monthDay()18val arb = Arb.year()19val arb = Arb.yearMonth()Arb.Companion.datetime
Using AI Code Generation
1import io.kotest.property.arbitrary.datetime2import io.kotest.property.arbitrary.date3import io.kotest.property.arbitrary.date4import io.kotest.property.arbitrary.datetime5import io.kotest.property.arbitrary.date6import io.kotest.property.arbitrary.date7import io.kotest.property.arbitrary.datetime8import io.kotest.property.arbitrary.date9import io.kotest.property.arbitrary.date10import io.kotest.property.arbitrary.datetime11import io.kotest.property.arbitrary.date12import io.kotest.property.arbitrary.date13import io.kotest.property.arbitrary.datetime14import io.kotest.property.arbitrary.date15import io.kotest.property.arbitrary.date16import io.kotest.property.arbitrary.datetime17import io.kotest.property.arbitrary.date18import io.kotest.property.arbitrary.date19import io.kotest.property.arbitrary.datetime20import io.kotest.property.arbitrary.date21import io.kotest.property.arbitrary.date22import io.kotest.property.arbitrary.datetime23import io.kotest.property.arbitrary.date24import io.kotest.property.arbitrary.date25import io.kotest.property.arbitrary.datetime26import io.kotest.property.arbitrary.date27import io.kotest.property.arbitrary.date28import io.kotest.property.arbitrary.datetime29import io.kotest.property.arbitrary.date30import io.kotest.property.arbitrary.date31import io.kotest.property.arbitraryArb.Companion.datetime
Using AI Code Generation
1val date = Arb.datetime(min = LocalDateTime.of(2000, 1, 1, 0, 0), max = LocalDateTime.of(2020, 12, 31, 23, 59))2val date = Arb.datetime(min = LocalDateTime.of(2000, 1, 1, 0, 0), max = LocalDateTime.of(2020, 12, 31, 23, 59))3val date = Arb.datetime(min = LocalDateTime.of(2000, 1, 1, 0, 0), max = LocalDateTime.of(2020, 12, 31, 23, 59))4val date = Arb.datetime(min = LocalDateTime.of(2000, 1, 1, 0, 0), max = LocalDateTime.of(2020, 12, 31, 23, 59))5val date = Arb.datetime(min = LocalDateTime.of(2000, 1, 1, 0, 0), max = LocalDateTime.of(2020, 12, 31, 23, 59))6val date = Arb.datetime(min = LocalDateTime.of(2000, 1, 1, 0, 0), max = LocalDateTime.of(2020, 12, 31, 23, 59))7val date = Arb.datetime(min = LocalDateTime.of(2000, 1, 1, 0, 0), max = LocalDateTime.of(2020, 12, 31, 23, 59))8val date = Arb.datetime(min = LocalDateTime.of(2000, 1, 1, 0, 0), max = LocalDateTime.of(2020, 12, 31, 23, 59))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!!
