Ported Sputnik changes over from the 'external' directory to 'test/suite/sputnik'. Still need to convert

the tests over to test262 format.
This commit is contained in:
David Fugate 2011-06-27 16:20:31 -07:00
parent a7e6453c0e
commit febe8b348b
93 changed files with 1508 additions and 832 deletions

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.1; * @name: S7.5.3_A1.1;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "abstract" token can not be used as identifier; * @assertion: The "abstract" token can be used as identifier;
* @description: Checking if execution of "abstract=1" fails; * @description: Checking if execution of "abstract=1" succeeds;
* @negative */
*/
abstract = 1;
abstract = 1;

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.12; * @name: S7.5.3_A1.12;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "final" token can not be used as identifier; * @assertion: The "final" token can be used as identifier;
* @description: Checking if execution of "final=1" fails; * @description: Checking if execution of "final=1" succeeds;
* @negative */
*/
final = 1;
final = 1;

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.13; * @name: S7.5.3_A1.13;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "float" token can not be used as identifier; * @assertion: The "float" token can be used as identifier;
* @description: Checking if execution of "float=1" fails; * @description: Checking if execution of "float=1" succeeds;
* @negative */
*/
float = 1;
float = 1;

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.14; * @name: S7.5.3_A1.14;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "goto" token can not be used as identifier; * @assertion: The "goto" token can be used as identifier;
* @description: Checking if execution of "goto=1" fails; * @description: Checking if execution of "goto=1" succeeds;
* @negative */
*/
goto = 1;
goto = 1;

View File

@ -1,12 +1,15 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.15; * @name: S7.5.3_A1.15;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "implements" token can not be used as identifier; * @assertion: The "implements" token can not be used as identifier in
* @description: Checking if execution of "implements=1" fails; * strict code;
* @negative * @description: Checking if execution of "implements=1" fails in
*/ * strict code;
* @negative
implements = 1; */
"use strict";
implements = 1;

View File

@ -0,0 +1,13 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S7.5.3_A1.15;
* @section: 7.5.3;
* @assertion: The "implements" token can be used as identifier in
* non-strict code;
* @description: Checking if execution of "implements=1" succeeds in
* non-strict code;
*/
new Function('implements = 1');

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.17; * @name: S7.5.3_A1.17;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "int" token can not be used as identifier; * @assertion: The "int" token can be used as identifier;
* @description: Checking if execution of "int=1" fails; * @description: Checking if execution of "int=1" succeeds;
* @negative */
*/
int = 1;
int = 1;

View File

@ -1,12 +1,15 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.18; * @name: S7.5.3_A1.18;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "interface" token can not be used as identifier; * @assertion: The "interface" token can not be used as identifier in
* @description: Checking if execution of "interface = 1" fails; * strict code;
* @negative * @description: Checking if execution of "interface = 1" fails in
*/ * strict code;
* @negative
interface = 1; */
"use strict";
interface = 1;

View File

@ -0,0 +1,13 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S7.5.3_A1.18;
* @section: 7.5.3;
* @assertion: The "interface" token can be used as identifier in
* non-strict code;
* @description: Checking if execution of "interface = 1" succeeds in
* strict code;
*/
new Function('interface = 1');

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.19; * @name: S7.5.3_A1.19;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "long" token can not be used as identifier; * @assertion: The "long" token can be used as identifier;
* @description: Checking if execution of "long=1" fails; * @description: Checking if execution of "long=1" succeeds;
* @negative */
*/
long = 1;
long = 1;

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.2; * @name: S7.5.3_A1.2;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "boolean" token can not be used as identifier; * @assertion: The "boolean" token can be used as identifier;
* @description: Checking if execution of "boolean=1" fails; * @description: Checking if execution of "boolean=1" succeeds;
* @negative */
*/
boolean = 1;
boolean = 1;

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.20; * @name: S7.5.3_A1.20;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "native" token can not be used as identifier; * @assertion: The "native" token can be used as identifier;
* @description: Checking if execution of "native=1" fails; * @description: Checking if execution of "native=1" succeeds;
* @negative */
*/
native = 1;
native = 1;

View File

@ -1,12 +1,14 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.21; * @name: S7.5.3_A1.21;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "package" token can not be used as identifier; * @assertion: The "package" token can not be used as identifier in
* @description: Checking if execution of "package=1" fails; * strict code;
* @negative * @description: Checking if execution of "package=1" fails in strict code;
*/ * @negative
*/
package = 1;
"use strict";
package = 1;

View File

@ -0,0 +1,13 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S7.5.3_A1.21;
* @section: 7.5.3;
* @assertion: The "package" token can be used as identifier in
* non-strict code;
* @description: Checking if execution of "package=1" succeeds in
* non-strict code;
*/
new Function('package = 1');

View File

@ -1,12 +1,14 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.22; * @name: S7.5.3_A1.22;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "private" token can not be used as identifier; * @assertion: The "private" token can not be used as identifier in
* @description: Checking if execution of "private=1" fails; * strict code;
* @negative * @description: Checking if execution of "private=1" fails in strict code;
*/ * @negative
*/
private = 1;
"use strict";
private = 1;

View File

@ -0,0 +1,13 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S7.5.3_A1.22;
* @section: 7.5.3;
* @assertion: The "private" token can be used as identifier in
* non-strict code;
* @description: Checking if execution of "private=1" succeeds in
* non-strict code;
*/
new Function('private = 1');

View File

@ -1,12 +1,15 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.23; * @name: S7.5.3_A1.23;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "protected" token can not be used as identifier; * @assertion: The "protected" token can not be used as identifier in
* @description: Checking if execution of "protected=1" fails; * strict code;
* @negative * @description: Checking if execution of "protected=1" fails in
*/ * strict code;
* @negative
protected = 1; */
"use strict";
protected = 1;

View File

@ -0,0 +1,13 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S7.5.3_A1.23;
* @section: 7.5.3;
* @assertion: The "protected" token can be used as identifier in
* non-strict code;
* @description: Checking if execution of "protected=1" succeeds in
* non-strict code;
*/
new Function('protected = 1');

View File

