blob: b2a42f12ab5a1abedc974773405a7308991cd650 [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
var echo = WScript.Echo;
var globalObject = this;
var o = {};
function foo() {
echo(" ", "Evaluate arg list");
}
function test(title, f) {
echo(title);
try {
f();
} catch (e) {
echo(" ", e.name);
}
echo();
}
test("Global member missing", function () {
bar(foo());
});
test("Global member undefined", function () {
bar = undefined;
bar(foo());
});
test("Global member null", function () {
bar = null;
bar(foo());
});
test("Global member is not callable", function () {
bar = 23;
bar(foo());
});
if (Object.defineProperties) {
test("Global member getter returns undefined", function () {
Object.defineProperty(this, "bar", {
get: function () { },
configurable: true
});
bar(foo());
});
test("Global member getter returns null", function () {
Object.defineProperty(this, "bar", {
get: function () { return null; },
configurable: true
});
bar(foo());
});
}
echo();
test("Global member missing via property reference via dot syntax", function () {
globalObject.baz(foo());
});
test("Global member undefined via property reference via dot syntax", function () {
globalObject.baz = undefined;
globalObject.baz(foo());
});
test("Global member null via property reference via dot syntax", function () {
globalObject.baz = null;
globalObject.baz(foo());
});
test("Global member is not callable via property reference via dot syntax", function () {
globalObject.baz = 23;
globalObject.baz(foo());
});
if (Object.defineProperties) {
test("Global member getter returns undefined via property reference via dot syntax", function () {
Object.defineProperty(this, "baz", {
get: function () { },
configurable: true
});
globalObject.baz(foo());
});
test("Global member getter returns null via property reference via dot syntax", function () {
Object.defineProperty(this, "baz", {
get: function () { return null; },
configurable: true
});
globalObject.baz(foo());
});
}
echo();
function elementname() { return "buz"; }
test("Global member missing via property reference via element access syntax", function () {
globalObject[elementname()](foo());
});
test("Global member undefined via property reference via element access syntax", function () {
globalObject[elementname()] = undefined;
globalObject[elementname()](foo());
});
test("Global member null via property reference via element access syntax", function () {
globalObject[elementname()] = null;
globalObject[elementname()](foo());
});
test("Global member is not callable via property reference via element access syntax", function () {
globalObject[elementname()] = 23;
globalObject[elementname()](foo());
});
if (Object.defineProperties) {
test("Global member getter returns undefined via property reference via element access syntax", function () {
Object.defineProperty(this, elementname(), {
get: function () { },
configurable: true
});
globalObject[elementname()](foo());
});
test("Global member getter returns null via property reference via element access syntax", function () {
Object.defineProperty(this, elementname(), {
get: function () { return null; },
configurable: true
});
globalObject[elementname()](foo());
});
}
echo();
test("Object member missing", function () {
o.bar(foo());
});
test("Object member undefined", function () {
o.bar = undefined;
o.bar(foo());
});
test("Object member null", function () {
o.bar = null;
o.bar(foo());
});
test("Object member is not callable", function () {
o.bar = 23;
o.bar(foo());
});
if (Object.defineProperties) {
test("Object member getter returns undefined", function () {
Object.defineProperty(o, "bar", {
get: function () { },
configurable: true
});
o.bar(foo());
});
test("Object member getter returns null", function () {
Object.defineProperty(o, "bar", {
get: function () { return null; },
configurable: true
});
o.bar(foo());
});
}
echo();
test("Object element missing", function () {
o[3](foo());
});
test("Object element undefined", function () {
o[3] = undefined;
o[3](foo());
});
test("Object element null", function () {
o[3] = null;
o[3](foo());
});
test("Object element is not callable", function () {
o[3] = 23;
o[3](foo());
});
if (Object.defineProperties) {
test("Object element getter returns undefined", function () {
Object.defineProperty(o, 3, {
get: function () { },
configurable: true
});
o[3](foo());
});
test("Object element getter returns null", function () {
Object.defineProperty(o, 3, {
get: function () { return null; },
configurable: true
});
o[3](foo());
});
}