зеркало из 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 o13 = Array;
|
||||
function f5(o) {
|
||||
o.watch('p3', function() {});
|
||||
ox1 = new Proxy(o, {});
|
||||
}
|
||||
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("\
|
||||
var URI = '';\
|
||||
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)++);
|
||||
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__;
|
||||
})
|
||||
});
|
||||
this.watch("s", function() {});
|
||||
try {
|
||||
arr.pop();
|
||||
} 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/)))
|
||||
for (z = 0; z < 100; x.unwatch(), z++)
|
||||
for (e in [0]) {
|
||||
gczeal(2)
|
||||
} ( [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);
|
||||
f0(o3);
|
||||
o9.watch('p3', function() {});
|
||||
o8[o8] = o8;
|
||||
f0(o5);
|
||||
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();
|
||||
|
||||
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")
|
||||
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);
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче