jsgen: fix string.runes method (fix #20500) (#24609)

This commit is contained in:
Gonzalo Chumillas 2025-05-30 04:15:08 +01:00 committed by GitHub
parent 90fdf102fc
commit 55eccf6abe
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 70 additions and 7 deletions

View File

@ -7,13 +7,10 @@ pub:
} }
pub fn (s string) runes() []rune { pub fn (s string) runes() []rune {
mut runes := []rune{} ret := JS.makeEmptyArray()
for i := 0; i < s.len; i++ { #for (r of s.str) array_push(ret,new rune(r),false);
mut r := rune(`0`)
#r = new rune(s.str[i.val].charCodeAt()) return ret
runes << r
}
return runes
} }
pub fn (s string) slice(a int, b int) string { pub fn (s string) slice(a int, b int) string {

View File

@ -0,0 +1,66 @@
fn test_runes() {
// Test basic ASCII + emoji
r1 := 'hello🎅'.runes()
assert r1.len == 6
assert r1[0] == `h`
assert r1[1] == `e`
assert r1[2] == `l`
assert r1[3] == `l`
assert r1[4] == `o`
assert r1[5] == `🎅`
// Test empty string
r2 := ''.runes()
assert r2.len == 0
// Test single character
r3 := 'A'.runes()
assert r3.len == 1
assert r3[0] == `A`
// Test Unicode characters
r4 := 'café'.runes()
assert r4.len == 4
assert r4[0] == `c`
assert r4[1] == `a`
assert r4[2] == `f`
assert r4[3] == `é`
// Test multiple emojis
r5 := '🎅🎄🎁'.runes()
assert r5.len == 3
assert r5[0] == `🎅`
assert r5[1] == `🎄`
assert r5[2] == `🎁`
// Test mixed ASCII, Unicode and emojis
r6 := 'hello🌍'.runes()
assert r6.len == 8
assert r6[0] == `h`
assert r6[1] == `e`
assert r6[2] == `l`
assert r6[3] == `l`
assert r6[4] == `o`
assert r6[5] == ``
assert r6[6] == ``
assert r6[7] == `🌍`
// Test special characters
r7 := '\n\t'.runes()
assert r7.len == 2
assert r7[0] == `\n`
assert r7[1] == `\t`
// Test mathematical symbols
r8 := 'α+β=γ'.runes()
assert r8.len == 5
assert r8[0] == `α`
assert r8[1] == `+`
assert r8[2] == `β`
assert r8[3] == `=`
assert r8[4] == `γ`
}
fn main() {
test_runes()
}