| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- // ES6 Object.is(x,y) API extension tests -- verifies the API shape and basic functionality
- WScript.LoadScriptFile("..\\UnitTestFramework\\UnitTestFramework.js");
- var tests = [
- {
- name: "Object.is should exist and have length 2",
- body: function () {
- assert.isTrue(Object.hasOwnProperty('is'), "Object should have an is method");
- assert.areEqual(2, Object.is.length, "is method takes two arguments");
- }
- },
- {
- name: "Object.is(undefined, y) returns true for y = undefined, false otherwise",
- body: function () {
- assert.isTrue(Object.is(undefined, undefined), "Object.is(undefined, y) returns true for Type(y) = Undefined");
- assert.isFalse(Object.is(undefined, null), "Object.is(undefined, y) returns false for Type(y) = Null");
- assert.isFalse(Object.is(undefined, false), "Object.is(undefined, y) returns false for Type(y) = Boolean");
- assert.isFalse(Object.is(undefined, ""), "Object.is(undefined, y) returns false for Type(y) = String");
- assert.isFalse(Object.is(undefined, Symbol()), "Object.is(undefined, y) returns false for Type(y) = Symbol");
- assert.isFalse(Object.is(undefined, 0), "Object.is(undefined, y) returns false for Type(y) = Number");
- assert.isFalse(Object.is(undefined, { }), "Object.is(undefined, y) returns false for Type(y) = Object");
- }
- },
- {
- name: "Object.is(null, y) returns true for y = null, false otherwise",
- body: function () {
- assert.isFalse(Object.is(null, undefined), "Object.is(null, y) returns false for Type(y) = Undefined");
- assert.isTrue(Object.is(null, null), "Object.is(null, y) returns true for Type(y) = Null");
- assert.isFalse(Object.is(null, false), "Object.is(null, y) returns false for Type(y) = Boolean");
- assert.isFalse(Object.is(null, ""), "Object.is(null, y) returns false for Type(y) = String");
- assert.isFalse(Object.is(null, Symbol()), "Object.is(null, y) returns false for Type(y) = Symbol");
- assert.isFalse(Object.is(null, 0), "Object.is(null, y) returns false for Type(y) = Number");
- assert.isFalse(Object.is(null, { }), "Object.is(null, y) returns false for Type(y) = Object");
- }
- },
- {
- name: "Object.is(x, y), where Type(x) is Number, returns true for y = x (bitwise), false otherwise",
- body: function () {
- assert.isFalse(Object.is(0, undefined), "Object.is(0, y) returns false for Type(y) = Undefined");
- assert.isFalse(Object.is(0, null), "Object.is(0, y) returns false for Type(y) = Null");
- assert.isFalse(Object.is(0, false), "Object.is(0, y) returns false for Type(y) = Boolean");
- assert.isFalse(Object.is(0, ""), "Object.is(0, y) returns false for Type(y) = String");
- assert.isFalse(Object.is(0, Symbol()), "Object.is(0, y) returns false for Type(y) = Symbol");
- assert.isTrue(Object.is(0, 0), "Object.is(0, y) returns true for Type(y) = Number");
- assert.isFalse(Object.is(0, { }), "Object.is(0, y) returns false for Type(y) = Object");
- assert.isTrue(Object.is(NaN, NaN), "Object.is(NaN, NaN) returns true");
- assert.isFalse(Object.is(+0, -0), "Object.is(+0, -0) returns false");
- assert.isFalse(Object.is(-0, +0), "Object.is(+0, -0) returns false");
- assert.isTrue(Object.is(10, 10), "Object.is(10, 10) returns true");
- assert.isFalse(Object.is(10, -10), "Object.is(10, 10) returns false");
- assert.isTrue(Object.is(Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY), "Object.is(+Infinity, +Infinity) returns true");
- assert.isTrue(Object.is(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY), "Object.is(-Infinity, -Infinity) returns true");
- assert.isFalse(Object.is(Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY), "Object.is(+Infinity, -Infinity) returns false");
- }
- },
- {
- name: "Object.is(x, y), where Type(x) is String, returns true when Type(y) is String and x and y have the same sequence of code points, false otherwise",
- body: function () {
- assert.isFalse(Object.is("", undefined), "Object.is('', y) returns false for Type(y) = Undefined");
- assert.isFalse(Object.is("", null), "Object.is('', y) returns false for Type(y) = Null");
- assert.isFalse(Object.is("", false), "Object.is('', y) returns false for Type(y) = Boolean");
- assert.isTrue(Object.is("", ""), "Object.is('', y) returns true for Type(y) = String where x == y");
- assert.isFalse(Object.is("", Symbol()), "Object.is('', y) returns false for Type(y) = Symbol");
- assert.isFalse(Object.is("", 0), "Object.is('', y) returns false for Type(y) = Number");
- assert.isFalse(Object.is("", { }), "Object.is('', y) returns false for Type(y) = Object");
- assert.isTrue(Object.is("abc", "abc"), "Object.is('abc', 'abc') returns true");
- assert.isFalse(Object.is("abc", "xyz"), "Object.is('abc', 'xyz') returns false");
- }
- },
- {
- name: "Object.is(x, y), where Type(x) is Boolean, returns true when Type(y) is Boolean and x = y, false otherwise",
- body: function () {
- assert.isFalse(Object.is(false, undefined), "Object.is(false, y) returns false for Type(y) = Undefined");
- assert.isFalse(Object.is(false, null), "Object.is(false, y) returns false for Type(y) = Null");
- assert.isTrue(Object.is(false, false), "Object.is(false, y) returns true for Type(y) = Boolean where x == y");
- assert.isFalse(Object.is(false, ""), "Object.is(false, y) returns false for Type(y) = String");
- assert.isFalse(Object.is(false, Symbol()), "Object.is(false, y) returns false for Type(y) = Symbol");
- assert.isFalse(Object.is(false, 0), "Object.is(false, y) returns false for Type(y) = Number");
- assert.isFalse(Object.is(false, { }), "Object.is(false, y) returns false for Type(y) = Object");
- assert.isTrue(Object.is(true, true), "Object.is(true, true) returns true");
- assert.isFalse(Object.is(false, true), "Object.is(false, true) returns false");
- }
- },
- {
- name: "Object.is(x, y), where Type(x) is Symbol, returns true when Type(y) is Symbol and x and y are the same symbol, false otherwise",
- body: function () {
- var sym = Symbol();
- assert.isFalse(Object.is(sym, undefined), "Object.is(Symbol(), y) returns false for Type(y) = Undefined");
- assert.isFalse(Object.is(sym, null), "Object.is(Symbol(), y) returns false for Type(y) = Null");
- assert.isFalse(Object.is(sym, false), "Object.is(Symbol(), y) returns false for Type(y) = Boolean");
- assert.isFalse(Object.is(sym, ""), "Object.is(Symbol(), y) returns false for Type(y) = String");
- assert.isTrue(Object.is(sym, sym), "Object.is(x, y) returns true when x and y are the same symbol");
- assert.isFalse(Object.is(sym, 0), "Object.is(Symbol(), y) returns false for Type(y) = Number");
- assert.isFalse(Object.is(sym, { }), "Object.is(Symbol(), y) returns false for Type(y) = Object");
- assert.isFalse(Object.is(sym, Symbol()), "Object.is(x, y) returns false where x and y are different symbols");
- }
- },
- {
- name: "Object.is(x, y), where Type(x) is Symbol, returns true when Type(y) is Symbol and x and y are the same symbol, false otherwise",
- body: function () {
- var o = { };
- assert.isFalse(Object.is(o, undefined), "Object.is(Symbol(), y) returns false for Type(y) = Undefined");
- assert.isFalse(Object.is(o, null), "Object.is(Symbol(), y) returns false for Type(y) = Null");
- assert.isFalse(Object.is(o, false), "Object.is(Symbol(), y) returns false for Type(y) = Boolean");
- assert.isFalse(Object.is(o, ""), "Object.is(Symbol(), y) returns false for Type(y) = String");
- assert.isFalse(Object.is(o, Symbol()), "Object.is(x, y) returns false when Type(y) = Symbol");
- assert.isFalse(Object.is(o, 0), "Object.is(Symbol(), y) returns false for Type(y) = Number");
- assert.isTrue(Object.is(o, o), "Object.is(Symbol(), y) returns true for Type(y) = Object where x and y are the same object");
- assert.isFalse(Object.is(o, { }), "Object.is(x, y) returns false when x and y are different objects");
- }
- },
- {
- name: "Object.is(x, y), where Type(x) is function, returns true when Type(y) is function and x and y are the same function or same throw functions in sloppy mode, false otherwise",
- body: function () {
- function f() { }
- function g() { }
- var obj1 = { f }, obj2 = { f };
- var bf = f.bind();
- var bft = f.bind({});
- assert.isTrue(Object.is(obj1.f, obj2.f), "Object.is should return true when comparing the same function object");
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(f.__proto__, "arguments").set, Object.getOwnPropertyDescriptor(f.__proto__, "caller").set), "Object.is should return true when comparing different throw type error methods on the same function");
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(f.__proto__, "arguments").set, Object.getOwnPropertyDescriptor(f.__proto__, "caller").get), "Object.is should return true when comparing different throw type error methods on the same function's different accessors");
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(f.__proto__, "arguments").set, Object.getOwnPropertyDescriptor(g.__proto__, "arguments").set), "Object.is should return true when comparing same throw type error methods on different functions");
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(f.__proto__, "arguments").set, Object.getOwnPropertyDescriptor(g.__proto__, "caller").set), "Object.is should return true when comparing different throw type error methods on the different functions");
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(f.__proto__, "arguments").set, Object.getOwnPropertyDescriptor(g.__proto__, "caller").get), "Object.is should return true when comparing different throw type error methods on the different functions' different accessors");
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(bf.__proto__, "arguments").set, Object.getOwnPropertyDescriptor(bf.__proto__, "caller").set), "Object.is should return true when comparing different throw type error methods on the same bound function");
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(bf.__proto__, "arguments").set, Object.getOwnPropertyDescriptor(bf.__proto__, "caller").get), "Object.is should return true when comparing different throw type error methods on the same bound function's different accessors");
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(bft.__proto__, "arguments").set, Object.getOwnPropertyDescriptor(bf.__proto__, "caller").get), "Object.is should return true when comparing different throw type error methods on a different bound function's different accessors");
- }
- },
- {
- name: "Object.is(x, y), where Type(x) is function, returns true when Type(y) is function and x and y are the same function or same throw functions in strict mode, false otherwise",
- body: function () {
- 'use strict';
- function f() { 'use strict'; }
- var bf = f.bind();
- var bft = f.bind({});
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(Function.prototype, "arguments").set, Object.getOwnPropertyDescriptor(Function.prototype, "caller").set), "Object.is should return true when comparing different throw type error methods on the same function");
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(Function.prototype, "arguments").set, Object.getOwnPropertyDescriptor(Function.prototype, "caller").get), "Object.is should return true when comparing different throw type error methods on the same function's different accessors");
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(bf.__proto__, "arguments").set, Object.getOwnPropertyDescriptor(bf.__proto__, "caller").set), "Object.is should return true when comparing different throw type error methods on the same bound function");
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(bf.__proto__, "arguments").set, Object.getOwnPropertyDescriptor(bf.__proto__, "caller").get), "Object.is should return true when comparing different throw type error methods on the same bound function's different accessors");
- assert.isTrue(Object.is(Object.getOwnPropertyDescriptor(bft.__proto__, "arguments").set, Object.getOwnPropertyDescriptor(bf.__proto__, "caller").get), "Object.is should return true when comparing different throw type error methods on a different bound function's different accessors");
- }
- },
- {
- name: "Object.is called with less or more than 2 arguments",
- body: function () {
- assert.isTrue(Object.is(), "Object.is() is the same as Object.is(undefined, undefined) which should return true");
- assert.isTrue(Object.is(undefined), "Object.is(undefined) is the same as Object.is(undefined, undefined) and returns true");
- assert.isFalse(Object.is(null), "Object.is(null) is the same as Object.is(null, undefined) and returns false");
- assert.isFalse(Object.is(false), "Object.is(false) is the same as Object.is(false, undefined) and returns false");
- assert.isFalse(Object.is(""), "Object.is('') is the same as Object.is('', undefined) and returns false");
- assert.isFalse(Object.is(Symbol()), "Object.is(Symbol()) is the same as Object.is(Symbol(), undefined) and returns false");
- assert.isFalse(Object.is(0), "Object.is(0) is the same as Object.is(0, undefined) and returns false");
- assert.isFalse(Object.is({ }), "Object.is({ }) is the same as Object.is({ }, undefined) and returns false");
- assert.isTrue(Object.is(0, 0, 1), "Object.is ignores arguments after the first two; ignores the 1");
- assert.isFalse(Object.is("", 0, false), "Object.is ignores arguments after the first two; ignores the false");
- }
- },
- ];
- testRunner.runTests(tests, { verbose: WScript.Arguments[0] != "summary" });
|