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.
86 lines
1.6 KiB
86 lines
1.6 KiB
/*
|
|
* Custom Error properties.
|
|
*
|
|
* Ecmascript engines vary a lot in what Error properties exist and how they
|
|
* are implemented (e.g. as own properties, inherited properties, accessors,
|
|
* enumerability).
|
|
*
|
|
* Test strictly for the current Duktape behavior, to detect accidental
|
|
* changes and regressions.
|
|
*/
|
|
|
|
/*---
|
|
{
|
|
"custom": true
|
|
}
|
|
---*/
|
|
|
|
/*===
|
|
own properties
|
|
"message"
|
|
enumerable properties (including inherited)
|
|
all properties (including non-enumerable and inherited)
|
|
---
|
|
"message"
|
|
---
|
|
"constructor"
|
|
"name"
|
|
"message"
|
|
"stack"
|
|
"fileName"
|
|
"lineNumber"
|
|
"toString"
|
|
---
|
|
"constructor"
|
|
"__proto__"
|
|
"toString"
|
|
"toLocaleString"
|
|
"valueOf"
|
|
"hasOwnProperty"
|
|
"isPrototypeOf"
|
|
"propertyIsEnumerable"
|
|
---
|
|
===*/
|
|
|
|
function test() {
|
|
var err;
|
|
var k;
|
|
var obj;
|
|
|
|
err = new Error('my message');
|
|
|
|
// Only 'message' is an own property. Stack trace etc are accessors
|
|
// and back into an internal _tracedata property which cannot normally
|
|
// be accessed from Ecmascript code.
|
|
|
|
print('own properties');
|
|
Object.getOwnPropertyNames(err).forEach(function (k) {
|
|
print(JSON.stringify(k));
|
|
});
|
|
|
|
// No enumerable properties at all.
|
|
|
|
print('enumerable properties (including inherited)');
|
|
for (k in err) {
|
|
print(k);
|
|
}
|
|
|
|
// Non-enumerable inherited properties.
|
|
|
|
print('all properties (including non-enumerable and inherited)');
|
|
obj = err;
|
|
while (obj) {
|
|
print('---');
|
|
Object.getOwnPropertyNames(obj).forEach(function (k) {
|
|
print(JSON.stringify(k));
|
|
});
|
|
obj = Object.getPrototypeOf(obj);
|
|
}
|
|
print('---');
|
|
}
|
|
|
|
try {
|
|
test();
|
|
} catch (e) {
|
|
print(e.stack || e);
|
|
}
|
|
|