function strictArgs() {
return (function (a, b, c) {'use strict' ; return arguments; })(1, 2);
}
function normalArgs() {
return (function (a, b, c) { return arguments; })(1, 2);
}
function checkProperty(options, prop, shouldThrow) {
var desc, orig;
var obj = options.strict ? strictArgs() : normalArgs();
var objType = options.strict ? "strict arguments." : "normal arguments." ;
function check() {
orig = Object.getOwnPropertyDescriptor(obj, prop);
var threw = false ;
try {
obj[prop] = obj[prop];
}
catch (e) {
threw = true ;
}
assertEq(threw, shouldThrow, objType + prop + " threw" );
if (orig === undefined) {
// The property wasn't defined, so we can skip it.
return ;
}
desc = Object.getOwnPropertyDescriptor(obj, prop);
if ("value" in orig) {
assertEq(desc.value, orig.value, objType + prop + " value" );
} else {
assertEq(desc.get, orig.get, objType + prop + " get" );
assertEq(desc.set, orig.set, objType + prop + " set" );
}
assertEq(desc.writable, orig.writable, objType + prop + " writable" );
assertEq(desc.enumerable, orig.enumerable, objType + prop + " enumerable" );
assertEq(desc.configurable, orig.configurable, objType + prop + " configurable" );
}
check();
if (orig && orig.configurable) {
if (options.refresh) { obj = options.strict ? strictArgs() : normalArgs(); }
Object.defineProperty(obj, prop, {writable: false , enumerable: true });
check();
if (options.refresh) { obj = options.strict ? strictArgs() : normalArgs(); }
Object.defineProperty(obj, prop, {writable: true , enumerable: false });
check();
if (options.refresh) { obj = options.strict ? strictArgs() : normalArgs(); }
Object.defineProperty(obj, prop, {writable: false , configurable: false });
check();
}
}
checkProperty({strict: true , refresh: true }, 'callee' , true );
checkProperty({strict: true , refresh: false }, 'callee' , true );
checkProperty({strict: false , refresh: true }, 'callee' , false );
checkProperty({strict: false , refresh: false }, 'callee' , false );
checkProperty({strict: true , refresh: true }, 'length' , false );
checkProperty({strict: true , refresh: false }, 'length' , false );
checkProperty({strict: false , refresh: true }, 'length' , false );
checkProperty({strict: false , refresh: false }, 'length' , false );
for (var i = 0; i <= 5; i++) {
checkProperty({strict: true , refresh: true }, "" + i, false );
checkProperty({strict: true , refresh: false }, "" + i, false );
checkProperty({strict: false , refresh: true }, "" + i, false );
checkProperty({strict: false , refresh: false }, "" + i, false );
}
Messung V0.5 C=99 H=98 G=98
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland