Skip to content

Commit 75b4020

Browse files
committed
[Tests] Split to independent executables
1 parent 34d5f04 commit 75b4020

File tree

8 files changed

+229
-305
lines changed

8 files changed

+229
-305
lines changed

Package.swift

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,30 @@ let package = Package(
1717
dependencies: []),
1818
.target(
1919
name: "V8",
20-
dependencies: ["CV8", "Platform", "JavaScript"]),
21-
.testTarget(
22-
name: "V8Tests",
23-
dependencies: ["Test", "V8"]),
20+
dependencies: ["CV8", "Platform", "JavaScript"])
2421
],
2522
cxxLanguageStandard: .cxx11
2623
)
2724

25+
// MARK: - tests
26+
27+
testTarget("V8") { test in
28+
test("JavaScript")
29+
test("JSValue")
30+
}
31+
32+
func testTarget(_ target: String, task: ((String) -> Void) -> Void) {
33+
task { test in addTest(target: target, name: test) }
34+
}
35+
36+
func addTest(target: String, name: String) {
37+
package.targets.append(
38+
.executableTarget(
39+
name: "Tests/\(target)/\(name)",
40+
dependencies: ["Test", "V8"],
41+
path: "Tests/\(target)/\(name)"))
42+
}
43+
2844
// MARK: - custom package source
2945

3046
#if canImport(ObjectiveC)

Tests/LinuxMain.swift

Lines changed: 0 additions & 8 deletions
This file was deleted.

Tests/V8/JSValue/main.swift

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import Test
2+
@testable import V8
3+
4+
test.case("isUndefined") {
5+
let context = JSContext()
6+
7+
let result = try context.evaluate("undefined")
8+
expect(result.isUndefined)
9+
expect(!result.isNull)
10+
expect(!result.isBool)
11+
expect(!result.isNumber)
12+
expect(!result.isString)
13+
expect(try result.toString() == "undefined")
14+
}
15+
16+
test.case("isNull") {
17+
let context = JSContext()
18+
let result = try context.evaluate("null")
19+
expect(!result.isUndefined)
20+
expect(result.isNull)
21+
expect(!result.isBool)
22+
expect(!result.isNumber)
23+
expect(!result.isString)
24+
expect(try result.toString() == "null")
25+
}
26+
27+
test.case("isBool") {
28+
let context = JSContext()
29+
let result = try context.evaluate("true")
30+
expect(!result.isUndefined)
31+
expect(!result.isNull)
32+
expect(result.isBool)
33+
expect(!result.isNumber)
34+
expect(!result.isString)
35+
expect(try result.toString() == "true")
36+
// expect(result.toBool(), true)
37+
}
38+
39+
test.case("isNumber") {
40+
let context = JSContext()
41+
let result = try context.evaluate("3.14")
42+
expect(!result.isUndefined)
43+
expect(!result.isNull)
44+
expect(!result.isBool)
45+
expect(result.isNumber)
46+
expect(!result.isString)
47+
expect(try result.toString() == "3.14")
48+
// expect(try result.toDouble(), 3.14)
49+
}
50+
51+
test.case("isString") {
52+
let context = JSContext()
53+
let result = try context.evaluate("'success'")
54+
expect(!result.isUndefined)
55+
expect(!result.isNull)
56+
expect(!result.isBool)
57+
expect(!result.isNumber)
58+
expect(result.isString)
59+
expect(try result.toString() == "success")
60+
}
61+
62+
test.case("toInt()") {
63+
let context = JSContext()
64+
let result = try context.evaluate("40 + 2")
65+
expect(try result.toInt() == 42)
66+
}
67+
68+
test.case("toString()") {
69+
let context = JSContext()
70+
let result = try context.evaluate("40 + 2")
71+
expect(try result.toString() == "42")
72+
}
73+
74+
test.case("property") {
75+
let context = JSContext()
76+
let result = try context.evaluate("""
77+
(function(){
78+
return { property: 'test' }
79+
})()
80+
""")
81+
82+
expect(try result["property"]?.toString() == "test")
83+
}
84+
85+
test.run()

Tests/V8/JavaScript/main.swift

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
import Test
2+
@testable import V8
3+
4+
test.case("evaluate") {
5+
let context = JSContext()
6+
_ = try context.evaluate("40 + 2")
7+
}
8+
9+
test.case("exception") {
10+
let context = JSContext()
11+
expect(throws: JSError("ReferenceError: x is not defined")) {
12+
try context.evaluate("x()")
13+
}
14+
expect(throws: JSError("SyntaxError: Unexpected end of input")) {
15+
try context.evaluate("{")
16+
}
17+
}
18+
19+
test.case("function") {
20+
let context = JSContext()
21+
try context.createFunction(name: "test") { (_) -> Value in
22+
return .string("success")
23+
}
24+
let result = try context.evaluate("test()")
25+
expect(try result.toString() == "success")
26+
}
27+
28+
test.case("closure") {
29+
let context = JSContext()
30+
31+
try context.createFunction(name: "testUndefined") {
32+
return .undefined
33+
}
34+
let undefinedResult = try context.evaluate("testUndefined()")
35+
expect(undefinedResult.isUndefined)
36+
37+
try context.createFunction(name: "testNull") {
38+
return .null
39+
}
40+
let nullResult = try context.evaluate("testNull()")
41+
expect(nullResult.isNull)
42+
43+
try context.createFunction(name: "testBool") {
44+
return .bool(true)
45+
}
46+
let boolResult = try context.evaluate("testBool()")
47+
expect(boolResult.isBool)
48+
49+
try context.createFunction(name: "testNumber") {
50+
return .number(3.14)
51+
}
52+
let numberResult = try context.evaluate("testNumber()")
53+
expect(numberResult.isNumber)
54+
55+
try context.createFunction(name: "testString") {
56+
return .string("success")
57+
}
58+
let stringResult = try context.evaluate("testString()")
59+
expect(stringResult.isString)
60+
}
61+
62+
test.case("capture") {
63+
let context = JSContext()
64+
65+
var captured = false
66+
try context.createFunction(name: "test") { (_) -> Value in
67+
captured = true
68+
return .string("captured")
69+
}
70+
let result = try context.evaluate("test()")
71+
expect(captured)
72+
expect("\(result)" == "captured")
73+
}
74+
75+
test.case("arguments") {
76+
let context = JSContext()
77+
try context.createFunction(name: "test") { (arguments) -> Void in
78+
expect(arguments.count == 2)
79+
expect(try arguments.first?.toString() == "one")
80+
expect(try arguments.last?.toInt() == 42)
81+
}
82+
try context.evaluate("test('one', 42)")
83+
}
84+
85+
test.case("persistent context") {
86+
let context = JSContext()
87+
try context.evaluate("result = 'success'")
88+
expect(try context.evaluate("result").toString() == "success")
89+
90+
try context.createFunction(name: "test") { (arguments) -> Value in
91+
return .string("test ok")
92+
}
93+
94+
expect(try context.evaluate("result").toString() == "success")
95+
}
96+
97+
test.case("sandbox") {
98+
try {
99+
let context = JSContext()
100+
try context.evaluate("test = 'hello'")
101+
let result = try context.evaluate("test")
102+
expect(try result.toString() == "hello")
103+
}()
104+
105+
let context = JSContext()
106+
expect(throws: JSError("test is not defined")) {
107+
try context.evaluate("test")
108+
}
109+
}
110+
111+
test.run()

Tests/V8Tests/JSValueTests.swift

Lines changed: 0 additions & 117 deletions
This file was deleted.

0 commit comments

Comments
 (0)