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);
|