Files
kotlin-fork/libraries/stdlib/test/StringTest.kt
T

216 lines
6.1 KiB
Kotlin

package test
import java.util.Collections
import kotlin.test.*
import org.junit.Test as test
class StringTest {
test fun startsWith() {
assertTrue("abcd".startsWith("ab"))
assertTrue("abcd".startsWith("abcd"))
assertTrue("abcd".startsWith("a"))
assertFalse("abcd".startsWith("abcde"))
assertFalse("abcd".startsWith("b"))
assertFalse("".startsWith('a'))
}
test fun endsWith() {
assertTrue("abcd".endsWith("d"))
assertTrue("abcd".endsWith("abcd"))
assertFalse("abcd".endsWith("b"))
assertFalse("".endsWith('a'))
}
test fun testStartsWithChar() {
assertTrue("abcd".startsWith('a'))
assertFalse("abcd".startsWith('b'))
assertFalse("".startsWith('a'))
}
test fun testEndsWithChar() {
assertTrue("abcd".endsWith('d'))
assertFalse("abcd".endsWith('b'))
assertFalse("".endsWith('a'))
}
test fun capitalize() {
assertEquals("A", "A".capitalize())
assertEquals("A", "a".capitalize())
assertEquals("Abcd", "abcd".capitalize())
assertEquals("Abcd", "Abcd".capitalize())
}
test fun decapitalize() {
assertEquals("a", "A".decapitalize())
assertEquals("a", "a".decapitalize())
assertEquals("abcd", "abcd".decapitalize())
assertEquals("abcd", "Abcd".decapitalize())
assertEquals("uRL", "URL".decapitalize())
}
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 reverse() {
assertEquals("dcba", "abcd".reverse())
assertEquals("4321", "1234".reverse())
assertEquals("", "".reverse())
}
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 appendString() {
val data = "kotlin"
val sb = StringBuilder()
data.appendString(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 flatMap() {
val data = "abcd"
val result = data.flatMap { Collections.singletonList(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<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<UnsupportedOperationException> {
"".reduceRight { a, b -> '\n' }
}
}
test fun groupBy() {
// collect similar characters by their int code
val data = "ababaaabcd"
val result = data.groupBy { it.toInt() }
assertEquals(4, result.size)
assertEquals("bbb", result.get('b'.toInt()))
}
test fun makeString() {
val data = "abcd"
val result = data.makeString("_", "(", ")")
assertEquals("(a_b_c_d)", result)
val data2 = "verylongstring"
val result2 = data2.makeString("-", "[", "]", 11, "oops")
assertEquals("[v-e-r-y-l-o-n-g-s-t-r-oops]", result2)
}
test fun dropWhile() {
val data = "ab1cd2"
val result = data.dropWhile { it.isJavaLetter() }
assertEquals("1cd2", result)
}
test fun drop() {
val data = "abcd1234"
assertEquals("d1234", data.drop(3))
assertEquals(data, data.drop(-2))
assertEquals("", data.drop(data.length + 5))
}
test fun takeWhile() {
val data = "ab1cd2"
val result = data.takeWhile { it.isJavaLetter() }
assertEquals("ab", result)
}
test fun take() {
val data = "abcd1234"
assertEquals("abc", data.take(3))
assertEquals("", data.take(-7))
assertEquals(data, data.take(data.length + 42))
}
}