blob: 3a02e89be144fc62cf9527a57fe29c4f1a5fe96e [file] [log] [blame]
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";
}