tests/utils/operator.test.js

/**
 * Tests for the 'utils/operator.js' file.
 */
// Do not warn if these variables were not defined before.
/* global QUnit */

/**
 * Tests for {@link dwv.utils.isObject}.
 *
 * @function module:tests/utils~isObject
 */
QUnit.test('Test isObject.', function (assert) {
  var obj01 = {name: 'dwv', type: 'app'};
  assert.equal(dwv.utils.isObject(obj01), true, 'test with object');

  var obj02 = ['one', 'two', 'three'];
  assert.equal(dwv.utils.isObject(obj02), true, 'test with array');

  var obj03 = 1;
  assert.equal(dwv.utils.isObject(obj03), false, 'test with number');

  var obj04 = null;
  assert.equal(dwv.utils.isObject(obj04), false, 'test with null');

  var obj05 = true;
  assert.equal(dwv.utils.isObject(obj05), false, 'test with bool');
});

/**
 * Tests for {@link dwv.utils.isArray}.
 *
 * @function module:tests/utils~isArray
 */
QUnit.test('Test isArray.', function (assert) {
  var obj01 = {name: 'dwv', type: 'app'};
  assert.equal(dwv.utils.isArray(obj01), false, 'test with object');

  var obj02 = ['one', 'two', 'three'];
  assert.equal(dwv.utils.isArray(obj02), true, 'test with array');

  var obj03 = 1;
  assert.equal(dwv.utils.isArray(obj03), false, 'test with number');

  var obj04 = null;
  assert.equal(dwv.utils.isArray(obj04), false, 'test with null');

  var obj05 = true;
  assert.equal(dwv.utils.isArray(obj05), false, 'test with bool');
});

/**
 * Tests for {@link dwv.utils.mergeObjects}.
 *
 * @function module:tests/utils~mergeObjects
 */
