Issue #1257 - Part 3: Remove/update tests.

This removes a ton of tests that are no longer relevant with (un)watch
removed (e.g. testing stability/bugs in the watchpoint system itself
which has never been the most stable), and updates others that would
previously rely on watch/unwatch, so that they don't unexpectedly fail.
This commit is contained in:
wolfbeast 2019-10-27 02:14:16 +01:00 committed by Roy Tam
commit 3d8d9f95df
141 changed files with 34 additions and 2940 deletions

View file

@ -1,8 +0,0 @@
// |jit-test| error:TypeError
// 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,20 +0,0 @@
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,20 +0,0 @@
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,7 +0,0 @@
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,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,3 +0,0 @@
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
enableSPSProfiling();
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 });
}