@ -1,12 +1,14 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.24; * @name: S7.5.3_A1.24;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "public" token can not be used as identifier; * @assertion: The "public" token can not be used as identifier in
* @description: Checking if execution of "public=1" fails; * strict code;
* @negative * @description: Checking if execution of "public=1" fails in strict code;
*/ * @negative
*/
public = 1;
"use strict";
public = 1;

View File

@ -0,0 +1,13 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S7.5.3_A1.24;
* @section: 7.5.3;
* @assertion: The "public" token can be used as identifier in
* non-strict code;
* @description: Checking if execution of "public=1" succeeds in
* non-strict code;
*/
new Function('public = 1');

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.25; * @name: S7.5.3_A1.25;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "short" token can not be used as identifier; * @assertion: The "short" token can be used as identifier;
* @description: Checking if execution of "short=1" fails; * @description: Checking if execution of "short=1" succeeds;
* @negative */
*/
short = 1;
short = 1;

View File

@ -1,12 +1,14 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.26; * @name: S7.5.3_A1.26;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "static" token can not be used as identifier; * @assertion: The "static" token can not be used as identifier in
* @description: Checking if execution of "static=1" fails; * strict code;
* @negative * @description: Checking if execution of "static=1" fails in strict code;
*/ * @negative
*/
static = 1;
"use strict";
static = 1;

View File

@ -0,0 +1,13 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S7.5.3_A1.26;
* @section: 7.5.3;
* @assertion: The "static" token can be used as identifier in
* non-strict code;
* @description: Checking if execution of "static=1" succeeds in
* non-strict code;
*/
new Function('static = 1');

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.28; * @name: S7.5.3_A1.28;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "synchronized" token can not be used as identifier; * @assertion: The "synchronized" token can be used as identifier;
* @description: Checking if execution of "synchronized=1" fails; * @description: Checking if execution of "synchronized=1" succeeds;
* @negative */
*/
synchronized = 1;
synchronized = 1;

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.29; * @name: S7.5.3_A1.29;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "throws" token can not be used as identifier; * @assertion: The "throws" token can be used as identifier;
* @description: Checking if execution of "throws=1" fails; * @description: Checking if execution of "throws=1" succeeds;
* @negative */
*/
throws = 1;
throws = 1;

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.3; * @name: S7.5.3_A1.3;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "byte" token can not be used as identifier; * @assertion: The "byte" token can be used as identifier;
* @description: Checking if execution of "byte=1" fails; * @description: Checking if execution of "byte=1" succeeds;
* @negative */
*/
byte = 1;
byte = 1;

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.30; * @name: S7.5.3_A1.30;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "transient" token can not be used as identifier; * @assertion: The "transient" token can be used as identifier;
* @description: Checking if execution of "transient=1" fails; * @description: Checking if execution of "transient=1" succeeds;
* @negative */
*/
transient = 1;
transient = 1;

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.31; * @name: S7.5.3_A1.31;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "volatile" token can not be used as identifier; * @assertion: The "volatile" token can be used as identifier;
* @description: Checking if execution of "volatile=1" fails; * @description: Checking if execution of "volatile=1" succeeds;
* @negative */
*/
volatile = 1;
volatile = 1;

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.4; * @name: S7.5.3_A1.4;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "char" token can not be used as identifier; * @assertion: The "char" token can be used as identifier;
* @description: Checking if execution of "char=1" fails; * @description: Checking if execution of "char=1" succeeds;
* @negative */
*/
char = 1;
char = 1;

View File

@ -1,12 +1,11 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.5.3_A1.8; * @name: S7.5.3_A1.8;
* @section: 7.5.3; * @section: 7.5.3;
* @assertion: The "double" token can not be used as identifier; * @assertion: The "double" token can be used as identifier;
* @description: Checking if execution of "double=1" fails; * @description: Checking if execution of "double=1" succeeds;
* @negative */
*/
double = 1;
double = 1;

View File

@ -1,20 +1,15 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.8.5_A3.1_T7; * @name: S7.8.5_A3.1_T7;
* @section: 7.8.5, 15.10.4.1; * @section: 7.8.5, 15.10.4.1;
* @assertion: RegularExpressionFlags :: IdentifierPart; * @assertion: RegularExpressionFlags :: IdentifierPart;
* @description: IdentifierPart :: \u0067 (g); * @description: IdentifierPart :: \u0067 (g);
*/ */
//CHECK#1 //CHECK#1
var regexp = /(?:)/\u0067;
//Test262 Change if (regexp.global !== true) {
//var regexp = /(?:)/\u0067; $ERROR('#1: var regexp = /(?:)/\\u0067; regexp.global === true. Actual: ' + (regexp.global));
var regexp; }
eval('regexp = /(?:)/\\u0067;');
if (regexp.global !== true) {
$ERROR('#1: var regexp = /(?:)/\\u0067; regexp.global === true. Actual: ' + (regexp.global));
}

View File

@ -1,21 +1,15 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.8.5_A3.1_T8; * @name: S7.8.5_A3.1_T8;
* @section: 7.8.5, 15.10.4.1; * @section: 7.8.5, 15.10.4.1;
* @assertion: RegularExpressionFlags :: IdentifierPart; * @assertion: RegularExpressionFlags :: IdentifierPart;
* @description: IdentifierPart :: \u0069 (i); * @description: IdentifierPart :: \u0069 (i);
*/ */
//CHECK#1 //CHECK#1
var regexp = /(?:)/\u0069;
//Test262 Change if (regexp.ignoreCase !== true) {
//var regexp = /(?:)/\u0069; $ERROR('#1: var regexp = /(?:)/\\u0069; regexp.ignoreCase === true. Actual: ' + (regexp.ignoreCase));
}
var regexp;
eval('regexp = /(?:)/\\u0069;');
if (regexp.ignoreCase !== true) {
$ERROR('#1: var regexp = /(?:)/\\u0069; regexp.ignoreCase === true. Actual: ' + (regexp.ignoreCase));
}

View File

