mirror of
https://github.com/apple/pkl.git
synced 2026-06-11 00:02:47 +02:00
Fix String.padStart/padEnd (#1672)
Fixes the following two bugs: * Pads to incorrect string length * Does not append full code point
This commit is contained in:
@@ -745,13 +745,12 @@ public final class StringNodes {
|
||||
@TruffleBoundary
|
||||
@Specialization
|
||||
protected String eval(String self, long width, String ch) {
|
||||
var length = self.length();
|
||||
var length = self.codePointCount(0, self.length());
|
||||
if (length >= width) return self;
|
||||
|
||||
var result = new StringBuilder(VmSafeMath.toInt32(width));
|
||||
var c = ch.charAt(0);
|
||||
for (var i = 0; i < width - length; i++) {
|
||||
result.append(c);
|
||||
result.append(ch);
|
||||
}
|
||||
result.append(self);
|
||||
return result.toString();
|
||||
@@ -762,14 +761,13 @@ public final class StringNodes {
|
||||
@TruffleBoundary
|
||||
@Specialization
|
||||
protected String eval(String self, long width, String ch) {
|
||||
var length = self.length();
|
||||
var length = self.codePointCount(0, self.length());
|
||||
if (length >= width) return self;
|
||||
|
||||
var result = new StringBuilder(VmSafeMath.toInt32(width));
|
||||
result.append(self);
|
||||
var c = ch.charAt(0);
|
||||
for (var i = 0; i < width - length; i++) {
|
||||
result.append(c);
|
||||
result.append(ch);
|
||||
}
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
@@ -452,6 +452,9 @@ examples {
|
||||
str1.padStart(10, " ")
|
||||
module.catch(() -> str1.padStart(10, ""))
|
||||
module.catch(() -> str1.padStart(10, "aa"))
|
||||
"🙃".padStart(5, "h")
|
||||
"🙃".padStart(5, "🏀")
|
||||
"hi".padStart(5, "🏀")
|
||||
}
|
||||
|
||||
["padEnd()"] {
|
||||
@@ -463,6 +466,9 @@ examples {
|
||||
str1.padEnd(10, " ")
|
||||
module.catch(() -> str1.padEnd(10, ""))
|
||||
module.catch(() -> str1.padEnd(10, "aa"))
|
||||
"🙃".padEnd(5, "h")
|
||||
"🙃".padEnd(5, "🏀")
|
||||
"hi".padEnd(5, "🏀")
|
||||
}
|
||||
|
||||
["toBooleanOrNull()"] {
|
||||
|
||||
@@ -386,6 +386,9 @@ examples {
|
||||
" abcdefg"
|
||||
"Type constraint `length == 1` violated. Value: \"\""
|
||||
"Type constraint `length == 1` violated. Value: \"aa\""
|
||||
"hhhh🙃"
|
||||
"🏀🏀🏀🏀🙃"
|
||||
"🏀🏀🏀hi"
|
||||
}
|
||||
["padEnd()"] {
|
||||
""
|
||||
@@ -396,6 +399,9 @@ examples {
|
||||
"abcdefg "
|
||||
"Type constraint `length == 1` violated. Value: \"\""
|
||||
"Type constraint `length == 1` violated. Value: \"aa\""
|
||||
"🙃hhhh"
|
||||
"🙃🏀🏀🏀🏀"
|
||||
"hi🏀🏀🏀"
|
||||
}
|
||||
["toBooleanOrNull()"] {
|
||||
true
|
||||
|
||||
Reference in New Issue
Block a user