blob: 96b2dab3f9bf478901dcecf98954495d8c584db4 [file] [log] [blame]
// Copyright 2006 The Closure Library Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
goog.provide('goog.structsTest');
goog.setTestOnly('goog.structsTest');
goog.require('goog.array');
goog.require('goog.structs');
goog.require('goog.structs.Map');
goog.require('goog.structs.Set'); // needed for filter
goog.require('goog.testing.jsunit');
/*
This one does not test Map or Set
It tests Array, Object, String and a NodeList
*/
function stringifyObject(obj) {
var sb = [];
for (var key in obj) {
sb.push(key + obj[key]);
}
return sb.join('');
}
function getTestElement() {
return document.getElementById('test');
}
function getAll() {
return getTestElement().getElementsByTagName('*');
}
var node;
function addNode() {
node = document.createElement('span');
getTestElement().appendChild(node);
}
function removeNode() {
getTestElement().removeChild(node);
}
function nodeNames(nl) {
var sb = [];
for (var i = 0, n; n = nl[i]; i++) {
sb.push(n.nodeName.toLowerCase());
}
return sb.join(',');
}
var allTagNames1 = 'hr,p,p,p,p,p,p,p,p,h1';
var allTagNames2 = allTagNames1 + ',span';
function testGetCount() {
var arr = ['a', 'b', 'c'];
assertEquals('count, should be 3', 3, goog.structs.getCount(arr));
arr.push('d');
assertEquals('count, should be 4', 4, goog.structs.getCount(arr));
goog.array.remove(arr, 'd');
assertEquals('count, should be 3', 3, goog.structs.getCount(arr));
var obj = {a: 0, b: 1, c: 2};
assertEquals('count, should be 3', 3, goog.structs.getCount(obj));
obj.d = 3;
assertEquals('count, should be 4', 4, goog.structs.getCount(obj));
delete obj.d;
assertEquals('count, should be 3', 3, goog.structs.getCount(obj));
var s = 'abc';
assertEquals('count, should be 3', 3, goog.structs.getCount(s));
s += 'd';
assertEquals('count, should be 4', 4, goog.structs.getCount(s));
var all = getAll();
assertEquals('count, should be 10', 10, goog.structs.getCount(all));
addNode();
assertEquals('count, should be 11', 11, goog.structs.getCount(all));
removeNode();
assertEquals('count, should be 10', 10, goog.structs.getCount(all));
var aMap = new goog.structs.Map({a: 0, b: 1, c: 2});
assertEquals('count, should be 3', 3, goog.structs.getCount(aMap));
aMap.set('d', 3);
assertEquals('count, should be 4', 4, goog.structs.getCount(aMap));
aMap.remove('a');
assertEquals('count, should be 3', 3, goog.structs.getCount(aMap));
var aSet = new goog.structs.Set('abc');
assertEquals('count, should be 3', 3, goog.structs.getCount(aSet));
aSet.add('d');
assertEquals('count, should be 4', 4, goog.structs.getCount(aSet));
aSet.remove('a');
assertEquals('count, should be 3', 3, goog.structs.getCount(aSet));
}
function testGetValues() {
var arr = ['a', 'b', 'c', 'd'];
assertEquals('abcd', goog.structs.getValues(arr).join(''));
var obj = {a: 0, b: 1, c: 2, d: 3};
assertEquals('0123', goog.structs.getValues(obj).join(''));
var s = 'abc';
assertEquals('abc', goog.structs.getValues(s).join(''));
s += 'd';
assertEquals('abcd', goog.structs.getValues(s).join(''));
var all = getAll();
assertEquals(allTagNames1, nodeNames(goog.structs.getValues(all)));
addNode();
assertEquals(allTagNames2, nodeNames(goog.structs.getValues(all)));
removeNode();
assertEquals(allTagNames1, nodeNames(goog.structs.getValues(all)));
var aMap = new goog.structs.Map({a: 1, b: 2, c: 3});
assertEquals('123', goog.structs.getValues(aMap).join(''));
var aSet = new goog.structs.Set([1, 2, 3]);
assertEquals('123', goog.structs.getValues(aMap).join(''));
}
function testGetKeys() {
var arr = ['a', 'b', 'c', 'd'];
assertEquals('0123', goog.structs.getKeys(arr).join(''));
var obj = {a: 0, b: 1, c: 2, d: 3};
assertEquals('abcd', goog.structs.getKeys(obj).join(''));
var s = 'abc';
assertEquals('012', goog.structs.getKeys(s).join(''));
s += 'd';
assertEquals('0123', goog.structs.getKeys(s).join(''));
var all = getAll();
assertEquals('0123456789', goog.structs.getKeys(all).join(''));
addNode();
assertEquals('012345678910', goog.structs.getKeys(all).join(''));
removeNode();
assertEquals('0123456789', goog.structs.getKeys(all).join(''));
var aMap = new goog.structs.Map({a: 1, b: 2, c: 3});
assertEquals('abc', goog.structs.getKeys(aMap).join(''));
var aSet = new goog.structs.Set([1, 2, 3]);
assertUndefined(goog.structs.getKeys(aSet));
}
function testContains() {
var arr = ['a', 'b', 'c', 'd'];
assertTrue("contains, Should contain 'a'", goog.structs.contains(arr, 'a'));
assertFalse(
"contains, Should not contain 'e'", goog.structs.contains(arr, 'e'));
var obj = {a: 0, b: 1, c: 2, d: 3};
assertTrue("contains, Should contain '0'", goog.structs.contains(obj, 0));
assertFalse(
"contains, Should not contain '4'", goog.structs.contains(obj, 4));
var s = 'abc';
assertTrue("contains, Should contain 'a'", goog.structs.contains(s, 'a'));
assertFalse(
"contains, Should not contain 'd'", goog.structs.contains(s, 'd'));
var all = getAll();
assertTrue("contains, Should contain 'h1'",
goog.structs.contains(all, document.getElementById('h1')));
assertFalse("contains, Should not contain 'document.body'",
goog.structs.contains(all, document.body));
var aMap = new goog.structs.Map({a: 1, b: 2, c: 3});
assertTrue("contains, Should contain '1'", goog.structs.contains(aMap, 1));
assertFalse(
"contains, Should not contain '4'", goog.structs.contains(aMap, 4));
var aSet = new goog.structs.Set([1, 2, 3]);
assertTrue("contains, Should contain '1'", goog.structs.contains(aSet, 1));
assertFalse(
"contains, Should not contain '4'", goog.structs.contains(aSet, 4));
}
function testClear() {
var arr = ['a', 'b', 'c', 'd'];
goog.structs.clear(arr);
assertTrue('cleared so it should be empty', goog.structs.isEmpty(arr));
assertFalse(
"cleared so it should not contain 'a'", goog.structs.contains(arr, 'a'));
var obj = {a: 0, b: 1, c: 2, d: 3};
goog.structs.clear(obj);
assertTrue('cleared so it should be empty', goog.structs.isEmpty(obj));
assertFalse(
"cleared so it should not contain 'a' key",
goog.structs.contains(obj, 0));
var aMap = new goog.structs.Map({a: 1, b: 2, c: 3});
goog.structs.clear(aMap);
assertTrue('cleared map so it should be empty', goog.structs.isEmpty(aMap));
assertFalse("cleared map so it should not contain '1' value",
goog.structs.contains(aMap, 1));
var aSet = new goog.structs.Set([1, 2, 3]);
goog.structs.clear(aSet);
assertTrue('cleared set so it should be empty', goog.structs.isEmpty(aSet));
assertFalse(
"cleared set so it should not contain '1'",
goog.structs.contains(aSet, 1));
// cannot clear a string or a NodeList
}
// Map
function testMap() {
var RV = {};
var obj = {
map: function(g) {
assertEquals(f, g);
assertEquals(this, obj);
return RV;
}
};
function f() {}
assertEquals(RV, goog.structs.map(obj, f));
}
function testMap2() {
var THIS_OBJ = {};
var RV = {};
var obj = {
map: function(g, obj2) {
assertEquals(f, g);
assertEquals(this, obj);
assertEquals(THIS_OBJ, obj2);
return RV;
}
};
function f() {}
assertEquals(RV, goog.structs.map(obj, f, THIS_OBJ));
}
function testMapArrayLike() {
var col = [0, 1, 2];
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
return v * v;
}
assertArrayEquals([0, 1, 4], goog.structs.map(col, f));
}
function testMapArrayLike2() {
var THIS_OBJ = {};
var col = [0, 1, 2];
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
return v * v;
}
assertArrayEquals([0, 1, 4], goog.structs.map(col, f, THIS_OBJ));
}
function testMapString() {
var col = '012';
function f(v, i, col2) {
// Teh SpiderMonkey Array.map for strings turns the string into a String
// so we cannot use assertEquals because it uses ===.
assertTrue(col == col2);
assertEquals('number', typeof i);
return Number(v) * Number(v);
}
assertArrayEquals([0, 1, 4], goog.structs.map(col, f));
}
function testMapString2() {
var THIS_OBJ = {};
var col = '012';
function f(v, i, col2) {
// for some reason the strings are equal but identical???
assertEquals(String(col), String(col2));
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
return Number(v) * Number(v);
}
assertArrayEquals([0, 1, 4], goog.structs.map(col, f, THIS_OBJ));
}
function testMapMap() {
var col = new goog.structs.Map({a: 0, b: 1, c: 2});
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('string', typeof key);
return v * v;
}
assertObjectEquals({a: 0, b: 1, c: 4}, goog.structs.map(col, f));
}
function testMapMap2() {
var THIS_OBJ = {};
var col = new goog.structs.Map({a: 0, b: 1, c: 2});
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('string', typeof key);
assertEquals(THIS_OBJ, this);
return v * v;
}
assertObjectEquals({a: 0, b: 1, c: 4}, goog.structs.map(col, f, THIS_OBJ));
}
function testMapSet() {
var col = new goog.structs.Set([0, 1, 2]);
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('undefined', typeof key);
return v * v;
}
assertArrayEquals([0, 1, 4], goog.structs.map(col, f));
}
function testMapSet2() {
var THIS_OBJ = {};
var col = new goog.structs.Set([0, 1, 2]);
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('undefined', typeof key);
assertEquals(THIS_OBJ, this);
return v * v;
}
assertArrayEquals([0, 1, 4], goog.structs.map(col, f, THIS_OBJ));
}
function testMapNodeList() {
var col = getAll();
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
return v.tagName;
}
assertEquals('HRPPPPPPPPH1', goog.structs.map(col, f).join(''));
}
function testMapNodeList2() {
var THIS_OBJ = {};
var col = getAll();
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
return v.tagName;
}
assertEquals('HRPPPPPPPPH1', goog.structs.map(col, f, THIS_OBJ).join(''));
}
// Filter
function testFilter() {
var RV = {};
var obj = {
filter: function(g) {
assertEquals(f, g);
assertEquals(this, obj);
return RV;
}
};
function f() {}
assertEquals(RV, goog.structs.filter(obj, f));
}
function testFilter2() {
var THIS_OBJ = {};
var RV = {};
var obj = {
filter: function(g, obj2) {
assertEquals(f, g);
assertEquals(this, obj);
assertEquals(THIS_OBJ, obj2);
return RV;
}
};
function f() {}
assertEquals(RV, goog.structs.filter(obj, f, THIS_OBJ));
}
function testFilterArrayLike() {
var col = [0, 1, 2];
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
return v > 0;
}
assertArrayEquals([1, 2], goog.structs.filter(col, f));
}
function testFilterArrayLike2() {
var THIS_OBJ = {};
var col = [0, 1, 2];
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
return v > 0;
}
assertArrayEquals([1, 2], goog.structs.filter(col, f, THIS_OBJ));
}
function testFilterString() {
var col = '012';
function f(v, i, col2) {
// for some reason the strings are equal but identical???
assertEquals(String(col), String(col2));
assertEquals('number', typeof i);
return Number(v) > 0;
}
assertArrayEquals(['1', '2'], goog.structs.filter(col, f));
}
function testFilterString2() {
var THIS_OBJ = {};
var col = '012';
function f(v, i, col2) {
// for some reason the strings are equal but identical???
assertEquals(String(col), String(col2));
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
return Number(v) > 0;
}
assertArrayEquals(['1', '2'], goog.structs.filter(col, f, THIS_OBJ));
}
function testFilterMap() {
var col = new goog.structs.Map({a: 0, b: 1, c: 2});
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('string', typeof key);
return v > 0;
}
assertObjectEquals({b: 1, c: 2}, goog.structs.filter(col, f));
}
function testFilterMap2() {
var THIS_OBJ = {};
var col = new goog.structs.Map({a: 0, b: 1, c: 2});
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('string', typeof key);
assertEquals(THIS_OBJ, this);
return v > 0;
}
assertObjectEquals({b: 1, c: 2}, goog.structs.filter(col, f, THIS_OBJ));
}
function testFilterSet() {
var col = new goog.structs.Set([0, 1, 2]);
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('undefined', typeof key);
return v > 0;
}
assertArrayEquals([1, 2], goog.structs.filter(col, f));
}
function testFilterSet2() {
var THIS_OBJ = {};
var col = new goog.structs.Set([0, 1, 2]);
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('undefined', typeof key);
assertEquals(THIS_OBJ, this);
return v > 0;
}
assertArrayEquals([1, 2], goog.structs.filter(col, f, THIS_OBJ));
}
function testFilterNodeList() {
var col = getAll();
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
return v.tagName == 'P';
}
assertEquals('p,p,p,p,p,p,p,p',
nodeNames(goog.structs.filter(col, f)));
}
function testFilterNodeList2() {
var THIS_OBJ = {};
var col = getAll();
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
return v.tagName == 'P';
}
assertEquals('p,p,p,p,p,p,p,p',
nodeNames(goog.structs.filter(col, f, THIS_OBJ)));
}
// Some
function testSome() {
var RV = {};
var obj = {
some: function(g) {
assertEquals(f, g);
assertEquals(this, obj);
return RV;
}
};
function f() {}
assertEquals(RV, goog.structs.some(obj, f));
}
function testSome2() {
var THIS_OBJ = {};
var RV = {};
var obj = {
some: function(g, obj2) {
assertEquals(f, g);
assertEquals(this, obj);
assertEquals(THIS_OBJ, obj2);
return RV;
}
};
function f() {}
assertEquals(RV, goog.structs.some(obj, f, THIS_OBJ));
}
function testSomeArrayLike() {
var limit = 0;
var col = [0, 1, 2];
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
return v > limit;
}
assertTrue(goog.structs.some(col, f));
limit = 2;
assertFalse(goog.structs.some(col, f));
}
function testSomeArrayLike2() {
var THIS_OBJ = {};
var limit = 0;
var col = [0, 1, 2];
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
return v > limit;
}
assertTrue(goog.structs.some(col, f, THIS_OBJ));
limit = 2;
assertFalse(goog.structs.some(col, f, THIS_OBJ));
}
function testSomeString() {
var limit = 0;
var col = '012';
function f(v, i, col2) {
// for some reason the strings are equal but identical???
assertEquals(String(col), String(col2));
assertEquals('number', typeof i);
return Number(v) > limit;
}
assertTrue(goog.structs.some(col, f));
limit = 2;
assertFalse(goog.structs.some(col, f));
}
function testSomeString2() {
var THIS_OBJ = {};
var limit = 0;
var col = '012';
function f(v, i, col2) {
// for some reason the strings are equal but identical???
assertEquals(String(col), String(col2));
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
return Number(v) > limit;
}
assertTrue(goog.structs.some(col, f, THIS_OBJ));
limit = 2;
assertFalse(goog.structs.some(col, f, THIS_OBJ));
}
function testSomeMap() {
var limit = 0;
var col = new goog.structs.Map({a: 0, b: 1, c: 2});
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('string', typeof key);
return v > limit;
}
assertObjectEquals(true, goog.structs.some(col, f));
limit = 2;
assertFalse(goog.structs.some(col, f));
}
function testSomeMap2() {
var THIS_OBJ = {};
var limit = 0;
var col = new goog.structs.Map({a: 0, b: 1, c: 2});
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('string', typeof key);
assertEquals(THIS_OBJ, this);
return v > limit;
}
assertObjectEquals(true, goog.structs.some(col, f, THIS_OBJ));
limit = 2;
assertFalse(goog.structs.some(col, f, THIS_OBJ));
}
function testSomeSet() {
var limit = 0;
var col = new goog.structs.Set([0, 1, 2]);
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('undefined', typeof key);
return v > limit;
}
assertTrue(goog.structs.some(col, f));
limit = 2;
assertFalse(goog.structs.some(col, f));
}
function testSomeSet2() {
var THIS_OBJ = {};
var limit = 0;
var col = new goog.structs.Set([0, 1, 2]);
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('undefined', typeof key);
assertEquals(THIS_OBJ, this);
return v > limit;
}
assertTrue(goog.structs.some(col, f, THIS_OBJ));
limit = 2;
assertFalse(goog.structs.some(col, f, THIS_OBJ));
}
function testSomeNodeList() {
var tagName = 'P';
var col = getAll();
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
return v.tagName == tagName;
}
assertTrue(goog.structs.some(col, f));
tagName = 'MARQUEE';
assertFalse(goog.structs.some(col, f));
}
function testSomeNodeList2() {
var THIS_OBJ = {};
var tagName = 'P';
var col = getAll();
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
return v.tagName == tagName;
}
assertTrue(goog.structs.some(col, f, THIS_OBJ));
tagName = 'MARQUEE';
assertFalse(goog.structs.some(col, f, THIS_OBJ));
}
// Every
function testEvery() {
var RV = {};
var obj = {
every: function(g) {
assertEquals(f, g);
assertEquals(this, obj);
return RV;
}
};
function f() {}
assertEquals(RV, goog.structs.every(obj, f));
}
function testEvery2() {
var THIS_OBJ = {};
var RV = {};
var obj = {
every: function(g, obj2) {
assertEquals(f, g);
assertEquals(this, obj);
assertEquals(THIS_OBJ, obj2);
return RV;
}
};
function f() {}
assertEquals(RV, goog.structs.every(obj, f, THIS_OBJ));
}
function testEveryArrayLike() {
var limit = -1;
var col = [0, 1, 2];
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
return v > limit;
}
assertTrue(goog.structs.every(col, f));
limit = 1;
assertFalse(goog.structs.every(col, f));
}
function testEveryArrayLike2() {
var THIS_OBJ = {};
var limit = -1;
var col = [0, 1, 2];
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
return v > limit;
}
assertTrue(goog.structs.every(col, f, THIS_OBJ));
limit = 1;
assertFalse(goog.structs.every(col, f, THIS_OBJ));
}
function testEveryString() {
var limit = -1;
var col = '012';
function f(v, i, col2) {
// for some reason the strings are equal but identical???
assertEquals(String(col), String(col2));
assertEquals('number', typeof i);
return Number(v) > limit;
}
assertTrue(goog.structs.every(col, f));
limit = 1;
assertFalse(goog.structs.every(col, f));
}
function testEveryString2() {
var THIS_OBJ = {};
var limit = -1;
var col = '012';
function f(v, i, col2) {
// for some reason the strings are equal but identical???
assertEquals(String(col), String(col2));
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
return Number(v) > limit;
}
assertTrue(goog.structs.every(col, f, THIS_OBJ));
limit = 1;
assertFalse(goog.structs.every(col, f, THIS_OBJ));
}
function testEveryMap() {
var limit = -1;
var col = new goog.structs.Map({a: 0, b: 1, c: 2});
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('string', typeof key);
return v > limit;
}
assertObjectEquals(true, goog.structs.every(col, f));
limit = 1;
assertFalse(goog.structs.every(col, f));
}
function testEveryMap2() {
var THIS_OBJ = {};
var limit = -1;
var col = new goog.structs.Map({a: 0, b: 1, c: 2});
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('string', typeof key);
assertEquals(THIS_OBJ, this);
return v > limit;
}
assertObjectEquals(true, goog.structs.every(col, f, THIS_OBJ));
limit = 1;
assertFalse(goog.structs.every(col, f, THIS_OBJ));
}
function testEverySet() {
var limit = -1;
var col = new goog.structs.Set([0, 1, 2]);
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('undefined', typeof key);
return v > limit;
}
assertTrue(goog.structs.every(col, f));
limit = 1;
assertFalse(goog.structs.every(col, f));
}
function testEverySet2() {
var THIS_OBJ = {};
var limit = -1;
var col = new goog.structs.Set([0, 1, 2]);
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('undefined', typeof key);
assertEquals(THIS_OBJ, this);
return v > limit;
}
assertTrue(goog.structs.every(col, f, THIS_OBJ));
limit = 1;
assertFalse(goog.structs.every(col, f, THIS_OBJ));
}
function testEveryNodeList() {
var nodeType = 1; // ELEMENT
var col = getAll();
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
return v.nodeType == nodeType;
}
assertTrue(goog.structs.every(col, f));
nodeType = 3; // TEXT
assertFalse(goog.structs.every(col, f));
}
function testEveryNodeList2() {
var THIS_OBJ = {};
var nodeType = 1; // ELEMENT
var col = getAll();
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
return v.nodeType == nodeType;
}
assertTrue(goog.structs.every(col, f, THIS_OBJ));
nodeType = 3; // TEXT
assertFalse(goog.structs.every(col, f, THIS_OBJ));
}
// For each
function testForEach() {
var called = false;
var obj = {
forEach: function(g) {
assertEquals(f, g);
assertEquals(this, obj);
called = true;
}
};
function f() {}
goog.structs.forEach(obj, f);
assertTrue(called);
}
function testForEach2() {
var called = false;
var THIS_OBJ = {};
var obj = {
forEach: function(g, obj2) {
assertEquals(f, g);
assertEquals(this, obj);
assertEquals(THIS_OBJ, obj2);
called = true;
}
};
function f() {}
goog.structs.forEach(obj, f, THIS_OBJ);
assertTrue(called);
}
function testForEachArrayLike() {
var col = [0, 1, 2];
var values = [];
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
values.push(v * v);
}
goog.structs.forEach(col, f);
assertArrayEquals([0, 1, 4], values);
}
function testForEachArrayLike2() {
var THIS_OBJ = {};
var col = [0, 1, 2];
var values = [];
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
values.push(v * v);
}
goog.structs.forEach(col, f, THIS_OBJ);
assertArrayEquals([0, 1, 4], values);
}
function testForEachString() {
var col = '012';
var values = [];
function f(v, i, col2) {
// for some reason the strings are equal but identical???
assertEquals(String(col), String(col2));
assertEquals('number', typeof i);
values.push(Number(v) * Number(v));
}
goog.structs.forEach(col, f);
assertArrayEquals([0, 1, 4], values);
}
function testForEachString2() {
var THIS_OBJ = {};
var col = '012';
var values = [];
function f(v, i, col2) {
// for some reason the strings are equal but identical???
assertEquals(String(col), String(col2));
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
values.push(Number(v) * Number(v));
}
goog.structs.forEach(col, f, THIS_OBJ);
assertArrayEquals([0, 1, 4], values);
}
function testForEachMap() {
var col = new goog.structs.Map({a: 0, b: 1, c: 2});
var values = [];
var keys = [];
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('string', typeof key);
values.push(v * v);
keys.push(key);
}
goog.structs.forEach(col, f);
assertArrayEquals([0, 1, 4], values);
assertArrayEquals(['a', 'b', 'c'], keys);
}
function testForEachMap2() {
var THIS_OBJ = {};
var col = new goog.structs.Map({a: 0, b: 1, c: 2});
var values = [];
var keys = [];
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('string', typeof key);
assertEquals(THIS_OBJ, this);
values.push(v * v);
keys.push(key);
}
goog.structs.forEach(col, f, THIS_OBJ);
assertArrayEquals([0, 1, 4], values);
assertArrayEquals(['a', 'b', 'c'], keys);
}
function testForEachSet() {
var col = new goog.structs.Set([0, 1, 2]);
var values = [];
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('undefined', typeof key);
values.push(v * v);
}
goog.structs.forEach(col, f);
assertArrayEquals([0, 1, 4], values);
}
function testForEachSet2() {
var THIS_OBJ = {};
var col = new goog.structs.Set([0, 1, 2]);
var values = [];
function f(v, key, col2) {
assertEquals(col, col2);
assertEquals('undefined', typeof key);
assertEquals(THIS_OBJ, this);
values.push(v * v);
}
goog.structs.forEach(col, f, THIS_OBJ);
assertArrayEquals([0, 1, 4], values);
}
function testForEachNodeList() {
var values = [];
var col = getAll();
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
values.push(v.tagName);
}
goog.structs.forEach(col, f);
assertEquals('HRPPPPPPPPH1', values.join(''));
}
function testForEachNodeList2() {
var THIS_OBJ = {};
var values = [];
var col = getAll();
function f(v, i, col2) {
assertEquals(col, col2);
assertEquals('number', typeof i);
assertEquals(THIS_OBJ, this);
values.push(v.tagName);
}
goog.structs.forEach(col, f, THIS_OBJ);
assertEquals('HRPPPPPPPPH1', values.join(''));
}