forked from dop251/goja
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuiltin_set_test.go
102 lines (96 loc) · 1.55 KB
/
builtin_set_test.go
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
package goja
import (
"fmt"
"strings"
"testing"
)
func TestSetEvilIterator(t *testing.T) {
const SCRIPT = `
var o = {};
o[Symbol.iterator] = function() {
return {
next: function() {
if (!this.flag) {
this.flag = true;
return {};
}
return {done: true};
}
}
}
new Set(o);
undefined;
`
testScript(SCRIPT, _undefined, t)
}
func ExampleRuntime_ExportTo_setToMap() {
vm := New()
s, err := vm.RunString(`
new Set([1, 2, 3])
`)
if err != nil {
panic(err)
}
m := make(map[int]struct{})
err = vm.ExportTo(s, &m)
if err != nil {
panic(err)
}
fmt.Println(m)
// Output: map[1:{} 2:{} 3:{}]
}
func ExampleRuntime_ExportTo_setToSlice() {
vm := New()
s, err := vm.RunString(`
new Set([1, 2, 3])
`)
if err != nil {
panic(err)
}
var a []int
err = vm.ExportTo(s, &a)
if err != nil {
panic(err)
}
fmt.Println(a)
// Output: [1 2 3]
}
func TestSetExportToSliceCircular(t *testing.T) {
vm := New()
s, err := vm.RunString(`
let s = new Set();
s.add(s);
s;
`)
if err != nil {
t.Fatal(err)
}
var a []Value
err = vm.ExportTo(s, &a)
if err != nil {
t.Fatal(err)
}
if len(a) != 1 {
t.Fatalf("len: %d", len(a))
}
if a[0] != s {
t.Fatalf("a: %v", a)
}
}
func TestSetExportToArrayMismatchedLengths(t *testing.T) {
vm := New()
s, err := vm.RunString(`
new Set([1, 2])
`)
if err != nil {
panic(err)
}
var s1 [3]int
err = vm.ExportTo(s, &s1)
if err == nil {
t.Fatal("expected error")
}
if msg := err.Error(); !strings.Contains(msg, "lengths mismatch") {
t.Fatalf("unexpected error: %v", err)
}
}