Bug 638054 - Mostly remove JS tests using watch/unwatch. r=jorendorff

This commit is contained in:
Tom Schuster 2017-10-24 20:48:14 +02:00
parent a71971bc6c
commit e0d164f174
126 changed files with 1 additions and 2570 deletions

View File

@ -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();

View File

@ -1,6 +0,0 @@
// Binary: cache/js-dbg-64-38754465ffde-linux
// Flags:
//
this.__defineSetter__("x", gc);
this.watch("x",function(){return});
x = 3;

View File

@ -1,4 +0,0 @@
// Binary: cache/js-dbg-64-9d51f2a931f7-linux
// Flags:
//
({x:function(){}}).watch('x',function(){});

View File

@ -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
}))

View File

@ -4,7 +4,6 @@
var o9 = Function.prototype;
var o13 = Array;
function f5(o) {
o.watch('p3', function() {});
ox1 = new Proxy(o, {});
}
f5(o9);

View File

@ -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", {});

View File

@ -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()

View File

@ -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);
})();

View File

@ -1,6 +0,0 @@
// |jit-test| error:TypeError
// Binary: cache/js-dbg-64-bf8f2961d0cc-linux
// Flags:
//
Object.watch.call(new Uint8ClampedArray, "length", function() {});

View File

@ -1,8 +0,0 @@
gczeal(8, 1)
function recurse(x) {
recurse;
if (x < 20)
recurse(x + 1);
};
this.watch(5, (function () {}))
recurse(0)

View File

@ -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\
}\
})\
"))()
})()

View File

@ -1,9 +0,0 @@
// |jit-test| error: TypeError
// don't assert
print(this.watch("x",
function() {
Object.defineProperty(this, "x", ({
get: (Int8Array)
}))
}))(x = /x/)

View File

@ -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);

View File

@ -1,6 +0,0 @@
// |jit-test| error: TypeError
function f(o) {
o.watch("x", this);
}
var c = evalcx("");
f(c);

View File

@ -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);

View File

@ -1,6 +1,3 @@
try {
this.watch("b", "".substring);
} catch(exc1) {}
eval("\
var URI = '';\
test();\

View File

@ -1,3 +0,0 @@
// |jit-test| error:TypeError
evalcx('').watch("", /()/);

View File

@ -1,7 +0,0 @@
var o = {};
o.watch("p", function() { });
for (var i = 0; i < 10; i++) {
o.p = 123;
delete o.p;
}

View File

@ -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");

View File

@ -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
}))

View File

@ -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) {}

View File

@ -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) {}

View File

@ -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) {}

View File

@ -1,3 +0,0 @@
this.__defineSetter__("x", function(){});
this.watch("x", eval);
x = 0;

View File

@ -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");

View File

@ -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;
}

View File

@ -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");

View File

@ -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;
}
})();

View File

@ -1,8 +0,0 @@
function test() {
var o = {};
o.watch('x', test);
try {
o.x = 3;
} catch(e) {}
}
test();

View File

@ -1,3 +0,0 @@
(function() {
[{ "9": [] }.watch([], function(){})]
})()

View File

@ -1,5 +0,0 @@
// |jit-test| error: InternalError: too much recursion
(function f() {
"".watch(2, function() {});
f();
})()

View File

@ -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)
})()
}

View File

@ -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;\
" + " })();");

View File

@ -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) ;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -7,7 +7,6 @@ Object.defineProperty(arr, 0, {
glob.__proto__;
})
});
this.watch("s", function() {});
try {
arr.pop();
} catch (e) {}

View File

@ -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;

View File

@ -1,7 +0,0 @@
(function() {
for (a = 0; a < 2; a++)
''.watch("", function() {})
})()
/* Don't crash or assert. */

View File

@ -9,7 +9,6 @@ function f() {
}
}
})(/x/)))
for (z = 0; z < 100; x.unwatch(), z++)
for (e in [0]) {
gczeal(2)
} ( [1,2,3])("")

View File

@ -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);

View File

@ -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;
}

View File

@ -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);

View File

@ -1,4 +0,0 @@
(function() {
for (a = 0; a < 2; a++)
''.watch("", function() {})
})()

View File

@ -1,5 +0,0 @@
// |jit-test| need-for-each
for each(let w in [[], 0, [], 0]) {
w.unwatch()
}

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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 });
}

View File

@ -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);

View File

@ -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");

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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');
}

View File

@ -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);

View File

@ -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();
}

View File

@ -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);

View File

@ -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);

View File

@ -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');
}

View File

@ -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');
}

View File

@ -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');
}

View File

@ -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');
}

View File

@ -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');
}

View File

@ -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');
}

View File

@ -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);

View File

@ -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');
}

View File

@ -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);

View File

@ -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');
}

View File

@ -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);

View File

@ -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);

View File

@ -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');
}

View File

@ -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');
}

View File

@ -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');
}

View File

@ -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');
}

View File

@ -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);

View File

@ -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');
}

View File

@ -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");

View File

@ -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;
}

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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');
}

View File

@ -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');
}

View File

@ -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);

View File

@ -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);

View File

@ -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');
}

View File

@ -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);

Some files were not shown because too many files have changed in this diff Show More