jerryscript/tests/jerry/realms3.js
Szilagyi Adam 4924f9fd31
Remove ES_NEXT macro (#4915)
- remove all '#JERRY_ESNEXT' macro
- remove 5.1 build profile, update test runner accordingly (Note: all builtins are turn on by default)
- move tests from tests/jerry/esnext into tests/jerry, concatenate files with same names
- add skiplist to some snapshot tests that were supported only in 5.1
- fix doxygen issues that were hidden before (bc. of es.next macro)

Co-authored-by: Martin Negyokru negyokru@inf.u-szeged.hu
JerryScript-DCO-1.0-Signed-off-by: Adam Szilagyi aszilagy@inf.u-szeged.hu
2022-01-31 16:46:00 +01:00

199 lines
4.0 KiB
JavaScript

// Copyright JS Foundation and other contributors, http://js.foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Test1: reading global values from other realms
var a = 4.5
function f1()
{
var realm = createRealm()
var f = realm.eval("function g() { return a } g")
realm.a = -6.25
assert(f() === -6.25)
assert(a === 4.5)
assert(realm.g === f)
realm.eval("var v1 = 6; eval('var v2 = 7.5')")
assert(realm.v1 === 6)
assert(realm.v2 === 7.5)
var e = realm.eval
eval("e('var v3 = -5.25'); var v3 = 1.5; e('v3++')")
assert(realm.v3 === -4.25)
assert(v3 === 1.5)
}
f1()
// Test2: recursive calls
var b = "S"
function f2()
{
function f(fun) {
return fun() + b;
}
var realm = createRealm()
realm.eval("function h() { return b }")
var g = realm.Function("fun", "return fun(h) + b")
realm.b = "X"
assert(g(f) === "XSX")
assert(b === "S")
}
f2()
// Test3: built-in functions
function f3()
{
var realm = createRealm()
realm.f = function () { return eval("/a/") }
var res = realm.eval("[f(), /a/, f(), /b/]")
assert(Object.getPrototypeOf(res[0]) === RegExp.prototype)
assert(Object.getPrototypeOf(res[1]) === realm.RegExp.prototype)
assert(Object.getPrototypeOf(res[2]) === RegExp.prototype)
assert(Object.getPrototypeOf(res[3]) === realm.RegExp.prototype)
realm.g = function () { return non_existent }
try {
realm.eval("g()")
assert(false)
} catch (e) {
assert(e instanceof ReferenceError)
assert(!(e instanceof realm.ReferenceError))
}
try {
realm.eval("non_existent")
assert(false)
} catch (e) {
assert(e instanceof realm.ReferenceError)
assert(!(e instanceof ReferenceError))
}
}
f3()
// Test4: generator functions
function f4()
{
function f() {
return b;
}
var realm = createRealm()
function check_gen_result(result, value, done)
{
assert(Object.getPrototypeOf(result) === realm.Object.prototype)
assert(result.value === value)
assert(result.done === done)
}
realm.eval("var a = 'P', b = 'Q'")
var gen = realm.eval("function* gen(f) { yield f() + a; yield f() + b; return a + b + f() }")
var it = realm.gen(f)
check_gen_result(it.next(), "SP", false)
check_gen_result(it.next(), "SQ", false)
check_gen_result(it.next(), "PQS", true)
}
f4()
// Test5: async functions
var successCount = 0
function f5()
{
function f() {
return b;
}
var r, p = new Promise(function(resolve, reject) { r = resolve })
var realm = createRealm()
realm.assert = assert
realm.eval("async function asy(p, f) { assert(f() === 'S'); assert(await p === 4.5); return f() + b }")
realm.b = "X"
realm.asy(p, f).then(function(v) {
assert(v === "SX")
successCount++
}, function() {
assert(false)
})
r(4.5)
}
f5()
// Test6: async generator functions
function f6()
{
function f() {
return b;
}
var r, p = new Promise(function(resolve, reject) { r = resolve })
var realm = createRealm()
function check_fulfilled(p, value, done)
{
assert(p instanceof realm.Promise)
p.then(function(v) {
assert(v.value === value)
assert(v.done === done)
successCount++
}, function() {
assert(false)
})
}
realm.assert = assert
realm.eval("async function *asygen(p, f) { assert(f() === 'S'); assert(await p === -1.5); yield f() + a; return f() + b }")
realm.a = "X"
realm.b = "Y"
var gen = realm.asygen(p, f)
check_fulfilled(gen.next(), "SX", false)
check_fulfilled(gen.next(), "SY", true)
r(-1.5)
}
f6()
function __checkAsync() {
assert(successCount === 3)
}