Skip to content

Commit 55eccf6

Browse files
authored
jsgen: fix string.runes method (fix #20500) (#24609)
1 parent 90fdf10 commit 55eccf6

2 files changed

Lines changed: 70 additions & 7 deletions

File tree

‎vlib/builtin/js/string.js.v‎

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,10 @@ pub:
77
}
88

99
pub fn (s string) runes() []rune {
10-
mut runes := []rune{}
11-
for i := 0; i < s.len; i++ {
12-
mut r := rune(`0`)
13-
#r = new rune(s.str[i.val].charCodeAt())
14-
runes << r
15-
}
16-
return runes
10+
ret := JS.makeEmptyArray()
11+
#for (r of s.str) array_push(ret,new rune(r),false);
12+
13+
return ret
1714
}
1815

1916
pub fn (s string) slice(a int, b int) string {

‎vlib/v/gen/js/tests/string.v‎

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
fn test_runes() {
2+
// Test basic ASCII + emoji
3+
r1 := 'hello🎅'.runes()
4+
assert r1.len == 6
5+
assert r1[0] == `h`
6+
assert r1[1] == `e`
7+
assert r1[2] == `l`
8+
assert r1[3] == `l`
9+
assert r1[4] == `o`
10+
assert r1[5] == `🎅`
11+
12+
// Test empty string
13+
r2 := ''.runes()
14+
assert r2.len == 0
15+
16+
// Test single character
17+
r3 := 'A'.runes()
18+
assert r3.len == 1
19+
assert r3[0] == `A`
20+
21+
// Test Unicode characters
22+
r4 := 'café'.runes()
23+
assert r4.len == 4
24+
assert r4[0] == `c`
25+
assert r4[1] == `a`
26+
assert r4[2] == `f`
27+
assert r4[3] == `é`
28+
29+
// Test multiple emojis
30+
r5 := '🎅🎄🎁'.runes()
31+
assert r5.len == 3
32+
assert r5[0] == `🎅`
33+
assert r5[1] == `🎄`
34+
assert r5[2] == `🎁`
35+
36+
// Test mixed ASCII, Unicode and emojis
37+
r6 := 'hello世界🌍'.runes()
38+
assert r6.len == 8
39+
assert r6[0] == `h`
40+
assert r6[1] == `e`
41+
assert r6[2] == `l`
42+
assert r6[3] == `l`
43+
assert r6[4] == `o`
44+
assert r6[5] == `世`
45+
assert r6[6] == `界`
46+
assert r6[7] == `🌍`
47+
48+
// Test special characters
49+
r7 := '\n\t'.runes()
50+
assert r7.len == 2
51+
assert r7[0] == `\n`
52+
assert r7[1] == `\t`
53+
54+
// Test mathematical symbols
55+
r8 := 'α+β=γ'.runes()
56+
assert r8.len == 5
57+
assert r8[0] == `α`
58+
assert r8[1] == `+`
59+
assert r8[2] == `β`
60+
assert r8[3] == `=`
61+
assert r8[4] == `γ`
62+
}
63+
64+
fn main() {
65+
test_runes()
66+
}

0 commit comments

Comments
 (0)