blob: be30985cd21b5f1d45a35c7546cc7875ceb88246 [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';
tr.b.unittest.testSuite(function() {
var comparePossiblyUndefinedValues = tr.b.comparePossiblyUndefinedValues;
var compareArrays = tr.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('group', function() {
// Empty array
var srcArray = [];
var fn = function(curr) { return (curr % 2); }
var dstDict = {};
assert.deepEqual(tr.b.group(srcArray, fn), dstDict);
// Non-empty array
var srcArray = [0, 1, 2, 3, 4, 5, 6];
var dstDict = {
0: [0, 2, 4, 6],
1: [1, 3, 5]
};
assert.deepEqual(tr.b.group(srcArray, fn), dstDict);
});
test('mapItems', function() {
// Empty dictionary.
var srcDict = {};
var dstDict = tr.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 = tr.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 = tr.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 = tr.b.mapItems(srcDict, function(key, value) {
return value;
});
assert.lengthOf(Object.keys(srcDict), 0);
assert.lengthOf(Object.keys(dstDict), 0);
});
test('identity', function() {
// Undefined value.
assert.isUndefined(tr.b.identity(undefined));
// Primitive value.
assert.equal(tr.b.identity(-273.15), -273.15);
// List.
var list = ['list', 'with', 1, undefined, 'value'];
assert.strictEqual(tr.b.identity(list), list);
// Object.
var object = {'hasItems': true};
assert.strictEqual(tr.b.identity(object), object);
});
});
</script>