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.
97 lines
2.1 KiB
97 lines
2.1 KiB
/*===
|
|
TypeError
|
|
TypeError
|
|
string [object Boolean]
|
|
string [object Boolean]
|
|
string [object Number]
|
|
string [object String]
|
|
string 1,2
|
|
string [object Object]
|
|
string [object Object]
|
|
string JOIN
|
|
string BOOLJOIN
|
|
proto.join
|
|
string foo;bar;quux
|
|
string [object Object]
|
|
MyJoinError
|
|
===*/
|
|
|
|
function basicTest() {
|
|
var proto, obj;
|
|
|
|
function test(this_value) {
|
|
var t;
|
|
|
|
try {
|
|
t = Array.prototype.toString.call(this_value);
|
|
print(typeof t, t);
|
|
} catch (e) {
|
|
print(e.name);
|
|
}
|
|
}
|
|
|
|
// join() is called if the ToObject() coercion has it; for these basic tests
|
|
// only the array ([1,2]) has a join(). Others fall back to the standard
|
|
// Object.prototype.toString()
|
|
|
|
test(undefined);
|
|
test(null);
|
|
test(true);
|
|
test(false);
|
|
test(123);
|
|
test('foo');
|
|
test([1,2]);
|
|
test({ foo: 1, bar:1 });
|
|
|
|
// explicit join() on an object
|
|
|
|
test({ join: 123 }); // not callable, still fall back to Object.prototype.toString()
|
|
test({ join: function() { return 'JOIN' } });
|
|
|
|
// join() inherited
|
|
|
|
Boolean.prototype.join = function() { return 'BOOLJOIN'; };
|
|
test(true);
|
|
|
|
// join() inherited, with joinable members
|
|
|
|
proto = Object.create(Object.prototype);
|
|
proto.join = function() {
|
|
var i;
|
|
var tmp = [];
|
|
print('proto.join');
|
|
for (i = 0; i < this.length; i++) {
|
|
tmp.push(String(this[i]));
|
|
}
|
|
return tmp.join(';');
|
|
};
|
|
obj = Object.create(proto);
|
|
obj.length = 3;
|
|
obj['0'] = 'foo';
|
|
obj['1'] = 'bar';
|
|
obj['2'] = 'quux';
|
|
test(obj);
|
|
|
|
// the join() fallback is the standard Object.prototype.toString() function,
|
|
// i.e. override should have no effect (must return '[object Object]' and
|
|
// not 'OBJ-TOSTRING').
|
|
|
|
Object.prototype.toString = function() { return 'OBJ-TOSTRING'; };
|
|
test({ foo: 1, bar: 2 });
|
|
|
|
// a join() error should propagate out
|
|
test({
|
|
join: function() {
|
|
var e = new Error('join error');
|
|
e.name = 'MyJoinError';
|
|
throw e;
|
|
}
|
|
});
|
|
}
|
|
|
|
try {
|
|
basicTest();
|
|
} catch (e) {
|
|
print(e);
|
|
}
|
|
|
|
|