From 95276935a05dd3bcb2235178eadb2591bb7c2f54 Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Fri, 4 Apr 2025 17:36:10 +0000 Subject: [PATCH 1/2] LocalDateSerializerUnitTest.kt: fix unparseableDash() to not include numbers as "invalid" characters because they become "valid" when adjacent to other numeric digits. --- .../serializers/LocalDateSerializerUnitTest.kt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/serializers/LocalDateSerializerUnitTest.kt b/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/serializers/LocalDateSerializerUnitTest.kt index 6bc0c45d3bc..39ccf28190f 100644 --- a/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/serializers/LocalDateSerializerUnitTest.kt +++ b/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/serializers/LocalDateSerializerUnitTest.kt @@ -101,9 +101,13 @@ class LocalDateSerializerUnitTest { @Test fun `deserialize() should throw IllegalArgumentException when given unparseable strings`() = runTest { - checkAll(propTestConfig, Arb.unparseableDate()) { encodedDate -> + val seededPropTestConfig = propTestConfig.copy(seed=-7108070269336260794) + checkAll(seededPropTestConfig, Arb.unparseableDate()) { encodedDate -> val decoder: Decoder = mockk { every { decodeString() } returns encodedDate } - shouldThrow { LocalDateSerializer.deserialize(decoder) } + shouldThrow { + val deserializedDate = LocalDateSerializer.deserialize(decoder) + println("zzyzx deserializedDate=$deserializedDate") + } } } @@ -205,7 +209,11 @@ class LocalDateSerializerUnitTest { } fun Arb.Companion.unparseableDash(): Arb { - val invalidString = string(1..5, codepoints.filterNot { it.value == '-'.code }) + val invalidString = + string( + 1..5, + codepoints.filterNot { it.value == '-'.code || it.value in '0'.code..'9'.code } + ) return arbitrary { rs -> val flags = Array(3) { rs.random.nextBoolean() } if (!flags[0]) { @@ -225,7 +233,10 @@ class LocalDateSerializerUnitTest { val unparseableNumber = unparseableNumber() val unparseableDash = unparseableDash() val booleanArray = booleanArray(Arb.constant(5), Arb.boolean()) + var count = 0 return arbitrary(edgecases = listOf("", "-", "--", "---")) { rs -> + count++ + println("count=$count") val invalidCharFlags = booleanArray.bind() if (invalidCharFlags.count { it } == 0) { invalidCharFlags[rs.random.nextInt(invalidCharFlags.indices)] = true From 7a500d1020c9932aa852925b1cd7bcbe05c3a370 Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Fri, 4 Apr 2025 18:00:43 +0000 Subject: [PATCH 2/2] remove code accidentally left behind from debugging --- .../serializers/LocalDateSerializerUnitTest.kt | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/serializers/LocalDateSerializerUnitTest.kt b/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/serializers/LocalDateSerializerUnitTest.kt index 39ccf28190f..2598d176e47 100644 --- a/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/serializers/LocalDateSerializerUnitTest.kt +++ b/firebase-dataconnect/src/test/kotlin/com/google/firebase/dataconnect/serializers/LocalDateSerializerUnitTest.kt @@ -101,13 +101,9 @@ class LocalDateSerializerUnitTest { @Test fun `deserialize() should throw IllegalArgumentException when given unparseable strings`() = runTest { - val seededPropTestConfig = propTestConfig.copy(seed=-7108070269336260794) - checkAll(seededPropTestConfig, Arb.unparseableDate()) { encodedDate -> + checkAll(propTestConfig, Arb.unparseableDate()) { encodedDate -> val decoder: Decoder = mockk { every { decodeString() } returns encodedDate } - shouldThrow { - val deserializedDate = LocalDateSerializer.deserialize(decoder) - println("zzyzx deserializedDate=$deserializedDate") - } + shouldThrow { LocalDateSerializer.deserialize(decoder) } } } @@ -233,10 +229,7 @@ class LocalDateSerializerUnitTest { val unparseableNumber = unparseableNumber() val unparseableDash = unparseableDash() val booleanArray = booleanArray(Arb.constant(5), Arb.boolean()) - var count = 0 return arbitrary(edgecases = listOf("", "-", "--", "---")) { rs -> - count++ - println("count=$count") val invalidCharFlags = booleanArray.bind() if (invalidCharFlags.count { it } == 0) { invalidCharFlags[rs.random.nextInt(invalidCharFlags.indices)] = true