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.
66 lines
1.4 KiB
66 lines
1.4 KiB
/*
|
|
* ToString() (E5 Section 9.8).
|
|
*
|
|
* String(v) returns ToString() with no modifications or pre-steps.
|
|
*/
|
|
|
|
/* Custom because of function ToString() coercion */
|
|
/*---
|
|
{
|
|
"custom": true
|
|
}
|
|
---*/
|
|
|
|
/*===
|
|
0 string undefined
|
|
1 string null
|
|
2 string true
|
|
3 string false
|
|
4 string 123
|
|
5 string foo
|
|
6 string function myfunc() {"ecmascript"}
|
|
7 string [object Object]
|
|
8 TypeError
|
|
9 string foo
|
|
10 string 123
|
|
11 string 123
|
|
12 string 234
|
|
===*/
|
|
|
|
function test() {
|
|
var obj = {};
|
|
Object.setPrototypeOf(obj, null);
|
|
|
|
[ undefined, null, true, false, 123.0, 'foo', function myfunc() {},
|
|
|
|
// For objects, coercion is ToString(ToPrimitive(obj, hint String))
|
|
|
|
{},
|
|
obj,
|
|
{ toString: function () { return 'foo'; } },
|
|
{ toString: function () { return 123; } },
|
|
{ toString: function () { return 123; },
|
|
valueOf: function () { return 234; } },
|
|
{ toString: 'non-callable',
|
|
valueOf: function () { return 234; } },
|
|
|
|
// ToPrimitive() test covers a lot more variants.
|
|
].forEach(function (v, i) {
|
|
try {
|
|
var t = String(v);
|
|
if (typeof v === 'function' && typeof t === 'string') {
|
|
// expect string hack (no longer needed in Duktape 1.5.0)
|
|
t = t.replace(/\//g, '|');
|
|
}
|
|
print(i, typeof t, t);
|
|
} catch (e) {
|
|
print(i, e.name);
|
|
}
|
|
});
|
|
}
|
|
|
|
try {
|
|
test();
|
|
} catch (e) {
|
|
print(e.stack || e);
|
|
}
|
|
|