| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 | /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */'use strict';const { List } = require('sdk/deprecated/list');function assertList(assert, array, list) {  for (let i = 0, l = array.length; i < l; i++) {    assert.equal(      array.length,      list.length,      'list must contain same amount of elements as array'    );    assert.equal(      'List(' + array + ')',      list + '',      'toString must output array like result'    );    assert.ok(i in list, 'must contain element with index: ' + i);    assert.equal(      array[i],      list[i],      'element with index: ' + i + ' should match'    );  }}exports['test:test for'] = function(assert) {  let fixture = List(3, 2, 1);  assert.equal(3, fixture.length, 'length is 3');  let i = 0;  for (let key in fixture) {    assert.equal(i++, key, 'key should match');  }};exports['test:test for each'] = function(assert) {  let fixture = new List(3, 2, 1);  assert.equal(3, fixture.length, 'length is 3');  let i = 3;  for (let value of fixture) {    assert.equal(i--, value, 'value should match');  }};exports['test:test for of'] = function(assert) {  let fixture = new List(3, 2, 1);  assert.equal(3, fixture.length, 'length is 3');  let i = 3;  for (let value of fixture) {    assert.equal(i--, value, 'value should match');  }};exports['test:test toString'] = function(assert) {  let fixture = List(3, 2, 1);  assert.equal(    'List(3,2,1)',    fixture + '',    'toString must output array like result'  )};exports['test:test constructor with apply'] = function(assert) {  let array = ['a', 'b', 'c'];  let fixture = List.apply(null, array);  assert.equal(    3,    fixture.length,    'should have applied arguments'  );};exports['test:direct element access'] = function(assert) {  let array = [1, 'foo', 2, 'bar', {}, 'bar', function a() {}, assert, 1];  let fixture = List.apply(null, array);  array.splice(5, 1);  array.splice(7, 1);  assert.equal(    array.length,    fixture.length,    'list should omit duplicate elements'  );  assert.equal(    'List(' + array + ')',    fixture.toString(),    'elements should not be rearranged'  );  for (let key in array) {    assert.ok(key in fixture,'should contain key for index:' + key);    assert.equal(array[key], fixture[key], 'values should match for: ' + key);  }};exports['test:removing adding elements'] = function(assert) {  let array = [1, 'foo', 2, 'bar', {}, 'bar', function a() {}, assert, 1];  let fixture = List.compose({    add: function() this._add.apply(this, arguments),    remove: function() this._remove.apply(this, arguments),    clear: function() this._clear()  }).apply(null, array);  array.splice(5, 1);  array.splice(7, 1);  assertList(assert, array, fixture);  array.splice(array.indexOf(2), 1);  fixture.remove(2);  assertList(assert, array, fixture);  array.splice(array.indexOf('foo'), 1);  fixture.remove('foo');  array.splice(array.indexOf(1), 1);  fixture.remove(1);  array.push('foo');  fixture.add('foo');  assertList(assert, array, fixture);  array.splice(0);  fixture.clear(0);  assertList(assert, array, fixture);  array.push(1, 'foo', 2, 'bar', 3);  fixture.add(1);  fixture.add('foo');  fixture.add(2);  fixture.add('bar');  fixture.add(3);  assertList(assert, array, fixture);};exports['test: remove does not leave invalid numerical properties'] = function(assert) {  let fixture = List.compose({    remove: function() this._remove.apply(this, arguments),  }).apply(null, [1, 2, 3]);    fixture.remove(1);    assert.equal(fixture[fixture.length], undefined);}exports['test:add list item from Iterator'] = function(assert) {  let array = [1, 2, 3, 4], sum = 0, added = false;  let fixture = List.compose({    add: function() this._add.apply(this, arguments),  }).apply(null, array);  for (let item of fixture) {    sum += item;    if (!added) {      fixture.add(5);      added = true;    }  }  assert.equal(sum, 1 + 2 + 3 + 4, 'sum = 1 + 2 + 3 + 4');};exports['test:remove list item from Iterator'] = function(assert) {  let array = [1, 2, 3, 4], sum = 0;  let fixture = List.compose({    remove: function() this._remove.apply(this, arguments),  }).apply(null, array);  for (let item of fixture) {    sum += item;    fixture.remove(item);  }  assert.equal(sum, 1 + 2 + 3 + 4, 'sum = 1 + 2 + 3 + 4');};exports['test:clear list from Iterator'] = function(assert) {  let array = [1, 2, 3, 4], sum = 0;  let fixture = List.compose({    clear: function() this._clear()  }).apply(null, array);  for (let item of fixture) {    sum += item;    fixture.clear();  }  assert.equal(sum, 1 + 2 + 3 + 4, 'sum = 1 + 2 + 3 + 4');};require('sdk/test').run(exports);
 |