All files / src/tester helpers.ts

93.02% Statements 40/43
91.89% Branches 34/37
100% Functions 2/2
92.85% Lines 39/42

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 771x 23x       23x       23x 23x   23x 3x     20x 24x 1x     23x 23x   23x 4x 1x   19x 4x 2x   15x 4x     12x     1x 29x       29x 3x     26x 3x     23x 44x 44x   44x 4x 1x   40x           6x 2x   34x 6x       14x    
export function checkIfObjectsAreEqual(obj1: any, obj2: any): boolean {
  Iif (obj1 === obj2) {
    return true;
  }
 
  Iif (typeof obj1 !== "object" || obj1 === null || typeof obj2 !== "object" || obj2 === null) {
    return false;
  }
 
  const keys1 = Object.keys(obj1);
  const keys2 = Object.keys(obj2);
 
  if (keys1.length !== keys2.length) {
    return false;
  }
 
  for (const key of keys1) {
    if (!keys2.includes(key)) {
      return false;
    }
 
    const val1 = obj1[key];
    const val2 = obj2[key];
 
    if (Array.isArray(val1) && Array.isArray(val2)) {
      if (!checkIfArraysAreEqual(val1, val2)) {
        return false;
      }
    } else if (typeof val1 === "object" && typeof val2 === "object") {
      if (!checkIfObjectsAreEqual(val1, val2)) {
        return false;
      }
    } else if (val1 !== val2) {
      return false;
    }
  }
  return true;
}
 
export function checkIfArraysAreEqual(arr1: any[], arr2: any[]): boolean {
  Iif (arr1 === arr2) {
    return true;
  }
 
  if (!Array.isArray(arr1) || !Array.isArray(arr2)) {
    return false;
  }
 
  if (arr1.length !== arr2.length) {
    return false;
  }
 
  for (let i = 0; i < arr1.length; i++) {
    const val1 = arr1[i];
    const val2 = arr2[i];
 
    if (Array.isArray(val1) && Array.isArray(val2)) {
      if (!checkIfArraysAreEqual(val1, val2)) {
        return false;
      }
    } else if (
      typeof val1 === "object" &&
      typeof val2 === "object" &&
      val1 !== null &&
      val2 !== null
    ) {
      if (!checkIfObjectsAreEqual(val1, val2)) {
        return false;
      }
    } else if (val1 !== val2) {
      return false;
    }
  }
 
  return true;
}