72 lines
1.4 KiB
JavaScript
72 lines
1.4 KiB
JavaScript
var object = {
|
|
x: {
|
|
j() {
|
|
return this.j;
|
|
}
|
|
},
|
|
f() {
|
|
return this.f;
|
|
},
|
|
'g'() {},
|
|
"h"() {},
|
|
42() {},
|
|
null() {},
|
|
true() {},
|
|
false() {},
|
|
function() {},
|
|
var() {},
|
|
'class'() {} // NodeJS incorrectly flags {class: ...} as an error.
|
|
};
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
expect(Object.keys(object)).toEqual([
|
|
'42',
|
|
'x',
|
|
'f',
|
|
'g',
|
|
'h',
|
|
'null',
|
|
'true',
|
|
'false',
|
|
'function',
|
|
'var',
|
|
'class'
|
|
]);
|
|
|
|
function assertMethod(object, name) {
|
|
expect(object).toHaveProperty(name);
|
|
var descriptor = Object.getOwnPropertyDescriptor(object, name);
|
|
expect(typeof descriptor).toBe('object');
|
|
expect(descriptor.enumerable).toBe(true);
|
|
expect(typeof object[name]).toBe('function');
|
|
// IE does not have a name property on functions.
|
|
expect(object[name].name === '' || object[name].name === undefined).toBe(true);
|
|
}
|
|
|
|
assertMethod(object, 'f');
|
|
assertMethod(object, 'g');
|
|
assertMethod(object, 'h');
|
|
assertMethod(object, '42');
|
|
assertMethod(object, 'null');
|
|
assertMethod(object, 'true');
|
|
assertMethod(object, 'false');
|
|
assertMethod(object, 'function');
|
|
assertMethod(object, 'var');
|
|
assertMethod(object, 'class');
|
|
|
|
expect(object.f).toBe(object.f());
|
|
|
|
// Test the nested object.
|
|
expect(Object.keys(object.x)).toEqual(['j']);
|
|
assertMethod(object.x, 'j');
|
|
|
|
// Test name binding.
|
|
var m = 42;
|
|
class C {
|
|
m() {
|
|
return m;
|
|
}
|
|
}
|
|
expect(new C().m()).toBe(42);
|