-
Notifications
You must be signed in to change notification settings - Fork 443
Expand file tree
/
Copy pathbuiltin_array_circular_test.go
More file actions
123 lines (109 loc) · 2.85 KB
/
builtin_array_circular_test.go
File metadata and controls
123 lines (109 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package goja
import (
"testing"
)
func TestArrayCircularReferenceToString(t *testing.T) {
const SCRIPT = `
var T = [1, 2, 3];
T[42] = T; // Create circular reference
var str = String(T);
// Circular reference should be replaced with empty string
str === "1,2,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
`
testScript(SCRIPT, valueTrue, t)
}
func TestArrayCircularReferenceNumericOperation(t *testing.T) {
const SCRIPT = `
var T = [1, 2, 3];
T[42] = T; // Create circular reference
try {
var x = T % 2; // This should not crash
true;
} catch (e) {
false;
}
`
testScript(SCRIPT, valueTrue, t)
}
func TestArrayCircularReferenceJoin(t *testing.T) {
const SCRIPT = `
var T = [1, 2, 3];
T[42] = T; // Create circular reference
var str = T.join(',');
// Circular reference should be replaced with empty string
str === "1,2,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
`
testScript(SCRIPT, valueTrue, t)
}
func TestArrayCircularReferenceConcat(t *testing.T) {
const SCRIPT = `
var T = [1, 2, 3];
T[42] = T; // Create circular reference
var str = '' + T; // String concatenation
// Circular reference should be replaced with empty string
str === "1,2,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
`
testScript(SCRIPT, valueTrue, t)
}
func TestArrayCircularReferenceToLocaleString(t *testing.T) {
const SCRIPT = `
var T = [1, 2, 3];
T[42] = T; // Create circular reference
var str = T.toLocaleString();
// Circular reference should be replaced with empty string
str === "1,2,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
`
testScript(SCRIPT, valueTrue, t)
}
func TestArrayMultipleCircularReferences(t *testing.T) {
const SCRIPT = `
var T = [1, 2, 3];
T[42] = T;
T[76] = T;
T[80] = T;
var str = String(T);
// Should handle multiple circular references - all should be empty strings
str.split(',').length === 81;
`
testScript(SCRIPT, valueTrue, t)
}
func TestArrayNestedCircularReference(t *testing.T) {
const SCRIPT = `
var A = [1, 2];
var B = [3, 4];
A[2] = B;
B[2] = A; // Mutual circular reference
var str = String(A);
// A contains B which contains A - circular refs should be empty
str === "1,2,3,4,";
`
testScript(SCRIPT, valueTrue, t)
}
func TestArrayCircularReferenceAccessOK(t *testing.T) {
const SCRIPT = `
// These operations should still work fine
var T = [1, 2, 3];
T[42] = T;
// Accessing circular reference is OK
var same = T[42] === T;
// Accessing elements through circular reference is OK
var first = T[42][0];
// Deep nesting is OK
var deep = T[42][42][42][42][42][0];
same && first === 1 && deep === 1;
`
testScript(SCRIPT, valueTrue, t)
}
func TestArrayCircularReferenceComparison(t *testing.T) {
const SCRIPT = `
var T = [1, 2, 3];
T[42] = T; // Create circular reference
try {
var result = T == 5; // Comparison should not crash
true;
} catch (e) {
false;
}
`
testScript(SCRIPT, valueTrue, t)
}