forked from JavaScriptKit/JavaScriptCore
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJavaScriptTests.swift
More file actions
134 lines (115 loc) · 4.04 KB
/
Copy pathJavaScriptTests.swift
File metadata and controls
134 lines (115 loc) · 4.04 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
124
125
126
127
128
129
130
131
132
133
134
import Test
@testable import SJavaScriptCore
final class SJavaScriptCoreTests: TestCase {
func testEvaluate() {
let context = JSContext()
assertNoThrow(try context.evaluate("40 + 2"))
}
func testException() {
let context = JSContext()
assertThrowsError(try context.evaluate("x()")) { error in
assertEqual("\(error)", "Can't find variable: x")
}
assertThrowsError(try context.evaluate("{")) { error in
assertEqual("\(error)", "Unexpected end of script")
}
}
func testFunction() {
do {
let context = JSContext()
try context.createFunction(name: "test") { (_) -> Value in
return .string("success")
}
let result = try context.evaluate("test()")
assertEqual(try result.toString(), "success")
} catch {
fail(String(describing: error))
}
}
func testClosure() {
do {
let context = JSContext()
try context.createFunction(name: "testUndefined") {
return .undefined
}
let undefinedResult = try context.evaluate("testUndefined()")
assertTrue(undefinedResult.isUndefined)
try context.createFunction(name: "testNull") {
return .null
}
let nullResult = try context.evaluate("testNull()")
assertTrue(nullResult.isNull)
try context.createFunction(name: "testBool") {
return .bool(true)
}
let boolResult = try context.evaluate("testBool()")
assertTrue(boolResult.isBool)
try context.createFunction(name: "testNumber") {
return .number(3.14)
}
let numberResult = try context.evaluate("testNumber()")
assertTrue(numberResult.isNumber)
try context.createFunction(name: "testString") {
return .string("success")
}
let stringResult = try context.evaluate("testString()")
assertTrue(stringResult.isString)
} catch {
fail(String(describing: error))
}
}
func testCapture() {
do {
let context = JSContext()
var captured = false
try context.createFunction(name: "test") { (_) -> Value in
captured = true
return .string("captured")
}
let result = try context.evaluate("test()")
assertTrue(captured)
assertEqual("\(result)", "captured")
} catch {
fail(String(describing: error))
}
}
func testArguments() {
do {
let context = JSContext()
try context.createFunction(name: "test") { (arguments) -> Void in
assertEqual(arguments.count, 2)
assertEqual(try arguments.first?.toString(), "one")
assertEqual(try arguments.last?.toInt(), 42)
}
try context.evaluate("test('one', 42)")
} catch {
fail(String(describing: error))
}
}
func testPersistentContext() {
do {
let context = JSContext()
try context.evaluate("result = 'success'")
assertEqual(try context.evaluate("result").toString(), "success")
try context.createFunction(name: "test") { (arguments) -> Value in
return .string("test ok")
}
assertEqual(try context.evaluate("result").toString(), "success")
} catch {
fail(String(describing: error))
}
}
func testSandbox() {
do {
let context = JSContext()
try context.evaluate("test = 'hello'")
let result = try context.evaluate("test")
assertEqual(try result.toString(), "hello")
} catch {
fail(String(describing: error))
return
}
let context = JSContext()
assertThrowsError(try context.evaluate("test"))
}
}