Browse Source

Refactored tests

Dmitry Panov 3 years ago
parent
commit
bf6af58bbc

+ 4 - 4
array_sparse_test.go

@@ -19,7 +19,7 @@ func TestSparseArraySetLengthWithPropItems(t *testing.T) {
 	thrown && a.length === 3;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestSparseArraySwitch(t *testing.T) {
@@ -139,7 +139,7 @@ func TestSparseArrayOwnKeys(t *testing.T) {
 	keys.length === 1 && keys[0] === "500000"; 
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestSparseArrayEnumerate(t *testing.T) {
@@ -160,7 +160,7 @@ func TestSparseArrayEnumerate(t *testing.T) {
 	seen && count === 1;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestArraySparseMaxLength(t *testing.T) {
@@ -170,7 +170,7 @@ func TestArraySparseMaxLength(t *testing.T) {
 	a.length === 4294967295 && a[4294967294] === 1;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestArraySparseExportProps(t *testing.T) {

+ 1 - 1
array_test.go

@@ -38,7 +38,7 @@ func TestArrayCanonicalIndex(t *testing.T) {
 	}
 	`
 
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func BenchmarkArrayGetStr(b *testing.B) {

+ 15 - 15
builtin_arrray_test.go

@@ -10,7 +10,7 @@ func TestArrayProtoProp(t *testing.T) {
 	a[0]
 	`
 
-	testScript1(SCRIPT, valueInt(42), t)
+	testScript(SCRIPT, valueInt(42), t)
 }
 
 func TestArrayDelete(t *testing.T) {
@@ -23,7 +23,7 @@ func TestArrayDelete(t *testing.T) {
 	deleted && undef && len === 2;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestArrayDeleteNonexisting(t *testing.T) {
@@ -33,7 +33,7 @@ func TestArrayDeleteNonexisting(t *testing.T) {
 	delete a[0] && a[0] === 42;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestArraySetLength(t *testing.T) {
@@ -50,7 +50,7 @@ func TestArraySetLength(t *testing.T) {
 
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestArrayReverseNonOptimisable(t *testing.T) {
@@ -63,7 +63,7 @@ func TestArrayReverseNonOptimisable(t *testing.T) {
 	a.length === 2 && a[0] === 44 && a[1] === 42;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestArrayPushNonOptimisable(t *testing.T) {
@@ -79,7 +79,7 @@ func TestArrayPushNonOptimisable(t *testing.T) {
 	thrown;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestArraySetLengthWithPropItems(t *testing.T) {
@@ -96,7 +96,7 @@ func TestArraySetLengthWithPropItems(t *testing.T) {
 	thrown && a.length === 3;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestArrayFrom(t *testing.T) {
@@ -165,7 +165,7 @@ func TestArrayFrom(t *testing.T) {
 
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestArrayOf(t *testing.T) {
@@ -204,7 +204,7 @@ func TestArrayOf(t *testing.T) {
 
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestUnscopables(t *testing.T) {
@@ -217,7 +217,7 @@ func TestUnscopables(t *testing.T) {
 	}
 	_length === 0 && keys.length === 1 && keys[0] === "something";
 	`
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestArraySort(t *testing.T) {
@@ -229,7 +229,7 @@ func TestArraySort(t *testing.T) {
 		[1,2].sort({});
 	}, "non-callable compare function");
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestArraySortNonStdArray(t *testing.T) {
@@ -261,7 +261,7 @@ func TestArraySortNonStdArray(t *testing.T) {
 	assert.sameValue(array[2], undefined);
 	assert.sameValue(array.length, 4);
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestArrayConcat(t *testing.T) {
@@ -295,7 +295,7 @@ func TestArrayConcat(t *testing.T) {
 	}
 	assert.sameValue(array.concat().foo, 1, '@@species');
 	`
-	testScript1(TESTLIBX+SCRIPT, _undefined, t)
+	testScriptWithTestLibX(SCRIPT, _undefined, t)
 }
 
 func TestArrayFlat(t *testing.T) {
@@ -307,7 +307,7 @@ func TestArrayFlat(t *testing.T) {
 	assert(deepEqual(array.flat(4), [1,2,3,4,5,6,7,8,9]), '#4');
 	assert(deepEqual(array.flat(10), [1,2,3,4,5,6,7,8,9]), '#5');
 	`
-	testScript1(TESTLIBX+SCRIPT, _undefined, t)
+	testScriptWithTestLibX(SCRIPT, _undefined, t)
 }
 
 func TestArrayFlatMap(t *testing.T) {
@@ -321,5 +321,5 @@ func TestArrayFlatMap(t *testing.T) {
 	var array = [1, [2,3,[4,5,6]], [[[[7,8,9]]]]];
 	assert(deepEqual(array.flatMap(double), [2,2,3,[4,5,6],[[[7,8,9]]]]), '#1');
 	`
-	testScript1(TESTLIBX+SCRIPT, _undefined, t)
+	testScriptWithTestLibX(SCRIPT, _undefined, t)
 }

+ 2 - 2
builtin_global_test.go

@@ -9,7 +9,7 @@ func TestEncodeURI(t *testing.T) {
 	encodeURI('тест')
 	`
 
-	testScript1(SCRIPT, asciiString("%D1%82%D0%B5%D1%81%D1%82"), t)
+	testScript(SCRIPT, asciiString("%D1%82%D0%B5%D1%81%D1%82"), t)
 }
 
 func TestDecodeURI(t *testing.T) {
@@ -17,5 +17,5 @@ func TestDecodeURI(t *testing.T) {
 	decodeURI("http://ru.wikipedia.org/wiki/%d0%ae%D0%bd%D0%B8%D0%BA%D0%BE%D0%B4")
 	`
 
-	testScript1(SCRIPT, newStringValue("http://ru.wikipedia.org/wiki/Юникод"), t)
+	testScript(SCRIPT, newStringValue("http://ru.wikipedia.org/wiki/Юникод"), t)
 }

+ 2 - 2
builtin_json_test.go

@@ -58,11 +58,11 @@ func TestJSONParseReviver(t *testing.T) {
 	 })["p"]
 	`
 
-	testScript1(SCRIPT, intToValue(10), t)
+	testScript(SCRIPT, intToValue(10), t)
 }
 
 func TestQuoteMalformedSurrogatePair(t *testing.T) {
-	testScript1(`JSON.stringify("\uD800")`, asciiString(`"\ud800"`), t)
+	testScript(`JSON.stringify("\uD800")`, asciiString(`"\ud800"`), t)
 }
 
 func BenchmarkJSONStringify(b *testing.B) {

+ 1 - 1
builtin_map_test.go

@@ -58,7 +58,7 @@ func TestMapEvilIterator(t *testing.T) {
 
 	undefined;
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func BenchmarkMapDelete(b *testing.B) {

+ 44 - 56
builtin_proxy_test.go

@@ -14,7 +14,7 @@ func TestProxy_Object_target_getPrototypeOf(t *testing.T) {
 	assert.sameValue(proto, p);
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestProxy_Object_proxy_getPrototypeOf(t *testing.T) {
@@ -31,7 +31,7 @@ func TestProxy_Object_proxy_getPrototypeOf(t *testing.T) {
 	assert.sameValue(proto2, p);
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestProxy_Object_native_proxy_getPrototypeOf(t *testing.T) {
@@ -53,10 +53,7 @@ func TestProxy_Object_native_proxy_getPrototypeOf(t *testing.T) {
 	})
 	runtime.Set("proxy", proxy)
 
-	_, err := runtime.RunString(TESTLIB + SCRIPT)
-	if err != nil {
-		t.Fatal(err)
-	}
+	runtime.testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestProxy_Object_target_setPrototypeOf(t *testing.T) {
@@ -69,7 +66,7 @@ func TestProxy_Object_target_setPrototypeOf(t *testing.T) {
 	assert.sameValue(proto, p);
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestProxy_Object_proxy_setPrototypeOf(t *testing.T) {
@@ -88,7 +85,7 @@ func TestProxy_Object_proxy_setPrototypeOf(t *testing.T) {
 	assert.sameValue(proto2, p);
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestProxy_Object_target_isExtensible(t *testing.T) {
@@ -99,7 +96,7 @@ func TestProxy_Object_target_isExtensible(t *testing.T) {
 	Object.isExtensible(proxy);
 	`
 
-	testScript1(SCRIPT, valueFalse, t)
+	testScript(SCRIPT, valueFalse, t)
 }
 
 func TestProxy_proxy_isExtensible(t *testing.T) {
@@ -114,7 +111,7 @@ func TestProxy_proxy_isExtensible(t *testing.T) {
 	Object.isExtensible(proxy);
 	`
 
-	testScript1(SCRIPT, valueFalse, t)
+	testScript(SCRIPT, valueFalse, t)
 }
 
 func TestProxy_native_proxy_isExtensible(t *testing.T) {
@@ -156,7 +153,7 @@ func TestProxy_Object_target_preventExtensions(t *testing.T) {
 	proxy.canEvolve
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestProxy_proxy_preventExtensions(t *testing.T) {
@@ -175,7 +172,7 @@ func TestProxy_proxy_preventExtensions(t *testing.T) {
 	proxy.canEvolve;
 	`
 
-	testScript1(SCRIPT, valueFalse, t)
+	testScript(SCRIPT, valueFalse, t)
 }
 
 func TestProxy_native_proxy_preventExtensions(t *testing.T) {
@@ -231,7 +228,7 @@ func TestProxy_Object_target_getOwnPropertyDescriptor(t *testing.T) {
 	desc2.value
 	`
 
-	testScript1(SCRIPT, valueInt(42), t)
+	testScript(SCRIPT, valueInt(42), t)
 }
 
 func TestProxy_proxy_getOwnPropertyDescriptor(t *testing.T) {
@@ -264,7 +261,7 @@ func TestProxy_proxy_getOwnPropertyDescriptor(t *testing.T) {
 	undefined;
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestProxy_native_proxy_getOwnPropertyDescriptor(t *testing.T) {
@@ -372,7 +369,7 @@ func TestProxy_native_proxy_getOwnPropertyDescriptorIdx(t *testing.T) {
 	vm.Set("proxy1", proxy1)
 	vm.Set("proxy2", proxy2)
 	vm.Set("proxy3", proxy3)
-	_, err := vm.RunString(TESTLIBX + `
+	vm.testScriptWithTestLibX(`
 	var desc;
 	for (var i = -1; i <= 1; i++) {
 		desc = Object.getOwnPropertyDescriptor(proxy1, i);
@@ -392,10 +389,7 @@ func TestProxy_native_proxy_getOwnPropertyDescriptorIdx(t *testing.T) {
 		desc = Object.getOwnPropertyDescriptor(proxy3, prop);
 		assert(deepEqual(desc, {value: prop, writable: false, enumerable: false, configurable: true}), "3. "+prop);
 	}
-	`)
-	if err != nil {
-		t.Fatal(err)
-	}
+	`, _undefined, t)
 }
 
 func TestProxy_native_proxy_getOwnPropertyDescriptorSym(t *testing.T) {
@@ -420,14 +414,11 @@ func TestProxy_native_proxy_getOwnPropertyDescriptorSym(t *testing.T) {
 	})
 
 	vm.Set("proxy", proxy)
-	_, err := vm.RunString(TESTLIBX + `
+	vm.testScriptWithTestLibX(`
 	var desc = Object.getOwnPropertyDescriptor(proxy, sym);
 	assert(deepEqual(desc, {value: "passed", writable: true, enumerable: false, configurable: true}));
 	assert.sameValue(Object.getOwnPropertyDescriptor(proxy, Symbol.iterator), undefined);
-	`)
-	if err != nil {
-		t.Fatal(err)
-	}
+	`, _undefined, t)
 }
 
 func TestProxy_native_proxy_getOwnPropertyDescriptor_non_existing(t *testing.T) {
@@ -457,7 +448,7 @@ func TestProxy_Object_target_defineProperty(t *testing.T) {
 	proxy.foo;
 	`
 
-	testScript1(SCRIPT, asciiString("test123"), t)
+	testScript(SCRIPT, asciiString("test123"), t)
 }
 
 func TestProxy_proxy_defineProperty(t *testing.T) {
@@ -475,7 +466,7 @@ func TestProxy_proxy_defineProperty(t *testing.T) {
 	proxy.foo;
 	`
 
-	testScript1(SCRIPT, asciiString("321tset"), t)
+	testScript(SCRIPT, asciiString("321tset"), t)
 }
 
 func TestProxy_native_proxy_defineProperty(t *testing.T) {
@@ -514,10 +505,7 @@ func TestProxy_native_proxy_defineProperty(t *testing.T) {
 	})
 	runtime.Set("proxy", proxy)
 
-	_, err := runtime.RunString(TESTLIB + SCRIPT)
-	if err != nil {
-		t.Fatal(err)
-	}
+	runtime.testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestProxy_target_has_in(t *testing.T) {
@@ -530,7 +518,7 @@ func TestProxy_target_has_in(t *testing.T) {
 	"secret" in proxy
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestProxy_proxy_has_in(t *testing.T) {
@@ -547,7 +535,7 @@ func TestProxy_proxy_has_in(t *testing.T) {
 	"secret" in proxy
 	`
 
-	testScript1(SCRIPT, valueFalse, t)
+	testScript(SCRIPT, valueFalse, t)
 }
 
 func TestProxy_target_has_with(t *testing.T) {
@@ -562,7 +550,7 @@ func TestProxy_target_has_with(t *testing.T) {
 	}
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestProxy_proxy_has_with(t *testing.T) {
@@ -591,7 +579,7 @@ func TestProxy_proxy_has_with(t *testing.T) {
 	thrown;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestProxy_target_get(t *testing.T) {
@@ -604,7 +592,7 @@ func TestProxy_target_get(t *testing.T) {
 	proxy.foo;
 	`
 
-	testScript1(SCRIPT, asciiString("test123"), t)
+	testScript(SCRIPT, asciiString("test123"), t)
 }
 
 func TestProxy_proxy_get(t *testing.T) {
@@ -622,7 +610,7 @@ func TestProxy_proxy_get(t *testing.T) {
 	proxy.foo;
 	`
 
-	testScript1(SCRIPT, asciiString("321tset"), t)
+	testScript(SCRIPT, asciiString("321tset"), t)
 }
 
 func TestProxy_proxy_get_json_stringify(t *testing.T) {
@@ -658,7 +646,7 @@ func TestProxy_proxy_get_json_stringify(t *testing.T) {
 	assert.sameValue(_receiver, proxy);
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestProxy_native_proxy_get(t *testing.T) {
@@ -816,7 +804,7 @@ func TestProxy_target_set_prop(t *testing.T) {
 	proxy.foo;
 	`
 
-	testScript1(SCRIPT, asciiString("test123"), t)
+	testScript(SCRIPT, asciiString("test123"), t)
 }
 
 func TestProxy_proxy_set_prop(t *testing.T) {
@@ -832,7 +820,7 @@ func TestProxy_proxy_set_prop(t *testing.T) {
 	proxy.foo;
 	`
 
-	testScript1(SCRIPT, asciiString("321tset"), t)
+	testScript(SCRIPT, asciiString("321tset"), t)
 }
 func TestProxy_target_set_associative(t *testing.T) {
 	const SCRIPT = `
@@ -842,7 +830,7 @@ func TestProxy_target_set_associative(t *testing.T) {
 	proxy.foo;
 	`
 
-	testScript1(SCRIPT, asciiString("test123"), t)
+	testScript(SCRIPT, asciiString("test123"), t)
 }
 
 func TestProxy_proxy_set_associative(t *testing.T) {
@@ -858,7 +846,7 @@ func TestProxy_proxy_set_associative(t *testing.T) {
 	proxy.foo;
 	`
 
-	testScript1(SCRIPT, asciiString("321tset"), t)
+	testScript(SCRIPT, asciiString("321tset"), t)
 }
 
 func TestProxy_target_delete(t *testing.T) {
@@ -872,7 +860,7 @@ func TestProxy_target_delete(t *testing.T) {
 	proxy.foo;
 	`
 
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestProxy_proxy_delete(t *testing.T) {
@@ -890,7 +878,7 @@ func TestProxy_proxy_delete(t *testing.T) {
 	proxy.foo;
 	`
 
-	testScript1(SCRIPT, asciiString("test"), t)
+	testScript(SCRIPT, asciiString("test"), t)
 }
 
 func TestProxy_native_delete(t *testing.T) {
@@ -994,7 +982,7 @@ func TestProxy_target_keys(t *testing.T) {
 	}
 	`
 
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestProxy_proxy_keys(t *testing.T) {
@@ -1017,7 +1005,7 @@ func TestProxy_proxy_keys(t *testing.T) {
 	}
 	`
 
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestProxy_target_call(t *testing.T) {
@@ -1031,7 +1019,7 @@ func TestProxy_target_call(t *testing.T) {
 	proxy();
 	`
 
-	testScript1(SCRIPT, asciiString("test"), t)
+	testScript(SCRIPT, asciiString("test"), t)
 }
 
 func TestProxy_proxy_call(t *testing.T) {
@@ -1049,7 +1037,7 @@ func TestProxy_proxy_call(t *testing.T) {
 	proxy();
 	`
 
-	testScript1(SCRIPT, asciiString("tset"), t)
+	testScript(SCRIPT, asciiString("tset"), t)
 }
 
 func TestProxy_target_func_apply(t *testing.T) {
@@ -1063,7 +1051,7 @@ func TestProxy_target_func_apply(t *testing.T) {
 	proxy.apply();
 	`
 
-	testScript1(SCRIPT, asciiString("test"), t)
+	testScript(SCRIPT, asciiString("test"), t)
 }
 
 func TestProxy_proxy_func_apply(t *testing.T) {
@@ -1081,7 +1069,7 @@ func TestProxy_proxy_func_apply(t *testing.T) {
 	proxy.apply();
 	`
 
-	testScript1(SCRIPT, asciiString("tset"), t)
+	testScript(SCRIPT, asciiString("tset"), t)
 }
 
 func TestProxy_target_func_call(t *testing.T) {
@@ -1095,7 +1083,7 @@ func TestProxy_target_func_call(t *testing.T) {
 	proxy.call();
 	`
 
-	testScript1(SCRIPT, asciiString("test"), t)
+	testScript(SCRIPT, asciiString("test"), t)
 }
 
 func TestProxy_proxy_func_call(t *testing.T) {
@@ -1113,7 +1101,7 @@ func TestProxy_proxy_func_call(t *testing.T) {
 	proxy.call();
 	`
 
-	testScript1(SCRIPT, asciiString("tset"), t)
+	testScript(SCRIPT, asciiString("tset"), t)
 }
 
 func TestProxy_target_new(t *testing.T) {
@@ -1130,7 +1118,7 @@ func TestProxy_target_new(t *testing.T) {
 	instance.foo();
 	`
 
-	testScript1(SCRIPT, asciiString("test"), t)
+	testScript(SCRIPT, asciiString("test"), t)
 }
 
 func TestProxy_proxy_new(t *testing.T) {
@@ -1156,7 +1144,7 @@ func TestProxy_proxy_new(t *testing.T) {
 	instance.foo();
 	`
 
-	testScript1(SCRIPT, asciiString("caught-test"), t)
+	testScript(SCRIPT, asciiString("caught-test"), t)
 }
 
 func TestProxy_Object_native_proxy_ownKeys(t *testing.T) {
@@ -1236,7 +1224,7 @@ func TestProxy_proxy_forIn(t *testing.T) {
 	forInResult.length === 3 && forInResult[0] === "a" && forInResult[1] === "b" && forInResult[2] === "protoProp";
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestProxyExport(t *testing.T) {
@@ -1263,7 +1251,7 @@ func TestProxy_proxy_createTargetNotCallable(t *testing.T) {
 	});
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestProxyEnumerableSymbols(t *testing.T) {
@@ -1283,5 +1271,5 @@ func TestProxyEnumerableSymbols(t *testing.T) {
 	compareArray(getOwnKeys, ownKeysResult);
 	`
 
-	testScript1(TESTLIB+SCRIPT, valueTrue, t)
+	testScriptWithTestLib(SCRIPT, valueTrue, t)
 }

+ 1 - 1
builtin_set_test.go

@@ -19,5 +19,5 @@ func TestSetEvilIterator(t *testing.T) {
 	new Set(o);
 	undefined;
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }

+ 5 - 5
builtin_string_test.go

@@ -86,7 +86,7 @@ assert.sameValue('A—', String.fromCharCode(65, 0x2014));
 
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestStringMatchSym(t *testing.T) {
@@ -105,7 +105,7 @@ var prefix2 = new Prefix("def");
 "abc123".match(prefix1) === true && "abc123".match(prefix2) === false &&
 "def123".match(prefix1) === false && "def123".match(prefix2) === true;
 `
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestStringMatchAllSym(t *testing.T) {
@@ -124,7 +124,7 @@ var prefix2 = new Prefix("def");
 "abc123".matchAll(prefix1) === true && "abc123".matchAll(prefix2) === false &&
 "def123".matchAll(prefix1) === false && "def123".matchAll(prefix2) === true;
 `
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestGenericSplitter(t *testing.T) {
@@ -162,7 +162,7 @@ var r = new MyRegexp(/ /);
 var res = "a b c".split(r);
 res.length === 3 && res[0] === "a" && res[1] === "b" && res[2] === "c";
 `
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestStringIterSurrPair(t *testing.T) {
@@ -184,7 +184,7 @@ if (result.value !== pair) {
 }
 
 `
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestValueStringBuilder(t *testing.T) {

+ 18 - 18
builtin_typedarrays_test.go

@@ -11,7 +11,7 @@ func TestArrayBufferNew(t *testing.T) {
 	b.byteLength;
 	`
 
-	testScript1(SCRIPT, intToValue(16), t)
+	testScript(SCRIPT, intToValue(16), t)
 }
 */
 
@@ -59,7 +59,7 @@ func TestNewUint8Array(t *testing.T) {
 	a.byteLength === 1 && a.length === 1 && a[0] === 42;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestNewUint16Array(t *testing.T) {
@@ -69,7 +69,7 @@ func TestNewUint16Array(t *testing.T) {
 	a.byteLength === 2 && a.length === 1 && a[0] === 42;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestTypedArraysSpeciesConstructor(t *testing.T) {
@@ -103,7 +103,7 @@ func TestTypedArraysSpeciesConstructor(t *testing.T) {
 	}
 	`
 
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArrayFromArrayBuffer(t *testing.T) {
@@ -126,7 +126,7 @@ func TestTypedArrayFromArrayBuffer(t *testing.T) {
 	}
 	`
 
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArraySetOverlapDifSize(t *testing.T) {
@@ -141,7 +141,7 @@ func TestTypedArraySetOverlapDifSize(t *testing.T) {
 		throw new Error("dst: " + dst.join(","));
 	}	
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArraySetOverlapDifSize2(t *testing.T) {
@@ -156,7 +156,7 @@ func TestTypedArraySetOverlapDifSize2(t *testing.T) {
 		throw new Error("dst: " + dst.join(","));
 	}	
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArraySetOverlapDifSize3(t *testing.T) {
@@ -173,7 +173,7 @@ func TestTypedArraySetOverlapDifSize3(t *testing.T) {
 		throw new Error("dst: " + dst.join(","));
 	}	
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArraySetOverlapDifSize4(t *testing.T) {
@@ -191,7 +191,7 @@ func TestTypedArraySetOverlapDifSize4(t *testing.T) {
 		throw new Error("dst: " + dst.join(","));
 	}	
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArraySetNoOverlapDifSizeForward(t *testing.T) {
@@ -206,7 +206,7 @@ func TestTypedArraySetNoOverlapDifSizeForward(t *testing.T) {
 		throw new Error("dst: " + dst.join(","));
 	}	
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArraySetNoOverlapDifSizeBackward(t *testing.T) {
@@ -221,7 +221,7 @@ func TestTypedArraySetNoOverlapDifSizeBackward(t *testing.T) {
 		throw new Error("dst: " + dst.join(","));
 	}	
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArraySetNoOverlapDifSizeDifBuffers(t *testing.T) {
@@ -236,7 +236,7 @@ func TestTypedArraySetNoOverlapDifSizeDifBuffers(t *testing.T) {
 		throw new Error("dst: " + dst.join(","));
 	}	
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArraySliceSameType(t *testing.T) {
@@ -247,7 +247,7 @@ func TestTypedArraySliceSameType(t *testing.T) {
 		throw new Error("dst: " + dst.join(","));
 	}	
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArraySliceDifType(t *testing.T) {
@@ -262,7 +262,7 @@ func TestTypedArraySliceDifType(t *testing.T) {
 		throw new Error("dst: " + dst.join(","));
 	}	
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArraySortComparatorReturnValueFloats(t *testing.T) {
@@ -281,7 +281,7 @@ func TestTypedArraySortComparatorReturnValueFloats(t *testing.T) {
 		}
 	}
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArraySortComparatorReturnValueNegZero(t *testing.T) {
@@ -294,7 +294,7 @@ func TestTypedArraySortComparatorReturnValueNegZero(t *testing.T) {
 		}
 	}
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestInt32ArrayNegativeIndex(t *testing.T) {
@@ -302,7 +302,7 @@ func TestInt32ArrayNegativeIndex(t *testing.T) {
 	new Int32Array()[-1] === undefined;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestTypedArrayDeleteUnconfigurable(t *testing.T) {
@@ -322,5 +322,5 @@ func TestTypedArrayDeleteUnconfigurable(t *testing.T) {
 	}
 	`
 
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }

+ 3 - 3
builtin_weakset_test.go

@@ -17,7 +17,7 @@ func TestWeakSetBasic(t *testing.T) {
 		throw new Error("still has");
 	}
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestWeakSetArraySimple(t *testing.T) {
@@ -27,7 +27,7 @@ func TestWeakSetArraySimple(t *testing.T) {
 	var s = new WeakSet([o1, o2, o3]);
 	s.has(o1) && s.has(o2) && s.has(o3);
 	`
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestWeakSetArrayGeneric(t *testing.T) {
@@ -59,5 +59,5 @@ func TestWeakSetArrayGeneric(t *testing.T) {
 	s = new WeakSet(a);
 	s.has(o1) && s.has(o2) && s.has(o3);
 	`
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }

File diff suppressed because it is too large
+ 270 - 123
compiler_test.go


+ 11 - 136
date_test.go

@@ -5,131 +5,6 @@ import (
 	"time"
 )
 
-const TESTLIB = `
-function $ERROR(message) {
-	throw new Error(message);
-}
-
-function Test262Error() {
-}
-
-function assert(mustBeTrue, message) {
-    if (mustBeTrue === true) {
-        return;
-    }
-
-    if (message === undefined) {
-        message = 'Expected true but got ' + String(mustBeTrue);
-    }
-    $ERROR(message);
-}
-
-assert._isSameValue = function (a, b) {
-    if (a === b) {
-        // Handle +/-0 vs. -/+0
-        return a !== 0 || 1 / a === 1 / b;
-    }
-
-    // Handle NaN vs. NaN
-    return a !== a && b !== b;
-};
-
-assert.sameValue = function (actual, expected, message) {
-    if (assert._isSameValue(actual, expected)) {
-        return;
-    }
-
-    if (message === undefined) {
-        message = '';
-    } else {
-        message += ' ';
-    }
-
-    message += 'Expected SameValue(«' + String(actual) + '», «' + String(expected) + '») to be true';
-
-    $ERROR(message);
-};
-
-assert.throws = function (expectedErrorConstructor, func, message) {
-  if (typeof func !== "function") {
-    $ERROR('assert.throws requires two arguments: the error constructor ' +
-      'and a function to run');
-    return;
-  }
-  if (message === undefined) {
-    message = '';
-  } else {
-    message += ' ';
-  }
-
-  try {
-    func();
-  } catch (thrown) {
-    if (typeof thrown !== 'object' || thrown === null) {
-      message += 'Thrown value was not an object!';
-      $ERROR(message);
-    } else if (thrown.constructor !== expectedErrorConstructor) {
-      message += 'Expected a ' + expectedErrorConstructor.name + ' but got a ' + thrown.constructor.name;
-      $ERROR(message);
-    }
-    return;
-  }
-
-  message += 'Expected a ' + expectedErrorConstructor.name + ' to be thrown but no exception was thrown at all';
-  $ERROR(message);
-};
-
-function compareArray(a, b) {
-  if (b.length !== a.length) {
-    return false;
-  }
-
-  for (var i = 0; i < a.length; i++) {
-    if (b[i] !== a[i]) {
-      return false;
-    }
-  }
-  return true;
-}
-`
-
-const TESTLIBX = TESTLIB +
-	`function looksNative(fn) {
-		return /native code/.test(Function.prototype.toString.call(fn));
-	}
-
-	function deepEqual(a, b) {
-		if (typeof a === "object") {
-			if (typeof b === "object") {
-				if (a === b) {
-					return true;
-				}
-				if (Reflect.getPrototypeOf(a) !== Reflect.getPrototypeOf(b)) {
-					return false;
-				}
-				var keysA = Object.keys(a);
-				var keysB = Object.keys(b);
-				if (keysA.length !== keysB.length) {
-					return false;
-				}
-				if (!compareArray(keysA.sort(), keysB.sort())) {
-					return false;
-				}
-				for (var i = 0; i < keysA.length; i++) {
-					var key = keysA[i];
-					if (!deepEqual(a[key], b[key])) {
-						return false;
-					}
-				}
-				return true;
-			} else {
-				return false;
-			}
-		}
-		return assert._isSameValue(a, b);
-	}
-`
-
 func TestDateUTC(t *testing.T) {
 	const SCRIPT = `
 	assert.sameValue(Date.UTC(1970, 0), 0, '1970, 0');
@@ -158,7 +33,7 @@ func TestDateUTC(t *testing.T) {
 
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestNewDate(t *testing.T) {
@@ -167,7 +42,7 @@ func TestNewDate(t *testing.T) {
 	d1.getUTCHours() === 12;
 
 	`
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestNewDate0(t *testing.T) {
@@ -175,7 +50,7 @@ func TestNewDate0(t *testing.T) {
 	(new Date(0)).toUTCString();
 
 	`
-	testScript1(SCRIPT, asciiString("Thu, 01 Jan 1970 00:00:00 GMT"), t)
+	testScript(SCRIPT, asciiString("Thu, 01 Jan 1970 00:00:00 GMT"), t)
 }
 
 func TestSetHour(t *testing.T) {
@@ -205,7 +80,7 @@ func TestSetHour(t *testing.T) {
 	assert.sameValue(d.getSeconds(), 45);
 
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 
 }
 
@@ -232,7 +107,7 @@ func TestSetMinute(t *testing.T) {
 	assert.sameValue(d.getHours(), 13);
 
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 
 }
 
@@ -252,7 +127,7 @@ func TestTimezoneOffset(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	testScript1(SCRIPT, intToValue(-60), t)
+	testScript(SCRIPT, intToValue(-60), t)
 }
 
 func TestDateValueOf(t *testing.T) {
@@ -261,7 +136,7 @@ func TestDateValueOf(t *testing.T) {
 	d9.valueOf();
 	`
 
-	testScript1(SCRIPT, intToValue(1.23e15), t)
+	testScript(SCRIPT, intToValue(1.23e15), t)
 }
 
 func TestDateSetters(t *testing.T) {
@@ -299,7 +174,7 @@ func TestDateSetters(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestDateParse(t *testing.T) {
@@ -383,7 +258,7 @@ func TestDateParse(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestDateMaxValues(t *testing.T) {
@@ -393,7 +268,7 @@ func TestDateMaxValues(t *testing.T) {
 	assert.sameValue((new Date(0)).setUTCMilliseconds(-8.64e15), -8.64e15);
 	assert.sameValue((new Date(0)).setUTCSeconds(-8640000000000), -8.64e15);
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestDateExport(t *testing.T) {
@@ -419,7 +294,7 @@ func TestDateToJSON(t *testing.T) {
 	const SCRIPT = `
 	Date.prototype.toJSON.call({ toISOString: function () { return 1; } })
 	`
-	testScript1(SCRIPT, intToValue(1), t)
+	testScript(SCRIPT, intToValue(1), t)
 }
 
 func TestDateExportType(t *testing.T) {

+ 2 - 2
func_test.go

@@ -19,7 +19,7 @@ func TestFuncProto(t *testing.T) {
 	}
 	thrown;
 	`
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestFuncPrototypeRedefine(t *testing.T) {
@@ -39,5 +39,5 @@ func TestFuncPrototypeRedefine(t *testing.T) {
 	thrown;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }

+ 7 - 16
object_dynamic_test.go

@@ -103,7 +103,7 @@ func TestDynamicObject(t *testing.T) {
 	}
 	o := vm.NewDynamicObject(dynObj)
 	vm.Set("o", o)
-	_, err := vm.RunString(TESTLIBX + `
+	vm.testScriptWithTestLibX(`
 	assert(o instanceof Object, "instanceof Object");
 	assert(o === o, "self equality");
 	assert(o !== {}, "non-equality");
@@ -130,10 +130,7 @@ func TestDynamicObject(t *testing.T) {
 	assert.sameValue(o.__proto__, Object.prototype, "__proto__");
 	o.__proto__ = null;
 	assert(!("__proto__" in o), "__proto__ in o after setting to null");
-	`)
-	if err != nil {
-		t.Fatal(err)
-	}
+	`, _undefined, t)
 }
 
 func TestDynamicObjectCustomProto(t *testing.T) {
@@ -145,7 +142,7 @@ func TestDynamicObjectCustomProto(t *testing.T) {
 	}
 	o := vm.NewDynamicObject(dynObj)
 	vm.Set("o", o)
-	_, err := vm.RunString(TESTLIB + `
+	vm.testScriptWithTestLib(`
 	var proto = {
 		valueOf: function() {
 			return this.num;
@@ -157,10 +154,8 @@ func TestDynamicObjectCustomProto(t *testing.T) {
 	assert(o instanceof Object, "instanceof");
 	assert.sameValue(o+1, 42);
 	assert.sameValue(o.toString(), "[object GoObject]");
-	`)
-	if err != nil {
-		t.Fatal(err)
-	}
+	`, _undefined, t)
+
 	if v := m["num"]; v.Export() != int64(41) {
 		t.Fatal(v)
 	}
@@ -173,7 +168,7 @@ func TestDynamicArray(t *testing.T) {
 	}
 	a := vm.NewDynamicArray(dynObj)
 	vm.Set("a", a)
-	_, err := vm.RunString(TESTLIBX + `
+	vm.testScriptWithTestLibX(`
 	assert(a instanceof Array, "instanceof Array");
 	assert(a instanceof Object, "instanceof Object");
 	assert(a === a, "self equality");
@@ -243,9 +238,5 @@ func TestDynamicArray(t *testing.T) {
 		Object.defineProperty(a, 0, {value: 0, writable: false, enumerable: false, configurable: true});
 	}, "define prop");
 
-	`)
-
-	if err != nil {
-		t.Fatal(err)
-	}
+	`, _undefined, t)
 }

+ 3 - 9
object_gomap_reflect_test.go

@@ -173,7 +173,7 @@ func TestGoMapReflectWithProto(t *testing.T) {
 		"t": "42",
 	}
 	vm.Set("m", m)
-	_, err := vm.RunString(TESTLIB + `
+	vm.testScriptWithTestLib(`
 	(function() {
 	'use strict';
 	var proto = {};
@@ -221,10 +221,7 @@ func TestGoMapReflectWithProto(t *testing.T) {
 	m.t1 = "test2";
 	assert.sameValue(m.t1, "test2");
 	})();
-	`)
-	if err != nil {
-		t.Fatal(err)
-	}
+	`, _undefined, t)
 }
 
 func TestGoMapReflectProtoProp(t *testing.T) {
@@ -244,10 +241,7 @@ func TestGoMapReflectProtoProp(t *testing.T) {
 
 	r := New()
 	r.Set("m", map[string]string{})
-	_, err := r.RunString(TESTLIB + SCRIPT)
-	if err != nil {
-		t.Fatal(err)
-	}
+	r.testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestGoMapReflectUnicode(t *testing.T) {

+ 4 - 13
object_gomap_test.go

@@ -189,7 +189,7 @@ func TestGoMapWithProto(t *testing.T) {
 		"t": "42",
 	}
 	vm.Set("m", m)
-	_, err := vm.RunString(TESTLIB + `
+	vm.testScriptWithTestLib(`
 	(function() {
 	'use strict';
 	var proto = {};
@@ -237,10 +237,7 @@ func TestGoMapWithProto(t *testing.T) {
 	m.t1 = "test2";
 	assert.sameValue(m.t1, "test2");
 	})();
-	`)
-	if err != nil {
-		t.Fatal(err)
-	}
+	`, _undefined, t)
 }
 
 func TestGoMapProtoProp(t *testing.T) {
@@ -260,10 +257,7 @@ func TestGoMapProtoProp(t *testing.T) {
 
 	r := New()
 	r.Set("m", map[string]interface{}{})
-	_, err := r.RunString(TESTLIB + SCRIPT)
-	if err != nil {
-		t.Fatal(err)
-	}
+	r.testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestGoMapProtoPropChain(t *testing.T) {
@@ -301,10 +295,7 @@ func TestGoMapProtoPropChain(t *testing.T) {
 
 	r := New()
 	r.Set("m", map[string]interface{}{})
-	_, err := r.RunString(TESTLIB + SCRIPT)
-	if err != nil {
-		t.Fatal(err)
-	}
+	r.testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestGoMapUnicode(t *testing.T) {

+ 2 - 5
object_goreflect_test.go

@@ -1035,7 +1035,7 @@ func TestGoReflectWithProto(t *testing.T) {
 	var s S
 	vm := New()
 	vm.Set("s", &s)
-	_, err := vm.RunString(TESTLIB + `
+	vm.testScriptWithTestLib(`
 	(function() {
 	'use strict';
 	var proto = {
@@ -1064,10 +1064,7 @@ func TestGoReflectWithProto(t *testing.T) {
 	s.test1 = 2;
 	assert.sameValue(test1Holder, 2, "test1Holder");
 	})();
-	`)
-	if err != nil {
-		t.Fatal(err)
-	}
+	`, _undefined, t)
 }
 
 func TestGoReflectSymbols(t *testing.T) {

+ 2 - 6
object_goslice_reflect_test.go

@@ -234,7 +234,7 @@ func TestGoSliceReflectProto(t *testing.T) {
 	r := New()
 	a := []*Object{{}, nil, {}}
 	r.Set("a", &a)
-	_, err := r.RunString(TESTLIB + `
+	r.testScriptWithTestLib(`
 	var proto = [,2,,4];
 	Object.setPrototypeOf(a, proto);
 	assert.sameValue(a[1], null, "a[1]");
@@ -252,11 +252,7 @@ func TestGoSliceReflectProto(t *testing.T) {
 	});
 	a[5] = "test";
 	assert.sameValue(v5, "test", "v5");
-	`)
-	if err != nil {
-		t.Fatal(err)
-	}
-
+	`, _undefined, t)
 }
 
 func TestGoSliceReflectProtoProto(t *testing.T) {

+ 2 - 6
object_goslice_test.go

@@ -121,7 +121,7 @@ func TestGoSliceProto(t *testing.T) {
 	r := New()
 	a := []interface{}{1, nil, 3}
 	r.Set("a", &a)
-	_, err := r.RunString(TESTLIB + `
+	r.testScriptWithTestLib(`
 	var proto = [,2,,4];
 	Object.setPrototypeOf(a, proto);
 	assert.sameValue(a[1], null, "a[1]");
@@ -139,11 +139,7 @@ func TestGoSliceProto(t *testing.T) {
 	});
 	a[5] = "test";
 	assert.sameValue(v5, "test", "v5");
-	`)
-	if err != nil {
-		t.Fatal(err)
-	}
-
+	`, _undefined, t)
 }
 
 func TestGoSliceProtoProto(t *testing.T) {

+ 6 - 6
object_test.go

@@ -89,7 +89,7 @@ func TestPropertyOrder(t *testing.T) {
 	}
 	`
 
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestDefinePropertiesSymbol(t *testing.T) {
@@ -101,7 +101,7 @@ func TestDefinePropertiesSymbol(t *testing.T) {
 	o[Symbol.toStringTag] === "Test";
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestObjectShorthandProperties(t *testing.T) {
@@ -118,7 +118,7 @@ func TestObjectShorthandProperties(t *testing.T) {
 
 	assert.sameValue(obj['with'](), 42, 'property exists');
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestObjectAssign(t *testing.T) {
@@ -134,7 +134,7 @@ func TestObjectAssign(t *testing.T) {
           delete this.b;
         }, b: 2 }).b, 1, "#2");
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestExportCircular(t *testing.T) {
@@ -307,7 +307,7 @@ func TestSetForeignReturnValue(t *testing.T) {
 	!Reflect.set(arrayTarget, "foo", 2);
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestDefinePropertiesUndefinedVal(t *testing.T) {
@@ -329,7 +329,7 @@ Object.defineProperties({}, proxy);
 	true;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func ExampleObject_Delete() {

+ 43 - 39
regexp_test.go

@@ -11,7 +11,7 @@ func TestRegexp1(t *testing.T) {
 	m !== null && m.length == 3 && m[2] === "test";
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestRegexp2(t *testing.T) {
@@ -21,7 +21,7 @@ func TestRegexp2(t *testing.T) {
 	m !== null && m.length == 3 && m[2] === "test";
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestRegexpLiteral(t *testing.T) {
@@ -31,7 +31,7 @@ func TestRegexpLiteral(t *testing.T) {
 	m !== null && m.length == 3 && m[2] === "test";
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestRegexpRe2Unicode(t *testing.T) {
@@ -41,7 +41,7 @@ func TestRegexpRe2Unicode(t *testing.T) {
 	m !== null && m.length == 2 && m[1] === "Тест";
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestRegexpRe2UnicodeTarget(t *testing.T) {
@@ -51,7 +51,7 @@ func TestRegexpRe2UnicodeTarget(t *testing.T) {
 	m !== null && m.length == 3 && m[2] === "Тест";
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestRegexpRegexp2Unicode(t *testing.T) {
@@ -61,7 +61,7 @@ func TestRegexpRegexp2Unicode(t *testing.T) {
 	m !== null && m.length == 3 && m[2] === "Тест";
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestRegexpRegexp2UnicodeTarget(t *testing.T) {
@@ -71,7 +71,7 @@ func TestRegexpRegexp2UnicodeTarget(t *testing.T) {
 	m !== null && m.length == 3 && m[2] === "Тест";
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestRegexpRe2Whitespace(t *testing.T) {
@@ -79,14 +79,14 @@ func TestRegexpRe2Whitespace(t *testing.T) {
 	"\u2000\u2001\u2002\u200b".replace(/\s+/g, "") === "\u200b";
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestRegexpRegexp2Whitespace(t *testing.T) {
 	const SCRIPT = `
 	"A\u2000\u2001\u2002A\u200b".replace(/(A)\s+\1/g, "") === "\u200b"
 	`
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestEmptyCharClassRe2(t *testing.T) {
@@ -94,7 +94,7 @@ func TestEmptyCharClassRe2(t *testing.T) {
 	/[]/.test("\u0000");
 	`
 
-	testScript1(SCRIPT, valueFalse, t)
+	testScript(SCRIPT, valueFalse, t)
 }
 
 func TestNegatedEmptyCharClassRe2(t *testing.T) {
@@ -102,7 +102,7 @@ func TestNegatedEmptyCharClassRe2(t *testing.T) {
 	/[^]/.test("\u0000");
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestEmptyCharClassRegexp2(t *testing.T) {
@@ -110,7 +110,7 @@ func TestEmptyCharClassRegexp2(t *testing.T) {
 	/([])\1/.test("\u0000\u0000");
 	`
 
-	testScript1(SCRIPT, valueFalse, t)
+	testScript(SCRIPT, valueFalse, t)
 }
 
 func TestRegexp2Negate(t *testing.T) {
@@ -118,7 +118,7 @@ func TestRegexp2Negate(t *testing.T) {
 	/([\D1])\1/.test("aa");
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestAlternativeRe2(t *testing.T) {
@@ -126,7 +126,7 @@ func TestAlternativeRe2(t *testing.T) {
 	/()|/.exec("") !== null;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestRegexpReplaceGlobal(t *testing.T) {
@@ -134,28 +134,28 @@ func TestRegexpReplaceGlobal(t *testing.T) {
 	"QBZPbage\ny_cynprubyqre".replace(/^\s*|\s*$/g, '')
 	`
 
-	testScript1(SCRIPT, asciiString("QBZPbage\ny_cynprubyqre"), t)
+	testScript(SCRIPT, asciiString("QBZPbage\ny_cynprubyqre"), t)
 }
 
 func TestRegexpNumCaptures(t *testing.T) {
 	const SCRIPT = `
 	"Fubpxjnir Synfu 9.0  e115".replace(/([a-zA-Z]|\s)+/, '')
 	`
-	testScript1(SCRIPT, asciiString("9.0  e115"), t)
+	testScript(SCRIPT, asciiString("9.0  e115"), t)
 }
 
 func TestRegexpNumCaptures1(t *testing.T) {
 	const SCRIPT = `
 	"Fubpxjnir Sy\tfu 9.0  e115".replace(/^.*\s+(\S+\s+\S+$)/, '')
 	`
-	testScript1(SCRIPT, asciiString(""), t)
+	testScript(SCRIPT, asciiString(""), t)
 }
 
 func TestRegexpSInClass(t *testing.T) {
 	const SCRIPT = `
 	/[\S]/.test("\u2028");
 	`
-	testScript1(SCRIPT, valueFalse, t)
+	testScript(SCRIPT, valueFalse, t)
 }
 
 func TestRegexpDotMatchCR(t *testing.T) {
@@ -163,7 +163,7 @@ func TestRegexpDotMatchCR(t *testing.T) {
 	/./.test("\r");
 	`
 
-	testScript1(SCRIPT, valueFalse, t)
+	testScript(SCRIPT, valueFalse, t)
 }
 
 func TestRegexpDotMatchCRInGroup(t *testing.T) {
@@ -171,7 +171,7 @@ func TestRegexpDotMatchCRInGroup(t *testing.T) {
 	/(.)/.test("\r");
 	`
 
-	testScript1(SCRIPT, valueFalse, t)
+	testScript(SCRIPT, valueFalse, t)
 }
 
 func TestRegexpDotMatchLF(t *testing.T) {
@@ -179,7 +179,7 @@ func TestRegexpDotMatchLF(t *testing.T) {
 	/./.test("\n");
 	`
 
-	testScript1(SCRIPT, valueFalse, t)
+	testScript(SCRIPT, valueFalse, t)
 }
 
 func TestRegexpSplitWithBackRef(t *testing.T) {
@@ -187,7 +187,7 @@ func TestRegexpSplitWithBackRef(t *testing.T) {
 	"a++b+-c".split(/([+-])\1/).join(" $$ ")
 	`
 
-	testScript1(SCRIPT, asciiString("a $$ + $$ b+-c"), t)
+	testScript(SCRIPT, asciiString("a $$ + $$ b+-c"), t)
 }
 
 func TestEscapeNonASCII(t *testing.T) {
@@ -195,7 +195,7 @@ func TestEscapeNonASCII(t *testing.T) {
 	/\⩓/.test("⩓")
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestRegexpUTF16(t *testing.T) {
@@ -228,7 +228,7 @@ func TestRegexpUTF16(t *testing.T) {
 	assert(pattern.test("a\\\uD800"), "#12");
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestRegexpUnicode(t *testing.T) {
@@ -256,7 +256,7 @@ func TestRegexpUnicode(t *testing.T) {
 	}*/
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestConvertRegexpToUnicode(t *testing.T) {
@@ -324,7 +324,7 @@ func TestRegexpAssertion(t *testing.T) {
 	var res = 'aaa'.match(/^a/g);
 	res.length === 1 || res[0] === 'a';
 	`
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestRegexpUnicodeAdvanceStringIndex(t *testing.T) {
@@ -364,14 +364,14 @@ func TestRegexpUnicodeAdvanceStringIndex(t *testing.T) {
 	assert.sameValue(matches[3].index, 4, "#10 index");
 	assert.sameValue(matches[3][0], "", "#10 value");
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestRegexpInit(t *testing.T) {
 	const SCRIPT = `
 	RegExp(".").lastIndex;
 	`
-	testScript1(SCRIPT, intToValue(0), t)
+	testScript(SCRIPT, intToValue(0), t)
 }
 
 func TestRegexpToString(t *testing.T) {
@@ -380,14 +380,14 @@ func TestRegexpToString(t *testing.T) {
 	source: 'foo',
     flags: 'bar'});
 	`
-	testScript1(SCRIPT, asciiString("/foo/bar"), t)
+	testScript(SCRIPT, asciiString("/foo/bar"), t)
 }
 
 func TestRegexpEscapeSource(t *testing.T) {
 	const SCRIPT = `
 	/href="(.+?)(\/.*\/\S+?)\/"/.source;
 	`
-	testScript1(SCRIPT, asciiString(`href="(.+?)(\/.*\/\S+?)\/"`), t)
+	testScript(SCRIPT, asciiString(`href="(.+?)(\/.*\/\S+?)\/"`), t)
 }
 
 func TestRegexpConsecutiveMatchCache(t *testing.T) {
@@ -454,7 +454,9 @@ func TestRegexpConsecutiveMatchCache(t *testing.T) {
 	});
 	`
 	vm := New()
-	v, err := vm.RunString(TESTLIBX + SCRIPT)
+	_, _ = vm.RunProgram(testLib())
+	_, _ = vm.RunProgram(testLibX())
+	v, err := vm.RunString(SCRIPT)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -560,7 +562,9 @@ func TestRegexpMatchAll(t *testing.T) {
 	});
 	`
 	vm := New()
-	v, err := vm.RunString(TESTLIBX + SCRIPT)
+	_, _ = vm.RunProgram(testLib())
+	_, _ = vm.RunProgram(testLibX())
+	v, err := vm.RunString(SCRIPT)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -598,7 +602,7 @@ func TestRegexpOverrideSpecies(t *testing.T) {
 		}
 	}
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestRegexpSymbolMatchAllCallsIsRegexp(t *testing.T) {
@@ -619,7 +623,7 @@ func TestRegexpSymbolMatchAllCallsIsRegexp(t *testing.T) {
 		}
 	}
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestRegexpMatchAllConstructor(t *testing.T) {
@@ -652,15 +656,15 @@ func TestRegexpMatchAllConstructor(t *testing.T) {
 	var second = iter.next()
 	assert.sameValue(second.done, true);
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestRegexp2InvalidEscape(t *testing.T) {
-	testScript1(`/(?=)\x0/.test("x0")`, valueTrue, t)
+	testScript(`/(?=)\x0/.test("x0")`, valueTrue, t)
 }
 
 func TestRegexpUnicodeEmptyMatch(t *testing.T) {
-	testScript1(`/(0)0|/gu.exec("0\xef").length === 2`, valueTrue, t)
+	testScript(`/(0)0|/gu.exec("0\xef").length === 2`, valueTrue, t)
 }
 
 func TestRegexpInvalidGroup(t *testing.T) {
@@ -669,7 +673,7 @@ func TestRegexpInvalidGroup(t *testing.T) {
 		assert.throws(SyntaxError, function() {new RegExp(s)}, s);
 	});
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestRegexpLookbehindAssertion(t *testing.T) {
@@ -682,7 +686,7 @@ func TestRegexpLookbehindAssertion(t *testing.T) {
 	assert(re.test("3"), "#3");
 	assert(!re.test("-3"), "#4");
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestRegexpInvalidUTF8(t *testing.T) {

+ 45 - 45
runtime_test.go

@@ -19,7 +19,7 @@ func TestGlobalObjectProto(t *testing.T) {
 	this instanceof Object
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestUnicodeString(t *testing.T) {
@@ -29,7 +29,7 @@ func TestUnicodeString(t *testing.T) {
 
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func Test2TierHierarchyProp(t *testing.T) {
@@ -48,7 +48,7 @@ func Test2TierHierarchyProp(t *testing.T) {
 
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestConstStringIter(t *testing.T) {
@@ -65,7 +65,7 @@ func TestConstStringIter(t *testing.T) {
 	count;
 	`
 
-	testScript1(SCRIPT, intToValue(28), t)
+	testScript(SCRIPT, intToValue(28), t)
 }
 
 func TestUnicodeConcat(t *testing.T) {
@@ -80,7 +80,7 @@ func TestUnicodeConcat(t *testing.T) {
 
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestIndexOf(t *testing.T) {
@@ -89,7 +89,7 @@ func TestIndexOf(t *testing.T) {
 	"abc".indexOf("", 4)
 	`
 
-	testScript1(SCRIPT, intToValue(3), t)
+	testScript(SCRIPT, intToValue(3), t)
 }
 
 func TestUnicodeIndexOf(t *testing.T) {
@@ -97,7 +97,7 @@ func TestUnicodeIndexOf(t *testing.T) {
 	"абвгд".indexOf("вг", 1) === 2 && '中国'.indexOf('国') === 1
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestLastIndexOf(t *testing.T) {
@@ -106,7 +106,7 @@ func TestLastIndexOf(t *testing.T) {
 	"abcabab".lastIndexOf("ab", 3)
 	`
 
-	testScript1(SCRIPT, intToValue(3), t)
+	testScript(SCRIPT, intToValue(3), t)
 }
 
 func TestUnicodeLastIndexOf(t *testing.T) {
@@ -114,7 +114,7 @@ func TestUnicodeLastIndexOf(t *testing.T) {
 	"абвабаб".lastIndexOf("аб", 3)
 	`
 
-	testScript1(SCRIPT, intToValue(3), t)
+	testScript(SCRIPT, intToValue(3), t)
 }
 
 func TestUnicodeLastIndexOf1(t *testing.T) {
@@ -122,7 +122,7 @@ func TestUnicodeLastIndexOf1(t *testing.T) {
 	"abꞐcde".lastIndexOf("cd");
 	`
 
-	testScript1(SCRIPT, intToValue(3), t)
+	testScript(SCRIPT, intToValue(3), t)
 }
 
 func TestNumber(t *testing.T) {
@@ -130,7 +130,7 @@ func TestNumber(t *testing.T) {
 	(new Number(100111122133144155)).toString()
 	`
 
-	testScript1(SCRIPT, asciiString("100111122133144160"), t)
+	testScript(SCRIPT, asciiString("100111122133144160"), t)
 }
 
 func TestFractionalNumberToStringRadix(t *testing.T) {
@@ -138,7 +138,7 @@ func TestFractionalNumberToStringRadix(t *testing.T) {
 	(new Number(123.456)).toString(36)
 	`
 
-	testScript1(SCRIPT, asciiString("3f.gez4w97ry"), t)
+	testScript(SCRIPT, asciiString("3f.gez4w97ry"), t)
 }
 
 func TestNumberFormatRounding(t *testing.T) {
@@ -161,7 +161,7 @@ func TestNumberFormatRounding(t *testing.T) {
 	assert.sameValue((99.9).toFixed(0), "100");
 	assert.sameValue((99.99).toFixed(1), "100.0");
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestBinOctalNumbers(t *testing.T) {
@@ -169,7 +169,7 @@ func TestBinOctalNumbers(t *testing.T) {
 	0b111;
 	`
 
-	testScript1(SCRIPT, valueInt(7), t)
+	testScript(SCRIPT, valueInt(7), t)
 }
 
 func TestSetFunc(t *testing.T) {
@@ -314,7 +314,7 @@ func TestArgsKeys(t *testing.T) {
 	testArgs2(1,2).length
 	`
 
-	testScript1(SCRIPT, intToValue(2), t)
+	testScript(SCRIPT, intToValue(2), t)
 }
 
 func TestIPowOverflow(t *testing.T) {
@@ -322,7 +322,7 @@ func TestIPowOverflow(t *testing.T) {
 	Math.pow(65536, 6)
 	`
 
-	testScript1(SCRIPT, floatToValue(7.922816251426434e+28), t)
+	testScript(SCRIPT, floatToValue(7.922816251426434e+28), t)
 }
 
 func TestIPowZero(t *testing.T) {
@@ -330,7 +330,7 @@ func TestIPowZero(t *testing.T) {
 	Math.pow(0, 0)
 	`
 
-	testScript1(SCRIPT, intToValue(1), t)
+	testScript(SCRIPT, intToValue(1), t)
 }
 
 func TestInterrupt(t *testing.T) {
@@ -1047,7 +1047,7 @@ func TestJSONEscape(t *testing.T) {
 	JSON.stringify(a);
 	`
 
-	testScript1(SCRIPT, asciiString(`"\\+1"`), t)
+	testScript(SCRIPT, asciiString(`"\\+1"`), t)
 }
 
 func TestJSONObjectInArray(t *testing.T) {
@@ -1056,7 +1056,7 @@ func TestJSONObjectInArray(t *testing.T) {
 	JSON.stringify(JSON.parse(a)) == a;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestJSONQuirkyNumbers(t *testing.T) {
@@ -1079,7 +1079,7 @@ func TestJSONQuirkyNumbers(t *testing.T) {
 
 	`
 
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestJSONNil(t *testing.T) {
@@ -1137,7 +1137,7 @@ func TestSortComparatorReturnValues(t *testing.T) {
 	}
 	`
 
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestSortComparatorReturnValueFloats(t *testing.T) {
@@ -1156,7 +1156,7 @@ func TestSortComparatorReturnValueFloats(t *testing.T) {
 		}
 	}
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestSortComparatorReturnValueNegZero(t *testing.T) {
@@ -1169,7 +1169,7 @@ func TestSortComparatorReturnValueNegZero(t *testing.T) {
 		}
 	}
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestNilApplyArg(t *testing.T) {
@@ -1179,7 +1179,7 @@ func TestNilApplyArg(t *testing.T) {
         }).apply(this, [,1])
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestNilCallArg(t *testing.T) {
@@ -1565,14 +1565,14 @@ func TestAutoBoxing(t *testing.T) {
 	a.test === undefined && a.test1 === undefined && f();
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestProtoGetter(t *testing.T) {
 	const SCRIPT = `
 	({}).__proto__ === Object.prototype && [].__proto__ === Array.prototype;
 	`
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestSymbol1(t *testing.T) {
@@ -1580,7 +1580,7 @@ func TestSymbol1(t *testing.T) {
 		Symbol.toPrimitive[Symbol.toPrimitive]() === Symbol.toPrimitive;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestFreezeSymbol(t *testing.T) {
@@ -1593,7 +1593,7 @@ func TestFreezeSymbol(t *testing.T) {
 		o[s] === 42 && Object.isFrozen(o);
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestToPropertyKey(t *testing.T) {
@@ -1633,7 +1633,7 @@ func TestToPropertyKey(t *testing.T) {
 	assert.sameValue(a[1], a[wrapper1], "a[1] === a[wrapper1]");
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestPrimThisValue(t *testing.T) {
@@ -1657,7 +1657,7 @@ func TestPrimThisValue(t *testing.T) {
 	t();
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestPrimThisValueGetter(t *testing.T) {
@@ -1678,7 +1678,7 @@ func TestPrimThisValueGetter(t *testing.T) {
 	t();
 	`
 
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestObjSetSym(t *testing.T) {
@@ -1700,7 +1700,7 @@ func TestObjSetSym(t *testing.T) {
 	o[sym] = 44;
 	o[sym];
 	`
-	testScript1(SCRIPT, intToValue(44), t)
+	testScript(SCRIPT, intToValue(44), t)
 }
 
 func TestObjSet(t *testing.T) {
@@ -1721,7 +1721,7 @@ func TestObjSet(t *testing.T) {
 	o.test = 44;
 	o.test;
 	`
-	testScript1(SCRIPT, intToValue(44), t)
+	testScript(SCRIPT, intToValue(44), t)
 }
 
 func TestToValueNilValue(t *testing.T) {
@@ -1772,7 +1772,7 @@ func TestNativeCtorNewTarget(t *testing.T) {
 	var o = Reflect.construct(Number, [1], NewTarget);
 	o.__proto__ === NewTarget.prototype && o.toString() === "[object Number]";
 	`
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestNativeCtorNonNewCall(t *testing.T) {
@@ -1942,7 +1942,7 @@ func TestNestedEnumerate(t *testing.T) {
 	assert(compareArray(Reflect.ownKeys(o), ["0","1","foo","bar","hidden"]), "keys");
 	res;
 	`
-	testScript1(TESTLIB+SCRIPT, asciiString("baz-foo baz-bar foo-foo foo-bar bar-foo bar-bar "), t)
+	testScriptWithTestLib(SCRIPT, asciiString("baz-foo baz-bar foo-foo foo-bar bar-foo bar-bar "), t)
 }
 
 func TestAbandonedEnumerate(t *testing.T) {
@@ -1958,7 +1958,7 @@ func TestAbandonedEnumerate(t *testing.T) {
 	}
 	res;
 	`
-	testScript1(SCRIPT, asciiString("baz-foo foo-foo bar-foo "), t)
+	testScript(SCRIPT, asciiString("baz-foo foo-foo bar-foo "), t)
 }
 
 func TestIterCloseThrows(t *testing.T) {
@@ -1985,7 +1985,7 @@ func TestIterCloseThrows(t *testing.T) {
 	} catch (e) {};
 	returnCount;
 	`
-	testScript1(SCRIPT, valueInt(1), t)
+	testScript(SCRIPT, valueInt(1), t)
 }
 
 func TestDeclareGlobalFunc(t *testing.T) {
@@ -2005,7 +2005,7 @@ func TestDeclareGlobalFunc(t *testing.T) {
 	assert(!desc.configurable, "configurable");
 	assert.sameValue(initial(), 2222);
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestStackOverflowError(t *testing.T) {
@@ -2186,7 +2186,7 @@ func TestDestructSymbol(t *testing.T) {
 	assert.sameValue(s, true, "S");
 	assert(deepEqual(rest, {test: 1}), "rest");
 	`
-	testScript1(TESTLIBX+SCRIPT, _undefined, t)
+	testScriptWithTestLibX(SCRIPT, _undefined, t)
 }
 
 func TestAccessorFuncName(t *testing.T) {
@@ -2223,7 +2223,7 @@ func TestAccessorFuncName(t *testing.T) {
 	assert.sameValue(prop.get.name, 'get [test262]');
 	assert.sameValue(prop.set.name, 'set [test262]');
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestCoverFuncName(t *testing.T) {
@@ -2246,7 +2246,7 @@ func TestCoverFuncName(t *testing.T) {
 	assert.sameValue(o[anonSym].name, '', 'via anonymous Symbol');
 	assert.sameValue(o[namedSym].name, '[]', 'via Symbol');
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestAnonFuncName(t *testing.T) {
@@ -2254,7 +2254,7 @@ func TestAnonFuncName(t *testing.T) {
 	const d = Object.getOwnPropertyDescriptor((function() {}), 'name');
 	d !== undefined && d.value === '';
 	`
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 func TestStringToBytesConversion(t *testing.T) {
@@ -2307,7 +2307,7 @@ Promise.all([p1, p2, p3]);
 
 assert.sameValue(callCount, 3, '"then"" invoked once for every iterated value');
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestPromiseExport(t *testing.T) {
@@ -2340,7 +2340,7 @@ func TestErrorStack(t *testing.T) {
 		throw new Error("stack still in err after delete");
 	}
 	`
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 /*
@@ -2362,7 +2362,7 @@ function foo(a,b,c)
 	a3.length === 1500002 && a3[500000] === 1 && a3[1500001] == 2;
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 */
 

+ 1 - 1
string_test.go

@@ -10,7 +10,7 @@ func TestStringOOBProperties(t *testing.T) {
 	string[4];
 	`
 
-	testScript1(SCRIPT, valueInt(1), t)
+	testScript(SCRIPT, valueInt(1), t)
 }
 
 func BenchmarkASCIIConcat(b *testing.B) {

+ 9 - 9
tc39_test.go

@@ -22,14 +22,6 @@ var (
 	invalidFormatError = errors.New("Invalid file format")
 
 	ignorableTestError = newSymbol(stringEmpty)
-
-	sabStub = MustCompile("sabStub.js", `
-		Object.defineProperty(this, "SharedArrayBuffer", {
-			get: function() {
-				throw IgnorableTestError;
-			}
-		});`,
-		false)
 )
 
 var (
@@ -338,6 +330,7 @@ type tc39TestCtx struct {
 	benchmark    tc39BenchmarkData
 	benchLock    sync.Mutex
 	testQueue    []tc39Test
+	sabStub      *Program
 }
 
 type TC39MetaNegative struct {
@@ -461,7 +454,7 @@ func (ctx *tc39TestCtx) runTC39Test(name, src string, meta *tc39Meta, t testing.
 	})
 	vm.Set("$262", _262)
 	vm.Set("IgnorableTestError", ignorableTestError)
-	vm.RunProgram(sabStub)
+	vm.RunProgram(ctx.sabStub)
 	var out []string
 	async := meta.hasFlag("async")
 	if async {
@@ -615,6 +608,13 @@ func (ctx *tc39TestCtx) runTC39File(name string, t testing.TB) {
 
 func (ctx *tc39TestCtx) init() {
 	ctx.prgCache = make(map[string]*Program)
+	ctx.sabStub = MustCompile("sabStub.js", `
+		Object.defineProperty(this, "SharedArrayBuffer", {
+			get: function() {
+				throw IgnorableTestError;
+			}
+		});`,
+		false)
 }
 
 func (ctx *tc39TestCtx) compile(base, name string) (*Program, error) {

+ 5 - 11
typedarrays_test.go

@@ -139,7 +139,7 @@ func TestTypedArrayIdx(t *testing.T) {
 	}
 	`
 
-	testScript1(SCRIPT, _undefined, t)
+	testScript(SCRIPT, _undefined, t)
 }
 
 func TestTypedArraySetDetachedBuffer(t *testing.T) {
@@ -164,10 +164,7 @@ func TestTypedArraySetDetachedBuffer(t *testing.T) {
 	vm.Set("$DETACHBUFFER", func(buf *ArrayBuffer) {
 		buf.Detach()
 	})
-	_, err := vm.RunString(TESTLIB + SCRIPT)
-	if err != nil {
-		t.Fatal(err)
-	}
+	vm.testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestTypedArrayDefinePropDetachedBuffer(t *testing.T) {
@@ -278,10 +275,7 @@ func TestTypedArrayDefinePropDetachedBuffer(t *testing.T) {
 	vm.Set("$DETACHBUFFER", func(buf *ArrayBuffer) {
 		buf.Detach()
 	})
-	_, err := vm.RunString(TESTLIB + SCRIPT)
-	if err != nil {
-		t.Fatal(err)
-	}
+	vm.testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestTypedArrayDefineProperty(t *testing.T) {
@@ -328,7 +322,7 @@ func TestTypedArrayDefineProperty(t *testing.T) {
 	assert.sameValue(descriptor0.enumerable, true);
 	assert.sameValue(descriptor0.writable, true);
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }
 
 func TestTypedArrayGetInvalidIndex(t *testing.T) {
@@ -344,5 +338,5 @@ func TestTypedArrayGetInvalidIndex(t *testing.T) {
 	assert.sameValue(a[1], undefined);
 	assert.sameValue(a["1"], undefined);
 	`
-	testScript1(TESTLIB+SCRIPT, _undefined, t)
+	testScriptWithTestLib(SCRIPT, _undefined, t)
 }

+ 1 - 1
vm_test.go

@@ -52,7 +52,7 @@ func TestEvalVar(t *testing.T) {
 	test();
 	`
 
-	testScript1(SCRIPT, valueTrue, t)
+	testScript(SCRIPT, valueTrue, t)
 }
 
 var jumptable = []func(*vm, *instr){

Some files were not shown because too many files changed in this diff