| <!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> |