Files
kotlin-fork/libraries/stdlib/test/text/StringJVMTest.kt
T
2014-06-10 11:11:02 +04:00

392 lines
11 KiB
Kotlin
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package test.text
import java.util.Locale
import kotlin.test.*
import org.junit.Test as test
class StringJVMTest {
test fun stringIterator() {
var sum = 0
for(c in "239")
sum += (c.toInt() - '0'.toInt())
assertTrue(sum == 14)
}
test fun stringBuilderIterator() {
var sum = 0
val sb = StringBuilder()
for(c in "239")
sb.append(c)
println(sb)
for(c in sb)
sum += (c.toInt() - '0'.toInt())
assertTrue(sum == 14)
}
test fun orEmpty() {
val s: String? = "hey"
val ns: String? = null
assertEquals("hey", s.orEmpty())
assertEquals("", ns.orEmpty())
}
test fun toShort() {
assertEquals(77.toShort(), "77".toShort())
}
test fun toInt() {
assertEquals(77, "77".toInt())
}
test fun toLong() {
assertEquals(77.toLong(), "77".toLong())
}
test fun count() {
val text = "hello there\tfoo\nbar"
val whitespaceCount = text.count { it.isWhitespace() }
assertEquals(3, whitespaceCount)
}
test fun testSplitByChar() {
val s = "ab\n[|^$&\\]^cd"
var list = s.split('b');
assertEquals(2, list.size)
assertEquals("a", list[0])
assertEquals("\n[|^$&\\]^cd", list[1])
list = s.split('^')
assertEquals(3, list.size)
assertEquals("cd", list[2])
list = s.split('.')
assertEquals(1, list.size)
assertEquals(s, list[0])
}
test fun repeat() {
fails{ "foo".repeat(-1) }
assertEquals("", "foo".repeat(0))
assertEquals("foo", "foo".repeat(1))
assertEquals("foofoo", "foo".repeat(2))
assertEquals("foofoofoo", "foo".repeat(3))
}
test fun filter() {
assertEquals("acdca", "abcdcba".filter { !it.equals('b') })
assertEquals("1234", "a1b2c3d4".filter { it.isDigit() })
}
test fun filterNot() {
assertEquals("acdca", "abcdcba".filterNot { it.equals('b') })
assertEquals("abcd", "a1b2c3d4".filterNot { it.isDigit() })
}
test fun forEach() {
val data = "abcd1234"
var count = 0
data.forEach{ count++ }
assertEquals(data.length(), count)
}
test fun all() {
val data = "AbCd"
assertTrue {
data.all { it.isJavaLetter() }
}
assertNot {
data.all { it.isUpperCase() }
}
}
test fun any() {
val data = "a1bc"
assertTrue {
data.any() { it.isDigit() }
}
assertNot {
data.any() { it.isUpperCase() }
}
}
test fun joinTo() {
val data = "kotlin".toList()
val sb = StringBuilder()
data.joinTo(sb, "^", "<", ">")
assertEquals("<k^o^t^l^i^n>", sb.toString())
}
test fun find() {
val data = "a1b2c3"
assertEquals('1', data.find { it.isDigit() })
assertNull(data.find { it.isUpperCase() })
}
test fun findNot() {
val data = "1a2b3c"
assertEquals('a', data.findNot { it.isDigit() })
assertNull(data.findNot { it.isJavaLetterOrDigit() })
}
test fun partition() {
val data = "a1b2c3"
val pair = data.partition { it.isDigit() }
assertEquals("123", pair.first, "pair.first")
assertEquals("abc", pair.second, "pair.second")
}
test fun map() {
assertEquals(arrayListOf('a', 'b', 'c'), "abc".map({ it }))
assertEquals(arrayListOf(true, false, true), "AbC".map({ it.isUpperCase() }))
assertEquals(arrayListOf<Boolean>(), "".map({ it.isUpperCase() }))
assertEquals(arrayListOf(97, 98, 99), "abc".map({ it.toInt() }))
}
test fun mapTo() {
val result1 = arrayListOf<Char>()
val return1 = "abc".mapTo(result1, { it })
assertEquals(result1, return1)
assertEquals(arrayListOf('a', 'b', 'c'), result1)
val result2 = arrayListOf<Boolean>()
val return2 = "AbC".mapTo(result2, { it.isUpperCase() })
assertEquals(result2, return2)
assertEquals(arrayListOf(true, false, true), result2)
val result3 = arrayListOf<Boolean>()
val return3 = "".mapTo(result3, { it.isUpperCase() })
assertEquals(result3, return3)
assertEquals(arrayListOf<Boolean>(), result3)
val result4 = arrayListOf<Int>()
val return4 = "abc".mapTo(result4, { it.toInt() })
assertEquals(result4, return4)
assertEquals(arrayListOf(97, 98, 99), result4)
}
test fun flatMap() {
val data = "abcd"
val result = data.flatMap { listOf(it) }
assertEquals(data.size, result.count())
assertEquals(data.toCharList(), result)
}
test fun fold() {
// calculate number of digits in the string
val data = "a1b2c3def"
val result = data.fold(0, { digits, c -> if(c.isDigit()) digits + 1 else digits } )
assertEquals(3, result)
//simulate all method
assertEquals(true, "ABCD".fold(true, { r, c -> r && c.isUpperCase() }))
//get string back
assertEquals(data, data.fold("", { s, c -> s + c }))
}
test fun foldRight() {
// calculate number of digits in the string
val data = "a1b2c3def"
val result = data.foldRight(0, { c, digits -> if(c.isDigit()) digits + 1 else digits })
assertEquals(3, result)
//simulate all method
assertEquals(true, "ABCD".foldRight(true, { c, r -> r && c.isUpperCase() }))
//get string back
assertEquals(data, data.foldRight("", { s, c -> "" + s + c }))
}
test fun reduce() {
// get the smallest character(by char value)
assertEquals('a', "bacfd".reduce { v, c -> if (v > c) c else v })
failsWith(javaClass<UnsupportedOperationException>()) {
"".reduce { a, b -> '\n' }
}
}
test fun reduceRight() {
// get the smallest character(by char value)
assertEquals('a', "bacfd".reduceRight { c, v -> if (v > c) c else v })
failsWith(javaClass<UnsupportedOperationException>()) {
"".reduceRight { a, b -> '\n' }
}
}
test fun groupBy() {
// group characters by their case
val data = "abAbaABcD"
val result = data.groupBy { it.isLowerCase() }
assertEquals(2, result.size)
assertEquals(listOf('a','b','b','a','c'), result.get(true))
}
test fun joinToString() {
val data = "abcd".toList()
val result = data.joinToString("_", "(", ")")
assertEquals("(a_b_c_d)", result)
val data2 = "verylongstring".toList()
val result2 = data2.joinToString("-", "[", "]", 11, "oops")
assertEquals("[v-e-r-y-l-o-n-g-s-t-r-oops]", result2)
}
test fun join() {
val data = "abcd".map { it.toString() }
val result = data.join("_", "(", ")")
assertEquals("(a_b_c_d)", result)
val data2 = "verylongstring".map { it.toString() }
val result2 = data2.join("-", "[", "]", 11, "oops")
assertEquals("[v-e-r-y-l-o-n-g-s-t-r-oops]", result2)
}
test fun dropWhile() {
val data = "ab1cd2"
assertEquals("1cd2", data.dropWhile { it.isJavaLetter() })
assertEquals("", data.dropWhile { true })
assertEquals("ab1cd2", data.dropWhile { false })
}
test fun drop() {
val data = "abcd1234"
assertEquals("d1234", data.drop(3))
fails {
data.drop(-2)
}
assertEquals("", data.drop(data.length + 5))
}
test fun takeWhile() {
val data = "ab1cd2"
assertEquals("ab", data.takeWhile { it.isJavaLetter() })
assertEquals("", data.takeWhile { false })
assertEquals("ab1cd2", data.takeWhile { true })
}
test fun take() {
val data = "abcd1234"
assertEquals("abc", data.take(3))
fails {
data.take(-7)
}
assertEquals(data, data.take(data.length + 42))
}
test fun formatter() {
assertEquals("12", "%d%d".format(1, 2))
assertEquals("1,234,567.890", "%,.3f".format(Locale.ENGLISH, 1234567.890))
assertEquals("1.234.567,890", "%,.3f".format(Locale.GERMAN, 1234567.890))
assertEquals("1 234 567,890", "%,.3f".format(Locale("fr"), 1234567.890))
}
test fun trimLeading() {
assertEquals("", "".trimLeading())
assertEquals("a", "a".trimLeading())
assertEquals("a", " a".trimLeading())
assertEquals("a", " a".trimLeading())
assertEquals("a ", " a ".trimLeading())
assertEquals("a b", " a b".trimLeading())
assertEquals("a b ", " a b ".trimLeading())
assertEquals("a", "\ta".trimLeading())
assertEquals("a", "\t\ta".trimLeading())
assertEquals("a", "\ra".trimLeading())
assertEquals("a", "\na".trimLeading())
}
test fun trimTrailing() {
assertEquals("", "".trimTrailing())
assertEquals("a", "a".trimTrailing())
assertEquals("a", "a ".trimTrailing())
assertEquals("a", "a ".trimTrailing())
assertEquals(" a", " a ".trimTrailing())
assertEquals("a b", "a b ".trimTrailing())
assertEquals(" a b", " a b ".trimTrailing())
assertEquals("a", "a\t".trimTrailing())
assertEquals("a", "a\t\t".trimTrailing())
assertEquals("a", "a\r".trimTrailing())
assertEquals("a", "a\n".trimTrailing())
}
test fun trimTrailingAndLeading() {
val examples = array(
"a",
" a ",
" a ",
" a b ",
"\ta\tb\t",
"\t\ta\t\t",
"\ra\r",
"\na\n"
)
for (example in examples) {
assertEquals(example.trim(), example.trimTrailing().trimLeading())
assertEquals(example.trim(), example.trimLeading().trimTrailing())
}
}
test fun toByteArrayEncodings() {
val s = "hello"
val defaultCharset = java.nio.charset.Charset.defaultCharset()!!
assertEquals(String(s.toByteArray()), String(s.toByteArray(defaultCharset)))
assertEquals(String(s.toByteArray()), String(s.toByteArray(defaultCharset.name())))
}
test fun testReplaceAllClosure() {
val s = "test123zzz"
val result = s.replaceAll("\\d+") { (mr) ->
"[" + mr.group() + "]"
}
assertEquals("test[123]zzz", result)
}
test fun testReplaceAllClosureAtStart() {
val s = "123zzz"
val result = s.replaceAll("\\d+") { (mr) ->
"[" + mr.group() + "]"
}
assertEquals("[123]zzz", result)
}
test fun testReplaceAllClosureAtEnd() {
val s = "test123"
val result = s.replaceAll("\\d+") { (mr) ->
"[" + mr.group() + "]"
}
assertEquals("test[123]", result)
}
test fun testReplaceAllClosureEmpty() {
val s = ""
val result = s.replaceAll("\\d+") { (mr) ->
"x"
}
assertEquals("", result)
}
test fun slice() {
val iter = listOf(4, 3, 0, 1)
val builder = StringBuilder()
builder.append("ABCD")
builder.append("abcd")
// ABCDabcd
// 01234567
assertEquals("BCDabc", builder.slice(1..6))
assertEquals("baD", builder.slice(5 downTo 3))
assertEquals("aDAB", builder.slice(iter))
}
}