diff --git a/src/components/menu/menu-controller.ts b/src/components/menu/menu-controller.ts index 5342d81949..9638277e6a 100644 --- a/src/components/menu/menu-controller.ts +++ b/src/components/menu/menu-controller.ts @@ -1,6 +1,7 @@ import { Menu } from './menu'; import { MenuType } from './menu-types'; import { Platform } from '../../platform/platform'; +import { removeArrayItem } from '../../util/util'; /** @@ -291,10 +292,7 @@ export class MenuController { * @private */ unregister(menu: Menu) { - let index = this._menus.indexOf(menu); - if (index > -1) { - this._menus.splice(index, 1); - } + removeArrayItem(this._menus, menu); } /** diff --git a/src/navigation/nav-controller-base.ts b/src/navigation/nav-controller-base.ts index cdb9805616..82e2dd0f5b 100644 --- a/src/navigation/nav-controller-base.ts +++ b/src/navigation/nav-controller-base.ts @@ -8,7 +8,7 @@ import { convertToView, convertToViews, NavOptions, DIRECTION_BACK, DIRECTION_FO import { setZIndex } from './nav-util'; import { DeepLinker } from './deep-linker'; import { GestureController } from '../gestures/gesture-controller'; -import { isBlank, isNumber, isPresent, assert } from '../util/util'; +import { isBlank, isNumber, isPresent, assert, removeArrayItem } from '../util/util'; import { isViewController, ViewController } from './view-controller'; import { Ion } from '../components/ion'; import { Keyboard } from '../util/keyboard'; @@ -893,10 +893,7 @@ export class NavControllerBase extends Ion implements NavController { } unregisterChildNav(nav: any) { - const index = this._children.indexOf(nav); - if (index > -1) { - this._children.splice(index, 1); - } + removeArrayItem(this._children, nav); } destroy() { diff --git a/src/platform/platform.ts b/src/platform/platform.ts index dac7d1aae3..24c3862bdb 100644 --- a/src/platform/platform.ts +++ b/src/platform/platform.ts @@ -2,6 +2,7 @@ import { EventEmitter, NgZone, OpaqueToken } from '@angular/core'; import { QueryParams } from './query-params'; import { ready, windowDimensions, flushDimensionCache } from '../util/dom'; +import { removeArrayItem } from '../util/util'; /** @@ -373,10 +374,7 @@ export class Platform { // return a function to unregister this back button action return () => { - let index = this._bbActions.indexOf(action); - if (index > -1) { - this._bbActions.splice(index, 1); - } + removeArrayItem(this._bbActions, action); }; } @@ -524,14 +522,11 @@ export class Platform { * @private */ onResize(cb: Function): Function { - let self = this; + const self = this; self._onResizes.push(cb); return function() { - const index = self._onResizes.indexOf(cb); - if (index > -1) { - self._onResizes.splice(index, 1); - } + removeArrayItem(self._onResizes, cb); }; } diff --git a/src/util/dom.ts b/src/util/dom.ts index 23eee9fa52..c7279de3ed 100644 --- a/src/util/dom.ts +++ b/src/util/dom.ts @@ -51,7 +51,7 @@ export function rafFrames(framesToWait: number, callback: Function) { if (framesToWait === 0) { callback(); - }else if (framesToWait < 2) { + } else if (framesToWait < 2) { rafId = nativeRaf(callback); } else { diff --git a/src/util/form.ts b/src/util/form.ts index 120b73def1..bf6259dc0e 100644 --- a/src/util/form.ts +++ b/src/util/form.ts @@ -1,4 +1,5 @@ import { Injectable } from '@angular/core'; +import { removeArrayItem } from './util'; /** @@ -15,10 +16,7 @@ export class Form { } deregister(input: any) { - let index = this._inputs.indexOf(input); - if (index > -1) { - this._inputs.splice(index, 1); - } + removeArrayItem(this._inputs, input); if (input === this._focused) { this._focused = null; } diff --git a/src/util/test/util.spec.ts b/src/util/test/util.spec.ts index 41c8e4c392..d97e56da5f 100644 --- a/src/util/test/util.spec.ts +++ b/src/util/test/util.spec.ts @@ -1,362 +1,366 @@ import * as util from '../util'; -describe('isPrimitive', () => { +describe('util', () => { - it('should be false for array/object values', () => { - expect(util.isPrimitive({})).toEqual(false); - expect(util.isPrimitive(new Date())).toEqual(false); - expect(util.isPrimitive([])).toEqual(false); - }); + describe('isPrimitive', () => { - it('should be false for blank values', () => { - expect(util.isPrimitive(NaN)).toEqual(false); - expect(util.isPrimitive(null)).toEqual(false); - expect(util.isPrimitive(undefined)).toEqual(false); - }); - - it('should be true for number', () => { - expect(util.isPrimitive(-1)).toEqual(true); - expect(util.isPrimitive(0)).toEqual(true); - expect(util.isPrimitive(1)).toEqual(true); - }); - - it('should be true for boolean', () => { - expect(util.isPrimitive(true)).toEqual(true); - expect(util.isPrimitive(false)).toEqual(true); - }); - - it('should be true for string', () => { - expect(util.isPrimitive('')).toEqual(true); - expect(util.isPrimitive(' ')).toEqual(true); - expect(util.isPrimitive('hi')).toEqual(true); - }); - -}); - -describe('isCheckedProperty', () => { - - it('should test a=undefined', () => { - expect(util.isCheckedProperty(undefined, undefined)).toBe(true); - expect(util.isCheckedProperty(undefined, null)).toBe(true); - expect(util.isCheckedProperty(undefined, '')).toBe(true); - expect(util.isCheckedProperty(undefined, 'string')).toBe(false); - expect(util.isCheckedProperty(undefined, 0)).toBe(false); - expect(util.isCheckedProperty(undefined, '0')).toBe(false); - expect(util.isCheckedProperty(undefined, 1000)).toBe(false); - expect(util.isCheckedProperty(undefined, '1000')).toBe(false); - expect(util.isCheckedProperty(undefined, -1)).toBe(false); - expect(util.isCheckedProperty(undefined, true)).toBe(false); - expect(util.isCheckedProperty(undefined, false)).toBe(false); - expect(util.isCheckedProperty(undefined, 'true')).toBe(false); - expect(util.isCheckedProperty(undefined, 'false')).toBe(false); - }); - - it('should test a=null', () => { - expect(util.isCheckedProperty(null, undefined)).toBe(true); - expect(util.isCheckedProperty(null, null)).toBe(true); - expect(util.isCheckedProperty(null, '')).toBe(true); - expect(util.isCheckedProperty(null, 'string')).toBe(false); - expect(util.isCheckedProperty(null, 0)).toBe(false); - expect(util.isCheckedProperty(null, '0')).toBe(false); - expect(util.isCheckedProperty(null, 1000)).toBe(false); - expect(util.isCheckedProperty(null, '1000')).toBe(false); - expect(util.isCheckedProperty(null, -1)).toBe(false); - expect(util.isCheckedProperty(null, true)).toBe(false); - expect(util.isCheckedProperty(null, false)).toBe(false); - expect(util.isCheckedProperty(null, 'true')).toBe(false); - expect(util.isCheckedProperty(null, 'false')).toBe(false); - }); - - it('should test a=""', () => { - expect(util.isCheckedProperty('', undefined)).toBe(true); - expect(util.isCheckedProperty('', null)).toBe(true); - expect(util.isCheckedProperty('', '')).toBe(true); - expect(util.isCheckedProperty('', 'string')).toBe(false); - expect(util.isCheckedProperty('', 0)).toBe(false); - expect(util.isCheckedProperty('', '0')).toBe(false); - expect(util.isCheckedProperty('', 1000)).toBe(false); - expect(util.isCheckedProperty('', '1000')).toBe(false); - expect(util.isCheckedProperty('', -1)).toBe(false); - expect(util.isCheckedProperty('', true)).toBe(false); - expect(util.isCheckedProperty('', false)).toBe(false); - expect(util.isCheckedProperty('', 'true')).toBe(false); - expect(util.isCheckedProperty('', 'false')).toBe(false); - }); - - it('should test a=true', () => { - expect(util.isCheckedProperty(true, undefined)).toBe(false); - expect(util.isCheckedProperty(true, null)).toBe(false); - expect(util.isCheckedProperty(true, '')).toBe(false); - expect(util.isCheckedProperty(true, 'string')).toBe(false); - expect(util.isCheckedProperty(true, 0)).toBe(false); - expect(util.isCheckedProperty(true, '0')).toBe(false); - expect(util.isCheckedProperty(true, 1000)).toBe(false); - expect(util.isCheckedProperty(true, '1000')).toBe(false); - expect(util.isCheckedProperty(true, -1)).toBe(false); - expect(util.isCheckedProperty(true, true)).toBe(true); - expect(util.isCheckedProperty(true, false)).toBe(false); - expect(util.isCheckedProperty(true, 'true')).toBe(true); - expect(util.isCheckedProperty(true, 'false')).toBe(false); - }); - - it('should test a="true"', () => { - expect(util.isCheckedProperty('true', undefined)).toBe(false); - expect(util.isCheckedProperty('true', null)).toBe(false); - expect(util.isCheckedProperty('true', '')).toBe(false); - expect(util.isCheckedProperty('true', 'string')).toBe(false); - expect(util.isCheckedProperty('true', 0)).toBe(false); - expect(util.isCheckedProperty('true', '0')).toBe(false); - expect(util.isCheckedProperty('true', 1000)).toBe(false); - expect(util.isCheckedProperty('true', '1000')).toBe(false); - expect(util.isCheckedProperty('true', -1)).toBe(false); - expect(util.isCheckedProperty('true', true)).toBe(true); - expect(util.isCheckedProperty('true', false)).toBe(false); - expect(util.isCheckedProperty('true', 'true')).toBe(true); - expect(util.isCheckedProperty('true', 'false')).toBe(false); - }); - - it('should test a=false', () => { - expect(util.isCheckedProperty(false, undefined)).toBe(false); - expect(util.isCheckedProperty(false, null)).toBe(false); - expect(util.isCheckedProperty(false, '')).toBe(false); - expect(util.isCheckedProperty(false, 'string')).toBe(false); - expect(util.isCheckedProperty(false, 0)).toBe(false); - expect(util.isCheckedProperty(false, '0')).toBe(false); - expect(util.isCheckedProperty(false, 1000)).toBe(false); - expect(util.isCheckedProperty(false, '1000')).toBe(false); - expect(util.isCheckedProperty(false, -1)).toBe(false); - expect(util.isCheckedProperty(false, true)).toBe(false); - expect(util.isCheckedProperty(false, false)).toBe(true); - expect(util.isCheckedProperty(false, 'true')).toBe(false); - expect(util.isCheckedProperty(false, 'false')).toBe(true); - }); - - it('should test a="false"', () => { - expect(util.isCheckedProperty('false', undefined)).toBe(false); - expect(util.isCheckedProperty('false', null)).toBe(false); - expect(util.isCheckedProperty('false', '')).toBe(false); - expect(util.isCheckedProperty('false', 'string')).toBe(false); - expect(util.isCheckedProperty('false', 0)).toBe(false); - expect(util.isCheckedProperty('false', '0')).toBe(false); - expect(util.isCheckedProperty('false', 1000)).toBe(false); - expect(util.isCheckedProperty('false', '1000')).toBe(false); - expect(util.isCheckedProperty('false', -1)).toBe(false); - expect(util.isCheckedProperty('false', true)).toBe(false); - expect(util.isCheckedProperty('false', false)).toBe(true); - expect(util.isCheckedProperty('false', 'true')).toBe(false); - expect(util.isCheckedProperty('false', 'false')).toBe(true); - }); - - it('should test a=0', () => { - expect(util.isCheckedProperty(0, undefined)).toBe(false); - expect(util.isCheckedProperty(0, null)).toBe(false); - expect(util.isCheckedProperty(0, '')).toBe(false); - expect(util.isCheckedProperty(0, 'string')).toBe(false); - expect(util.isCheckedProperty(0, 0)).toBe(true); - expect(util.isCheckedProperty(0, '0')).toBe(true); - expect(util.isCheckedProperty(0, 1000)).toBe(false); - expect(util.isCheckedProperty(0, '1000')).toBe(false); - expect(util.isCheckedProperty(0, -1)).toBe(false); - expect(util.isCheckedProperty(0, true)).toBe(false); - expect(util.isCheckedProperty(0, false)).toBe(false); - expect(util.isCheckedProperty(0, 'true')).toBe(false); - expect(util.isCheckedProperty(0, 'false')).toBe(false); - }); - - it('should test a="0"', () => { - expect(util.isCheckedProperty('0', undefined)).toBe(false); - expect(util.isCheckedProperty('0', null)).toBe(false); - expect(util.isCheckedProperty('0', '')).toBe(false); - expect(util.isCheckedProperty('0', 'string')).toBe(false); - expect(util.isCheckedProperty('0', 0)).toBe(true); - expect(util.isCheckedProperty('0', '0')).toBe(true); - expect(util.isCheckedProperty('0', 1000)).toBe(false); - expect(util.isCheckedProperty('0', '1000')).toBe(false); - expect(util.isCheckedProperty('0', -1)).toBe(false); - expect(util.isCheckedProperty('0', true)).toBe(false); - expect(util.isCheckedProperty('0', false)).toBe(false); - expect(util.isCheckedProperty('0', 'true')).toBe(false); - expect(util.isCheckedProperty('0', 'false')).toBe(false); - }); - - it('should test a=1000', () => { - expect(util.isCheckedProperty(1000, undefined)).toBe(false); - expect(util.isCheckedProperty(1000, null)).toBe(false); - expect(util.isCheckedProperty(1000, '')).toBe(false); - expect(util.isCheckedProperty(1000, 'string')).toBe(false); - expect(util.isCheckedProperty(1000, 0)).toBe(false); - expect(util.isCheckedProperty(1000, '0')).toBe(false); - expect(util.isCheckedProperty(1000, 1000)).toBe(true); - expect(util.isCheckedProperty(1000, '1000')).toBe(true); - expect(util.isCheckedProperty(1000, -1)).toBe(false); - expect(util.isCheckedProperty(1000, true)).toBe(false); - expect(util.isCheckedProperty(1000, false)).toBe(false); - expect(util.isCheckedProperty(1000, 'true')).toBe(false); - expect(util.isCheckedProperty(1000, 'false')).toBe(false); - }); - - it('should test a="1000"', () => { - expect(util.isCheckedProperty('1000', undefined)).toBe(false); - expect(util.isCheckedProperty('1000', null)).toBe(false); - expect(util.isCheckedProperty('1000', '')).toBe(false); - expect(util.isCheckedProperty('1000', 'string')).toBe(false); - expect(util.isCheckedProperty('1000', 0)).toBe(false); - expect(util.isCheckedProperty('1000', '0')).toBe(false); - expect(util.isCheckedProperty('1000', 1000)).toBe(true); - expect(util.isCheckedProperty('1000', '1000')).toBe(true); - expect(util.isCheckedProperty('1000', -1)).toBe(false); - expect(util.isCheckedProperty('1000', true)).toBe(false); - expect(util.isCheckedProperty('1000', false)).toBe(false); - expect(util.isCheckedProperty('1000', 'true')).toBe(false); - expect(util.isCheckedProperty('1000', 'false')).toBe(false); - }); - - it('should test a=-1', () => { - expect(util.isCheckedProperty(-1, undefined)).toBe(false); - expect(util.isCheckedProperty(-1, null)).toBe(false); - expect(util.isCheckedProperty(-1, '')).toBe(false); - expect(util.isCheckedProperty(-1, 'string')).toBe(false); - expect(util.isCheckedProperty(-1, 0)).toBe(false); - expect(util.isCheckedProperty(-1, '0')).toBe(false); - expect(util.isCheckedProperty(-1, 1000)).toBe(false); - expect(util.isCheckedProperty(-1, '1000')).toBe(false); - expect(util.isCheckedProperty(-1, -1)).toBe(true); - expect(util.isCheckedProperty(-1, true)).toBe(false); - expect(util.isCheckedProperty(-1, false)).toBe(false); - expect(util.isCheckedProperty(-1, 'true')).toBe(false); - expect(util.isCheckedProperty(-1, 'false')).toBe(false); - }); - - it('should test a="-1"', () => { - expect(util.isCheckedProperty('-1', undefined)).toBe(false); - expect(util.isCheckedProperty('-1', null)).toBe(false); - expect(util.isCheckedProperty('-1', '')).toBe(false); - expect(util.isCheckedProperty('-1', 'string')).toBe(false); - expect(util.isCheckedProperty('-1', 0)).toBe(false); - expect(util.isCheckedProperty('-1', '0')).toBe(false); - expect(util.isCheckedProperty('-1', 1000)).toBe(false); - expect(util.isCheckedProperty('-1', '1000')).toBe(false); - expect(util.isCheckedProperty('-1', -1)).toBe(true); - expect(util.isCheckedProperty('-1', true)).toBe(false); - expect(util.isCheckedProperty('-1', false)).toBe(false); - expect(util.isCheckedProperty('-1', 'true')).toBe(false); - expect(util.isCheckedProperty('-1', 'false')).toBe(false); - }); - - it('should test a="string"', () => { - expect(util.isCheckedProperty('string', undefined)).toBe(false); - expect(util.isCheckedProperty('string', null)).toBe(false); - expect(util.isCheckedProperty('string', '')).toBe(false); - expect(util.isCheckedProperty('string', 'string')).toBe(true); - expect(util.isCheckedProperty('string', 'otherstring')).toBe(false); - expect(util.isCheckedProperty('string', 0)).toBe(false); - expect(util.isCheckedProperty('string', '0')).toBe(false); - expect(util.isCheckedProperty('string', 1000)).toBe(false); - expect(util.isCheckedProperty('string', '1000')).toBe(false); - expect(util.isCheckedProperty('string', -1)).toBe(false); - expect(util.isCheckedProperty('string', true)).toBe(false); - expect(util.isCheckedProperty('string', false)).toBe(false); - expect(util.isCheckedProperty('string', 'true')).toBe(false); - expect(util.isCheckedProperty('string', 'false')).toBe(false); - }); - -}); - -describe('isTrueProperty', () => { - - it('should be true from boolean true', () => { - expect(util.isTrueProperty(true)).toBe(true); - }); - - it('should be true from string "true"', () => { - expect(util.isTrueProperty('true')).toBe(true); - expect(util.isTrueProperty('TRUE')).toBe(true); - expect(util.isTrueProperty(' true ')).toBe(true); - }); - - it('should be true from string "on"', () => { - expect(util.isTrueProperty(true)).toBe(true); - }); - - it('should be true from empty string ""', () => { - expect(util.isTrueProperty('')).toBe(true); - expect(util.isTrueProperty(' ')).toBe(true); - }); - - it('should be true from number greater than zero', () => { - expect(util.isTrueProperty(1)).toBe(true); - expect(util.isTrueProperty(999)).toBe(true); - }); - - it('should be false from boolean false', () => { - expect(util.isTrueProperty(false)).toBe(false); - }); - - it('should be false from string "off"', () => { - expect(util.isTrueProperty(true)).toBe(true); - }); - - it('should be false from null', () => { - expect(util.isTrueProperty(null)).toBe(false); - }); - - it('should be false from undefined', () => { - expect(util.isTrueProperty(undefined)).toBe(false); - }); - - it('should be false from string "false"', () => { - expect(util.isTrueProperty('false')).toBe(false); - expect(util.isTrueProperty(' FALSE ')).toBe(false); - expect(util.isTrueProperty('doesnt actually matter')).toBe(false); - }); - -}); - -describe('extend', () => { - - it('should extend simple', () => { - var obj = { a: '0', c: '0' }; - expect( util.assign(obj, { a: '1', b: '2' }) ).toBe(obj); - expect(obj).toEqual({ a: '1', b: '2', c: '0' }); - }); - - it('should extend complex', () => { - expect(util.assign( - { a: '0', b: '0' }, - { b: '1', c: '1' }, - { c: '2', d: '2' } - )).toEqual({ - a: '0', - b: '1', - c: '2', - d: '2' - }); - }); - -}); - -describe('defaults', () => { - - it('should simple defaults', () => { - var obj = { a: '1' }; - expect(util.defaults(obj, { a: '2', b: '2' })).toBe(obj); - expect(obj).toEqual({ - a: '1', b: '2' - }); - }); - - it('should complex defaults', () => { - expect(util.defaults( - { a: '0', b: '0' }, - { b: '1', c: '1', e: '1' }, - { c: '2', d: '2' } - )).toEqual({ - a: '0', - b: '0', - c: '2', - d: '2', - e: '1' + it('should be false for array/object values', () => { + expect(util.isPrimitive({})).toEqual(false); + expect(util.isPrimitive(new Date())).toEqual(false); + expect(util.isPrimitive([])).toEqual(false); }); + + it('should be false for blank values', () => { + expect(util.isPrimitive(NaN)).toEqual(false); + expect(util.isPrimitive(null)).toEqual(false); + expect(util.isPrimitive(undefined)).toEqual(false); + }); + + it('should be true for number', () => { + expect(util.isPrimitive(-1)).toEqual(true); + expect(util.isPrimitive(0)).toEqual(true); + expect(util.isPrimitive(1)).toEqual(true); + }); + + it('should be true for boolean', () => { + expect(util.isPrimitive(true)).toEqual(true); + expect(util.isPrimitive(false)).toEqual(true); + }); + + it('should be true for string', () => { + expect(util.isPrimitive('')).toEqual(true); + expect(util.isPrimitive(' ')).toEqual(true); + expect(util.isPrimitive('hi')).toEqual(true); + }); + + }); + + describe('isCheckedProperty', () => { + + it('should test a=undefined', () => { + expect(util.isCheckedProperty(undefined, undefined)).toBe(true); + expect(util.isCheckedProperty(undefined, null)).toBe(true); + expect(util.isCheckedProperty(undefined, '')).toBe(true); + expect(util.isCheckedProperty(undefined, 'string')).toBe(false); + expect(util.isCheckedProperty(undefined, 0)).toBe(false); + expect(util.isCheckedProperty(undefined, '0')).toBe(false); + expect(util.isCheckedProperty(undefined, 1000)).toBe(false); + expect(util.isCheckedProperty(undefined, '1000')).toBe(false); + expect(util.isCheckedProperty(undefined, -1)).toBe(false); + expect(util.isCheckedProperty(undefined, true)).toBe(false); + expect(util.isCheckedProperty(undefined, false)).toBe(false); + expect(util.isCheckedProperty(undefined, 'true')).toBe(false); + expect(util.isCheckedProperty(undefined, 'false')).toBe(false); + }); + + it('should test a=null', () => { + expect(util.isCheckedProperty(null, undefined)).toBe(true); + expect(util.isCheckedProperty(null, null)).toBe(true); + expect(util.isCheckedProperty(null, '')).toBe(true); + expect(util.isCheckedProperty(null, 'string')).toBe(false); + expect(util.isCheckedProperty(null, 0)).toBe(false); + expect(util.isCheckedProperty(null, '0')).toBe(false); + expect(util.isCheckedProperty(null, 1000)).toBe(false); + expect(util.isCheckedProperty(null, '1000')).toBe(false); + expect(util.isCheckedProperty(null, -1)).toBe(false); + expect(util.isCheckedProperty(null, true)).toBe(false); + expect(util.isCheckedProperty(null, false)).toBe(false); + expect(util.isCheckedProperty(null, 'true')).toBe(false); + expect(util.isCheckedProperty(null, 'false')).toBe(false); + }); + + it('should test a=""', () => { + expect(util.isCheckedProperty('', undefined)).toBe(true); + expect(util.isCheckedProperty('', null)).toBe(true); + expect(util.isCheckedProperty('', '')).toBe(true); + expect(util.isCheckedProperty('', 'string')).toBe(false); + expect(util.isCheckedProperty('', 0)).toBe(false); + expect(util.isCheckedProperty('', '0')).toBe(false); + expect(util.isCheckedProperty('', 1000)).toBe(false); + expect(util.isCheckedProperty('', '1000')).toBe(false); + expect(util.isCheckedProperty('', -1)).toBe(false); + expect(util.isCheckedProperty('', true)).toBe(false); + expect(util.isCheckedProperty('', false)).toBe(false); + expect(util.isCheckedProperty('', 'true')).toBe(false); + expect(util.isCheckedProperty('', 'false')).toBe(false); + }); + + it('should test a=true', () => { + expect(util.isCheckedProperty(true, undefined)).toBe(false); + expect(util.isCheckedProperty(true, null)).toBe(false); + expect(util.isCheckedProperty(true, '')).toBe(false); + expect(util.isCheckedProperty(true, 'string')).toBe(false); + expect(util.isCheckedProperty(true, 0)).toBe(false); + expect(util.isCheckedProperty(true, '0')).toBe(false); + expect(util.isCheckedProperty(true, 1000)).toBe(false); + expect(util.isCheckedProperty(true, '1000')).toBe(false); + expect(util.isCheckedProperty(true, -1)).toBe(false); + expect(util.isCheckedProperty(true, true)).toBe(true); + expect(util.isCheckedProperty(true, false)).toBe(false); + expect(util.isCheckedProperty(true, 'true')).toBe(true); + expect(util.isCheckedProperty(true, 'false')).toBe(false); + }); + + it('should test a="true"', () => { + expect(util.isCheckedProperty('true', undefined)).toBe(false); + expect(util.isCheckedProperty('true', null)).toBe(false); + expect(util.isCheckedProperty('true', '')).toBe(false); + expect(util.isCheckedProperty('true', 'string')).toBe(false); + expect(util.isCheckedProperty('true', 0)).toBe(false); + expect(util.isCheckedProperty('true', '0')).toBe(false); + expect(util.isCheckedProperty('true', 1000)).toBe(false); + expect(util.isCheckedProperty('true', '1000')).toBe(false); + expect(util.isCheckedProperty('true', -1)).toBe(false); + expect(util.isCheckedProperty('true', true)).toBe(true); + expect(util.isCheckedProperty('true', false)).toBe(false); + expect(util.isCheckedProperty('true', 'true')).toBe(true); + expect(util.isCheckedProperty('true', 'false')).toBe(false); + }); + + it('should test a=false', () => { + expect(util.isCheckedProperty(false, undefined)).toBe(false); + expect(util.isCheckedProperty(false, null)).toBe(false); + expect(util.isCheckedProperty(false, '')).toBe(false); + expect(util.isCheckedProperty(false, 'string')).toBe(false); + expect(util.isCheckedProperty(false, 0)).toBe(false); + expect(util.isCheckedProperty(false, '0')).toBe(false); + expect(util.isCheckedProperty(false, 1000)).toBe(false); + expect(util.isCheckedProperty(false, '1000')).toBe(false); + expect(util.isCheckedProperty(false, -1)).toBe(false); + expect(util.isCheckedProperty(false, true)).toBe(false); + expect(util.isCheckedProperty(false, false)).toBe(true); + expect(util.isCheckedProperty(false, 'true')).toBe(false); + expect(util.isCheckedProperty(false, 'false')).toBe(true); + }); + + it('should test a="false"', () => { + expect(util.isCheckedProperty('false', undefined)).toBe(false); + expect(util.isCheckedProperty('false', null)).toBe(false); + expect(util.isCheckedProperty('false', '')).toBe(false); + expect(util.isCheckedProperty('false', 'string')).toBe(false); + expect(util.isCheckedProperty('false', 0)).toBe(false); + expect(util.isCheckedProperty('false', '0')).toBe(false); + expect(util.isCheckedProperty('false', 1000)).toBe(false); + expect(util.isCheckedProperty('false', '1000')).toBe(false); + expect(util.isCheckedProperty('false', -1)).toBe(false); + expect(util.isCheckedProperty('false', true)).toBe(false); + expect(util.isCheckedProperty('false', false)).toBe(true); + expect(util.isCheckedProperty('false', 'true')).toBe(false); + expect(util.isCheckedProperty('false', 'false')).toBe(true); + }); + + it('should test a=0', () => { + expect(util.isCheckedProperty(0, undefined)).toBe(false); + expect(util.isCheckedProperty(0, null)).toBe(false); + expect(util.isCheckedProperty(0, '')).toBe(false); + expect(util.isCheckedProperty(0, 'string')).toBe(false); + expect(util.isCheckedProperty(0, 0)).toBe(true); + expect(util.isCheckedProperty(0, '0')).toBe(true); + expect(util.isCheckedProperty(0, 1000)).toBe(false); + expect(util.isCheckedProperty(0, '1000')).toBe(false); + expect(util.isCheckedProperty(0, -1)).toBe(false); + expect(util.isCheckedProperty(0, true)).toBe(false); + expect(util.isCheckedProperty(0, false)).toBe(false); + expect(util.isCheckedProperty(0, 'true')).toBe(false); + expect(util.isCheckedProperty(0, 'false')).toBe(false); + }); + + it('should test a="0"', () => { + expect(util.isCheckedProperty('0', undefined)).toBe(false); + expect(util.isCheckedProperty('0', null)).toBe(false); + expect(util.isCheckedProperty('0', '')).toBe(false); + expect(util.isCheckedProperty('0', 'string')).toBe(false); + expect(util.isCheckedProperty('0', 0)).toBe(true); + expect(util.isCheckedProperty('0', '0')).toBe(true); + expect(util.isCheckedProperty('0', 1000)).toBe(false); + expect(util.isCheckedProperty('0', '1000')).toBe(false); + expect(util.isCheckedProperty('0', -1)).toBe(false); + expect(util.isCheckedProperty('0', true)).toBe(false); + expect(util.isCheckedProperty('0', false)).toBe(false); + expect(util.isCheckedProperty('0', 'true')).toBe(false); + expect(util.isCheckedProperty('0', 'false')).toBe(false); + }); + + it('should test a=1000', () => { + expect(util.isCheckedProperty(1000, undefined)).toBe(false); + expect(util.isCheckedProperty(1000, null)).toBe(false); + expect(util.isCheckedProperty(1000, '')).toBe(false); + expect(util.isCheckedProperty(1000, 'string')).toBe(false); + expect(util.isCheckedProperty(1000, 0)).toBe(false); + expect(util.isCheckedProperty(1000, '0')).toBe(false); + expect(util.isCheckedProperty(1000, 1000)).toBe(true); + expect(util.isCheckedProperty(1000, '1000')).toBe(true); + expect(util.isCheckedProperty(1000, -1)).toBe(false); + expect(util.isCheckedProperty(1000, true)).toBe(false); + expect(util.isCheckedProperty(1000, false)).toBe(false); + expect(util.isCheckedProperty(1000, 'true')).toBe(false); + expect(util.isCheckedProperty(1000, 'false')).toBe(false); + }); + + it('should test a="1000"', () => { + expect(util.isCheckedProperty('1000', undefined)).toBe(false); + expect(util.isCheckedProperty('1000', null)).toBe(false); + expect(util.isCheckedProperty('1000', '')).toBe(false); + expect(util.isCheckedProperty('1000', 'string')).toBe(false); + expect(util.isCheckedProperty('1000', 0)).toBe(false); + expect(util.isCheckedProperty('1000', '0')).toBe(false); + expect(util.isCheckedProperty('1000', 1000)).toBe(true); + expect(util.isCheckedProperty('1000', '1000')).toBe(true); + expect(util.isCheckedProperty('1000', -1)).toBe(false); + expect(util.isCheckedProperty('1000', true)).toBe(false); + expect(util.isCheckedProperty('1000', false)).toBe(false); + expect(util.isCheckedProperty('1000', 'true')).toBe(false); + expect(util.isCheckedProperty('1000', 'false')).toBe(false); + }); + + it('should test a=-1', () => { + expect(util.isCheckedProperty(-1, undefined)).toBe(false); + expect(util.isCheckedProperty(-1, null)).toBe(false); + expect(util.isCheckedProperty(-1, '')).toBe(false); + expect(util.isCheckedProperty(-1, 'string')).toBe(false); + expect(util.isCheckedProperty(-1, 0)).toBe(false); + expect(util.isCheckedProperty(-1, '0')).toBe(false); + expect(util.isCheckedProperty(-1, 1000)).toBe(false); + expect(util.isCheckedProperty(-1, '1000')).toBe(false); + expect(util.isCheckedProperty(-1, -1)).toBe(true); + expect(util.isCheckedProperty(-1, true)).toBe(false); + expect(util.isCheckedProperty(-1, false)).toBe(false); + expect(util.isCheckedProperty(-1, 'true')).toBe(false); + expect(util.isCheckedProperty(-1, 'false')).toBe(false); + }); + + it('should test a="-1"', () => { + expect(util.isCheckedProperty('-1', undefined)).toBe(false); + expect(util.isCheckedProperty('-1', null)).toBe(false); + expect(util.isCheckedProperty('-1', '')).toBe(false); + expect(util.isCheckedProperty('-1', 'string')).toBe(false); + expect(util.isCheckedProperty('-1', 0)).toBe(false); + expect(util.isCheckedProperty('-1', '0')).toBe(false); + expect(util.isCheckedProperty('-1', 1000)).toBe(false); + expect(util.isCheckedProperty('-1', '1000')).toBe(false); + expect(util.isCheckedProperty('-1', -1)).toBe(true); + expect(util.isCheckedProperty('-1', true)).toBe(false); + expect(util.isCheckedProperty('-1', false)).toBe(false); + expect(util.isCheckedProperty('-1', 'true')).toBe(false); + expect(util.isCheckedProperty('-1', 'false')).toBe(false); + }); + + it('should test a="string"', () => { + expect(util.isCheckedProperty('string', undefined)).toBe(false); + expect(util.isCheckedProperty('string', null)).toBe(false); + expect(util.isCheckedProperty('string', '')).toBe(false); + expect(util.isCheckedProperty('string', 'string')).toBe(true); + expect(util.isCheckedProperty('string', 'otherstring')).toBe(false); + expect(util.isCheckedProperty('string', 0)).toBe(false); + expect(util.isCheckedProperty('string', '0')).toBe(false); + expect(util.isCheckedProperty('string', 1000)).toBe(false); + expect(util.isCheckedProperty('string', '1000')).toBe(false); + expect(util.isCheckedProperty('string', -1)).toBe(false); + expect(util.isCheckedProperty('string', true)).toBe(false); + expect(util.isCheckedProperty('string', false)).toBe(false); + expect(util.isCheckedProperty('string', 'true')).toBe(false); + expect(util.isCheckedProperty('string', 'false')).toBe(false); + }); + + }); + + describe('isTrueProperty', () => { + + it('should be true from boolean true', () => { + expect(util.isTrueProperty(true)).toBe(true); + }); + + it('should be true from string "true"', () => { + expect(util.isTrueProperty('true')).toBe(true); + expect(util.isTrueProperty('TRUE')).toBe(true); + expect(util.isTrueProperty(' true ')).toBe(true); + }); + + it('should be true from string "on"', () => { + expect(util.isTrueProperty(true)).toBe(true); + }); + + it('should be true from empty string ""', () => { + expect(util.isTrueProperty('')).toBe(true); + expect(util.isTrueProperty(' ')).toBe(true); + }); + + it('should be true from number greater than zero', () => { + expect(util.isTrueProperty(1)).toBe(true); + expect(util.isTrueProperty(999)).toBe(true); + }); + + it('should be false from boolean false', () => { + expect(util.isTrueProperty(false)).toBe(false); + }); + + it('should be false from string "off"', () => { + expect(util.isTrueProperty(true)).toBe(true); + }); + + it('should be false from null', () => { + expect(util.isTrueProperty(null)).toBe(false); + }); + + it('should be false from undefined', () => { + expect(util.isTrueProperty(undefined)).toBe(false); + }); + + it('should be false from string "false"', () => { + expect(util.isTrueProperty('false')).toBe(false); + expect(util.isTrueProperty(' FALSE ')).toBe(false); + expect(util.isTrueProperty('doesnt actually matter')).toBe(false); + }); + + }); + + describe('extend', () => { + + it('should extend simple', () => { + var obj = { a: '0', c: '0' }; + expect( util.assign(obj, { a: '1', b: '2' }) ).toBe(obj); + expect(obj).toEqual({ a: '1', b: '2', c: '0' }); + }); + + it('should extend complex', () => { + expect(util.assign( + { a: '0', b: '0' }, + { b: '1', c: '1' }, + { c: '2', d: '2' } + )).toEqual({ + a: '0', + b: '1', + c: '2', + d: '2' + }); + }); + + }); + + describe('defaults', () => { + + it('should simple defaults', () => { + var obj = { a: '1' }; + expect(util.defaults(obj, { a: '2', b: '2' })).toBe(obj); + expect(obj).toEqual({ + a: '1', b: '2' + }); + }); + + it('should complex defaults', () => { + expect(util.defaults( + { a: '0', b: '0' }, + { b: '1', c: '1', e: '1' }, + { c: '2', d: '2' } + )).toEqual({ + a: '0', + b: '0', + c: '2', + d: '2', + e: '1' + }); + }); + }); }); diff --git a/src/util/util.ts b/src/util/util.ts index 26fde65cc1..9df4f839ba 100644 --- a/src/util/util.ts +++ b/src/util/util.ts @@ -148,12 +148,21 @@ export const isCheckedProperty = function(a: any, b: any): boolean { * @private */ export function reorderArray(array: any[], indexes: {from: number, to: number}): any[] { - let element = array[indexes.from]; + const element = array[indexes.from]; array.splice(indexes.from, 1); array.splice(indexes.to, 0, element); return array; } + +/** + * @private + */ +export function removeArrayItem(array: any[], item: any) { + const index = array.indexOf(item); + return !!~index && !!array.splice(index, 1); +} + /** * @private */