Test behaviour of strict mode

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS testThis.call(null) is null
PASS testThis.call(1) is 1
PASS testThis.call(true) is true
PASS testThis.call(false) is false
PASS testThis.call(undefined) is undefined
PASS testLineContinuation.call(undefined) === undefined is false
PASS testEscapeSequence.call(undefined) === undefined is false
PASS testThis.call('a string') is 'a string'
PASS testThisDotAccess.call('a string') is 'a string'.length
PASS testThisDotAccess.call(null) threw exception TypeError: null is not an object (evaluating 'this.length').
PASS testThisDotAccess.call(undefined) threw exception TypeError: undefined is not an object (evaluating 'this.length').
PASS testThisDotAccess.call(true) is undefined.
PASS testThisDotAccess.call(false) is undefined.
PASS testThisDotAccess.call(1) is undefined.
PASS testThisBracketAccess.call('a string', 'length') is 'a string'.length
PASS testThisBracketAccess.call(null, 'length') threw exception TypeError: null is not an object (evaluating 'this[prop]').
PASS testThisBracketAccess.call(undefined, 'length') threw exception TypeError: undefined is not an object (evaluating 'this[prop]').
PASS testThisBracketAccess.call(true, 'length') is undefined.
PASS testThisBracketAccess.call(false, 'length') is undefined.
PASS testThisBracketAccess.call(1, 'length') is undefined.
PASS Function('"use strict"; return this;')() is undefined.
PASS Function('"use strict"; with({});') threw exception SyntaxError: 'with' statements are not valid in strict mode..
PASS testGlobalAccess() is undefined
PASS testThis.call() is undefined
PASS testThis.apply() is undefined
PASS testThis.call(undefined) is undefined
PASS testThis.apply(undefined) is undefined
PASS (function eval(){'use strict';}) threw exception SyntaxError: Cannot declare a variable named 'eval' in strict mode..
PASS (function(){(function eval(){'use strict';})}) threw exception SyntaxError: Cannot declare a variable named 'eval' in strict mode..
PASS (function (eval){'use strict';}) threw exception SyntaxError: Cannot declare a variable named 'eval' in strict mode..
PASS (function(){(function (eval){'use strict';})}) threw exception SyntaxError: Cannot declare a variable named 'eval' in strict mode..
PASS (function arguments(){'use strict';}) threw exception SyntaxError: Cannot declare a variable named 'arguments' in strict mode..
PASS (function(){(function arguments(){'use strict';})}) threw exception SyntaxError: Cannot declare a variable named 'arguments' in strict mode..
PASS (function (arguments){'use strict';}) threw exception SyntaxError: Cannot declare a variable named 'arguments' in strict mode..
PASS (function(){(function (arguments){'use strict';})}) threw exception SyntaxError: Cannot declare a variable named 'arguments' in strict mode..
PASS (function (){'use strict'; var eval;}) threw exception SyntaxError: Cannot declare a variable named eval in strict mode..
PASS (function(){(function (){'use strict'; var eval;})}) threw exception SyntaxError: Cannot declare a variable named eval in strict mode..
PASS (function (){'use strict'; var arguments;}) threw exception SyntaxError: Cannot declare a variable named arguments in strict mode..
PASS (function(){(function (){'use strict'; var arguments;})}) threw exception SyntaxError: Cannot declare a variable named arguments in strict mode..
PASS (function (){'use strict'; try{}catch(eval){}}) threw exception SyntaxError: Cannot declare a catch variable named 'eval' in strict mode..
PASS (function(){(function (){'use strict'; try{}catch(eval){}})}) threw exception SyntaxError: Cannot declare a catch variable named 'eval' in strict mode..
PASS (function (){'use strict'; try{}catch(arguments){}}) threw exception SyntaxError: Cannot declare a catch variable named 'arguments' in strict mode..
PASS (function(){(function (){'use strict'; try{}catch(arguments){}})}) threw exception SyntaxError: Cannot declare a catch variable named 'arguments' in strict mode..
PASS (function (a, a){'use strict';}) threw exception SyntaxError: Invalid parameters or function name in strict mode..
PASS (function(){(function (a, a){'use strict';})}) threw exception SyntaxError: Invalid parameters or function name in strict mode..
PASS (function (a){'use strict'; delete a;})() threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
PASS (function(){(function (a){'use strict'; delete a;})()}) threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
PASS (function (){'use strict'; var a; delete a;})() threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
PASS (function(){(function (){'use strict'; var a; delete a;})()}) threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
PASS (function (){var a; function f() {'use strict'; delete a;} })() threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
PASS (function(){(function (){var a; function f() {'use strict'; delete a;} })()}) threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
PASS (function (){'use strict'; with(1){};}) threw exception SyntaxError: 'with' statements are not valid in strict mode..
PASS (function(){(function (){'use strict'; with(1){};})}) threw exception SyntaxError: 'with' statements are not valid in strict mode..
PASS (function (){'use strict'; arguments.callee; })() threw exception TypeError: Type error.
PASS (function (){'use strict'; arguments.caller; })() threw exception TypeError: Type error.
PASS (function f(){'use strict'; f.arguments; })() threw exception TypeError: Type error.
PASS (function f(){'use strict'; f.caller; })() threw exception TypeError: Type error.
PASS (function f(){'use strict'; f.arguments=5; })() threw exception TypeError: Type error.
PASS (function f(){'use strict'; f.caller=5; })() threw exception TypeError: Type error.
PASS (function (arg){'use strict'; arguments.callee; })() threw exception TypeError: Type error.
PASS (function (arg){'use strict'; arguments.caller; })() threw exception TypeError: Type error.
PASS (function f(arg){'use strict'; f.arguments; })() threw exception TypeError: Type error.
PASS (function f(arg){'use strict'; f.caller; })() threw exception TypeError: Type error.
PASS (function f(arg){'use strict'; f.arguments=5; })() threw exception TypeError: Type error.
PASS (function f(arg){'use strict'; f.caller=5; })() threw exception TypeError: Type error.
PASS "caller" in function(){"use strict"} is true
PASS (function(){"use strict";}).hasOwnProperty("caller") is true
PASS "arguments" in function(){"use strict"} is true
PASS (function(){"use strict";}).hasOwnProperty("arguments") is true
PASS 'use strict'; (function (){with(1){};}) threw exception SyntaxError: 'with' statements are not valid in strict mode..
PASS (function(){'use strict'; (function (){with(1){};})}) threw exception SyntaxError: 'with' statements are not valid in strict mode..
PASS 'use strict'; (function (){var a; delete a;}) threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
PASS (function(){'use strict'; (function (){var a; delete a;})}) threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
PASS 'use strict'; var a; (function (){ delete a;}) threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
PASS (function(){'use strict'; var a; (function (){ delete a;})}) threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
PASS var a; (function (){ 'use strict'; delete a;}) threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
PASS (function(){var a; (function (){ 'use strict'; delete a;})}) threw exception SyntaxError: Cannot delete unqualified property 'a' in strict mode..
PASS 'misc directive'; 'use strict'; with({}){} threw exception SyntaxError: 'with' statements are not valid in strict mode..
PASS (function(){'misc directive'; 'use strict'; with({}){}}) threw exception SyntaxError: 'with' statements are not valid in strict mode..
PASS 'use strict'; return threw exception SyntaxError: Return statements are only valid inside functions..
PASS 'use strict'; break threw exception SyntaxError: 'break' is only valid inside a switch or loop statement..
PASS (function(){'use strict'; break}) threw exception SyntaxError: 'break' is only valid inside a switch or loop statement..
PASS 'use strict'; continue threw exception SyntaxError: 'continue' is only valid inside a loop statement..
PASS (function(){'use strict'; continue}) threw exception SyntaxError: 'continue' is only valid inside a loop statement..
PASS 'use strict'; for(;;)return threw exception SyntaxError: Return statements are only valid inside functions..
PASS 'use strict'; for(;;)break missingLabel threw exception SyntaxError: Cannot use the undeclared label 'missingLabel'..
PASS (function(){'use strict'; for(;;)break missingLabel}) threw exception SyntaxError: Cannot use the undeclared label 'missingLabel'..
PASS 'use strict'; for(;;)continue missingLabel threw exception SyntaxError: Cannot use the undeclared label 'missingLabel'..
PASS (function(){'use strict'; for(;;)continue missingLabel}) threw exception SyntaxError: Cannot use the undeclared label 'missingLabel'..
PASS 'use strict'; 007; threw exception SyntaxError: Octal escapes are forbidden in strict mode.
PASS (function(){'use strict'; 007;}) threw exception SyntaxError: Octal escapes are forbidden in strict mode.
PASS 'use strict'; '\007'; threw exception SyntaxError: The only valid numeric escape in strict mode is '\0'.
PASS (function(){'use strict'; '\007';}) threw exception SyntaxError: The only valid numeric escape in strict mode is '\0'.
PASS '\007'; 'use strict'; threw exception SyntaxError: The only valid numeric escape in strict mode is '\0'.
PASS (function(){'\007'; 'use strict';}) threw exception SyntaxError: The only valid numeric escape in strict mode is '\0'.
PASS 'use strict'; delete aDeletableProperty; threw exception SyntaxError: Cannot delete unqualified property 'aDeletableProperty' in strict mode..
PASS (function(){'use strict'; delete aDeletableProperty;}) threw exception SyntaxError: Cannot delete unqualified property 'aDeletableProperty' in strict mode..
PASS 'use strict'; (function (){ delete someDeclaredGlobal;}) threw exception SyntaxError: Cannot delete unqualified property 'someDeclaredGlobal' in strict mode..
PASS (function(){'use strict'; (function (){ delete someDeclaredGlobal;})}) threw exception SyntaxError: Cannot delete unqualified property 'someDeclaredGlobal' in strict mode..
PASS (function (){ 'use strict'; delete someDeclaredGlobal;}) threw exception SyntaxError: Cannot delete unqualified property 'someDeclaredGlobal' in strict mode..
PASS (function(){(function (){ 'use strict'; delete someDeclaredGlobal;})}) threw exception SyntaxError: Cannot delete unqualified property 'someDeclaredGlobal' in strict mode..
PASS 'use strict'; if (0) { someGlobal = 'Shouldn\'t be able to assign this.'; }; true; is true
PASS 'use strict'; someGlobal = 'Shouldn\'t be able to assign this.';  threw exception ReferenceError: Can't find variable: someGlobal.
PASS 'use strict'; (function f(){ f = 'shouldn\'t be able to assign to function expression name'; })() threw exception TypeError: Attempted to assign to readonly property..
PASS 'use strict'; eval('var introducedVariable = "FAIL: variable introduced into containing scope";'); introducedVariable threw exception ReferenceError: Can't find variable: introducedVariable.
PASS 'use strict'; objectWithReadonlyProperty.prop = 'fail' threw exception TypeError: Attempted to assign to readonly property..
PASS 'use strict'; delete objectWithReadonlyProperty.prop threw exception TypeError: Unable to delete property..
PASS 'use strict'; delete objectWithReadonlyProperty[readonlyPropName] threw exception TypeError: Unable to delete property..
PASS 'use strict'; ++eval threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS (function(){'use strict'; ++eval}) threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS 'use strict'; eval++ threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS (function(){'use strict'; eval++}) threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS 'use strict'; --eval threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS (function(){'use strict'; --eval}) threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS 'use strict'; eval-- threw exception SyntaxError: 'eval' cannot be modified in strict mode..
PASS (function(){'use strict'; eval--}) threw exception SyntaxError: 'eval' cannot be modified in strict mode..
PASS 'use strict'; function f() { ++arguments } threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS (function(){'use strict'; function f() { ++arguments }}) threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS 'use strict'; function f() { arguments++ } threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS (function(){'use strict'; function f() { arguments++ }}) threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS 'use strict'; function f() { --arguments } threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS (function(){'use strict'; function f() { --arguments }}) threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS 'use strict'; function f() { arguments-- } threw exception SyntaxError: 'arguments' cannot be modified in strict mode..
PASS (function(){'use strict'; function f() { arguments-- }}) threw exception SyntaxError: 'arguments' cannot be modified in strict mode..
PASS global.eval('"use strict"; if (0) ++arguments; true;') threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS 'use strict'; ++(1, eval) threw exception ReferenceError: Prefix ++ operator applied to value that is not a reference..
PASS (function(){'use strict'; ++(1, eval)}) threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS 'use strict'; (1, eval)++ threw exception ReferenceError: Postfix ++ operator applied to value that is not a reference..
PASS (function(){'use strict'; (1, eval)++}) threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS 'use strict'; --(1, eval) threw exception ReferenceError: Prefix -- operator applied to value that is not a reference..
PASS (function(){'use strict'; --(1, eval)}) threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS 'use strict'; (1, eval)-- threw exception ReferenceError: Postfix -- operator applied to value that is not a reference..
PASS (function(){'use strict'; (1, eval)--}) threw exception SyntaxError: 'eval' cannot be modified in strict mode..
PASS 'use strict'; function f() { ++(1, arguments) } threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS (function(){'use strict'; function f() { ++(1, arguments) }}) threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS 'use strict'; function f() { (1, arguments)++ } threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS (function(){'use strict'; function f() { (1, arguments)++ }}) threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS 'use strict'; function f() { --(1, arguments) } threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS (function(){'use strict'; function f() { --(1, arguments) }}) threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS 'use strict'; function f() { (1, arguments)-- } threw exception SyntaxError: 'arguments' cannot be modified in strict mode..
PASS (function(){'use strict'; function f() { (1, arguments)-- }}) threw exception SyntaxError: 'arguments' cannot be modified in strict mode..
PASS 'use strict'; if (0) delete +a.b threw exception SyntaxError: The delete operator requires a reference expression..
PASS (function(){'use strict'; if (0) delete +a.b}) threw exception SyntaxError: The delete operator requires a reference expression..
PASS 'use strict'; if (0) delete ++a.b threw exception SyntaxError: The delete operator requires a reference expression..
PASS (function(){'use strict'; if (0) delete ++a.b}) threw exception SyntaxError: The delete operator requires a reference expression..
PASS 'use strict'; if (0) delete void a.b threw exception SyntaxError: The delete operator requires a reference expression..
PASS (function(){'use strict'; if (0) delete void a.b}) threw exception SyntaxError: The delete operator requires a reference expression..
PASS (function (a){'use strict'; a = false; return a !== arguments[0]; })(true) is true
PASS (function (a){'use strict'; arguments[0] = false; return a !== arguments[0]; })(true) is true
PASS (function (a){'use strict'; a=false; return arguments; })(true)[0] is true
PASS (function (a){'use strict'; arguments[0]=false; return a; })(true) is true
PASS (function (a){'use strict'; arguments[0]=true; return arguments; })(false)[0] is true
PASS (function (){'use strict';  arguments[0]=true; return arguments; })(false)[0] is true
PASS (function (a){'use strict'; arguments[0]=true; a=false; return arguments; })()[0] is true
PASS (function (a){'use strict'; arguments[0]=false; a=true; return a; })() is true
PASS (function (a){'use strict'; arguments[0]=true; return arguments; })()[0] is true
PASS (function (){'use strict';  arguments[0]=true; return arguments; })()[0] is true
PASS (function (a){'use strict'; var local; (function (){local;})(); a = false; return a !== arguments[0]; })(true) is true
PASS (function (a){'use strict'; var local; (function (){local;})(); arguments[0] = false; return a !== arguments[0]; })(true) is true
PASS (function (a){'use strict'; var local; (function (){local;})(); a=false; return arguments; })(true)[0] is true
PASS (function (a){'use strict'; var local; (function (){local;})(); arguments[0]=false; return a; })(true) is true
PASS (function (a){'use strict'; var local; (function (){local;})(); arguments[0]=true; return arguments; })(false)[0] is true
PASS (function (){'use strict';  var local; (function (){local;})(); arguments[0]=true; return arguments; })(false)[0] is true
PASS (function (a){'use strict'; var local; (function (){local;})(); arguments[0]=true; a=false; return arguments; })()[0] is true
PASS (function (a){'use strict'; var local; (function (){local;})(); arguments[0]=true; return arguments; })()[0] is true
PASS (function (a){'use strict'; var local; (function (){local;})(); arguments[0]=false; a=true; return a; })() is true
PASS (function (){'use strict';  var local; (function (){local;})(); arguments[0]=true; return arguments; })()[0] is true
PASS 'use strict'; (function (){var a = true; eval('var a = false'); return a; })() is true
PASS (function (){var a = true; eval('"use strict"; var a = false'); return a; })() is true
PASS (function f(arg){'use strict'; return Object.getOwnPropertyDescriptor(f, 'arguments').value; })() is undefined.
PASS (function f(arg){'use strict'; return Object.getOwnPropertyDescriptor(f, 'caller').value; })() is undefined.
PASS (function f(arg){'use strict'; return Object.getOwnPropertyDescriptor(arguments, 'callee').value; })() is undefined.
PASS (function f(arg){'use strict'; return Object.getOwnPropertyDescriptor(arguments, 'caller').value; })() is undefined.
PASS (function f(arg){'use strict'; var descriptor = Object.getOwnPropertyDescriptor(arguments, 'caller'); return descriptor.get === descriptor.set; })() is true
PASS (function f(arg){'use strict'; var descriptor = Object.getOwnPropertyDescriptor(arguments, 'callee'); return descriptor.get === descriptor.set; })() is true
PASS (function f(arg){'use strict'; var descriptor = Object.getOwnPropertyDescriptor(f, 'caller'); return descriptor.get === descriptor.set; })() is true
PASS (function f(arg){'use strict'; var descriptor = Object.getOwnPropertyDescriptor(f, 'arguments'); return descriptor.get === descriptor.set; })() is true
PASS 'use strict'; (function f() { for(var i in this); })(); true; is true
PASS 'use strict'̻ threw exception SyntaxError: Invalid character '\u0827'.
PASS (function(){'use strict'̻}) threw exception SyntaxError: Invalid character '\u0827'.
PASS 'use strict'5.f threw exception SyntaxError: At least one digit must occur after a decimal point.
PASS (function(){'use strict'5.f}) threw exception SyntaxError: At least one digit must occur after a decimal point.
PASS 'use strict';̻ threw exception SyntaxError: Invalid character '\u0827'.
PASS (function(){'use strict';̻}) threw exception SyntaxError: Invalid character '\u0827'.
PASS 'use strict';5.f threw exception SyntaxError: At least one digit must occur after a decimal point.
PASS (function(){'use strict';5.f}) threw exception SyntaxError: At least one digit must occur after a decimal point.
PASS 'use strict';1-(eval=1); threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS (function(){'use strict';1-(eval=1);}) threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS 'use strict';arguments=1; threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS (function(){'use strict';arguments=1;}) threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS 'use strict';1-(arguments=1); threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS (function(){'use strict';1-(arguments=1);}) threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS 'use strict';var a=(eval=1); threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS (function(){'use strict';var a=(eval=1);}) threw exception SyntaxError: Cannot modify 'eval' in strict mode..
PASS 'use strict';var a=(arguments=1); threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS (function(){'use strict';var a=(arguments=1);}) threw exception SyntaxError: Cannot modify 'arguments' in strict mode..
PASS 'use strict'; try { throw 1; } catch (e) { aGlobal = true; } is true
PASS 'use strict'; (function () { try { throw 1; } catch (e) { aGlobal = true; }})(); aGlobal; is true
PASS (function () {'use strict';  try { throw 1; } catch (e) { aGlobal = true; }})(); aGlobal; is true
PASS try { throw 1; } catch (e) { aGlobal = true; } is true
PASS (function () { try { throw 1; } catch (e) { aGlobal = true; }})(); aGlobal; is true
PASS (function () {try { throw 1; } catch (e) { aGlobal = true; }})(); aGlobal; is true
PASS String(Object.getOwnPropertyDescriptor(function() { "use strict"; }, "caller").get) is 'function () {\n    [native code]\n}'
PASS successfullyParsed is true

TEST COMPLETE

