Fix endsWith in JS always ignored character case, regardless of the ignoreCase parameter value.
startsWith, endsWith again use native implementation when possible.
This commit is contained in:
@@ -4,12 +4,21 @@ native public fun String.toUpperCase() : String = noImpl
|
|||||||
|
|
||||||
native public fun String.toLowerCase() : String = noImpl
|
native public fun String.toLowerCase() : String = noImpl
|
||||||
|
|
||||||
|
// TODO: make internal
|
||||||
native("indexOf")
|
native("indexOf")
|
||||||
public fun String.nativeIndexOf(str : String, fromIndex : Int) : Int = noImpl
|
public fun String.nativeIndexOf(str : String, fromIndex : Int) : Int = noImpl
|
||||||
|
|
||||||
|
// TODO: make internal
|
||||||
native("lastIndexOf")
|
native("lastIndexOf")
|
||||||
public fun String.nativeLastIndexOf(str : String, fromIndex : Int) : Int = noImpl
|
public fun String.nativeLastIndexOf(str : String, fromIndex : Int) : Int = noImpl
|
||||||
|
|
||||||
|
// TODO: make internal
|
||||||
|
native("startsWith")
|
||||||
|
public fun String.nativeStartsWith(s: String, position: Int): Boolean = noImpl
|
||||||
|
// TODO: make internal
|
||||||
|
native("endsWith")
|
||||||
|
public fun String.nativeEndsWith(s: String): Boolean = noImpl
|
||||||
|
|
||||||
library("splitString")
|
library("splitString")
|
||||||
public fun String.splitWithRegex(regex: String): Array<String> = noImpl
|
public fun String.splitWithRegex(regex: String): Array<String> = noImpl
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +1,38 @@
|
|||||||
package kotlin.js
|
package kotlin.js
|
||||||
|
|
||||||
|
// TODO: make internal
|
||||||
public inline fun String.nativeIndexOf(ch : Char, fromIndex : Int) : Int = nativeIndexOf(ch.toString(), fromIndex)
|
public inline fun String.nativeIndexOf(ch : Char, fromIndex : Int) : Int = nativeIndexOf(ch.toString(), fromIndex)
|
||||||
public inline fun String.nativeLastIndexOf(ch : Char, fromIndex : Int) : Int = nativeLastIndexOf(ch.toString(), fromIndex)
|
public inline fun String.nativeLastIndexOf(ch : Char, fromIndex : Int) : Int = nativeLastIndexOf(ch.toString(), fromIndex)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns `true` if this string starts with the specified prefix.
|
* Returns `true` if this string starts with the specified prefix.
|
||||||
*/
|
*/
|
||||||
public fun String.startsWith(prefix: String, ignoreCase: Boolean = false): Boolean =
|
public fun String.startsWith(prefix: String, ignoreCase: Boolean = false): Boolean {
|
||||||
regionMatches(0, prefix, 0, prefix.length(), ignoreCase)
|
if (!ignoreCase)
|
||||||
|
return nativeStartsWith(prefix, 0)
|
||||||
|
else
|
||||||
|
return regionMatches(0, prefix, 0, prefix.length(), ignoreCase)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns `true` if a substring of this string starting at the specified offset [thisOffset] starts with the specified prefix.
|
* Returns `true` if a substring of this string starting at the specified offset [thisOffset] starts with the specified prefix.
|
||||||
*/
|
*/
|
||||||
public fun String.startsWith(prefix: String, thisOffset: Int, ignoreCase: Boolean = false): Boolean =
|
public fun String.startsWith(prefix: String, thisOffset: Int, ignoreCase: Boolean = false): Boolean {
|
||||||
regionMatches(thisOffset, prefix, 0, prefix.length(), ignoreCase)
|
if (!ignoreCase)
|
||||||
|
return nativeStartsWith(prefix, thisOffset)
|
||||||
|
else
|
||||||
|
return regionMatches(thisOffset, prefix, 0, prefix.length(), ignoreCase)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns `true` if this string ends with the specified suffix.
|
* Returns `true` if this string ends with the specified suffix.
|
||||||
*/
|
*/
|
||||||
public fun String.endsWith(suffix: String, ignoreCase: Boolean = false): Boolean =
|
public fun String.endsWith(suffix: String, ignoreCase: Boolean = false): Boolean {
|
||||||
regionMatches(length() - suffix.length(), suffix, 0, suffix.length(), ignoreCase = true)
|
if (!ignoreCase)
|
||||||
|
return nativeEndsWith(suffix)
|
||||||
|
else
|
||||||
|
return regionMatches(length() - suffix.length(), suffix, 0, suffix.length(), ignoreCase)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ class StringTest {
|
|||||||
assertTrue("some".startsWith(""))
|
assertTrue("some".startsWith(""))
|
||||||
assertTrue("".startsWith(""))
|
assertTrue("".startsWith(""))
|
||||||
|
|
||||||
|
assertFalse("abcd".startsWith("aB", ignoreCase = false))
|
||||||
assertTrue("abcd".startsWith("aB", ignoreCase = true))
|
assertTrue("abcd".startsWith("aB", ignoreCase = true))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,6 +47,7 @@ class StringTest {
|
|||||||
assertTrue("abcd".endsWith("d"))
|
assertTrue("abcd".endsWith("d"))
|
||||||
assertTrue("abcd".endsWith("abcd"))
|
assertTrue("abcd".endsWith("abcd"))
|
||||||
assertFalse("abcd".endsWith("b"))
|
assertFalse("abcd".endsWith("b"))
|
||||||
|
assertFalse("strö".endsWith("RÖ", ignoreCase = false))
|
||||||
assertTrue("strö".endsWith("RÖ", ignoreCase = true))
|
assertTrue("strö".endsWith("RÖ", ignoreCase = true))
|
||||||
assertFalse("".endsWith("a"))
|
assertFalse("".endsWith("a"))
|
||||||
assertTrue("some".endsWith(""))
|
assertTrue("some".endsWith(""))
|
||||||
@@ -55,6 +57,7 @@ class StringTest {
|
|||||||
test fun startsWithChar() {
|
test fun startsWithChar() {
|
||||||
assertTrue("abcd".startsWith('a'))
|
assertTrue("abcd".startsWith('a'))
|
||||||
assertFalse("abcd".startsWith('b'))
|
assertFalse("abcd".startsWith('b'))
|
||||||
|
assertFalse("abcd".startsWith('A', ignoreCase = false))
|
||||||
assertTrue("abcd".startsWith('A', ignoreCase = true))
|
assertTrue("abcd".startsWith('A', ignoreCase = true))
|
||||||
assertFalse("".startsWith('a'))
|
assertFalse("".startsWith('a'))
|
||||||
}
|
}
|
||||||
@@ -62,6 +65,7 @@ class StringTest {
|
|||||||
test fun endsWithChar() {
|
test fun endsWithChar() {
|
||||||
assertTrue("abcd".endsWith('d'))
|
assertTrue("abcd".endsWith('d'))
|
||||||
assertFalse("abcd".endsWith('b'))
|
assertFalse("abcd".endsWith('b'))
|
||||||
|
assertFalse("strö".endsWith('Ö', ignoreCase = false))
|
||||||
assertTrue("strö".endsWith('Ö', ignoreCase = true))
|
assertTrue("strö".endsWith('Ö', ignoreCase = true))
|
||||||
assertFalse("".endsWith('a'))
|
assertFalse("".endsWith('a'))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user