1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/basic/testScriptCloning.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,28 @@ 1.4 +var g = newGlobal(); 1.5 + 1.6 +function cloneableFunction(body) { 1.7 + return evaluate("(function () { " + body + " })", {compileAndGo: false}); 1.8 +} 1.9 + 1.10 +g.f = cloneableFunction('return function(x) { return x };'); 1.11 +assertEq(g.eval("clone(f)()(9)"), 9); 1.12 + 1.13 +g.f = cloneableFunction('return function(x) { let(y = x+1) { return y } };'); 1.14 +assertEq(g.eval("clone(f)()(9)"), 10); 1.15 + 1.16 +g.f = cloneableFunction('return function(x) { let(y = x, z = 1) { return y+z } };'); 1.17 +assertEq(g.eval("clone(f)()(9)"), 10); 1.18 + 1.19 +g.f = cloneableFunction('return function(x) { return x.search(/ponies/) };'); 1.20 +assertEq(g.eval("clone(f)()('123ponies')"), 3); 1.21 + 1.22 +g.f = cloneableFunction('return function(x,y) { return x.search(/a/) + y.search(/b/) };'); 1.23 +assertEq(g.eval("clone(f)()('12a','foo')"), 1); 1.24 + 1.25 +g.f = cloneableFunction('return [function(x) x+2, function(y) let(z=y+1) z];'); 1.26 +assertEq(g.eval("let ([f,g] = clone(f)()) f(g(4))"), 7); 1.27 + 1.28 +g.f = cloneableFunction('return function(x) { switch(x) { case "a": return "b"; case null: return "c" } };'); 1.29 +assertEq(g.eval("clone(f)()('a')"), "b"); 1.30 +assertEq(g.eval("clone(f)()(null)"), "c"); 1.31 +assertEq(g.eval("clone(f)()(3)"), undefined);