55 lines
1.3 KiB
JavaScript
55 lines
1.3 KiB
JavaScript
description(
|
|
"Regression test for https://webkit.org/b/139418."
|
|
);
|
|
|
|
function InnerObjectNoSetter()
|
|
{
|
|
this._enabled = false;
|
|
}
|
|
|
|
InnerObjectNoSetter.prototype = {
|
|
get enabled()
|
|
{
|
|
return this._enabled;
|
|
}
|
|
}
|
|
|
|
function StrictOuterObject(inner)
|
|
{
|
|
this._innerObject = inner;
|
|
}
|
|
|
|
StrictOuterObject.prototype = {
|
|
get enabled()
|
|
{
|
|
"use strict";
|
|
return this._innerObject.enabled;
|
|
},
|
|
|
|
set enabled(x)
|
|
{
|
|
"use strict";
|
|
this._innerObject.enabled = x;
|
|
}
|
|
}
|
|
|
|
var innerNoSetter = new InnerObjectNoSetter;
|
|
var strictOuterNoInnerSetter = new StrictOuterObject(innerNoSetter);
|
|
|
|
for (var i = 0; i < 1000; ++i) {
|
|
var noExceptionWithMissingSetter = "Missing setter called with strict mode should throw exception and didn't!";
|
|
try {
|
|
strictOuterNoInnerSetter.enabled = true;
|
|
throw noExceptionWithMissingSetter;
|
|
} catch (e) {
|
|
if (e instanceof TypeError)
|
|
; // This is the expected exception
|
|
else if (!((e instanceof String) && (e == noExceptionWithMissingSetter)))
|
|
throw e // rethrow "missing exception" exception
|
|
else
|
|
throw "Missing setter called with strict mode threw wrong exception: " + e;
|
|
}
|
|
if (strictOuterNoInnerSetter.enabled)
|
|
throw "Setter unexpectedly modified value";
|
|
}
|