blob: fe979e2e1185ca7b632cd1141cc46365af312b6d [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<link rel="import" href="/base/iteration_helpers.html">
<script>
'use strict';
tv.b.unittest.testSuite(function() {
var comparePossiblyUndefinedValues = tv.b.comparePossiblyUndefinedValues;
var compareArrays = tv.b.compareArrays;
test('comparePossiblyUndefinedValues', function() {
function cmp(x, y) {
assert.isDefined(x);
assert.isDefined(y);
return x - y;
}
assert.isBelow(comparePossiblyUndefinedValues(0, 1, cmp), 0);
assert.isAbove(comparePossiblyUndefinedValues(1, 0, cmp), 0);
assert.equal(comparePossiblyUndefinedValues(1, 1, cmp), 0);
assert.isBelow(comparePossiblyUndefinedValues(0, undefined, cmp), 0);
assert.isAbove(comparePossiblyUndefinedValues(undefined, 0, cmp), 0);
assert.equal(comparePossiblyUndefinedValues(undefined, undefined, cmp), 0);
});
test('compareArrays', function() {
function cmp(x, y) {
assert.isDefined(x);
assert.isDefined(y);
return x - y;
}
assert.isBelow(compareArrays([1], [2], cmp), 0);
assert.isAbove(compareArrays([2], [1], cmp), 0);
assert.isBelow(compareArrays([1], [1, 2], cmp), 0);
assert.isAbove(compareArrays([1, 2], [1], cmp), 0);
assert.isBelow(compareArrays([], [1], cmp), 0);
assert.isAbove(compareArrays([1], [], cmp), 0);
assert.isAbove(compareArrays([2], [1], cmp), 0);
assert.equal(compareArrays([], [], cmp), 0);
assert.equal(compareArrays([1], [1], cmp), 0);
});
test('mapItems', function() {
// Empty dictionary.
var srcDict = {};
var dstDict = tv.b.mapItems(srcDict, function(key, value) {
return value;
});
assert.lengthOf(Object.keys(srcDict), 0);
assert.lengthOf(Object.keys(dstDict), 0);
assert.notStrictEqual(dstDict, srcDict);
// Non-empty dictionary.
var srcDict = {a: 0, b: 30};
var dstDict = tv.b.mapItems(srcDict, function(key, value) {
return 9 * value / 5 + 32;
});
assert.lengthOf(Object.keys(srcDict), 2);
assert.equal(srcDict.a, 0);
assert.equal(srcDict.b, 30);
assert.lengthOf(Object.keys(dstDict), 2);
assert.equal(dstDict.a, 32);
assert.equal(dstDict.b, 86);
assert.notStrictEqual(dstDict, srcDict);
// Optional 'this' argument.
var srcDict = {c: '?', d: '!', e: '.'};
var dstDict = tv.b.mapItems(srcDict, function(key, value) {
return key + this.delimiter + value;
}, {delimiter: '='});
assert.lengthOf(Object.keys(srcDict), 3);
assert.equal(srcDict.c, '?');
assert.equal(srcDict.d, '!');
assert.equal(srcDict.e, '.');
assert.lengthOf(Object.keys(dstDict), 3);
assert.equal(dstDict.c, 'c=?');
assert.equal(dstDict.d, 'd=!');
assert.equal(dstDict.e, 'e=.');
assert.notStrictEqual(dstDict, srcDict);
// Inherited properties should not be mapped.
var srcDict = {__proto__: {a: 10}};
var dstDict = tv.b.mapItems(srcDict, function(key, value) {
return value;
});
assert.lengthOf(Object.keys(srcDict), 0);
assert.lengthOf(Object.keys(dstDict), 0);
});
});
</script>