зеркало из https://github.com/mozilla/gecko-dev.git
Bug 638054 - Mostly remove JS tests using watch/unwatch. r=jorendorff
This commit is contained in:
Родитель
a71971bc6c
Коммит
e0d164f174
|
@ -1,8 +0,0 @@
|
||||||
// |jit-test| error:TypeError; need-for-each
|
|
||||||
|
|
||||||
// Binary: cache/js-dbg-32-29add08d84ae-linux
|
|
||||||
// Flags: -j
|
|
||||||
//
|
|
||||||
this.watch('y', /x/g );
|
|
||||||
for each (y in ['q', 'q', 'q']) continue;
|
|
||||||
gc();
|
|
|
@ -1,6 +0,0 @@
|
||||||
// Binary: cache/js-dbg-64-38754465ffde-linux
|
|
||||||
// Flags:
|
|
||||||
//
|
|
||||||
this.__defineSetter__("x", gc);
|
|
||||||
this.watch("x",function(){return});
|
|
||||||
x = 3;
|
|
|
@ -1,4 +0,0 @@
|
||||||
// Binary: cache/js-dbg-64-9d51f2a931f7-linux
|
|
||||||
// Flags:
|
|
||||||
//
|
|
||||||
({x:function(){}}).watch('x',function(){});
|
|
|
@ -1,9 +0,0 @@
|
||||||
// Binary: cache/js-dbg-64-a6d7a5677b4c-linux
|
|
||||||
// Flags:
|
|
||||||
//
|
|
||||||
this.__defineSetter__("x", function(){})
|
|
||||||
this.watch("x", "".localeCompare)
|
|
||||||
window = x
|
|
||||||
Object.defineProperty(this, "x", ({
|
|
||||||
set: window
|
|
||||||
}))
|
|
|
@ -4,7 +4,6 @@
|
||||||
var o9 = Function.prototype;
|
var o9 = Function.prototype;
|
||||||
var o13 = Array;
|
var o13 = Array;
|
||||||
function f5(o) {
|
function f5(o) {
|
||||||
o.watch('p3', function() {});
|
|
||||||
ox1 = new Proxy(o, {});
|
ox1 = new Proxy(o, {});
|
||||||
}
|
}
|
||||||
f5(o9);
|
f5(o9);
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
// |jit-test| error:TypeError
|
|
||||||
|
|
||||||
// Binary: cache/js-dbg-32-1c8e91b2e3a4-linux
|
|
||||||
// Flags:
|
|
||||||
//
|
|
||||||
a = evalcx("lazy");
|
|
||||||
a.watch("x", function() {});
|
|
||||||
({}).watch("x", function() {});
|
|
||||||
a.__defineGetter__("y", {});
|
|
|
@ -1,9 +0,0 @@
|
||||||
// Binary: cache/js-dbg-32-f951e9151626-linux
|
|
||||||
// Flags: -m -n
|
|
||||||
//
|
|
||||||
o = evalcx("lazy").__proto__
|
|
||||||
gc()
|
|
||||||
try {
|
|
||||||
o.watch()
|
|
||||||
} catch (e) {}
|
|
||||||
o.constructor()
|
|
|
@ -1,10 +0,0 @@
|
||||||
// |jit-test| error:ReferenceError
|
|
||||||
|
|
||||||
// Binary: cache/js-dbg-64-67bf9a4a1f77-linux
|
|
||||||
// Flags: --ion-eager
|
|
||||||
//
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
var a = ['x', 'y'];
|
|
||||||
obj.watch(a[+("0")], counter);
|
|
||||||
})();
|
|
|
@ -1,6 +0,0 @@
|
||||||
// |jit-test| error:TypeError
|
|
||||||
|
|
||||||
// Binary: cache/js-dbg-64-bf8f2961d0cc-linux
|
|
||||||
// Flags:
|
|
||||||
//
|
|
||||||
Object.watch.call(new Uint8ClampedArray, "length", function() {});
|
|
|
@ -1,8 +0,0 @@
|
||||||
gczeal(8, 1)
|
|
||||||
function recurse(x) {
|
|
||||||
recurse;
|
|
||||||
if (x < 20)
|
|
||||||
recurse(x + 1);
|
|
||||||
};
|
|
||||||
this.watch(5, (function () {}))
|
|
||||||
recurse(0)
|
|
|
@ -1,13 +0,0 @@
|
||||||
// Don't crash or assert.
|
|
||||||
|
|
||||||
var d;
|
|
||||||
this.watch("d", eval);
|
|
||||||
(function () {
|
|
||||||
(eval("\
|
|
||||||
(function () {\
|
|
||||||
for (let x = 0; x < 2; ++x) {\
|
|
||||||
d = x\
|
|
||||||
}\
|
|
||||||
})\
|
|
||||||
"))()
|
|
||||||
})()
|
|
|
@ -1,9 +0,0 @@
|
||||||
// |jit-test| error: TypeError
|
|
||||||
// don't assert
|
|
||||||
|
|
||||||
print(this.watch("x",
|
|
||||||
function() {
|
|
||||||
Object.defineProperty(this, "x", ({
|
|
||||||
get: (Int8Array)
|
|
||||||
}))
|
|
||||||
}))(x = /x/)
|
|
|
@ -1,9 +0,0 @@
|
||||||
var n = 0;
|
|
||||||
var a = [];
|
|
||||||
for (var i = 0; i < 20; i++)
|
|
||||||
a[i] = {};
|
|
||||||
a[18].watch("p", function () { n++; });
|
|
||||||
delete a[18].p;
|
|
||||||
for (var i = 0; i < 20; i++)
|
|
||||||
a[i].p = 0;
|
|
||||||
assertEq(n, 1);
|
|
|
@ -1,6 +0,0 @@
|
||||||
// |jit-test| error: TypeError
|
|
||||||
function f(o) {
|
|
||||||
o.watch("x", this);
|
|
||||||
}
|
|
||||||
var c = evalcx("");
|
|
||||||
f(c);
|
|
|
@ -1,12 +0,0 @@
|
||||||
|
|
||||||
done = false;
|
|
||||||
try {
|
|
||||||
function x() {}
|
|
||||||
print(this.watch("d", Object.create))
|
|
||||||
var d = {}
|
|
||||||
} catch (e) {}
|
|
||||||
try {
|
|
||||||
eval("d = ''")
|
|
||||||
done = true;
|
|
||||||
} catch (e) {}
|
|
||||||
assertEq(done, false);
|
|
|
@ -1,6 +1,3 @@
|
||||||
try {
|
|
||||||
this.watch("b", "".substring);
|
|
||||||
} catch(exc1) {}
|
|
||||||
eval("\
|
eval("\
|
||||||
var URI = '';\
|
var URI = '';\
|
||||||
test();\
|
test();\
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
// |jit-test| error:TypeError
|
|
||||||
|
|
||||||
evalcx('').watch("", /()/);
|
|
|
@ -1,7 +0,0 @@
|
||||||
var o = {};
|
|
||||||
o.watch("p", function() { });
|
|
||||||
|
|
||||||
for (var i = 0; i < 10; i++) {
|
|
||||||
o.p = 123;
|
|
||||||
delete o.p;
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
var msg = "";
|
|
||||||
try {
|
|
||||||
this.__defineSetter__('x', Object.create);
|
|
||||||
this.watch('x', function() {});
|
|
||||||
x = 3;
|
|
||||||
} catch (e) {
|
|
||||||
msg = e.toString();
|
|
||||||
}
|
|
||||||
assertEq(msg, "TypeError: undefined is not an object or null");
|
|
|
@ -1,13 +0,0 @@
|
||||||
this.watch("x", Object.create)
|
|
||||||
try {
|
|
||||||
(function() {
|
|
||||||
this.__defineGetter__("x",
|
|
||||||
function() {
|
|
||||||
return this
|
|
||||||
})
|
|
||||||
})()
|
|
||||||
} catch(e) {}
|
|
||||||
Object.defineProperty(x, "x", ({
|
|
||||||
set: Uint16Array
|
|
||||||
}))
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
if (typeof gczeal != "function")
|
|
||||||
gczeal = function() {}
|
|
||||||
|
|
||||||
// don't crash
|
|
||||||
x = (evalcx('lazy'))
|
|
||||||
x.watch("", function () {})
|
|
||||||
gczeal(1)
|
|
||||||
for (w in x) {}
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
// |jit-test| need-for-each
|
|
||||||
|
|
||||||
s = newGlobal()
|
|
||||||
try {
|
|
||||||
evalcx("\
|
|
||||||
Object.defineProperty(this,\"i\",{enumerable:true,get:function(){t}});\
|
|
||||||
for each(y in this)true\
|
|
||||||
", s)
|
|
||||||
} catch (e) {}
|
|
||||||
try {
|
|
||||||
evalcx("\
|
|
||||||
for(z=0,(7).watch(\"\",eval);;g){\
|
|
||||||
if(z=1){({t:function(){}})\
|
|
||||||
}\
|
|
||||||
", s)
|
|
||||||
} catch (e) {}
|
|
||||||
try {
|
|
||||||
evalcx("\
|
|
||||||
Object.defineProperty(this,\"g2\",{get:function(){return this}});\
|
|
||||||
g2.y()\
|
|
||||||
", s)
|
|
||||||
} catch (e) {}
|
|
|
@ -1,22 +0,0 @@
|
||||||
// |jit-test| need-for-each
|
|
||||||
|
|
||||||
s = newGlobal()
|
|
||||||
try {
|
|
||||||
evalcx("\
|
|
||||||
Object.defineProperty(this,\"i\",{enumerable:true,get:function(){t}});\
|
|
||||||
for each(y in this)true\
|
|
||||||
", s)
|
|
||||||
} catch (e) {}
|
|
||||||
try {
|
|
||||||
evalcx("\
|
|
||||||
for(z=0,(7).watch(\"\",eval);;g){\
|
|
||||||
if(z=1){({t:function(){}})\
|
|
||||||
}\
|
|
||||||
", s)
|
|
||||||
} catch (e) {}
|
|
||||||
try {
|
|
||||||
evalcx("\
|
|
||||||
Object.defineProperty(this,\"g2\",{get:function(){return this}});\
|
|
||||||
g2.y(\"\")\
|
|
||||||
", s)
|
|
||||||
} catch (e) {}
|
|
|
@ -1,3 +0,0 @@
|
||||||
this.__defineSetter__("x", function(){});
|
|
||||||
this.watch("x", eval);
|
|
||||||
x = 0;
|
|
|
@ -1,9 +0,0 @@
|
||||||
// |jit-test| need-for-each
|
|
||||||
|
|
||||||
function testNonStubGetter() {
|
|
||||||
{ let [] = []; (this.watch("x", function(p, o, n) { return /a/g.exec(p, o, n); })); };
|
|
||||||
(function () { (eval("(function(){for each (x in [1, 2, 2]);});"))(); })();
|
|
||||||
this.unwatch("x");
|
|
||||||
return "ok";
|
|
||||||
}
|
|
||||||
assertEq(testNonStubGetter(), "ok");
|
|
|
@ -1,7 +0,0 @@
|
||||||
for (var i = 0; i < 5; ++i) {
|
|
||||||
var o = {}
|
|
||||||
Object.defineProperty(o, 'x', { value:"cow", writable:false });
|
|
||||||
var r = o.watch('x', function() {});
|
|
||||||
assertEq(r, undefined);
|
|
||||||
o.x = 4;
|
|
||||||
}
|
|
|
@ -1,16 +0,0 @@
|
||||||
// Test no assert or crash from outer recorders (bug 465145)
|
|
||||||
function testBug465145() {
|
|
||||||
this.__defineSetter__("x", function(){});
|
|
||||||
this.watch("x", function(){});
|
|
||||||
y = this;
|
|
||||||
for (var z = 0; z < 2; ++z) { x = y };
|
|
||||||
this.__defineSetter__("x", function(){});
|
|
||||||
for (var z = 0; z < 2; ++z) { x = y };
|
|
||||||
}
|
|
||||||
|
|
||||||
function testTrueShiftTrue() {
|
|
||||||
var a = new Array(5);
|
|
||||||
for (var i=0;i<5;++i) a[i] = "" + (true << true);
|
|
||||||
return a.join(",");
|
|
||||||
}
|
|
||||||
assertEq(testTrueShiftTrue(), "2,2,2,2,2");
|
|
|
@ -1,63 +0,0 @@
|
||||||
// Test that the watch handler is not called recursively for the same object
|
|
||||||
// and property.
|
|
||||||
(function() {
|
|
||||||
var obj1 = {}, obj2 = {};
|
|
||||||
var handler_entry_count = 0;
|
|
||||||
var handler_exit_count = 0;
|
|
||||||
|
|
||||||
obj1.watch('x', handler);
|
|
||||||
obj1.watch('y', handler);
|
|
||||||
obj2.watch('x', handler);
|
|
||||||
obj1.x = 1;
|
|
||||||
assertEq(handler_entry_count, 3);
|
|
||||||
assertEq(handler_exit_count, 3);
|
|
||||||
|
|
||||||
function handler(id) {
|
|
||||||
handler_entry_count++;
|
|
||||||
assertEq(handler_exit_count, 0);
|
|
||||||
switch (true) {
|
|
||||||
case this === obj1 && id === "x":
|
|
||||||
assertEq(handler_entry_count, 1);
|
|
||||||
obj2.x = 3;
|
|
||||||
assertEq(handler_exit_count, 2);
|
|
||||||
break;
|
|
||||||
case this === obj2 && id === "x":
|
|
||||||
assertEq(handler_entry_count, 2);
|
|
||||||
obj1.y = 4;
|
|
||||||
assertEq(handler_exit_count, 1);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
assertEq(this, obj1);
|
|
||||||
assertEq(id, "y");
|
|
||||||
assertEq(handler_entry_count, 3);
|
|
||||||
|
|
||||||
// We expect no more watch handler invocations
|
|
||||||
obj1.x = 5;
|
|
||||||
obj1.y = 6;
|
|
||||||
obj2.x = 7;
|
|
||||||
assertEq(handler_exit_count, 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
++handler_exit_count;
|
|
||||||
assertEq(handler_entry_count, 3);
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
|
|
||||||
|
|
||||||
// Test that run-away recursion in watch handlers is properly handled.
|
|
||||||
(function() {
|
|
||||||
var obj = {};
|
|
||||||
var i = 0;
|
|
||||||
try {
|
|
||||||
handler();
|
|
||||||
throw new Error("Unreachable");
|
|
||||||
} catch(e) {
|
|
||||||
assertEq(e instanceof InternalError, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
function handler() {
|
|
||||||
var prop = "a" + ++i;
|
|
||||||
obj.watch(prop, handler);
|
|
||||||
obj[prop] = 2;
|
|
||||||
}
|
|
||||||
})();
|
|
|
@ -1,8 +0,0 @@
|
||||||
function test() {
|
|
||||||
var o = {};
|
|
||||||
o.watch('x', test);
|
|
||||||
try {
|
|
||||||
o.x = 3;
|
|
||||||
} catch(e) {}
|
|
||||||
}
|
|
||||||
test();
|
|
|
@ -1,3 +0,0 @@
|
||||||
(function() {
|
|
||||||
[{ "9": [] }.watch([], function(){})]
|
|
||||||
})()
|
|
|
@ -1,5 +0,0 @@
|
||||||
// |jit-test| error: InternalError: too much recursion
|
|
||||||
(function f() {
|
|
||||||
"".watch(2, function() {});
|
|
||||||
f();
|
|
||||||
})()
|
|
|
@ -1,8 +0,0 @@
|
||||||
// |jit-test| slow
|
|
||||||
function x() {}
|
|
||||||
for (var j = 0; j < 9999; ++j) {
|
|
||||||
(function() {
|
|
||||||
x += x.watch("endsWith", ArrayBuffer);
|
|
||||||
return 0 >> Function(x)
|
|
||||||
})()
|
|
||||||
}
|
|
|
@ -1,8 +0,0 @@
|
||||||
// |jit-test| error: ReferenceError
|
|
||||||
|
|
||||||
eval("(function() { " + "\
|
|
||||||
var o = {};\
|
|
||||||
o.watch('p', function() { });\
|
|
||||||
for (var i = 0; i < 10; \u5ede ++)\
|
|
||||||
o.p = 123;\
|
|
||||||
" + " })();");
|
|
|
@ -4,4 +4,4 @@ function f(x) {
|
||||||
delete ((x)++);
|
delete ((x)++);
|
||||||
arguments[0] !== undefined;
|
arguments[0] !== undefined;
|
||||||
}
|
}
|
||||||
f(1, x = [f.ArrayBuffer,unwatch.Int32Array], this, this, this) ;
|
f(1, x = [f.ArrayBuffer, undefined], this, this, this) ;
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
Object.defineProperty(Object.prototype, 'x', {
|
|
||||||
set: function() { evalcx('lazy'); }
|
|
||||||
});
|
|
||||||
var obj = {};
|
|
||||||
obj.watch("x", function (id, oldval, newval) {});
|
|
||||||
for (var str in 'A') {
|
|
||||||
obj.x = 1;
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
Object.defineProperty(Object.prototype, 'x', {
|
|
||||||
set: function() { evalcx('lazy'); }
|
|
||||||
});
|
|
||||||
var obj = {};
|
|
||||||
var prot = {};
|
|
||||||
obj.__proto__ = prot;
|
|
||||||
obj.watch("x", function (id, oldval, newval) {});
|
|
||||||
for (var str in 'A') {
|
|
||||||
obj.x = 1;
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
var flag = 0;
|
|
||||||
var a = {};
|
|
||||||
Object.defineProperty(a, "value", {set: function(x) {}});
|
|
||||||
a.watch("value", function(){flag++;});
|
|
||||||
|
|
||||||
for(var i = 0; i < 100; i++) {
|
|
||||||
a.value = i;
|
|
||||||
assertEq(flag, i+1);
|
|
||||||
}
|
|
|
@ -7,7 +7,6 @@ Object.defineProperty(arr, 0, {
|
||||||
glob.__proto__;
|
glob.__proto__;
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
this.watch("s", function() {});
|
|
||||||
try {
|
try {
|
||||||
arr.pop();
|
arr.pop();
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
(function () {
|
|
||||||
var a;
|
|
||||||
eval("for(w in ((function(x,y){b:0})())) ;");
|
|
||||||
})();
|
|
||||||
|
|
||||||
this.__defineSetter__("l", function() { gc() });
|
|
||||||
this.watch("l", function(x) { yield {} });
|
|
||||||
l = true;
|
|
|
@ -1,7 +0,0 @@
|
||||||
(function() {
|
|
||||||
for (a = 0; a < 2; a++)
|
|
||||||
''.watch("", function() {})
|
|
||||||
})()
|
|
||||||
|
|
||||||
/* Don't crash or assert. */
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ function f() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})(/x/)))
|
})(/x/)))
|
||||||
for (z = 0; z < 100; x.unwatch(), z++)
|
|
||||||
for (e in [0]) {
|
for (e in [0]) {
|
||||||
gczeal(2)
|
gczeal(2)
|
||||||
} ( [1,2,3])("")
|
} ( [1,2,3])("")
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
// vim: set ts=8 sts=4 et sw=4 tw=99:
|
|
||||||
|
|
||||||
var count = 0;
|
|
||||||
this.watch("x", function() {
|
|
||||||
count++;
|
|
||||||
});
|
|
||||||
for(var i=0; i<10; i++) {
|
|
||||||
x = 2;
|
|
||||||
}
|
|
||||||
assertEq(count, 10);
|
|
|
@ -1,7 +0,0 @@
|
||||||
var o = {};
|
|
||||||
for(var i=0; i<5; i++) {
|
|
||||||
o.p = 2;
|
|
||||||
o.watch("p", function() { });
|
|
||||||
o.p = 2;
|
|
||||||
delete o.p;
|
|
||||||
}
|
|
|
@ -118,7 +118,6 @@ for(var o2 in f5) {
|
||||||
f2(o5);
|
f2(o5);
|
||||||
f2(o5);
|
f2(o5);
|
||||||
f0(o3);
|
f0(o3);
|
||||||
o9.watch('p3', function() {});
|
|
||||||
o8[o8] = o8;
|
o8[o8] = o8;
|
||||||
f0(o5);
|
f0(o5);
|
||||||
f1(o6);
|
f1(o6);
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
(function() {
|
|
||||||
for (a = 0; a < 2; a++)
|
|
||||||
''.watch("", function() {})
|
|
||||||
})()
|
|
|
@ -1,5 +0,0 @@
|
||||||
// |jit-test| need-for-each
|
|
||||||
|
|
||||||
for each(let w in [[], 0, [], 0]) {
|
|
||||||
w.unwatch()
|
|
||||||
}
|
|
|
@ -1,7 +0,0 @@
|
||||||
// assignments to watched objects must not be cached
|
|
||||||
var obj = {x: 0};
|
|
||||||
var hits = 0;
|
|
||||||
obj.watch("x", function (id, oldval, newval) { hits++; return newval; });
|
|
||||||
for (var i = 0; i < 10; i++)
|
|
||||||
obj.x = i;
|
|
||||||
assertEq(hits, 10);
|
|
|
@ -1,17 +0,0 @@
|
||||||
// assignments to watched objects must not be traced
|
|
||||||
var hits = 0;
|
|
||||||
function counter(id, oldval, newval) {
|
|
||||||
hits++;
|
|
||||||
return newval;
|
|
||||||
}
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
var obj = {x: 0, y: 0};
|
|
||||||
var a = ['x', 'y'];
|
|
||||||
obj.watch('z', counter);
|
|
||||||
for (var i = 0; i < 14; i++) {
|
|
||||||
obj.watch(a[+(i > 8)], counter);
|
|
||||||
obj.y = i;
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
assertEq(hits, 5);
|
|
|
@ -1,8 +0,0 @@
|
||||||
// assignments to watched properties via ++ must not be cached
|
|
||||||
var obj = {x: 0};
|
|
||||||
var hits = 0;
|
|
||||||
obj.watch("x", function (id, oldval, newval) { hits++; return newval; });
|
|
||||||
for (var i = 0; i < 10; i++)
|
|
||||||
obj.x++;
|
|
||||||
assertEq(hits, 10);
|
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
// assignments to watched properties via ++ must not be traced
|
|
||||||
var hits = 0;
|
|
||||||
function counter(id, oldval, newval) {
|
|
||||||
hits++;
|
|
||||||
return newval;
|
|
||||||
}
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
var obj = {x: 0, y: 0};
|
|
||||||
var a = ['x', 'y'];
|
|
||||||
obj.watch('z', counter);
|
|
||||||
for (var i = 0; i < 14; i++) {
|
|
||||||
obj.watch(a[+(i > 8)], counter);
|
|
||||||
obj.y++;
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
assertEq(hits, 5);
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
// assignment to watched global properties must not be cached
|
|
||||||
x = 0;
|
|
||||||
var hits = 0;
|
|
||||||
this.watch("x", function (id, oldval, newval) { hits++; return newval; });
|
|
||||||
for (var i = 0; i < 10; i++)
|
|
||||||
x = i;
|
|
||||||
assertEq(hits, 10);
|
|
|
@ -1,19 +0,0 @@
|
||||||
// assignment to watched global properties must not be traced
|
|
||||||
var hits = 0;
|
|
||||||
function counter(id, oldval, newval) {
|
|
||||||
hits++;
|
|
||||||
return newval;
|
|
||||||
}
|
|
||||||
|
|
||||||
var x = 0;
|
|
||||||
var y = 0;
|
|
||||||
(function () {
|
|
||||||
var a = ['x', 'y'];
|
|
||||||
this.watch('z', counter);
|
|
||||||
for (var i = 0; i < 14; i++) {
|
|
||||||
this.watch(a[+(i > 8)], counter);
|
|
||||||
y = 1;
|
|
||||||
}
|
|
||||||
})();
|
|
||||||
assertEq(hits, 5);
|
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
// assignment to watched global properties must not be traced
|
|
||||||
var hits = 0;
|
|
||||||
function counter(id, oldval, newval) {
|
|
||||||
hits++;
|
|
||||||
return newval;
|
|
||||||
}
|
|
||||||
|
|
||||||
var x = 0;
|
|
||||||
var y = 0;
|
|
||||||
function f() {
|
|
||||||
var a = [{}, this];
|
|
||||||
for (var i = 0; i < 14; i++) {
|
|
||||||
print(shapeOf(this));
|
|
||||||
Object.prototype.watch.call(a[+(i > 8)], "y", counter);
|
|
||||||
y++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
f();
|
|
||||||
assertEq(hits, 5);
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
// adding assignment + watchpoint vs. caching
|
|
||||||
var hits = 0;
|
|
||||||
var obj = {};
|
|
||||||
obj.watch("x", function (id, oldval, newval) { hits++; return newval; });
|
|
||||||
for (var i = 0; i < 10; i++) {
|
|
||||||
obj.x = 1;
|
|
||||||
delete obj.x;
|
|
||||||
}
|
|
||||||
assertEq(hits, 10);
|
|
|
@ -1,27 +0,0 @@
|
||||||
// test against future pic support for symbols
|
|
||||||
|
|
||||||
// assignments to watched objects must not be cached
|
|
||||||
var obj = {};
|
|
||||||
var x = Symbol.for("x");
|
|
||||||
obj[x] = 0;
|
|
||||||
var hits = 0;
|
|
||||||
obj.watch(x, function (id, oldval, newval) { hits++; return newval; });
|
|
||||||
for (var i = 0; i < 10; i++)
|
|
||||||
obj[x] = i;
|
|
||||||
assertEq(hits, 10);
|
|
||||||
|
|
||||||
// assignments to watched properties via ++ must not be cached
|
|
||||||
hits = 0;
|
|
||||||
for (var i = 0; i < 10; i++)
|
|
||||||
obj[x]++;
|
|
||||||
assertEq(hits, 10);
|
|
||||||
|
|
||||||
// adding assignment + watchpoint vs. caching
|
|
||||||
hits = 0;
|
|
||||||
obj = {};
|
|
||||||
obj.watch(x, function (id, oldval, newval) { hits++; return newval; });
|
|
||||||
for (var i = 0; i < 10; i++) {
|
|
||||||
obj[x] = 1;
|
|
||||||
delete obj[x];
|
|
||||||
}
|
|
||||||
assertEq(hits, 10);
|
|
|
@ -1,14 +0,0 @@
|
||||||
// |jit-test| allow-oom; allow-unhandlable-oom
|
|
||||||
enableGeckoProfiling();
|
|
||||||
loadFile('\
|
|
||||||
for (var i = 0; i < 2; i++) {\
|
|
||||||
obj = { m: function () {} };\
|
|
||||||
obj.watch("m", function () { float32 = 0 + obj.foo; });\
|
|
||||||
obj.m = 0;\
|
|
||||||
}\
|
|
||||||
');
|
|
||||||
gcparam("maxBytes", gcparam("gcBytes") + (1)*1024);
|
|
||||||
newGlobal("same-compartment");
|
|
||||||
function loadFile(lfVarx) {
|
|
||||||
evaluate(lfVarx, { noScriptRval : true, isRunOnce : true });
|
|
||||||
}
|
|
|
@ -38,24 +38,5 @@ assertEq(delete a[0], false);
|
||||||
|
|
||||||
assertArrayIsExpected();
|
assertArrayIsExpected();
|
||||||
|
|
||||||
var watchpointCalled = false;
|
|
||||||
// NOTE: Be careful with the position of this test, since this sparsifies the
|
|
||||||
// elements and you might not test what you think you're testing otherwise.
|
|
||||||
a.watch(2, function(prop, oldValue, newValue) {
|
|
||||||
watchpointCalled = true;
|
|
||||||
assertEq(prop, 2);
|
|
||||||
assertEq(oldValue, 1);
|
|
||||||
assertEq(newValue, "foo");
|
|
||||||
});
|
|
||||||
|
|
||||||
assertArrayIsExpected();
|
|
||||||
|
|
||||||
a.length = 5;
|
|
||||||
a[2] = "foo";
|
|
||||||
assertEq(watchpointCalled, true);
|
|
||||||
assertEq(delete a[0], false);
|
|
||||||
|
|
||||||
assertArrayIsExpected();
|
|
||||||
|
|
||||||
if (typeof reportCompare === "function")
|
if (typeof reportCompare === "function")
|
||||||
reportCompare(true, true);
|
reportCompare(true, true);
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
/*
|
|
||||||
* Any copyright is dedicated to the Public Domain.
|
|
||||||
* http://creativecommons.org/licenses/publicdomain/
|
|
||||||
*/
|
|
||||||
|
|
||||||
var hitCount;
|
|
||||||
function watcher(p,o,n) { hitCount++; return n; }
|
|
||||||
|
|
||||||
var a = [1];
|
|
||||||
a.watch('length', watcher);
|
|
||||||
hitCount = 0;
|
|
||||||
a.length = 0;
|
|
||||||
reportCompare(1, hitCount, "lenient; configurable: watchpoint hit");
|
|
||||||
|
|
||||||
var b = Object.defineProperty([1],'0',{configurable:false});
|
|
||||||
b.watch('length', watcher);
|
|
||||||
hitCount = 0;
|
|
||||||
var result;
|
|
||||||
try {
|
|
||||||
b.length = 0;
|
|
||||||
result = "no error";
|
|
||||||
} catch (x) {
|
|
||||||
result = x.toString();
|
|
||||||
}
|
|
||||||
reportCompare(1, hitCount, "lenient; non-configurable: watchpoint hit");
|
|
||||||
reportCompare(1, b.length, "lenient; non-configurable: length unchanged");
|
|
||||||
reportCompare("no error", result, "lenient; non-configurable: no error thrown");
|
|
||||||
|
|
||||||
var c = Object.defineProperty([1],'0',{configurable:false});
|
|
||||||
c.watch('length', watcher);
|
|
||||||
hitCount = 0;
|
|
||||||
var threwTypeError;
|
|
||||||
try {
|
|
||||||
(function(){'use strict'; c.length = 0;})();
|
|
||||||
threwTypeError = false;
|
|
||||||
} catch (x) {
|
|
||||||
threwTypeError = x instanceof TypeError;
|
|
||||||
}
|
|
||||||
reportCompare(1, hitCount, "strict; non-configurable: watchpoint hit");
|
|
||||||
reportCompare(1, c.length, "strict; non-configurable: length unchanged");
|
|
||||||
reportCompare(true, threwTypeError, "strict; non-configurable: TypeError thrown");
|
|
|
@ -1,38 +0,0 @@
|
||||||
/*
|
|
||||||
* Any copyright is dedicated to the Public Domain.
|
|
||||||
* http://creativecommons.org/licenses/publicdomain/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Create a prototype object with a setter property. */
|
|
||||||
var protoSetterCount;
|
|
||||||
var proto = ({ set x(v) { protoSetterCount++; } });
|
|
||||||
|
|
||||||
/* Put a watchpoint on that setter. */
|
|
||||||
var protoWatchCount;
|
|
||||||
proto.watch('x', function() { protoWatchCount++; });
|
|
||||||
|
|
||||||
/* Make an object with the above as its prototype. */
|
|
||||||
function C() { }
|
|
||||||
C.prototype = proto;
|
|
||||||
var o = new C();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set a watchpoint on the property in the inheriting object. We have
|
|
||||||
* defined this to mean "duplicate the property, setter and all, in the
|
|
||||||
* inheriting object." I don't think debugging observation mechanisms
|
|
||||||
* should mutate the program being run, but that's what we've got.
|
|
||||||
*/
|
|
||||||
var oWatchCount;
|
|
||||||
o.watch('x', function() { oWatchCount++; });
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Assign to the property. This should trip the watchpoint on the inheriting object and
|
|
||||||
* the setter.
|
|
||||||
*/
|
|
||||||
protoSetterCount = protoWatchCount = oWatchCount = 0;
|
|
||||||
o.x = 1;
|
|
||||||
assertEq(protoWatchCount, 0);
|
|
||||||
assertEq(oWatchCount, 1);
|
|
||||||
assertEq(protoSetterCount, 1);
|
|
||||||
|
|
||||||
reportCompare(true, true);
|
|
|
@ -1,46 +0,0 @@
|
||||||
/*
|
|
||||||
* Any copyright is dedicated to the Public Domain.
|
|
||||||
* http://creativecommons.org/licenses/publicdomain/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* A stock watcher function. */
|
|
||||||
var watcherCount;
|
|
||||||
function watcher(id, oldval, newval) { watcherCount++; return newval; }
|
|
||||||
|
|
||||||
/* Create an object with a JavaScript setter. */
|
|
||||||
var setterCount;
|
|
||||||
var o = { w:2, set x(v) { setterCount++; } };
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Put the object in dictionary mode, so that JSObject::putProperty will
|
|
||||||
* mutate its shapes instead of creating new ones.
|
|
||||||
*/
|
|
||||||
delete o.w;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Place a watchpoint on the property. The watchpoint structure holds the
|
|
||||||
* original JavaScript setter, and a pointer to the shape.
|
|
||||||
*/
|
|
||||||
o.watch('x', watcher);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Replace the accessor property with a value property. The shape's setter
|
|
||||||
* should become a non-JS setter, js_watch_set, and the watchpoint
|
|
||||||
* structure's saved setter should be updated (in this case, cleared).
|
|
||||||
*/
|
|
||||||
Object.defineProperty(o, 'x', { value:3,
|
|
||||||
writable:true,
|
|
||||||
enumerable:true,
|
|
||||||
configurable:true });
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Assign to the property. This should trigger js_watch_set, which should
|
|
||||||
* call the handler, and then see that there is no JS-level setter to pass
|
|
||||||
* control on to, and return.
|
|
||||||
*/
|
|
||||||
watcherCount = setterCount = 0;
|
|
||||||
o.x = 3;
|
|
||||||
assertEq(watcherCount, 1);
|
|
||||||
assertEq(setterCount, 0);
|
|
||||||
|
|
||||||
reportCompare(true, true);
|
|
|
@ -1,44 +0,0 @@
|
||||||
/*
|
|
||||||
* Any copyright is dedicated to the Public Domain.
|
|
||||||
* http://creativecommons.org/licenses/publicdomain/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Create an object with a JavaScript setter. */
|
|
||||||
var firstSetterCount;
|
|
||||||
var o = { w:2, set x(v) { firstSetterCount++; } };
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Put the object in dictionary mode, so that JSObject::putProperty will
|
|
||||||
* mutate its shapes instead of creating new ones.
|
|
||||||
*/
|
|
||||||
delete o.w;
|
|
||||||
|
|
||||||
/* A stock watcher function. */
|
|
||||||
var watcherCount;
|
|
||||||
function watcher(id, oldval, newval) { watcherCount++; return newval; }
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Place a watchpoint on the property. The property's shape now has the
|
|
||||||
* watchpoint setter, with the original setter saved in the watchpoint
|
|
||||||
* structure.
|
|
||||||
*/
|
|
||||||
o.watch('x', watcher);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Replace the setter with a new setter. The shape should get updated to
|
|
||||||
* refer to the new setter, and then the watchpoint setter should be
|
|
||||||
* re-established.
|
|
||||||
*/
|
|
||||||
var secondSetterCount;
|
|
||||||
Object.defineProperty(o, 'x', { set: function () { secondSetterCount++ } });
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Assign to the property. This should trigger the watchpoint and the new setter.
|
|
||||||
*/
|
|
||||||
watcherCount = firstSetterCount = secondSetterCount = 0;
|
|
||||||
o.x = 3;
|
|
||||||
assertEq(watcherCount, 1);
|
|
||||||
assertEq(firstSetterCount, 0);
|
|
||||||
assertEq(secondSetterCount, 1);
|
|
||||||
|
|
||||||
reportCompare(true, true);
|
|
|
@ -1,43 +0,0 @@
|
||||||
/*
|
|
||||||
* Any copyright is dedicated to the Public Domain.
|
|
||||||
* http://creativecommons.org/licenses/publicdomain/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* A stock watcher function. */
|
|
||||||
var watcherCount;
|
|
||||||
function watcher(id, old, newval) {
|
|
||||||
watcherCount++;
|
|
||||||
return newval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Create an object with a value property. */
|
|
||||||
var o = { w:2, x:3 };
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Place a watchpoint on the value property. The watchpoint structure holds
|
|
||||||
* the original JavaScript setter, and a pointer to the shape.
|
|
||||||
*/
|
|
||||||
o.watch('x', watcher);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Put the object in dictionary mode, so that JSObject::putProperty will
|
|
||||||
* mutate its shapes instead of creating new ones.
|
|
||||||
*/
|
|
||||||
delete o.w;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Replace the value property with a setter.
|
|
||||||
*/
|
|
||||||
var setterCount;
|
|
||||||
o.__defineSetter__('x', function() { setterCount++; });
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Trigger the watchpoint. The watchpoint handler should run, and then the
|
|
||||||
* setter should run.
|
|
||||||
*/
|
|
||||||
watcherCount = setterCount = 0;
|
|
||||||
o.x = 4;
|
|
||||||
assertEq(watcherCount, 1);
|
|
||||||
assertEq(setterCount, 1);
|
|
||||||
|
|
||||||
reportCompare(true, true);
|
|
|
@ -1,56 +0,0 @@
|
||||||
/*
|
|
||||||
* Any copyright is dedicated to the Public Domain.
|
|
||||||
* http://creativecommons.org/licenses/publicdomain/
|
|
||||||
*/
|
|
||||||
|
|
||||||
function make_watcher(name) {
|
|
||||||
return function (id, oldv, newv) {
|
|
||||||
print("watched " + name + "[0]");
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
var o, p;
|
|
||||||
function f(flag) {
|
|
||||||
if (flag) {
|
|
||||||
o = arguments;
|
|
||||||
} else {
|
|
||||||
p = arguments;
|
|
||||||
o.watch(0, make_watcher('o'));
|
|
||||||
p.watch(0, make_watcher('p'));
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Previously, the watchpoint implementation actually substituted its magic setter
|
|
||||||
* functions for the setters of shared shapes, and then 1) carefully ignored calls
|
|
||||||
* to its magic setter from unrelated objects, and 2) avoided restoring the
|
|
||||||
* original setter until all watchpoints on that shape had been removed.
|
|
||||||
*
|
|
||||||
* However, when the watchpoint code began using JSObject::changeProperty and
|
|
||||||
* js_ChangeNativePropertyAttrs to change shapes' setters, the shape tree code
|
|
||||||
* became conscious of the presence of watchpoints, and shared shapes between
|
|
||||||
* objects only when their watchpoint nature coincided. Clearing the magic setter
|
|
||||||
* from one object's shape would not affect other objects, because the
|
|
||||||
* watchpointed and non-watchpointed shapes were distinct if they were shared.
|
|
||||||
*
|
|
||||||
* Thus, the first unwatch call must go ahead and fix p's shape, even though a
|
|
||||||
* watchpoint exists on the same shape in o. o's watchpoint's presence shouldn't
|
|
||||||
* cause 'unwatch' to leave p's magic setter in place.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* DropWatchPointAndUnlock would see o's watchpoint, and not change p's property. */
|
|
||||||
p.unwatch(0);
|
|
||||||
|
|
||||||
/* DropWatchPointAndUnlock would fix o's property, but not p's; p's setter would be gone. */
|
|
||||||
o.unwatch(0);
|
|
||||||
|
|
||||||
/* This would fail to invoke the arguments object's setter. */
|
|
||||||
p[0] = 4;
|
|
||||||
|
|
||||||
/* And the formal parameter would not get updated. */
|
|
||||||
assertEq(flag, 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
f(true);
|
|
||||||
f(false);
|
|
||||||
|
|
||||||
reportCompare(true, true);
|
|
|
@ -1,23 +0,0 @@
|
||||||
// |reftest| skip-if(!xulRuntime.shell)
|
|
||||||
|
|
||||||
enableLastWarning();
|
|
||||||
|
|
||||||
var g = newGlobal();
|
|
||||||
g.eval("({}).watch('x', function(){})");
|
|
||||||
|
|
||||||
var warning = getLastWarning();
|
|
||||||
assertEq(warning.name, "Warning");
|
|
||||||
assertEq(warning.message.includes("watch"), true, "warning should mention watch");
|
|
||||||
|
|
||||||
clearLastWarning();
|
|
||||||
|
|
||||||
g = newGlobal();
|
|
||||||
g.eval("({}).unwatch('x')");
|
|
||||||
|
|
||||||
warning = getLastWarning();
|
|
||||||
assertEq(warning.name, "Warning");
|
|
||||||
assertEq(warning.message.includes("watch"), true, "warning should mention watch");
|
|
||||||
|
|
||||||
clearLastWarning();
|
|
||||||
|
|
||||||
reportCompare(0, 0);
|
|
|
@ -1,41 +0,0 @@
|
||||||
/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 362872;
|
|
||||||
var summary = 'script should not drop watchpoint that is in use';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
function exploit() {
|
|
||||||
var rooter = {}, object = {}, filler1 = "", filler2 = "\u5555";
|
|
||||||
for(var i = 0; i < 32/2-2; i++) { filler1 += "\u5050"; }
|
|
||||||
object.watch("foo", function(){
|
|
||||||
object.unwatch("foo");
|
|
||||||
object.unwatch("foo");
|
|
||||||
for(var i = 0; i < 8 * 1024; i++) {
|
|
||||||
rooter[i] = filler1 + filler2;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
object.foo = "bar";
|
|
||||||
}
|
|
||||||
exploit();
|
|
||||||
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/*
|
|
||||||
* Any copyright is dedicated to the Public Domain.
|
|
||||||
* http://creativecommons.org/licenses/publicdomain/
|
|
||||||
* Contributor: Blake Kaplan
|
|
||||||
*/
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 362872;
|
|
||||||
var summary = 'script should not drop watchpoint that is in use';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
this.watch('x', function f() {
|
|
||||||
print("before");
|
|
||||||
x = 3;
|
|
||||||
print("after");
|
|
||||||
});
|
|
||||||
x = 3;
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,75 +0,0 @@
|
||||||
// |reftest| skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) slow
|
|
||||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 127243;
|
|
||||||
var summary = 'Do not crash on watch';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
if (typeof window != 'undefined' && typeof document != 'undefined')
|
|
||||||
{
|
|
||||||
// delay test driver end
|
|
||||||
gDelayTestDriverEnd = true;
|
|
||||||
window.addEventListener('load', handleLoad, false);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printStatus('This test must be run in the browser');
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
var div;
|
|
||||||
|
|
||||||
function handleLoad()
|
|
||||||
{
|
|
||||||
div = document.createElement('div');
|
|
||||||
document.body.appendChild(div);
|
|
||||||
div.setAttribute('id', 'id1');
|
|
||||||
div.style.width = '50px';
|
|
||||||
div.style.height = '100px';
|
|
||||||
div.style.overflow = 'auto';
|
|
||||||
|
|
||||||
for (var i = 0; i < 5; i++)
|
|
||||||
{
|
|
||||||
var p = document.createElement('p');
|
|
||||||
var t = document.createTextNode('blah');
|
|
||||||
p.appendChild(t);
|
|
||||||
div.appendChild(p);
|
|
||||||
}
|
|
||||||
|
|
||||||
div.watch('scrollTop', wee);
|
|
||||||
|
|
||||||
setTimeout('setScrollTop()', 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
function wee(id, oldval, newval)
|
|
||||||
{
|
|
||||||
var t = document.createTextNode('setting ' + id +
|
|
||||||
' value ' + div.scrollTop +
|
|
||||||
' oldval ' + oldval +
|
|
||||||
' newval ' + newval);
|
|
||||||
var p = document.createElement('p');
|
|
||||||
p.appendChild(t);
|
|
||||||
document.body.appendChild(p);
|
|
||||||
|
|
||||||
return newval;
|
|
||||||
}
|
|
||||||
|
|
||||||
function setScrollTop()
|
|
||||||
{
|
|
||||||
div.scrollTop = 42;
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
gDelayTestDriverEnd = false;
|
|
||||||
jsTestDriverEnd();
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 213482;
|
|
||||||
var summary = 'Do not crash watching property when watcher sets property';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
var testobj = {value: 'foo'};
|
|
||||||
|
|
||||||
function watched (a, b, c) {
|
|
||||||
testobj.value = (new Date()).getTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
function setTest() {
|
|
||||||
testobj.value = 'b';
|
|
||||||
}
|
|
||||||
|
|
||||||
testobj.watch("value", watched);
|
|
||||||
|
|
||||||
setTest();
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,37 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/*
|
|
||||||
* Any copyright is dedicated to the Public Domain.
|
|
||||||
* http://creativecommons.org/licenses/publicdomain/
|
|
||||||
* Contributor: Bob Clary
|
|
||||||
*/
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// originally reported by Jens Thiele <karme@unforgettable.com> in
|
|
||||||
var BUGNUMBER = 240577;
|
|
||||||
var summary = 'object.watch execution context';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
var createWatcher = function ( watchlabel )
|
|
||||||
{
|
|
||||||
var watcher = function (property, oldvalue, newvalue)
|
|
||||||
{
|
|
||||||
actual += watchlabel; return newvalue;
|
|
||||||
};
|
|
||||||
return watcher;
|
|
||||||
};
|
|
||||||
|
|
||||||
var watcher1 = createWatcher('watcher1');
|
|
||||||
|
|
||||||
var object = {property: 'value'};
|
|
||||||
|
|
||||||
object.watch('property', watcher1);
|
|
||||||
|
|
||||||
object.property = 'newvalue';
|
|
||||||
|
|
||||||
expect = 'watcher1';
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,29 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 355341;
|
|
||||||
var summary = 'Do not crash with watch and setter';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
Object.defineProperty(this, "x", { set: Function, enumerable: true, configurable: true });
|
|
||||||
this.watch('x', function () { }); x = 3;
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 355344;
|
|
||||||
var summary = 'Exceptions thrown by watch point';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
var o = {};
|
|
||||||
|
|
||||||
expect = 'setter: yikes';
|
|
||||||
|
|
||||||
o.watch('x', function(){throw 'yikes'});
|
|
||||||
try
|
|
||||||
{
|
|
||||||
o.x = 3;
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
actual = "setter: " + ex;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
eval("") ;
|
|
||||||
}
|
|
||||||
catch(e)
|
|
||||||
{
|
|
||||||
actual = "eval: " + e;
|
|
||||||
}
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 361467;
|
|
||||||
var summary = 'Do not crash with certain watchers';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
expect = actual = 'No Crash';
|
|
||||||
|
|
||||||
var x;
|
|
||||||
this.watch('x', print);
|
|
||||||
x = 5;
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 361617;
|
|
||||||
var summary = 'Do not crash with getter, watch and gc';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
Object.defineProperty(this, "x", { get: function(){}, enumerable: true, configurable: true });
|
|
||||||
})();
|
|
||||||
this.watch('x', print);
|
|
||||||
Object.defineProperty(this, "x", { get: function(){}, enumerable: true, configurable: true });
|
|
||||||
gc();
|
|
||||||
this.unwatch('x');
|
|
||||||
x;
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 385393;
|
|
||||||
var summary = 'Regression test for bug 385393';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
true.watch("x", function(){});
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 506567;
|
|
||||||
var summary = 'Do not crash with watched variables';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
if (typeof clearInterval == 'undefined')
|
|
||||||
{
|
|
||||||
clearInterval = (function () {});
|
|
||||||
}
|
|
||||||
|
|
||||||
var obj = new Object();
|
|
||||||
obj.test = null;
|
|
||||||
obj.watch("test", (function(prop, oldval, newval)
|
|
||||||
{
|
|
||||||
if(false)
|
|
||||||
{
|
|
||||||
var test = newval % oldval;
|
|
||||||
var func = (function(){clearInterval(myInterval);});
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
obj.test = 'null';
|
|
||||||
print(obj.test);
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 303277;
|
|
||||||
var summary = 'Do not crash with crash with a watchpoint for __proto__ property ';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
var o = {};
|
|
||||||
o.watch("__proto__", function(){return null;});
|
|
||||||
o.__proto__ = null;
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,32 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 355339;
|
|
||||||
var summary = 'Do not assert: sprop->setter != js_watch_set';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
expect = actual = 'No Crash';
|
|
||||||
o = {};
|
|
||||||
o.watch("j", function(a,b,c) { print("*",a,b,c) });
|
|
||||||
o.unwatch("j");
|
|
||||||
o.watch("j", function(a,b,c) { print("*",a,b,c) });
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 361346;
|
|
||||||
var summary = 'Crash with setter, watch, GC';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
expect = actual = 'No Crash';
|
|
||||||
|
|
||||||
Object.defineProperty(this, "x", { set: new Function, enumerable: true, configurable: true });
|
|
||||||
this.watch('x', function(){});
|
|
||||||
gc();
|
|
||||||
x = {};
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,32 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 361360;
|
|
||||||
var summary = 'Do not assert: !caller || caller->pc involving setter and watch';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
expect = actual = 'No Crash';
|
|
||||||
|
|
||||||
this.__defineSetter__('x', eval);
|
|
||||||
this.watch('x', function(){});
|
|
||||||
x = 3;
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 361552;
|
|
||||||
var summary = 'Crash with setter, watch, Script';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
expect = actual = 'No Crash';
|
|
||||||
|
|
||||||
if (typeof Script == 'undefined')
|
|
||||||
{
|
|
||||||
print('Test skipped. Script not defined.');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.__defineSetter__('x', gc);
|
|
||||||
this.watch('x', new Script(''));
|
|
||||||
x = 3;
|
|
||||||
}
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,19 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 361558;
|
|
||||||
var summary = 'Do not assert: sprop->setter != js_watch_set';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
expect = actual = 'No Crash';
|
|
||||||
|
|
||||||
({}.__proto__.watch('x', print)); ({}.watch('x', print));
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,38 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 361571;
|
|
||||||
var summary = 'Do not assert: fp->scopeChain == parent';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
o = {};
|
|
||||||
o.__defineSetter__('y', eval);
|
|
||||||
o.watch('y', function () { return "";});
|
|
||||||
o.y = 1;
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
printStatus('Note eval can no longer be called directly');
|
|
||||||
expect = 'EvalError: function eval must be called directly, and not by way of a function of another name';
|
|
||||||
actual = ex + '';
|
|
||||||
}
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 361856;
|
|
||||||
var summary = 'Do not assert: overwriting @ js_AddScopeProperty';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
function testit() {
|
|
||||||
var obj = {};
|
|
||||||
obj.watch("foo", function(){});
|
|
||||||
delete obj.foo;
|
|
||||||
obj = null;
|
|
||||||
gc();
|
|
||||||
}
|
|
||||||
testit();
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,54 +0,0 @@
|
||||||
// |reftest| skip -- slow, alert not dismissed, now busted by harness
|
|
||||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 361964;
|
|
||||||
var summary = 'Crash [@ MarkGCThingChildren] involving watch and setter';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
var doc;
|
|
||||||
if (typeof document == 'undefined')
|
|
||||||
{
|
|
||||||
doc = {};
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
doc = document;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof alert == 'undefined')
|
|
||||||
{
|
|
||||||
alert = print;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Crash:
|
|
||||||
doc.watch("title", function(a,b,c,d) {
|
|
||||||
return { toString : function() { alert(1); } };
|
|
||||||
});
|
|
||||||
doc.title = "xxx";
|
|
||||||
|
|
||||||
// No crash:
|
|
||||||
doc.watch("title", function() {
|
|
||||||
return { toString : function() { alert(1); } };
|
|
||||||
});
|
|
||||||
doc.title = "xxx";
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 385134;
|
|
||||||
var summary = 'Do not crash with setter, watch, uneval';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
if (typeof this.__defineSetter__ != 'undefined' &&
|
|
||||||
typeof this.watch != 'undefined' &&
|
|
||||||
typeof uneval != 'undefined')
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
this.__defineSetter__(0, function(){});
|
|
||||||
} catch (exc) {
|
|
||||||
// In the browser, this fails. Ignore the error.
|
|
||||||
}
|
|
||||||
this.watch(0, function(){});
|
|
||||||
uneval(this);
|
|
||||||
}
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 385393;
|
|
||||||
var summary = 'Regression test for bug 385393';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
eval("this.__defineSetter__('x', gc); this.watch('x', [].slice); x = 1;");
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,42 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 390597;
|
|
||||||
var summary = 'watch point + eval-as-setter allows access to dead JSStackFrame';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
function exploit() {
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var obj = this, args = null;
|
|
||||||
obj.__defineSetter__("evil", eval);
|
|
||||||
obj.watch("evil", function() { return "args = arguments;"; });
|
|
||||||
obj.evil = null;
|
|
||||||
eval("print(args[0]);");
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
print('Caught ' + ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exploit();
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 420612;
|
|
||||||
var summary = 'Do not assert: obj == pobj';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
var obj = Object.create([]);
|
|
||||||
obj.unwatch("x");
|
|
||||||
|
|
||||||
if (typeof reportCompare === "function")
|
|
||||||
reportCompare(true, true);
|
|
||||||
|
|
||||||
print("Tests complete");
|
|
|
@ -1,100 +0,0 @@
|
||||||
// |reftest| fails
|
|
||||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 435345;
|
|
||||||
var summary = 'Watch the length property of arrays';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
// see http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Object:watch
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
var arr;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
expect = 'watcher: propname=length, oldval=0, newval=1; ';
|
|
||||||
actual = '';
|
|
||||||
arr = [];
|
|
||||||
arr.watch('length', watcher);
|
|
||||||
arr[0] = '0';
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
actual = ex + '';
|
|
||||||
}
|
|
||||||
reportCompare(expect, actual, summary + ': 1');
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
expect = 'watcher: propname=length, oldval=1, newval=2; ' +
|
|
||||||
'watcher: propname=length, oldval=2, newval=2; ';
|
|
||||||
actual = '';
|
|
||||||
arr.push(5);
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
actual = ex + '';
|
|
||||||
}
|
|
||||||
reportCompare(expect, actual, summary + ': 2');
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
expect = 'watcher: propname=length, oldval=2, newval=1; ';
|
|
||||||
actual = '';
|
|
||||||
arr.pop();
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
actual = ex + '';
|
|
||||||
}
|
|
||||||
reportCompare(expect, actual, summary + ': 3');
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
expect = 'watcher: propname=length, oldval=1, newval=2; ';
|
|
||||||
actual = '';
|
|
||||||
arr.length++;
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
actual = ex + '';
|
|
||||||
}
|
|
||||||
reportCompare(expect, actual, summary + ': 4');
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
expect = 'watcher: propname=length, oldval=2, newval=5; ';
|
|
||||||
actual = '';
|
|
||||||
arr.length = 5;
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
actual = ex + '';
|
|
||||||
}
|
|
||||||
reportCompare(expect, actual, summary + ': 5');
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
||||||
|
|
||||||
function watcher(propname, oldval, newval)
|
|
||||||
{
|
|
||||||
actual += 'watcher: propname=' + propname + ', oldval=' + oldval +
|
|
||||||
', newval=' + newval + '; ';
|
|
||||||
|
|
||||||
return newval;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 454040;
|
|
||||||
var summary = 'Do not crash @ js_ComputeFilename';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
this.__defineGetter__("x", Function);
|
|
||||||
this.__defineSetter__("x", Function);
|
|
||||||
this.watch("x", x.__proto__);
|
|
||||||
x = 1;
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,30 +0,0 @@
|
||||||
// |reftest| skip-if(Android)
|
|
||||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 454142;
|
|
||||||
var summary = 'Do not crash with gczeal, setter, watch';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
this.watch("x", function(){});
|
|
||||||
delete x;
|
|
||||||
if (typeof gczeal == 'function')
|
|
||||||
{
|
|
||||||
gczeal(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.__defineSetter__("x", function(){});
|
|
||||||
|
|
||||||
if (typeof gczeal == 'function')
|
|
||||||
{
|
|
||||||
gczeal(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,24 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 455413;
|
|
||||||
var summary = 'Do not assert with JIT: (m != JSVAL_INT) || isInt32(*vp)';
|
|
||||||
var actual = 'No Crash';
|
|
||||||
var expect = 'No Crash';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
|
|
||||||
this.watch('x', Math.pow); (function() { for(var j=0;j<4;++j){x=1;} })();
|
|
||||||
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,24 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 465145;
|
|
||||||
var summary = 'Do not crash with watched defined setter';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
|
|
||||||
this.__defineSetter__("x", function(){});
|
|
||||||
this.watch("x", function(){});
|
|
||||||
y = this;
|
|
||||||
for (var z = 0; z < 2; ++z) { x = y };
|
|
||||||
this.__defineSetter__("x", function(){});
|
|
||||||
for (var z = 0; z < 2; ++z) { x = y };
|
|
||||||
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,31 +0,0 @@
|
||||||
// |reftest| skip-if(Android)
|
|
||||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 472787;
|
|
||||||
var summary = 'Do not hang with gczeal, watch and concat';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
this.__defineSetter__("x", Math.sin);
|
|
||||||
this.watch("x", '' .concat);
|
|
||||||
|
|
||||||
if (typeof gczeal == 'function')
|
|
||||||
{
|
|
||||||
gczeal(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
x = 1;
|
|
||||||
|
|
||||||
if (typeof gczeal == 'function')
|
|
||||||
{
|
|
||||||
gczeal(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,46 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 488995;
|
|
||||||
var summary = 'Do not crash with watch, __defineSetter__ on svg';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
if (typeof document == 'undefined')
|
|
||||||
{
|
|
||||||
print('Test skipped: requires browser.');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var o=document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
|
||||||
var p=o.y;
|
|
||||||
p.watch('animVal', function(id, oldvar, newval) {} );
|
|
||||||
p.type='xxx';
|
|
||||||
p.__defineSetter__('animVal', function() {});
|
|
||||||
p.animVal=0;
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,40 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 476655;
|
|
||||||
var summary = 'TM: Do not assert: count <= (size_t) (fp->regs->sp - StackBase(fp) - depth)';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
eval(
|
|
||||||
"(function (){ for (var y in this) {} })();" +
|
|
||||||
"[''.watch(\"\", function(){}) for each (x in ['', '', eval, '', '']) if " +
|
|
||||||
"(x)].map(Function)"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 457521;
|
|
||||||
var summary = 'Do not crash @ js_DecompileValueGenerator';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
this.__defineSetter__("x", [,,,].map);
|
|
||||||
this.watch("x", (new Function("var y, eval")));
|
|
||||||
x = true;
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,33 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 479567;
|
|
||||||
var summary = 'Do not assert: thing';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
|
|
||||||
function f()
|
|
||||||
{
|
|
||||||
(eval("(function(){for each (y in [false, false, false]);});"))();
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
this.__defineGetter__("x", gc);
|
|
||||||
uneval(this.watch("y", this.toSource))
|
|
||||||
f();
|
|
||||||
throw x;
|
|
||||||
}
|
|
||||||
catch(ex)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
|
@ -1,31 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 453955;
|
|
||||||
var summary = 'Do not assert: sprop->setter != js_watch_set || pobj != obj';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
test();
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function test()
|
|
||||||
{
|
|
||||||
enterFunc ('test');
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
for (var z = 0; z < 2; ++z)
|
|
||||||
{
|
|
||||||
[].filter.watch("9", function(y) { yield y; });
|
|
||||||
}
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
||||||
|
|
||||||
exitFunc ('test');
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
var BUGNUMBER = 473282;
|
|
||||||
var summary = 'Do not assert: thing';
|
|
||||||
var actual = '';
|
|
||||||
var expect = '';
|
|
||||||
|
|
||||||
printBugNumber(BUGNUMBER);
|
|
||||||
printStatus (summary);
|
|
||||||
|
|
||||||
this.watch("b", "".substring);
|
|
||||||
this.__defineGetter__("a", gc);
|
|
||||||
for each (b in [this, null, null]);
|
|
||||||
a;
|
|
||||||
|
|
||||||
reportCompare(expect, actual, summary);
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче