mirror of https://github.com/svaarala/duktape.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
4.9 KiB
174 lines
4.9 KiB
/*===
|
|
firstarg
|
|
TypeError
|
|
TypeError
|
|
ok
|
|
TypeError
|
|
TypeError
|
|
TypeError
|
|
TypeError
|
|
ok
|
|
ok
|
|
ok
|
|
prototype: null
|
|
prototype: [object Object] true prototype
|
|
===*/
|
|
|
|
/* First argument must be null or Object; TypeError otherwise */
|
|
|
|
print('firstarg');
|
|
|
|
function firstArgTest() {
|
|
var obj;
|
|
var proto;
|
|
|
|
function test(arg, is_noarg) {
|
|
var t;
|
|
|
|
try {
|
|
if (is_noarg) {
|
|
t = Object.create();
|
|
} else {
|
|
t = Object.create(arg);
|
|
}
|
|
print('ok');
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
}
|
|
|
|
test(undefined, true);
|
|
test(undefined);
|
|
test(null);
|
|
test(true);
|
|
test(false);
|
|
test(123);
|
|
test('foo');
|
|
test([1,2,3]);
|
|
test({ foo: 1, bar: 2});
|
|
test(function(){});
|
|
|
|
// when set as null or a specific object, must become the internal
|
|
// prototype
|
|
|
|
obj = Object.create(null);
|
|
print('prototype: ' + Object.getPrototypeOf(obj));
|
|
|
|
proto = { proto: 'prototype' };
|
|
obj = Object.create(proto);
|
|
print('prototype: ' + Object.getPrototypeOf(obj), Object.getPrototypeOf(obj) === proto, obj.proto);
|
|
}
|
|
|
|
try {
|
|
firstArgTest();
|
|
} catch (e) {
|
|
print(e);
|
|
}
|
|
|
|
/*===
|
|
property attributes
|
|
0 prop1 1 true true true undefined undefined
|
|
1 prop2 1 false true true undefined undefined
|
|
2 prop3 1 true false true undefined undefined
|
|
3 prop4 1 false false true undefined undefined
|
|
4 prop5 1 true true false undefined undefined
|
|
5 prop6 1 false true false undefined undefined
|
|
6 prop7 1 true false false undefined undefined
|
|
7 prop8 1 false false false undefined undefined
|
|
8 acc1 undefined undefined true true function function
|
|
9 acc2 undefined undefined false true function function
|
|
10 acc3 undefined undefined true false function function
|
|
11 acc4 undefined undefined false false function function
|
|
===*/
|
|
|
|
print('property attributes');
|
|
|
|
function propertyAttributeTest() {
|
|
var proto = {};
|
|
var obj;
|
|
var names = [ 'prop1', 'prop2', 'prop3', 'prop4',
|
|
'prop5', 'prop6', 'prop7', 'prop8',
|
|
'acc1', 'acc2', 'acc3', 'acc4' ];
|
|
var pd;
|
|
|
|
obj = Object.create(proto, {
|
|
prop1: { value: 1, writable: true, enumerable: true, configurable: true },
|
|
prop2: { value: 1, writable: false, enumerable: true, configurable: true },
|
|
prop3: { value: 1, writable: true, enumerable: false, configurable: true },
|
|
prop4: { value: 1, writable: false, enumerable: false, configurable: true },
|
|
prop5: { value: 1, writable: true, enumerable: true, configurable: false },
|
|
prop6: { value: 1, writable: false, enumerable: true, configurable: false },
|
|
prop7: { value: 1, writable: true, enumerable: false, configurable: false },
|
|
prop8: { value: 1, writable: false, enumerable: false, configurable: false },
|
|
acc1: { get: function(){}, set: function(){}, enumerable: true, configurable: true },
|
|
acc2: { get: function(){}, set: function(){}, enumerable: false, configurable: true },
|
|
acc3: { get: function(){}, set: function(){}, enumerable: true, configurable: false },
|
|
acc4: { get: function(){}, set: function(){}, enumerable: false, configurable: false }
|
|
});
|
|
|
|
for (i = 0; i < names.length; i++) {
|
|
pd = Object.getOwnPropertyDescriptor(obj, names[i]);
|
|
print(i, names[i], pd.value, pd.writable, pd.enumerable, pd.configurable,
|
|
typeof pd.get, typeof pd.set);
|
|
}
|
|
}
|
|
|
|
try {
|
|
propertyAttributeTest();
|
|
} catch (e) {
|
|
print(e);
|
|
}
|
|
|
|
/*===
|
|
object replaced
|
|
object prototype foo bar quux
|
|
===*/
|
|
|
|
/* The object should be created with the standard built-in Object constructor,
|
|
* even if Object had been replaced. Also test that the standard
|
|
* Object.defineProperties() behavior works even if Object.defineProperties is
|
|
* bogus.
|
|
*/
|
|
|
|
print('object replaced');
|
|
|
|
function objectReplacedTest() {
|
|
var Object_old;
|
|
var Object_defineProperties_old;
|
|
|
|
Object_old = Object;
|
|
Object_defineProperties_old = Object.defineProperties;
|
|
|
|
Object.defineProperties = function() {
|
|
print('replacement defineProperties() in original Object called');
|
|
throw new Error('never here');
|
|
}
|
|
|
|
Object = function() {
|
|
print('replacement Object constructor called');
|
|
throw new Error('never here');
|
|
};
|
|
|
|
Object.defineProperties = function () {
|
|
print('defineProperties() in replacement Object called');
|
|
throw new Error('never here');
|
|
}
|
|
|
|
obj = Object_old.create({ proto: 'prototype' }, {
|
|
foo: { value: 'foo', writable: true, enumerable: true, configurable: true },
|
|
bar: { value: 'bar', writable: true, enumerable: true, configurable: true },
|
|
quux: { value: 'quux', writable: true, enumerable: false, configurable: true },
|
|
});
|
|
|
|
Object = Object_old;
|
|
Object.defineProperties = Object_defineProperties_old;
|
|
|
|
print(typeof obj, obj.proto, obj.foo, obj.bar, obj.quux);
|
|
}
|
|
|
|
try {
|
|
objectReplacedTest();
|
|
} catch (e) {
|
|
print(e);
|
|
}
|
|
|
|
|