From 87d010e038c71cc41f7183633b999e5d287e4f53 Mon Sep 17 00:00:00 2001 From: voddan Date: Sun, 20 Mar 2016 18:43:32 +0300 Subject: [PATCH] Introduce local dsl for number parsing tests, improve test coverage. #KT-7930 --- .../test/text/ParsePrimitivesJVMTest.kt | 90 +++++++++++++++++-- 1 file changed, 83 insertions(+), 7 deletions(-) diff --git a/libraries/stdlib/test/text/ParsePrimitivesJVMTest.kt b/libraries/stdlib/test/text/ParsePrimitivesJVMTest.kt index f617c2694af..12f2a84cbf8 100644 --- a/libraries/stdlib/test/text/ParsePrimitivesJVMTest.kt +++ b/libraries/stdlib/test/text/ParsePrimitivesJVMTest.kt @@ -1,8 +1,7 @@ @file:kotlin.jvm.JvmVersion package test.text -import kotlin.test.assertEquals -import kotlin.test.assertFails +import kotlin.test.* import org.junit.Test as test class ParsePrimitivesJVMTest { @@ -15,19 +14,96 @@ class ParsePrimitivesJVMTest { } @test fun toByte() { - assertEquals(77.toByte(), "77".toByte()) - assertFails { "255".toByte() } + CompareBehaviorContext({it.toByte()}, {it.toByteOrNull()}).apply { + + assertProduce("+77", 77.toByte()) + assertProduce("-128", Byte.MIN_VALUE) + assertFailsOrNull("128") + } } @test fun toShort() { - assertEquals(77.toShort(), "77".toShort()) + CompareBehaviorContext({it.toShort()}, {it.toShortOrNull()}).apply { + + assertProduce("77", 77.toShort()) + assertProduce("-32768", Short.MIN_VALUE) + assertFailsOrNull("+32768") + } } @test fun toInt() { - assertEquals(77, "77".toInt()) + CompareBehaviorContext({it.toInt()}, {it.toIntOrNull()}).apply { + + assertProduce("77", 77) + assertProduce("+2147483647", Int.MAX_VALUE) + assertProduce("-2147483648", Int.MIN_VALUE) + + assertFailsOrNull("2147483648") + assertFailsOrNull("-2147483649") + assertFailsOrNull("239239kotlin") + } } @test fun toLong() { - assertEquals(77.toLong(), "77".toLong()) + CompareBehaviorContext({it.toLong()}, {it.toLongOrNull()}).apply { + + assertProduce("77", 77.toLong()) + assertProduce("+9223372036854775807", Long.MAX_VALUE) + assertProduce("-9223372036854775808", Long.MIN_VALUE) + + assertFailsOrNull("9223372036854775808") + assertFailsOrNull("-9223372036854775809") + assertFailsOrNull("922337 75809") + assertFailsOrNull("92233,75809") + assertFailsOrNull("92233`75809") + assertFailsOrNull("-922337KOTLIN775809") + } + } + + @test fun toFloat() { + CompareBehaviorContext({it.toFloat()}, {it.toFloatOrNull()}).apply { + + assertProduce("77.0", 77.0f) + assertProduce("-1e39", Float.NEGATIVE_INFINITY) + assertProduce("1000000000000000000000000000000000000000", Float.POSITIVE_INFINITY) + assertFailsOrNull("dark side") + } + } + + @test fun toDouble() { + CompareBehaviorContext({it.toDouble()}, {it.toDoubleOrNull()}).apply { + + assertProduce("-77", -77.0) + assertProduce("77.", 77.0) + assertProduce("77.0", 77.0) + assertProduce("-1.77", -1.77) + assertProduce("+.77", 0.77) + assertProduce("\t-77 \n", -77.0) + assertProduce("7.7e1", 77.0) + assertProduce("+770e-1", 77.0) + + assertProduce("-NaN", -Double.NaN) + assertProduce("+Infinity", Double.POSITIVE_INFINITY) + assertProduce("0x77p1", (0x77 shl 1).toDouble()) + assertProduce("0x.77P8", 0x77.toDouble()) + + assertFailsOrNull("7..7") + assertFailsOrNull("0x77e1") + assertFailsOrNull("007 not a number") + } + } +} + + +private class CompareBehaviorContext(val convertOrFail: (String) -> T, + val convertOrNull: (String) -> T?) { + fun assertProduce(input: String, output: T) { + assertEquals(output, convertOrFail(input)) + assertEquals(output, convertOrNull(input)) + } + + fun assertFailsOrNull(input: String) { + assertFailsWith("Expected to fail on input \"$input\"") { convertOrFail(input) } + assertNull (convertOrNull(input), message = "On input \"$input\"") } }