mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-06 07:48:38 +09:00
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:
parent
ca9e376e55
commit
3d8d9f95df
141 changed files with 34 additions and 2940 deletions
|
|
@ -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,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);
|
||||
|
|
@ -1,37 +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 = 385133;
|
||||
var summary = 'Do not crash due to recursion with watch, setter, delete, generator';
|
||||
var actual = 'No Crash';
|
||||
var expect = 'No Crash';
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
test();
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function test()
|
||||
{
|
||||
enterFunc ('test');
|
||||
printBugNumber(BUGNUMBER);
|
||||
printStatus (summary);
|
||||
|
||||
try
|
||||
{
|
||||
Object.defineProperty(this, "x", { set: {}.watch, enumerable: true, configurable: true });
|
||||
this.watch('x', 'foo'.split);
|
||||
delete x;
|
||||
function g(){ x = 1; yield; }
|
||||
for (i in g()) { }
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
}
|
||||
reportCompare(expect, actual, summary);
|
||||
|
||||
exitFunc ('test');
|
||||
}
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
// |reftest| skip-if(!xulRuntime.shell)
|
||||
/* -*- 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 = 394709;
|
||||
var summary = 'Do not leak with object.watch and closure';
|
||||
var actual = 'No Leak';
|
||||
var expect = 'No Leak';
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
test();
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function test()
|
||||
{
|
||||
enterFunc ('test');
|
||||
printBugNumber(BUGNUMBER);
|
||||
printStatus (summary);
|
||||
|
||||
assertEq(finalizeCount(), 0, "invalid initial state");
|
||||
|
||||
runtest();
|
||||
gc();
|
||||
assertEq(finalizeCount(), 1, "leaked");
|
||||
|
||||
runtest();
|
||||
gc();
|
||||
assertEq(finalizeCount(), 2, "leaked");
|
||||
|
||||
runtest();
|
||||
gc();
|
||||
assertEq(finalizeCount(), 3, "leaked");
|
||||
|
||||
|
||||
function runtest () {
|
||||
var obj = { b: makeFinalizeObserver() };
|
||||
obj.watch('b', watcher);
|
||||
|
||||
function watcher(id, old, value) {
|
||||
++obj.n;
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
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 = 481989;
|
||||
var summary = 'TM: Do not assert: SPROP_HAS_STUB_SETTER(sprop)';
|
||||
var actual = '';
|
||||
var expect = '';
|
||||
|
||||
printBugNumber(BUGNUMBER);
|
||||
printStatus (summary);
|
||||
|
||||
|
||||
y = this.watch("x", function(){}); for each (let y in ['', '']) x = y;
|
||||
|
||||
|
||||
reportCompare(expect, actual, summary);
|
||||
|
|
@ -1,34 +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 = 452498;
|
||||
var summary = 'TM: upvar2 regression tests';
|
||||
var actual = '';
|
||||
var expect = '';
|
||||
|
||||
//------- Comment #193 From Gary Kwong
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
test();
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function test()
|
||||
{
|
||||
enterFunc ('test');
|
||||
printBugNumber(BUGNUMBER);
|
||||
printStatus (summary);
|
||||
|
||||
// Assertion failure: afunbox->parent, at ../jsparse.cpp:1912
|
||||
|
||||
this.x = undefined;
|
||||
this.watch("x", Function);
|
||||
NaN = uneval({ get \u3056 (){ return undefined } });
|
||||
x+=NaN;
|
||||
|
||||
reportCompare(expect, actual, summary);
|
||||
|
||||
exitFunc ('test');
|
||||
}
|
||||
|
|
@ -21,15 +21,6 @@ function test()
|
|||
printBugNumber(BUGNUMBER);
|
||||
printStatus (summary);
|
||||
|
||||
// Assertion failure: localKind == JSLOCAL_VAR || localKind == JSLOCAL_CONST, at ../jsfun.cpp:916
|
||||
|
||||
this.x = undefined;
|
||||
this.watch("x", Function);
|
||||
NaN = uneval({ get \u3056 (){ return undefined } });
|
||||
x+=NaN;
|
||||
|
||||
reportCompare(expect, actual, summary + ': 1');
|
||||
|
||||
// Assertion failure: lexdep->isLet(), at ../jsparse.cpp:1900
|
||||
|
||||
(function (){
|
||||
|
|
|
|||
|
|
@ -1,41 +0,0 @@
|
|||
/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
|
||||
/*
|
||||
* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/licenses/publicdomain/
|
||||
* Contributor: Blake Kaplan
|
||||
*/
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
var BUGNUMBER = 520572;
|
||||
var summary = 'watch should innerize the object being watched';
|
||||
var actual = 0;
|
||||
var expect = 2;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
test();
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function test()
|
||||
{
|
||||
enterFunc ('test');
|
||||
printBugNumber(BUGNUMBER);
|
||||
printStatus (summary);
|
||||
|
||||
if ("evalcx" in this) {
|
||||
// shell
|
||||
let s = evalcx("lazy");
|
||||
s.n = 0;
|
||||
evalcx('this.watch("x", function(){ n++; }); this.x = 4; x = 6', s);
|
||||
actual = s.n;
|
||||
reportCompare(expect, actual, summary);
|
||||
} else {
|
||||
// browser
|
||||
this.watch('x', function(){ actual++; });
|
||||
this.x = 4;
|
||||
x = 6;
|
||||
reportCompare(expect, actual, summary);
|
||||
}
|
||||
|
||||
exitFunc ('test');
|
||||
}
|
||||
|
|
@ -21,11 +21,6 @@ function test()
|
|||
printBugNumber(BUGNUMBER);
|
||||
printStatus (summary);
|
||||
|
||||
// crash [@ js_Interpret]
|
||||
(eval("(function(){ this.watch(\"x\", function () { new function ()y } ); const y = undefined });"))();
|
||||
x = NaN;
|
||||
reportCompare(expect, actual, summary + ': 2');
|
||||
|
||||
// Assertion failure: JOF_OPTYPE(op) == JOF_ATOM, at ../jsemit.cpp:5916
|
||||
({ set z(v){}, set y(v)--x, set w(v)--w });
|
||||
reportCompare(expect, actual, summary + ': 3');
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
var watcherCount, setterCount;
|
||||
function watcher(id, oldval, newval) { watcherCount++; return newval; }
|
||||
function setter(newval) { setterCount++; }
|
||||
|
||||
var p = { set x(v) { setter(v); } };
|
||||
p.watch('x', watcher);
|
||||
|
||||
watcherCount = setterCount = 0;
|
||||
p.x = 2;
|
||||
assertEq(setterCount, 1);
|
||||
assertEq(watcherCount, 1);
|
||||
|
||||
var o = Object.defineProperty({}, 'x', { set:setter, enumerable:true, configurable:true });
|
||||
o.watch('x', watcher);
|
||||
|
||||
watcherCount = setterCount = 0;
|
||||
o.x = 2;
|
||||
assertEq(setterCount, 1);
|
||||
assertEq(watcherCount, 1);
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
var log;
|
||||
function watcher(id, old, newval) { log += 'watcher'; return newval; }
|
||||
var o = { set x(v) { log += 'setter'; } };
|
||||
o.watch('x', watcher);
|
||||
Object.defineProperty(o, 'x', {value: 3, writable: true});
|
||||
log = '';
|
||||
o.x = 3;
|
||||
assertEq(log, 'watcher');
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
// See bug 627984, comment 17, item 1.
|
||||
var obj;
|
||||
var methods = [];
|
||||
for (var i = 0; i < 2; i++) {
|
||||
obj = {m: function () { return this.x; }};
|
||||
obj.watch("m", function (id, oldval, newval) { methods[i] = oldval; });
|
||||
obj.m = 0;
|
||||
}
|
||||
assertEq(typeof methods[0], "function");
|
||||
assertEq(typeof methods[1], "function");
|
||||
assertEq(methods[0] !== methods[1], true);
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
// See bug 627984, comment 17, item 2.
|
||||
var obj = {};
|
||||
var x;
|
||||
obj.watch("m", function (id, oldval, newval) {
|
||||
x = this.m;
|
||||
return newval;
|
||||
});
|
||||
delete obj.m;
|
||||
obj.m = function () { return this.method; };
|
||||
obj.m = 2;
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
// Don't write string value to method slot.
|
||||
// See bug 627984, comment 17, item 2.
|
||||
var obj = {};
|
||||
obj.watch("m", function (id, oldval, newval) {
|
||||
return 'ok';
|
||||
});
|
||||
delete obj.m;
|
||||
obj.m = function () { return this.x; };
|
||||
assertEq(obj.m, 'ok');
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
// See bug 627984, comment 17, item 3.
|
||||
var obj = {};
|
||||
obj.watch("m", function (id, oldval, newval) {
|
||||
delete obj.m;
|
||||
obj.m = function () {};
|
||||
return newval;
|
||||
});
|
||||
delete obj.m;
|
||||
obj.m = 1;
|
||||
assertEq(obj.m, 1);
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
// Bug 627984 comment 11.
|
||||
var o = ({});
|
||||
o.p = function() {};
|
||||
o.watch('p', function() { });
|
||||
o.q = function() {}
|
||||
delete o.p;
|
||||
o.p = function() {};
|
||||
assertEq(o.p, void 0);
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
// Bug 627984 description.
|
||||
var o = Array;
|
||||
o.p = function() {};
|
||||
o.watch('p', function() { });
|
||||
for(var x in o) {
|
||||
o[x];
|
||||
}
|
||||
delete o.p;
|
||||
o.p = function() {};
|
||||
assertEq(o.p, void 0);
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
// See bug 627984 comment 20.
|
||||
var obj = {m: function () {}};
|
||||
obj.watch("m", function () { throw 'FAIL'; });
|
||||
var f = obj.m; // don't call the watchpoint
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
var o = {a:1, b:2};
|
||||
o.watch("p", function() { return 13; });
|
||||
delete o.p;
|
||||
o.p = 0;
|
||||
assertEq(o.p, 13);
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
var a = {set p(x) {}};
|
||||
a.watch('p', function () {});
|
||||
var b = Object.create(a);
|
||||
b.watch('p', function () {});
|
||||
delete b.p;
|
||||
b.p = 0;
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
var obj = {};
|
||||
obj.watch(-1, function(){});
|
||||
obj.unwatch("-1"); // don't assert
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
var obj = {};
|
||||
try {
|
||||
obj.watch(QName(), function () {});
|
||||
} catch (exc) {
|
||||
}
|
||||
gc();
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
/*
|
||||
* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/licenses/publicdomain/
|
||||
* Contributor:
|
||||
* Gary Kwong
|
||||
*/
|
||||
|
||||
var gTestfile = 'watch-undefined-setter.js';
|
||||
//-----------------------------------------------------------------------------
|
||||
var BUGNUMBER = 560277;
|
||||
var summary =
|
||||
'Crash [@ JSObject::getParent] or [@ js_WrapWatchedSetter] or ' +
|
||||
'[@ js_GetClassPrototype]';
|
||||
|
||||
this.watch("x", function() { });
|
||||
Object.defineProperty(this, "x", { set: undefined, configurable: true });
|
||||
|
||||
reportCompare(true, true);
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
/*
|
||||
* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/licenses/publicdomain/
|
||||
* Contributors: Gary Kwong and Jason Orendorff
|
||||
*/
|
||||
|
||||
var savedEval = eval;
|
||||
var x = [0];
|
||||
eval();
|
||||
|
||||
x.__proto__ = this; // x has non-dictionary scope
|
||||
try {
|
||||
DIE;
|
||||
} catch(e) {
|
||||
}
|
||||
|
||||
delete eval; // force dictionary scope for global
|
||||
gc();
|
||||
eval = savedEval;
|
||||
var f = eval("(function () { return /x/; })");
|
||||
x.watch('x', f); // clone property from global to x, including SPROP_IN_DICTIONARY flag
|
||||
|
||||
reportCompare("ok", "ok", "bug 533876");
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
// |reftest| skip
|
||||
/*
|
||||
* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/licenses/publicdomain/
|
||||
* Contributors: Gary Kwong and Jason Orendorff
|
||||
*/
|
||||
var obj = {};
|
||||
obj.__defineSetter__("x", function() {});
|
||||
obj.watch("x", function() {});
|
||||
obj.__defineSetter__("x", /a/);
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
// |reftest| skip
|
||||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
// Contributors: Gary Kwong <gary@rumblingedge.com>
|
||||
// Jason Orendorff <jorendorff@mozilla.com>
|
||||
|
||||
// on a non-global object
|
||||
var x = {};
|
||||
x.watch("p", function () { evalcx(''); });
|
||||
x.p = 0;
|
||||
|
||||
// on the global
|
||||
watch("e", (function () { evalcx(''); }));
|
||||
e = function () {};
|
||||
|
||||
reportCompare(0, 0, "ok");
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
var obj = {set x(v) {}};
|
||||
obj.watch("x", function() { delete obj.x; });
|
||||
obj.x = "hi"; // don't assert
|
||||
|
||||
reportCompare(0, 0, 'ok');
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
// Any copyright is dedicated to the Public Domain.
|
||||
// http://creativecommons.org/licenses/publicdomain/
|
||||
|
||||
var a = {p0: function () {}};
|
||||
var b = /f/;
|
||||
b.__proto__ = a;
|
||||
b.watch("p0", function () {});
|
||||
b.p0;
|
||||
|
||||
reportCompare(0, 0, "ok");
|
||||
Loading…
Add table
Add a link
Reference in a new issue