def test_arguments(self): self.assertEqual(run("(function () {return arguments.length})(1, 2)"), 2) self.assertEqual(run("(function () {return arguments[1]})(1, 2)"), 2) self.assertEqual(run("Object.prototype.a = 1;(function () {return arguments})(2).a"), 1) global_object = GlobalObject() self.assertEqual(run("function a () { return arguments.callee; }; a()", global_object), run("a", global_object))
def testPrecedence(self): global_object = GlobalObject() run(self.js, global_object) self.assertEqual(run("a(0,0)", global_object), 3); self.assertEqual(run("b(0,0)", global_object), 2); self.assertEqual(run("c(0,0)", global_object), 3);
def test_decleration(self): global_object = GlobalObject() run("function a (a) { return a; }", global_object) function = run("a", global_object) self.assert_(function) self.assertEqual(run("a(1)", global_object), 1) self.assertEqual(run("a", global_object), function)
def test_empty_switch(self): js = """ // empty switch: make sure expression is evaluated var se = 0; switch (se = 1) { } """ global_object = GlobalObject() run(js, global_object) self.assertEquals(run("se", global_object), 1)
def test_only_default(self): js = """ // only default se = 0; switch (se) { default: se = 1; } """ global_object = GlobalObject() run(js, global_object) self.assertEquals(run("se", global_object), 1)
def test_for_in(self): self.assertEqual(run( """var a = {a:1,b:2,c:3}, s = ''; for (var key in a) { s = s + key; }"""), 'abc') self.assertEqual(run( """var a = {a:1,b:2,c:3}, s = ''; for (key in a) { s = s + key; }"""), 'abc') self.assertEqual(run( """var a = {}; Object.prototype.a = 1; a.b = 1; Object.prototype.c = 1; a.d = 1; var s = ''; for (var key in a) { s = s + key; }"""), 'bdac')
def test_break_for_loop(self): js = """ // in loop, break should only break out of switch se = 0; for (var i=0; i < 2; i++) { switch (i) { case 0: case 1: break; } se = 1; } """ global_object = GlobalObject() run(js, global_object) self.assertEquals(run("se", global_object), 1)
def test_switch_fallthrough2(self): js = """ // test "fall through" se = 0; i = 0; switch (i) { case 0: se++; /* fall through */ case 1: se++; break; } """ global_object = GlobalObject() run(js, global_object) self.assertEquals(run("se", global_object), 2)
def test_return_in_switch(self): js = """ // test defaults not at the end; regression test for a bug that // nearly made it into 4.06 function f0(i) { switch(i) { default: case "a": case "b": return "ab*" case "c": return "c"; case "d": return "d"; } return ""; } """ global_object = GlobalObject() run(js, global_object) self.assertEquals(run("f0('a')", global_object), 'ab*') self.assertEquals(run("f0('b')", global_object), 'ab*') self.assertEquals(run("f0('*')", global_object), 'ab*') self.assertEquals(run("f0('c')", global_object), 'c') self.assertEquals(run("f0('d')", global_object), 'd')
def test_call(self): self.assertEqual(run("function a(){return 1};a.call()"), 1) self.assertEqual(run("function a(){return 1};a.call(a)"), 1) self.assertEqual(run("function a(){return 1};a.call.call(a)"), 1) self.assertEqual(run("function a(){return arguments.length};a.call()"), 0) self.assertEqual(run("function a(){return arguments.length};a.call(a)"), 0) self.assertEqual(run("function a(){return arguments.length};a.call(a, 2)"), 1) self.assertEqual(run("function a(){return arguments.length};a.call(a, 2, 4)"), 2)
def main(argv): if not len(argv) == 2: print __doc__ return 1 filename = argv[1] f = open_file_as_stream(filename) source = f.readall() f.close() return run(source, filename=filename)
def test_substr(self): self.assertEqual(run("'test'.substr(1,2)"), "es") self.assertEqual(run("'test'.substr(0,6)"), "test") self.assertEqual(run("'test'.substr(-3,1)"), "e") self.assertEqual(run("'test'.substr(2,4)"), "st") self.assertEqual(run("'test'.substr(3)"), "t") self.assertEqual(run("'test'.substr()"), "test")
def test_switch_fallthrough(self): js = """ var var1 = "match string"; var match1 = false; var match2 = false; var match3 = false; switch (var1) { case "match string": match1 = true; case "bad string 1": match2 = true; break; case "bad string 2": match3 = true; } """ global_object = GlobalObject() run(js, global_object) self.assertEquals(run("match1", global_object), True) self.assertEquals(run("match2", global_object), True) self.assertEquals(run("match3", global_object), False)
def test_nested_switch(self): js = """ var var2 = 3; var match1 = false; var match2 = false; var match3 = false; var match4 = false; var match5 = false; switch (var2) { case 1: switch (var1) { case "foo": match1 = true; break; case 3: match2 = true; break; } match3 = true; break; case 2: match4 = true; break; case 3: match5 = true; break; } """ global_object = GlobalObject() run(js, global_object) self.assertEquals(run("match1", global_object), False) self.assertEquals(run("match2", global_object), False) self.assertEquals(run("match3", global_object), False) self.assertEquals(run("match4", global_object), False) self.assertEquals(run("match5", global_object), True)
def test_return_in_switch2(self): js = """ function f1(i) { switch(i) { case "a": case "b": default: return "ab*" case "c": return "c"; case "d": return "d"; } return ""; } """ global_object = GlobalObject() run(js, global_object) self.assertEquals(run("f1('a')", global_object), 'ab*') self.assertEquals(run("f1('b')", global_object), 'ab*') self.assertEquals(run("f1('*')", global_object), 'ab*') self.assertEquals(run("f1('c')", global_object), 'c') self.assertEquals(run("f1('d')", global_object), 'd')
def test_switch_on_integer(self): js = """ function f2(i) { switch (i) { case 0: case 1: return 1; case 2: return 2; } // with no default, control will fall through return 3; } """ global_object = GlobalObject() run(js, global_object) self.assertEquals(run("f2(0)", global_object), 1) self.assertEquals(run("f2(1)", global_object), 1) self.assertEquals(run("f2(2)", global_object), 2) self.assertEquals(run("f2(3)", global_object), 3)
def test_charCodeAt(self): self.assert_(math.isnan(run("'test'.charCodeAt(5)"))) self.assert_(math.isnan(run("'test'.charCodeAt(-1)"))) self.assertEqual(run("'test'.charCodeAt(0)"), 116) self.assertEqual(run("'test'.charCodeAt(2)"), 115) self.assertEqual(run("'test'.charCodeAt()"), 116)
def testDelete(self): self.assertEqual(run("delete undefined"), False) self.assertEqual(run("delete undefined; undefined"), None) self.assertEqual(run("delete String"), True) #self.assertRaises(Exception, run, "delete String; String") self.assertEqual(run("a={a:1}; delete a.a; 'a' in a"), False)
def test_for_loop(self): self.assertEqual(run( 'for (var i = 0; i < 10; i = i + 1) ; i'), 10)
def test_isNaN(self): self.assertEqual(run("isNaN(0)"), False) self.assertEqual(run("isNaN(NaN)"), True) self.assertEqual(run("isNaN(Infinity)"), False)
def test_isFinite(self): self.assertEqual(run("isFinite(0)"), True) self.assertEqual(run("isFinite(NaN)"), False) self.assertEqual(run("isFinite(Infinity)"), False) self.assertEqual(run("isFinite(-Infinity)"), False)
def test_String(self): self.assertEqual(run("String(true)"), "true") self.assertEqual(run("String(false)"), "false") self.assertEqual(run("String('test')"), "test") self.assertEqual(run("String(NaN)"), "NaN") self.assertEqual(run("String(Infinity)"), "Infinity") self.assertEqual(run("String(null)"), "null") self.assertEqual(run("String(undefined)"), "undefined") self.assertEqual(run("String(+0)"), "0") self.assertEqual(run("String(-0)"), "0") self.assertEqual(run("String(1)"), "1") self.assertEqual(run("String(-2.3)"), "-2.3")
def test_expression(self): global_object = GlobalObject() run("var b = function a () { return a; }", global_object) #self.assertRaises(Exception, run, "a", object) self.assertEqual(run("b", global_object), run("b()", global_object))