js/src/jit-test/tests/self-test/assertDeepEq.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

michael@0 1 // Tests for the assertEqual function in jit-test/lib/asserts.js
michael@0 2
michael@0 3 load(libdir + "asserts.js");
michael@0 4
michael@0 5 function assertNotDeepEq(a, b, options) {
michael@0 6 assertThrowsInstanceOf(() => assertDeepEq(a, b, options), Error);
michael@0 7 }
michael@0 8
michael@0 9 // primitives
michael@0 10 assertDeepEq(undefined, undefined);
michael@0 11 assertDeepEq("1", "1");
michael@0 12 assertNotDeepEq(1, "1");
michael@0 13 assertNotDeepEq(undefined, null);
michael@0 14 assertNotDeepEq({}, null);
michael@0 15
michael@0 16 // objects
michael@0 17 assertDeepEq({}, {});
michael@0 18 assertDeepEq({one: 1, two: 2}, {one: 1, two: 2});
michael@0 19 assertNotDeepEq(Object.freeze({}), {});
michael@0 20 assertDeepEq(Object.create(null), Object.create(null));
michael@0 21 assertNotDeepEq(Object.create(null, {a: {configurable: false, value: 3}}),
michael@0 22 Object.create(null, {a: {configurable: true, value: 3}}));
michael@0 23 assertNotDeepEq({one: 1}, {one: 1, two: 2});
michael@0 24 assertNotDeepEq({yes: true}, {oui: true});
michael@0 25 assertNotDeepEq({zero: 0}, {zero: "0"});
michael@0 26
michael@0 27 // test the comment
michael@0 28 var x = {}, y = {}, ax = [x];
michael@0 29 assertDeepEq([ax, x], [ax, y]); // passes (bogusly)
michael@0 30 assertNotDeepEq([ax, x], [ax, y], {strictEquivalence: true});
michael@0 31 assertDeepEq([x, ax], [y, ax]); // passes (bogusly)
michael@0 32 assertNotDeepEq([x, ax], [y, ax], {strictEquivalence: true});
michael@0 33
michael@0 34 // object identity
michael@0 35 assertNotDeepEq([x, y], [x, x]);
michael@0 36 assertDeepEq([x, y], [x, y]);
michael@0 37 assertDeepEq([y, x], [x, y]);
michael@0 38
michael@0 39 // proto chain
michael@0 40 var x = {};
michael@0 41 assertDeepEq(Object.create(x), Object.create(x));
michael@0 42 assertDeepEq(Object.create({}), Object.create({})); // equivalent but not identical proto objects
michael@0 43
michael@0 44 // arrays
michael@0 45 assertDeepEq([], []);
michael@0 46 assertNotDeepEq([], [1]);
michael@0 47 assertDeepEq([1], [1]);
michael@0 48 assertNotDeepEq([0], [1]);
michael@0 49 assertDeepEq([1, 2, 3], [1, 2, 3]);
michael@0 50 assertNotDeepEq([1, , 3], [1, undefined, 3]);
michael@0 51 var p = [], q = [];
michael@0 52 p.prop = 1;
michael@0 53 assertNotDeepEq(p, q);
michael@0 54 assertNotDeepEq(q, p);
michael@0 55 q.prop = 1;
michael@0 56 assertDeepEq(q, p);
michael@0 57
michael@0 58 // functions
michael@0 59 assertNotDeepEq(() => 1, () => 2);
michael@0 60 assertNotDeepEq((...x) => 1, x => 1);
michael@0 61 assertNotDeepEq(function f(){}, function g(){});
michael@0 62 var f1 = function () {}, f2 = function () {};
michael@0 63 assertDeepEq(f1, f1);
michael@0 64 assertDeepEq(f1, f2); // same text, close enough
michael@0 65 f1.prop = 1;
michael@0 66 assertNotDeepEq(f1, f2);
michael@0 67 f2.prop = 1;
michael@0 68 assertDeepEq(f1, f2);
michael@0 69
michael@0 70 // recursion
michael@0 71 var a = [], b = [];
michael@0 72 a[0] = a;
michael@0 73 b[0] = b;
michael@0 74 assertDeepEq(a, b);
michael@0 75 a[0] = b;
michael@0 76 assertNotDeepEq(a, b); // [#1=[#1#]] is not structurally equivalent to #1=[[#1#]]
michael@0 77 b[0] = a;
michael@0 78 assertDeepEq(a, b);
michael@0 79 b[0] = [a]; // a[0] === b, b[0] === c, c[0] === a
michael@0 80 assertDeepEq(a, b);
michael@0 81
michael@0 82 // objects that merge
michael@0 83 var x = {};
michael@0 84 assertDeepEq({x: x}, {x: x});
michael@0 85 var y = [x];
michael@0 86 assertDeepEq([y], [y]);
michael@0 87
michael@0 88 // cross-compartment
michael@0 89 var g1 = newGlobal(), g2 = newGlobal();
michael@0 90 assertDeepEq(g1, g2);
michael@0 91 assertDeepEq(g1, g2, {strictEquivalence: true});
michael@0 92 Object.preventExtensions(g2.Math.abs); // make some miniscule change
michael@0 93 assertNotDeepEq(g1, g2);

mercurial