@ -1,20 +1,15 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S7.8.5_A3.1_T9; * @name: S7.8.5_A3.1_T9;
* @section: 7.8.5, 15.10.4.1; * @section: 7.8.5, 15.10.4.1;
* @assertion: RegularExpressionFlags :: IdentifierPart; * @assertion: RegularExpressionFlags :: IdentifierPart;
* @description: IdentifierPart :: \u006D (m); * @description: IdentifierPart :: \u006D (m);
*/ */
//CHECK#1 //CHECK#1
var regexp = /(?:)/\u006D;
//Test262 Change if (regexp.multiline !== true) {
//var regexp = /(?:)/\u006D; $ERROR('#1: var regexp = /(?:)/\\u006D; regexp.multiline === true. Actual: ' + (regexp.multiline));
var regexp; }
eval('regexp = /(?:)/\\u006D;');
if (regexp.multiline !== true) {
$ERROR('#1: var regexp = /(?:)/\\u006D; regexp.multiline === true. Actual: ' + (regexp.multiline));
}

View File

@ -1,57 +1,59 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S12.10_A3.3_T4; * @name: S12.10_A3.3_T4;
* @section: 12.10; * @section: 12.10;
* @assertion: No matter how control leaves the embedded 'Statement', * @assertion: No matter how control leaves the embedded 'Statement',
* the scope chain is always restored to its former state; * the scope chain is always restored to its former state;
* @description: Declaring "with" statement within a function constructor, leading to completion by exception; * @description: Declaring "with" statement within a function
* @strict_mode_negative * constructor, leading to completion by exception;
*/ * @strict_mode_negative
*/
this.p1 = 1;
this.p1 = 1;
var result = "result";
var result = "result";
var myObj = {
p1: 'a', var myObj = {
value: 'myObj_value', p1: 'a',
valueOf : function(){return 'obj_valueOf';} value: 'myObj_value',
} valueOf : function(){return 'obj_valueOf';}
};
try {
function __FACTORY(){ function __FACTORY(){
with(myObj){ with(myObj){
p1 = 'x1'; var p1 = 'x1';
throw value; throw value;
} }
} }
var obj = new __FACTORY();
} catch(e){ try {
result = p1; var obj = new __FACTORY();
} } catch(e){
result = p1;
////////////////////////////////////////////////////////////////////////////// }
//CHECK#1
if(result !== 1){ //////////////////////////////////////////////////////////////////////////////
$ERROR('#1: result === 1. Actual: result ==='+ result ); //CHECK#1
} if (result !== 1) {
// $ERROR('#1: result === 1. Actual: result ==='+ result );
////////////////////////////////////////////////////////////////////////////// }
//
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
//CHECK#2
if(p1 !== 1){ //////////////////////////////////////////////////////////////////////////////
$ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 ); //CHECK#2
} if (p1 !== 1) {
// $ERROR('#2: p1 === 1. Actual: p1 ==='+ p1 );
////////////////////////////////////////////////////////////////////////////// }
//
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
//CHECK#3
if(myObj.p1 !== "x1"){ //////////////////////////////////////////////////////////////////////////////
$ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 ); //CHECK#3
} if (myObj.p1 !== "x1") {
// $ERROR('#3: myObj.p1 === "x1". Actual: myObj.p1 ==='+ myObj.p1 );
////////////////////////////////////////////////////////////////////////////// }
//
//////////////////////////////////////////////////////////////////////////////

View File

@ -1,77 +1,78 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S12.14_A14; * @name: S12.14_A14;
* @section: 12.14; * @section: 12.14;
* @assertion: Using "try" with "catch" or "finally" statement within/without a "with" statement; * @assertion: Using "try" with "catch" or "finally" statement within/without a "with" statement;
* @description: Using try/catch/finally in With and With in try/catch/finally; * @description: Using try/catch/finally in With and With in try/catch/finally;
*/ * @strict_mode_negative SyntaxError;
*/
var myObj = {p1: 'a',
p2: 'b', var myObj = {p1: 'a',
p3: 'c', p2: 'b',
value: 'myObj_value', p3: 'c',
valueOf : function(){return 'obj_valueOf';}, value: 'myObj_value',
parseInt : function(){return 'obj_parseInt';}, valueOf : function(){return 'obj_valueOf';},
NaN : 'obj_NaN', parseInt : function(){return 'obj_parseInt';},
Infinity : 'obj_Infinity', NaN : 'obj_NaN',
eval : function(){return 'obj_eval';}, Infinity : 'obj_Infinity',
parseFloat : function(){return 'obj_parseFloat';}, eval : function(){return 'obj_eval';},
isNaN : function(){return 'obj_isNaN';}, parseFloat : function(){return 'obj_parseFloat';},
isFinite : function(){return 'obj_isFinite';} isNaN : function(){return 'obj_isNaN';},
} isFinite : function(){return 'obj_isFinite';}
}
// CHECK#1
try{ // CHECK#1
with(myObj){ try{
throw "ex"; with(myObj){
} throw "ex";
} }
catch(e){ }
if (e!=="ex") $ERROR('#1: Exception ==="ex". Actual: Exception ==='+ e ); catch(e){
} if (e!=="ex") $ERROR('#1: Exception ==="ex". Actual: Exception ==='+ e );
}
// CHECK#2
with(myObj){ // CHECK#2
try{ with(myObj){
throw p1; try{
} throw p1;
catch(e){ }
if (e!=="a") $ERROR('#2.1: Exception ==="a". Actual: Exception ==='+ e ); catch(e){
p1='pass'; if (e!=="a") $ERROR('#2.1: Exception ==="a". Actual: Exception ==='+ e );
} p1='pass';
} }
if(myObj.p1!=='pass') $ERROR('#2.2: "throw p1" lead to throwing exception'); }
if(myObj.p1!=='pass') $ERROR('#2.2: "throw p1" lead to throwing exception');
// CHECK#3
with(myObj){ // CHECK#3
try{ with(myObj){
p1='fail'; try{
throw p2; p1='fail';
} throw p2;
catch(e){ }
if (e!=="b") $ERROR('#3.1: Exception ==="b". Actual: Exception ==='+ e ); catch(e){
p1='pass'; if (e!=="b") $ERROR('#3.1: Exception ==="b". Actual: Exception ==='+ e );
} p1='pass';
finally{ }
p2='pass'; finally{
} p2='pass';
} }
if(myObj.p1!=='pass') $ERROR('#3.2: "throw p2" lead to throwing exception'); }
if(myObj.p2!=='pass') $ERROR('#3.3: "finally" block must be evaluated'); if(myObj.p1!=='pass') $ERROR('#3.2: "throw p2" lead to throwing exception');
if(myObj.p2!=='pass') $ERROR('#3.3: "finally" block must be evaluated');
// CHECK#4
myObj.p1='fail'; // CHECK#4
try{ myObj.p1='fail';
with(myObj){ try{
try{ with(myObj){
throw p3; try{
} throw p3;
finally{ }
p1='pass'; finally{
} p1='pass';
} }
} }
catch(e){} }
if(myObj.p1!=='pass') $ERROR('#4: "finally" block must be evaluated'); catch(e){}
if(myObj.p1!=='pass') $ERROR('#4: "finally" block must be evaluated');

View File

@ -1,35 +1,36 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S12.14_A4; * @name: S12.14_A4;
* @section: 12.14; * @section: 12.14;
* @assertion: Sanity test for "catch(Indetifier) statement"; * @assertion: Sanity test for "catch(Indetifier) statement";
* @description: Checking if deleting an exception fails; * @description: Checking if deleting an exception fails;
*/ * @strict_mode_negative SyntaxError;
*/
// CHECK#1
try { // CHECK#1
throw "catchme"; try {
$ERROR('#1.1: throw "catchme" lead to throwing exception'); throw "catchme";
} $ERROR('#1.1: throw "catchme" lead to throwing exception');
catch (e) { }
if (delete e){ catch (e) {
$ERROR('#1.2: Exception has DontDelete property'); if (delete e){
} $ERROR('#1.2: Exception has DontDelete property');
if (e!=="catchme") { }
$ERROR('#1.3: Exception === "catchme". Actual: Exception ==='+ e ); if (e!=="catchme") {
} $ERROR('#1.3: Exception === "catchme". Actual: Exception ==='+ e );
} }
}
// CHECK#2
try { // CHECK#2
throw "catchme"; try {
$ERROR('#2.1: throw "catchme" lead to throwing exception'); throw "catchme";
} $ERROR('#2.1: throw "catchme" lead to throwing exception');
catch(e){} }
try{ catch(e){}
e; try{
$ERROR('#2.2: Deleting catching exception after ending "catch" block'); e;
} $ERROR('#2.2: Deleting catching exception after ending "catch" block');
catch(err){} }
catch(err){}

View File

@ -1,13 +1,18 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S12.1_A1; * @name: S12.1_A1;
* @section: 12.1; * @section: 12.1;
* @assertion: The production Block { } can't contain function declaration; * @assertion: The production Block { } in strict code can't contain
* @description: Trying to declare function at the Block statement; * function declaration;
* @negative; * @description: Trying to declare function at the Block statement;
*/ * @negative SyntaxError;
{ */
function __func(){}
} "use strict";
if (!strict_mode) { throw new SyntaxError('unspecified case'); }
{
function __func(){}
}

View File

@ -1,25 +1,25 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S12.5_A7; * @name: S12.5_A7;
* @section: 12.5; * @section: 12.5;
* @assertion: In the "if" statement empty statement is allowed and is evaluated to "undefined"; * @assertion: In the "if" statement empty statement is allowed and is evaluated to "undefined";
* @description: Checking by using eval "eval("if(1);"))"; * @description: Checking by using eval "eval("if(1);"))";
*/ */
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
//CHECK#1 //CHECK#1
try { try {
__evaluated = eval("if(1);"); var __evaluated = eval("if(1);");
if (__evaluated !== undefined) { if (__evaluated !== undefined) {
$ERROR('#1: __evaluated === undefined. Actual: __evaluated ==='+ __evaluated ); $ERROR('#1: __evaluated === undefined. Actual: __evaluated ==='+ __evaluated );
} }
} catch (e) { } catch (e) {
$ERROR('#1.1: "__evaluated = eval("if(1);")" does not lead to throwing exception'); $ERROR('#1.1: "__evaluated = eval("if(1);")" does not lead to throwing exception');
} }
// //
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////

View File

@ -1,16 +1,20 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S12.5_A9_T1; * @name: S12.5_A9_T1;
* @section: 12.5; * @section: 12.5;
* @assertion: Function declaration within an "if" statement is not allowed; * @assertion: Function declaration within an "if" statement in strict
* @description: Declaring function within an "if" statement; * code is not allowed;
* @negative; * @description: Declaring function within an "if" statement;
*/ * @negative SyntaxError;
*/
if (true) {
function __func(){}; "use strict";
} else { if (!strict_mode) { throw new SyntaxError('unspecified case'); }
function __func(){};
} if (true) {
function __func(){};
} else {
function __func(){};
}

View File

@ -1,20 +1,23 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S12.5_A9_T2; * @name: S12.5_A9_T2;
* @section: 12.5; * @section: 12.5;
* @assertion: Function declaration within an "if" statement is not allowed; * @assertion: Function declaration within an "if" statement in strict
* @description: Declaring function within and "if" that is declared within the function call; * code is not allowed;
* @negative; * @description: Declaring function within an "if" that is declared
*/ * within the strict function;
* @negative SyntaxError;
(function(){ */
if (true) { (function(){
function __func(){}; "use strict";
} else {
function __func(){}; if (true) {
} function __func(){};
} else {
})(); function __func(){};
}
});

View File

@ -1,39 +1,41 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S12.6.1_A1; * @name: S12.6.1_A1;
* @section: 12.6.1; * @section: 12.6.1;
* @assertion: When the production "do Statement while ( Expression )" is evaluated, Statement is evaluated first; * @assertion: When the production "do Statement while ( Expression )" is evaluated, Statement is evaluated first;
* @description: Evaluating various Expressions; * @description: Evaluating various Expressions;
*/ */
do __in__do=1; while ( false ); var __in__do;
////////////////////////////////////////////////////////////////////////////// do __in__do=1; while ( false );
//CHECK#1
if (__in__do!==1) { //////////////////////////////////////////////////////////////////////////////
$ERROR('#1: false evaluates to false'); //CHECK#1
} if (__in__do!==1) {
// $ERROR('#1: false evaluates to false');
////////////////////////////////////////////////////////////////////////////// }
//
do __in__do=2; while ( 0 ); //////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////// do __in__do=2; while ( 0 );
//CHECK#2
if (__in__do!==2) { //////////////////////////////////////////////////////////////////////////////
$ERROR('#2: 0 evaluates to false'); //CHECK#2
} if (__in__do!==2) {
// $ERROR('#2: 0 evaluates to false');
////////////////////////////////////////////////////////////////////////////// }
//
do __in__do=3; while ( "" ); //////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////// do __in__do=3; while ( "" );
//CHECK#3
if (__in__do!==3) { //////////////////////////////////////////////////////////////////////////////
$ERROR('#3: "" evaluates to false'); //CHECK#3
} if (__in__do!==3) {
// $ERROR('#3: "" evaluates to false');
////////////////////////////////////////////////////////////////////////////// }
//
//////////////////////////////////////////////////////////////////////////////

View File

@ -1,14 +1,18 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S12.6.1_A13_T1; * @name: S12.6.1_A13_T1;
* @section: 12.6.1, 13; * @section: 12.6.1, 13;
* @assertion: FunctionDeclaration within a "do-while" Block is not allowed; * @assertion: FunctionDeclaration within a "do-while" Block in strict
* @description: Declaring function within a "do-while" loop; * code is not allowed;
* @negative; * @description: Declaring function within a "do-while" loop;
*/ * @negative SyntaxError;
*/
do{
function __func(){}; "use strict";
} while(0); if (!strict_mode) { throw new SyntaxError('unspecified case'); }
do{
function __func(){};
} while(0);

View File

@ -1,18 +1,20 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S12.6.1_A13_T2; * @name: S12.6.1_A13_T2;
* @section: 12.6.1, 13; * @section: 12.6.1, 13;
* @assertion: FunctionDeclaration within a "do-while" Block is not allowed; * @assertion: FunctionDeclaration within a "do-while" Block in strict
* @description: Declaring a function within a "do-while" loop that is within a function call; * code is not allowed;
* @negative; * @description: Declaring a function within a "do-while" loop that is
*/ * within a strict function;
* @negative SyntaxError;
(function(){ */
do{ (function(){
function __func(){}; "use strict";
}while(0); do{
function __func(){};
})(); }while(0);
});

View File

@ -0,0 +1,18 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.10.6.2_A12;
* @section: 15.10.6.2;
* @assertion: regExp exec() acts like regExp.exec('undefined') (step 2);
* @description: Checking RegExp.prototype.exec.length;
*/
(/foo/).test('xfoox');
var match = new RegExp('(.|\r|\n)*','').exec()[0];
if (match === 'xfoox') {
$FAIL('#1: regExp.exec() leaks match globally');
}
if (match !== 'undefined') {
$FAIL('#2: regExp.exec() must coerce absent first arg to "undefined"');
}

View File

@ -0,0 +1,19 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.12.2_A1;
* @section: 15.12.2;
* @assertion: JSON.parse must create a property with the given
* property name;
* @description: Tests that JSON.parse treats "__proto__" as a regular
* property name;
*/
var x = JSON.parse('{"__proto__":[]}');
if (Object.getPrototypeOf(x) !== Object.prototype) {
$FAIL('#1: JSON.parse confused by "__proto__"');
}
if (!Array.isArray(x.__proto__)) {
$FAIL('#2: JSON.parse did not set "__proto__" as a regular property');
}

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.2_A12;
* @section: 15.2.4.2;
* @assertion: If the this value is undefined, return "[object Undefined]".
*/
if (Object.prototype.toString.call(undefined) !== "[object Undefined]") {
$ERROR('If the this value is undefined, return "[object Undefined]".');
}

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.2_A13;
* @section: 15.2.4.2;
* @assertion: If the this value is null, return "[object Null]".
*/
if (Object.prototype.toString.call(null) !== "[object Null]") {
$ERROR('If the this value is null, return "[object Null]".');
}

View File

@ -0,0 +1,14 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.2_A14;
* @section: 15.2.4.2;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
*/
if (Object.prototype.toString.call(33) !== "[object Number]") {
$ERROR('Let O be the result of calling ToObject passing the this ' +
'value as the argument.');
}

View File

@ -0,0 +1,14 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.2_A15;
* @section: 15.2.4.2;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
*/
if (Object.prototype.toString.call(true) !== "[object Boolean]") {
$ERROR('Let O be the result of calling ToObject passing the this ' +
'value as the argument.');
}

View File

@ -0,0 +1,14 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.2_A16;
* @section: 15.2.4.2;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
*/
if (Object.prototype.toString.call('foo') !== "[object String]") {
$ERROR('Let O be the result of calling ToObject passing the this ' +
'value as the argument.');
}

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.3_A12;
* @section: 15.2.4.3;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
* @negative
*/
Object.prototype.toLocaleString.call(undefined);

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.3_A13;
* @section: 15.2.4.3;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
* @negative
*/
Object.prototype.toLocaleString.call(null);

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.4_A12;
* @section: 15.2.4.4;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
* @negative
*/
Object.prototype.valueOf.call(undefined);

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.4_A13;
* @section: 15.2.4.4;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
* @negative
*/
Object.prototype.valueOf.call(null);

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.4_A14;
* @section: 15.2.4.4;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
* @negative
*/
(1,Object.prototype.valueOf)();

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.5_A12;
* @section: 15.2.4.5;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
* @negative
*/
Object.prototype.hasOwnProperty.call(undefined, 'foo');

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.5_A13;
* @section: 15.2.4.5;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
* @negative
*/
Object.prototype.hasOwnProperty.call(null, 'foo');

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.6_A12;
* @section: 15.2.4.6;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
* @negative
*/
Object.prototype.isPrototypeOf.call(undefined, {});

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.6_A13;
* @section: 15.2.4.6;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
* @negative
*/
Object.prototype.isPrototypeOf.call(null, {});

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.7_A12;
* @section: 15.2.4.7;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
* @negative
*/
Object.prototype.propertyIsEnumerable.call(undefined, 'foo');

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.2.4.7_A13;
* @section: 15.2.4.7;
* @assertion: Let O be the result of calling ToObject passing the this
* value as the argument.
* @negative
*/
Object.prototype.propertyIsEnumerable.call(null, 'foo');

View File

@ -1,23 +1,23 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S15.3.4.2_A10; * @name: S15.3.4.2_A10;
* @section: 15.3.4.2; * @section: 15.3.4.2;
* @assertion: The Function.prototype.toString.length property has the attribute ReadOnly; * @assertion: The Function.prototype.toString.length property has the attribute ReadOnly;
* @description: Checking if varying the Function.prototype.toString.length property fails; * @description: Checking if varying the Function.prototype.toString.length property fails;
*/ */
//CHECK#1 //CHECK#1
if (!(Function.prototype.toString.hasOwnProperty('length'))) { if (!(Function.prototype.toString.hasOwnProperty('length'))) {
$FAIL('#1: the Function.prototype.toString has length property.'); $FAIL('#1: the Function.prototype.toString has length property.');
} }
obj = Function.prototype.toString.length; var obj = Function.prototype.toString.length;
Function.prototype.toString.length = function(){return "shifted";}; Function.prototype.toString.length = function(){return "shifted";};
//CHECK#2 //CHECK#2
if (Function.prototype.toString.length !== obj) { if (Function.prototype.toString.length !== obj) {
$ERROR('#2: the Function.prototype.toString length property has the attributes ReadOnly.'); $ERROR('#2: the Function.prototype.toString length property has the attributes ReadOnly.');
} }

View File

@ -0,0 +1,13 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.2_A12;
* @section: 15.3.4.2;
* @assertion: The Function.prototype.toString function is not generic;
* it throws a TypeError exception if its this value is not
* a Function object.
* @negative TypeError;
*/
Function.prototype.toString.call(undefined);

View File

@ -0,0 +1,13 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.2_A13;
* @section: 15.3.4.2;
* @assertion: The toString function is not generic; it throws a
* TypeError exception if its this value is not a Function
* object.
* @negative TypeError;
*/
Function.prototype.toString.call(null);

View File

@ -0,0 +1,13 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.2_A14;
* @section: 15.3.4.2;
* @assertion: The toString function is not generic; it throws a
* TypeError exception if its this value is not a Function
* object.
* @negative TypeError;
*/
Function.prototype.toString.call({});

View File

@ -0,0 +1,16 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.2_A15;
* @section: 15.3.4.2;
* @assertion: The toString function is not generic; it throws a
* TypeError exception if its this value is not a Function
* object.
* @description: Whether or not they are callable, RegExp objects are
* not Function objects, so toString should throw a
* TypeError.
* @negative TypeError;
*/
Function.prototype.toString.call(/x/);

View File

@ -0,0 +1,18 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.2_A16;
* @section: 15.3.4.2;
* @assertion: The toString function is not generic; it throws a
* TypeError exception if its this value is not a Function
* object.
* @description: The String constructor, given an object, should invoke
* that object's toString method as a method, i.e., with
* its this value bound to that object.
* @negative TypeError;
*/
var obj = {toString: Function.prototype.toString};
String(obj);

View File

@ -1,18 +1,18 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S15.3.4.2_A1_T1; * @name: S15.3.4.2_A1_T1;
* @section: 15.3.4.2; * @section: 15.3.4.2;
* @assertion: An implementation-dependent representation of the function is returned. This representation has the syntax of a FunctionDeclaration; * @assertion: An implementation-dependent representation of the function is returned. This representation has the syntax of a FunctionDeclaration;
* @description: For testing use Function.prototype.toString() function; * @description: For testing use Function.prototype.toString() function;
*/ */
f = function(x) { var f = function(x) {
return x*x; return x*x;
} };
//CHECK#1 //CHECK#1
if (eval(f.toString())(10) !== f(10)) { if (eval(f.toString())(10) !== f(10)) {
$ERROR('#1: An implementation-dependent representation of the function is returned. This representation has the syntax of a FunctionDeclaration'); $ERROR('#1: An implementation-dependent representation of the function is returned. This representation has the syntax of a FunctionDeclaration');
} }

View File

@ -0,0 +1,11 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.3_A13;
* @section: 15.3.4.3;
* @assertion: If IsCallable(func) is false, then throw a TypeError exception.
* @negative TypeError;
*/
Function.prototype.apply.call(undefined, {}, []);

View File

@ -0,0 +1,11 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.3_A14;
* @section: 15.3.4.3;
* @assertion: If IsCallable(func) is false, then throw a TypeError exception.
* @negative TypeError;
*/
Function.prototype.apply.call(null, {}, []);

View File

@ -0,0 +1,11 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.3_A15;
* @section: 15.3.4.3;
* @assertion: If IsCallable(func) is false, then throw a TypeError exception.
* @negative TypeError;
*/
Function.prototype.apply.call({}, {}, []);

View File

@ -0,0 +1,27 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.3_A16;
* @section: 15.3.4.3;
* @assertion: If IsCallable(func) is false, then throw a TypeError exception.
* @description: A RegExp is not a function, but it may be
* callable. Iff it is, it's typeof should be 'function',
* in which case apply should accept it as a valid this
* value.
*/
var re = (/x/);
if (typeof re === 'function') {
Function.prototype.apply.call(re, undefined, ['x']);
} else {
try {
Function.prototype.bind.call(re, undefined);
$FAIL('#1: If IsCallable(func) is false, ' +
'then (bind should) throw a TypeError exception');
} catch (e) {
if (!(e instanceof TypeError)) {
$ERROR('#1: TypeError expected. Actual: ' + e);
}
}
}

View File

@ -0,0 +1,11 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.4_A13;
* @section: 15.3.4.4;
* @assertion: If IsCallable(func) is false, then throw a TypeError exception.
* @negative TypeError;
*/
Function.prototype.call.call(undefined, {});

View File

@ -0,0 +1,11 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.4_A14;
* @section: 15.3.4.4;
* @assertion: If IsCallable(func) is false, then throw a TypeError exception.
* @negative TypeError;
*/
Function.prototype.call.call(null, {});

View File

@ -0,0 +1,11 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.4_A15;
* @section: 15.3.4.4;
* @assertion: If IsCallable(func) is false, then throw a TypeError exception.
* @negative TypeError;
*/
Function.prototype.call.call({}, {});

View File

@ -0,0 +1,27 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.4_A16;
* @section: 15.3.4.4;
* @assertion: If IsCallable(func) is false, then throw a TypeError exception.
* @description: A RegExp is not a function, but it may be
* callable. Iff it is, it's typeof should be 'function',
* in which case call should accept it as a valid this
* value.
*/
var re = (/x/);
if (typeof re === 'function') {
Function.prototype.call.call(re, undefined, 'x');
} else {
try {
Function.prototype.bind.call(re, undefined);
$FAIL('#1: If IsCallable(func) is false, ' +
'then (bind should) throw a TypeError exception');
} catch (e) {
if (!(e instanceof TypeError)) {
$ERROR('#1: TypeError expected. Actual: ' + e);
}
}
}

View File

@ -0,0 +1,15 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.5_A1;
* @section: 15.3.4.5;
* @assertion: "caller" of bound function is poisoned (step 20);
* @description A bound function should fail to find its "caller";
* @negative TypeError;
*/
function foo() { return bar.caller; }
var bar = foo.bind({});
function baz() { return bar(); }
baz();

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.5_A13;
* @section: 15.3.4.5;
* @assertion: If IsCallable(func) is false, then throw a TypeError exception.
* @negative TypeError;
*/
Function.prototype.bind.call(undefined, {});

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.5_A14;
* @section: 15.3.4.5;
* @assertion: If IsCallable(func) is false, then throw a TypeError exception.
* @negative TypeError;
*/
Function.prototype.bind.call(null, {});

View File

@ -0,0 +1,12 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.5_A15;
* @section: 15.3.4.5;
* @assertion: If IsCallable(func) is false, then throw a TypeError exception.
* @negative TypeError;
*/
Function.prototype.bind.call({}, {});

View File

@ -0,0 +1,27 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.5_A16;
* @section: 15.3.4.5;
* @assertion: If IsCallable(func) is false, then throw a TypeError exception.
* @description: A RegExp is not a function, but it may be
* callable. Iff it is, it's typeof should be 'function',
* in which case bind should accept it as a valid this
* value.
*/
var re = (/x/);
if (typeof re === 'function') {
Function.prototype.bind.call(re, undefined);
} else {
try {
Function.prototype.bind.call(re, undefined);
$FAIL('#1: If IsCallable(func) is false, ' +
'then (bind should) throw a TypeError exception');
} catch (e) {
if (!(e instanceof TypeError)) {
$ERROR('#1: TypeError expected. Actual: ' + e);
}
}
}

View File

@ -0,0 +1,16 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.3.4.5_A1;
* @section: 15.3.4.5;
* @assertion: "arguments" of bound function is poisoned (step 21);
* @description a bound function should fail to find the bound function
* "arguments";
* @negative TypeError;
*/
function foo() { return bar.arguments; }
var bar = foo.bind({});
function baz() { return bar(); }
baz();

View File

@ -1,17 +1,15 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S15.3.4_A1; * @name: S15.3.4_A1;
* @section: 15.3.4; * @section: 15.3.4;
* @assertion: The Function prototype object is itself a Function object (its [[Class]] is "Function"); * @assertion: The Function prototype object is itself a Function
* @description: first we delete Function.prototype.toString cause it overrides Object prototype toString. * object (its [[Class]] is "Function");
* Object.prototype.toString returns [object+[[class]]+]; * @description: Object.prototype.toString returns [object+[[Class]]+];
*/ */
delete Function.prototype.toString; if (Object.prototype.toString.call(Function.prototype) !== "[object Function]") {
$ERROR('#2: The Function prototype object is itself a Function ' +
//CHECK#1 'object (its [[Class]] is "Function") (15.3.4)');
if (Function.prototype.toString() !== "[object "+"Function"+"]") { }
$ERROR('#1: The Function prototype object is itself a Function object (its [[Class]] is "Function")');
}

View File

@ -1,21 +1,17 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S15.3.4_A3_T1; * @name: S15.3.4_A3_T1;
* @section: 15.3.4, 15.3.2.1; * @section: 15.3.4;
* @assertion: The value of the internal [[Prototype]] property of the Function prototype object is the Object prototype object (15.3.2.1); * @assertion: The value of the internal [[Prototype]] property of the
* @description: Checking prototype of Function.prototype; * Function prototype object is the Object prototype object
*/ * (15.3.4);
* @description: Checking prototype of Function.prototype;
//CHECK#1 */
if (!(Object.prototype.isPrototypeOf(Function.prototype))) {
$ERROR('#1: The value of the internal [[Prototype]] property of the Function prototype object is the Object prototype object (15.3.2.1)'); if (Object.getPrototypeOf(Function.prototype) !== Object.prototype) {
} $ERROR('#1: The value of the internal [[Prototype]] property of ' +
'the Function prototype object is the Object prototype ' +
delete Function.prototype.toString; 'object (15.3.4)');
}
//CHECK#2
if (Function.prototype.toString() !== "[object "+"Function"+"]") {
$ERROR('#2: The value of the internal [[Prototype]] property of the Function prototype object is the Object prototype object (15.3.2.1)');
}

View File

@ -1,21 +1,23 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S15.3.5.1_A1_T1; * @name: S15.3.5.1_A1_T1;
* @section: 15.3.5.1; * @section: 15.3.5.1;
* @assertion: The value of the length property is usually an integer that indicates the 'typical' number of arguments expected by the function; * @assertion: The value of the length property is usually an integer
* @description: Checking length property of Function("arg1,arg2,arg3", null); * that indicates the 'typical' number of arguments
*/ * expected by the function;
* @description: Checking length property of Function("arg1,arg2,arg3", null);
f = new Function("arg1,arg2,arg3", null); */
//CHECK#1 f = new Function("arg1,arg2,arg3", null);
if (!(f.hasOwnProperty('length'))) {
$FAIL('#1: the function has length property.'); //CHECK#1
} if (!(f.hasOwnProperty('length'))) {
$FAIL('#1: the function has length property.');
//CHECK#2 }
if (f.length !== 3) {
$ERROR('#2: The value of the length property is usually an integer that indicates the "typical" number of arguments expected by the function'); //CHECK#2
} if (f.length !== 3) {
$ERROR('#2: The value of the length property is usually an integer that indicates the "typical" number of arguments expected by the function');
}

View File

@ -1,20 +1,15 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S15.3.5_A1_T1; * @name: S15.3.5_A1_T1;
* @section: 15.3.5; * @section: 15.3.5;
* @assertion: The value of the [[Class]] property is "Function" ; * @assertion: The value of the [[Class]] property is "Function";
* @description: We delete Function.prototype.toString method to access Object.prototype.toString method. * @description: For testing use variable f = new Function;
* For testing use variable f = new Function; */
*/
var f = new Function;
f = new Function;
if (Object.prototype.toString.call(f) !== "[object Function]") {
delete Function.prototype.toString; $ERROR('#1: The value of the [[Class]] property is "Function"');
}
//CHECK#1
if (f.toString() !== "[object "+"Function"+"]") {
$ERROR('#1: The value of the [[Class]] property is "Function"');
}

View File

@ -1,20 +1,16 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S15.3.5_A1_T2; * @name: S15.3.5_A1_T2;
* @section: 15.3.5; * @section: 15.3.5;
* @assertion: The value of the [[Class]] property is "Function" ; * @assertion: The value of the [[Class]] property is "Function" ;
* @description: We delete Function.prototype.toString method to access Object.prototype.toString method * @description: For testing use variable f = Function();
* For testing use variable f = Function(); */
*/
var f = Function();
f = Function();
if (Object.prototype.toString.call(f) !== "[object Function]") {
delete Function.prototype.toString; $ERROR('#1: The value of the [[Class]] property is "Function"');
}
//CHECK#1
if (f.toString() !== "[object "+"Function"+"]") {
$ERROR('#1: The value of the [[Class]] property is "Function"');
}

View File

@ -0,0 +1,24 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.4.4.11_A8;
* @section: 15.4.4.11;
* @assertion: Call the comparefn passing undefined as the this value
* (step 13b);
* @description: comparefn tests that its this value is undefined;
*/
var global = this;
[2,3].sort(function(x,y) {
"use strict";
if (this === global) {
$FAIL('#1: Sort leaks global');
}
if (this !== undefined) {
$FAIL('#2: Sort comparefn should be called with this===undefined. ' +
'Actual: ' + this);
}
return x - y;
});

View File

@ -0,0 +1,11 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.4.4.18_A1;
* @section: 15.4.4.18;
* @assertion: array.forEach can be frozen while in progress
* @description: Freezes array.forEach during a forEach to see if it works
*/
['z'].forEach(function(){ Object.freeze(Array.prototype.forEach); });

View File

@ -0,0 +1,14 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.4.4.18_A2;
* @section: 15.4.4.18;
* @assertion: array.forEach can be frozen while in progress
* @description: Freezes array.forEach during a forEach to see if it works
*/
function foo() {
['z'].forEach(function(){ Object.freeze(Array.prototype.forEach); });
}
foo();

View File

@ -1,17 +1,15 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S15.4.4_A1.1_T2; * @name: S15.4.4_A1.1_T2;
* @section: 15.4.4, 11.4.1; * @section: 15.4.4;
* @assertion: The value of the internal [[Prototype]] property of * @assertion:The Array prototype object is itself an array; its
* the Array prototype object is the Object prototype object; * [[Class]] is "Array",
* @description: delete Array.prototype.toString; */
* @strict_mode_negative
*/ //CHECK#1
if (Object.prototype.toString.call(Array.prototype) !== "[object Array]") {
//CHECK#1 $ERROR('The Array prototype object is itself an array; its' +
delete Array.prototype.toString; '[[Class]] is "Array".');
if (Array.prototype.toString() !== "[object " + "Array" + "]") { }
$ERROR('#1: delete Array.prototype.toString; var Array.prototype = Object(); Array.prototype.toString() === "[object " + "Array" + "]". Actual: ' + (Array.prototype.toString()));
}

View File

@ -0,0 +1,23 @@
// Copyright 2011 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/**
* @name: S15.5.4.11_A12;
* @section: 15.5.4.11;
* @assertion: Call replaceValue passing undefined as the this value;
* @description: replaceValue tests that its this value is undefined;
*/
var global = this;
'x'.replace(/x/, function() {
"use strict";
if (this === global) {
$FAIL('#1: String replace leaks global');
}
if (this !== undefined) {
$FAIL('#2: replaceValue should be called with this===undefined. ' +
'Actual: ' + this);
}
return 'y';
});

View File

@ -1,24 +1,21 @@
// Copyright 2009 the Sputnik authors. All rights reserved. // Copyright 2009 the Sputnik authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/** /**
* @name: S15.5.4.8_A1_T1; * @name: S15.5.4.8_A1_T1;
* @section: 15.5.4.8; * @section: 15.5.4.8;
* @assertion: String.prototype.lastIndexOf(searchString, position); * @assertion: String.prototype.lastIndexOf(searchString, position);
* @description: Arguments are false and true, and instance is object; * @description: Arguments are false and true, and instance is object;
*/ */
var __instance = new Object(true); var __instance = new Object(true);
//Test262 Change var __instance.lastIndexOf = String.prototype.lastIndexOf;
//var __instance.lastIndexOf = String.prototype.lastIndexOf;
__instance.lastIndexOf = String.prototype.lastIndexOf; //////////////////////////////////////////////////////////////////////////////
//CHECK#1
if (__instance.lastIndexOf(true, false) !== 0) {
////////////////////////////////////////////////////////////////////////////// $ERROR('#1: __instance = new Object(true); __instance.lastIndexOf = String.prototype.lastIndexOf; __instance.lastIndexOf(true, false) === 0. Actual: '+__instance.lastIndexOf(true, false) );
//CHECK#1 }
if (__instance.lastIndexOf(true, false) !== 0) { //
$ERROR('#1: __instance = new Object(true); __instance.lastIndexOf = String.prototype.lastIndexOf; __instance.lastIndexOf(true, false) === 0. Actual: '+__instance.lastIndexOf(true, false) ); //////////////////////////////////////////////////////////////////////////////
}
//
//////////////////////////////////////////////////////////////////////////////