mirror of
				https://github.com/tc39/test262.git
				synced 2025-11-04 05:33:50 +01:00 
			
		
		
		
	* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
		
			
				
	
	
		
			111 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var assert = function (result, expected, message) {
 | 
						|
    if (result !== expected) {
 | 
						|
        throw new Error('Error in assert. Expected "' + expected + '" but was "' + result + '":' + message );
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
var assertThrow = function (cb, expected) {
 | 
						|
    let error = null;
 | 
						|
    try {
 | 
						|
        cb();
 | 
						|
    } catch(e) {
 | 
						|
        error = e;  
 | 
						|
    }
 | 
						|
    if (error === null) {
 | 
						|
        throw new Error('Error is expected. Expected "' + expected + '" but error was not thrown."');
 | 
						|
    }
 | 
						|
    if (error.toString() !== expected) {
 | 
						|
        throw new Error('Error is expected. Expected "' + expected + '" but error was "' + error + '"');
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
function foo(withScope, firstAssertValue,  secondAssertValue) {
 | 
						|
    with (withScope) {
 | 
						|
        eval("{ function f() { } }");
 | 
						|
        assert(typeof f, firstAssertValue, f);
 | 
						|
    }
 | 
						|
    assert(typeof f, secondAssertValue);
 | 
						|
}
 | 
						|
 | 
						|
function boo(withScope, firstAssertValue,  secondAssertValue) {
 | 
						|
    with (withScope) {
 | 
						|
        eval(" for(var i = 0; i < 10000; i++ ){ if (i > 0) { function f() { }; } } ");
 | 
						|
        assert(typeof f, firstAssertValue);
 | 
						|
    }
 | 
						|
    assert(typeof f, secondAssertValue);
 | 
						|
}
 | 
						|
{ 
 | 
						|
    for (var i = 0; i < 10000; i++) {
 | 
						|
        foo({}, 'function', 'function');
 | 
						|
        assertThrow(() => f, "ReferenceError: Can't find variable: f");
 | 
						|
    }
 | 
						|
 | 
						|
    boo({}, 'function', 'function');
 | 
						|
}
 | 
						|
{
 | 
						|
    for (var i = 0; i < 10000; i++) {
 | 
						|
        foo({f : 10}, 'number', 'function');
 | 
						|
        assertThrow(() => f, "ReferenceError: Can't find variable: f");
 | 
						|
    }
 | 
						|
    boo({f : 10}, 'number', 'function');
 | 
						|
 | 
						|
    for (var i = 0; i < 10000; i++) {
 | 
						|
        foo({f : {}}, 'object', 'function');
 | 
						|
        assertThrow(() => f, "ReferenceError: Can't find variable: f");
 | 
						|
    }
 | 
						|
    boo({f : {}}, 'object', 'function');
 | 
						|
}
 | 
						|
{
 | 
						|
    for (var i = 0; i < 10000; i++) {
 | 
						|
        foo(12345, 'function', 'function');
 | 
						|
        assertThrow(() => f, "ReferenceError: Can't find variable: f");
 | 
						|
    }
 | 
						|
    boo(12345, 'function', 'function');
 | 
						|
 | 
						|
    for (var i = 0; i < 10000; i++) {
 | 
						|
        let val  = 12345;
 | 
						|
        val.f = 10;
 | 
						|
        foo(val, 'function', 'function');
 | 
						|
        assertThrow(() => f, "ReferenceError: Can't find variable: f");
 | 
						|
    }
 | 
						|
    let x  = 12345;
 | 
						|
    x.f = 10;
 | 
						|
    boo(x, 'function', 'function');
 | 
						|
}
 | 
						|
{
 | 
						|
 | 
						|
    for (var i = 0; i < 10000; i++) {
 | 
						|
        foo('12345', 'function', 'function');
 | 
						|
        assertThrow(() => f, "ReferenceError: Can't find variable: f");
 | 
						|
    }
 | 
						|
    boo('12345', 'function', 'function');
 | 
						|
 | 
						|
    for (var i = 0; i < 10000; i++) {
 | 
						|
        let val  = '12345';
 | 
						|
        val.f = 10;
 | 
						|
        foo(val, 'function', 'function');
 | 
						|
        assertThrow(() => f, "ReferenceError: Can't find variable: f");
 | 
						|
    }
 | 
						|
    let z  = '12345';
 | 
						|
    z.f = 10;
 | 
						|
    boo(z, 'function', 'function');
 | 
						|
}
 | 
						|
{
 | 
						|
    for (var i = 0; i < 10000; i++) {
 | 
						|
        foo(function () {}, 'function', 'function');
 | 
						|
        assertThrow(() => f, "ReferenceError: Can't find variable: f");
 | 
						|
    }
 | 
						|
 | 
						|
    boo(function () {}, 'function', 'function');
 | 
						|
 | 
						|
    for (var i = 0; i < 10000; i++) {
 | 
						|
        let val2 = function () {};
 | 
						|
        val2.f = 10;
 | 
						|
        foo(val2, 'number', 'function');
 | 
						|
        assertThrow(() => f, "ReferenceError: Can't find variable: f");
 | 
						|
    }
 | 
						|
 | 
						|
    let val3 = function () {};
 | 
						|
    val3.f = 10;
 | 
						|
    boo(val3, 'number', 'function');
 | 
						|
} |