QUnit.test('Test merge objects.', function (assert) {
  var obj001 = {id: {value: 0}, a: {value: 1}, b: {value: 1}};
  var obj002 = {id: {value: 1}, a: {value: 1}, b: {value: 2}};

  // bad id key
  var fbad01 = function () {
    dwv.utils.mergeObjects(obj001, obj002, 'x', 'value');
  };
  assert.throws(fbad01, 'merge bad id key');

  // bad value key
  var fbad02 = function () {
    dwv.utils.mergeObjects(obj001, obj002, 'id', 'x');
  };
  assert.throws(fbad02, 'merge bad value key');

  // same id
  var obj003 = {id: {value: 0}, a: {value: 1}, b: {value: 2}};
  var fbad03 = function () {
    dwv.utils.mergeObjects(obj001, obj003, 'id', 'value');
  };
  assert.throws(fbad03, 'merge with same id value');

  // test #00: simple
  var ref00 = {
    id: {value: [0, 1], merged: true},
    a: {value: 1},
    b: {value: {
      0: {value: 1},
      1: {value: 2}
    }}
  };
  var res00 = dwv.utils.mergeObjects(obj001, obj002, 'id', 'value');
  assert.equal(
    JSON.stringify(res00),
    JSON.stringify(ref00),
    'merge objects 00');

  // test #01: array values
  var obj011 = {id: {value: 0}, a: {value: 1}, b: {value: [1]}};
  var obj012 = {id: {value: 1}, a: {value: 1}, b: {value: [2]}};
  var ref01 = {
    id: {value: [0, 1], merged: true},
    a: {value: 1},
    b: {value: {
      0: {value: [1]},
      1: {value: [2]}
    }}
  };
  var res01 = dwv.utils.mergeObjects(obj011, obj012, 'id', 'value');
  assert.equal(
    JSON.stringify(res01),
    JSON.stringify(ref01),
    'merge objects 01');

  // test #02: merge with already merged
  var obj021 = {
    id: {value: [0, 1], merged: true},
    a: {value: 1},
    b: {value: {
      0: {value: 1},
      1: {value: 2}
    }}
  };
  var obj022 = {id: {value: 2}, a: {value: 1}, b: {value: 2}};
  var ref02 = {
    id: {value: [0, 1, 2], merged: true},
    a: {value: 1},
    b: {value: {
      0: {value: 1},
      1: {value: 2},
      2: {value: 2}
    }}
  };
  var res02 = dwv.utils.mergeObjects(obj021, obj022, 'id', 'value');
  assert.equal(
    JSON.stringify(res02),
    JSON.stringify(ref02),
    'merge objects 02');

  // test #03: merge with already merged that contains a repeated value
  var obj031 = {
    id: {value: [0, 1], merged: true},
    a: {value: 1},
    b: {value: {
      0: {value: 1},
      1: {value: 2}
    }}
  };
  var obj032 = {id: {value: 2}, a: {value: 2}, b: {value: 3}};
  var ref03 = {
    id: {value: [0, 1, 2], merged: true},
    a: {value: {
      0: {value: 1},
      1: {value: 1},
      2: {value: 2}
    }},
    b: {value: {
      0: {value: 1},
      1: {value: 2},
      2: {value: 3}
    }}
  };
  var res03 = dwv.utils.mergeObjects(obj031, obj032, 'id', 'value');
  assert.equal(
    JSON.stringify(res03),
    JSON.stringify(ref03),
    'merge objects 03');

  // test #10: missing key in first object
  var obj101 = {id: {value: 0}, a: {value: 1}};
  var obj102 = {id: {value: 1}, a: {value: 2}, b: {value: 1}};
  var ref10 = {
    id: {value: [0, 1], merged: true},
    a: {value: {
      0: {value: 1},
      1: {value: 2}
    }},
    b: {value: {
      0: null,
      1: {value: 1}
    }}
  };
  var res10 = dwv.utils.mergeObjects(obj101, obj102, 'id', 'value');
  assert.equal(
    JSON.stringify(res10),
    JSON.stringify(ref10),
    'merge objects 10');

  // test #10: missing key in second object
  var obj111 = {id: {value: 0}, a: {value: 1}, b: {value: 1}};
  var obj112 = {id: {value: 1}, a: {value: 2}};
  var ref11 = {
    id: {value: [0, 1], merged: true},
    a: {value: {
      0: {value: 1},
      1: {value: 2}
    }},
    b: {value: {
      0: {value: 1},
      1: null
    }}
  };
  var res11 = dwv.utils.mergeObjects(obj111, obj112, 'id', 'value');
  assert.equal(
    JSON.stringify(res11),
    JSON.stringify(ref11),
    'merge objects 11');

  // test #12: missing value in first object
  var obj121 = {id: {value: 0}, a: {value: 1}, b: {}};
  var obj122 = {id: {value: 1}, a: {value: 2}, b: {value: 1}};
  var ref12 = {
    id: {value: [0, 1], merged: true},
    a: {value: {
      0: {value: 1},
      1: {value: 2}
    }},
    b: {value: {
      0: {},
      1: {value: 1}
    }}
  };
  var res12 = dwv.utils.mergeObjects(obj121, obj122, 'id', 'value');
  assert.equal(
    JSON.stringify(res12),
    JSON.stringify(ref12),
    'merge objects 12');

  // test #13: missing value in second object
  var obj131 = {id: {value: 0}, a: {value: 1}, b: {value: 1}};
  var obj132 = {id: {value: 1}, a: {value: 2}, b: {}};
  var ref13 = {
    id: {value: [0, 1], merged: true},
    a: {value: {
      0: {value: 1},
      1: {value: 2}
    }},
    b: {value: {
      0: {value: 1},
      1: {}
    }}
  };
  var res13 = dwv.utils.mergeObjects(obj131, obj132, 'id', 'value');
  assert.equal(
    JSON.stringify(res13),
    JSON.stringify(ref13),
    'merge objects 13');

});