tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

object-keys-05.js (1134B)


      1 // This test case is similar to object-keys-01, except that we replace
      2 // `Object.keys` by a copy of it.
      3 let myThis = {
      4    keys: Object.keys
      5 };
      6 
      7 // Similar functions are part of popular framework such as React and Angular.
      8 function shallowEqual(o1, o2) {
      9    var k1 = myThis.keys(o1);
     10    var k2 = myThis.keys(o2);
     11    if (k1.length != k2.length) {
     12        return false;
     13    }
     14    for (var k = 0; k < k1.length; k++) {
     15        if (!Object.hasOwnProperty.call(o2, k1[k]) || !Object.is(o1[k1[k]], o2[k1[k]])) {
     16            return false;
     17        }
     18    }
     19    return true;
     20 }
     21 
     22 let objs = [
     23    {x:0, a: 1, b: 2},
     24    {x:1, b: 1, c: 2},
     25    {x:2, c: 1, d: 2},
     26    {x:3, a: 1, b: 2, c: 3},
     27    {x:4, b: 1, c: 2, d: 3},
     28    {x:5, a: 1, b: 2, c: 3, d: 4}
     29 ];
     30 
     31 with({}) {}
     32 for (let i = 0; i < 1000; i++) {
     33    for (let o1 of objs) {
     34        for (let o2 of objs) {
     35            assertEq(shallowEqual(o1, o2), Object.is(o1, o2));
     36        }
     37    }
     38 }
     39 
     40 let count = 0;
     41 myThis.keys = function keys(obj) {
     42    count++;
     43    return Object.keys(obj);
     44 }
     45 
     46 let o1 = objs[4], o2 = objs[5];
     47 assertEq(shallowEqual(o1, o2), Object.is(o1, o2));
     48 assertEq(count, 2);