it('should adjust value related properties if `rawValue` is change in runtime and is given a non-exist value', function () { var select = new Select({ datasource: datasource, value: '2' }); select.appendTo(container); select.setProperties({ rawValue: '10' }); expect(select.get('selectedIndex')).toBe(0); expect(select.getRawValue()).toBe('1'); });
it('should not adjust value related properties if `datasource` is change but value is still in sync', function () { var select = new Select({ datasource: datasource, value: '2' }); select.appendTo(container); select.setProperties({ datasource: datasource.slice(0, 3) }); expect(select.get('selectedIndex')).toBe(1); expect(select.getRawValue()).toBe('2'); });
it('should `emptyText` if `selectedIndex` is change in runtime and is given an out-of-range value when `emptyText` is given', function () { var select = new Select({ datasource: datasource, value: '2', emptyText: 'test' }); select.appendTo(container); select.setProperties({ selectedIndex: 10 }); expect(select.get('selectedIndex')).toBe(-1); expect(select.getRawValue()).toBe(''); });
it('should select the first item if `selectedIndex` is change in runtime and is given an out-of-range value and no `emptyText` is given', function () { var select = new Select({ datasource: datasource, value: '2' }); select.appendTo(container); select.setProperties({ selectedIndex: 10 }); expect(select.get('selectedIndex')).toBe(0); expect(select.getRawValue()).toBe('1'); });
it('should accept runtime change of `selectedIndex`', function () { var select = new Select({ datasource: datasource, value: '2' }); select.appendTo(container); select.setProperties({ selectedIndex: 2 }); expect(select.get('selectedIndex')).toBe(2); expect(select.getRawValue()).toBe('3'); });
it('should not be selected when no explicit `value`, `rawValue` or `selectedIndex` is given', function () { var select = new Select({ datasource: datasource }); select.appendTo(container); expect(select.get('selectedIndex')).toBe(1); expect(select.getValue()).toBe('2'); expect(select.getRawValue()).toBe('2'); });
it('should sync `selectedIndex` after `value` is changed', function () { var select = new Select({ datasource: datasource, value: '2' }); select.appendTo(container); select.setProperties({ value: '3' }); expect(select.get('selectedIndex')).toBe(2); expect(select.getRawValue()).toBe('3'); });
it('should select the first item if `datasource` is changed even value is still in sync', function () { var select = new Select({ datasource: datasource, value: '2' }); select.appendTo(container); select.setProperties({ datasource: datasource.slice(0, 3) }); expect(select.get('selectedIndex')).toBe(0); expect(select.getRawValue()).toBe('1'); });
it('should select `emptyText` if `datasource` is change in runtime which causes value to be unsynced when `emptyText` is given', function () { var select = new Select({ datasource: datasource, value: '6', emptyText: 'test' }); select.appendTo(container); select.setProperties({ datasource: datasource.slice(0, 3) }); expect(select.get('selectedIndex')).toBe(-1); expect(select.getRawValue()).toBe(''); });
it('should select the first item if `datasource` is changed in runtime when no `emptyText` is given', function () { var select = new Select({ datasource: datasource, value: '6' }); select.appendTo(container); select.setProperties({ datasource: datasource.slice(0, 3) }); expect(select.get('selectedIndex')).toBe(0); expect(select.getRawValue()).toBe('1'); expect(select.main.firstChild.innerHTML).toBe('a'); });
it('should select the correct item if an option element in layer is clicked', function () { var select = new Select({ datasource: datasource, value: '2' }); select.appendTo(container); dispatchEvent(select.main, 'click'); var layer = findLayer(); var option = layer.children[2]; dispatchEvent(option, 'click'); expect(select.get('selectedIndex')).toBe(2); expect(select.getValue()).toBe('3'); expect(select.getRawValue()).toBe('3'); });
it('should not accept click event', function () { var select = new Select({ datasource: datasource, value: '2' }); select.appendTo(container); dispatchEvent(select.main, 'click'); var layer = findLayer(); var option = layer.children[0]; dispatchEvent(option, 'click'); expect(select.get('selectedIndex')).toBe(1); expect(select.getValue()).toBe('2'); expect(select.getRawValue()).toBe('2'); });
it('should select the first item if given a non-exist `rawValue` and no `emptyText` is given', function () { var select = new Select({ datasource: datasource, rawValue: '10' }); expect(select.get('selectedIndex')).toBe(0); expect(select.getRawValue()).toBe('1'); });
it('should select the first item if `emptyText` is removed when `emptyText` is previously selected', function () { var select = new Select({ datasource: datasource, emptyText: 'test' }); select.set('emptyText', null); expect(select.get('selectedIndex')).toBe(0); expect(select.getRawValue()).toBe('1'); });
it('should keep selecting `emptyText` if `datasource` is changed and given an item whose value is empty', function () { var select = new Select({ datasource: datasource, emptyText: 'test' }); select.set('datasource', [{ name: 'x', value: '' }]); expect(select.get('selectedIndex')).toBe(-1); expect(select.getRawValue()).toBe(''); })
it('should select `emptyText` if given a non-exist `rawValue` when `emptyText` is given', function () { var select = new Select({ datasource: datasource, rawValue: '10', emptyText: 'test' }); expect(select.get('selectedIndex')).toBe(-1); expect(select.getRawValue()).toBe(''); });
it('should select the first item if given a out-of-range `selectedIndex` and no `emptyText` is given', function () { var select = new Select({ datasource: datasource, selectedIndex: 10 }); expect(select.get('selectedIndex')).toBe(0); expect(select.getRawValue()).toBe('1'); });
it('should select `emptyText` if given a out-of-range `selectedIndex` when `emptyText` is given', function () { var select = new Select({ datasource: datasource, selectedIndex: 10, emptyText: 'test' }); expect(select.get('selectedIndex')).toBe(-1); expect(select.getRawValue()).toBe(''); });
it('should select the first item by default if none of them are given', function () { var select = new Select({ datasource: datasource }); expect(select.get('selectedIndex')).toBe(0); expect(select.getRawValue()).toBe('1'); });
it('should select `emptyText` by default if only `emptyText` is given', function () { var select = new Select({ datasource: datasource, emptyText: 'test' }); expect(select.get('selectedIndex')).toBe(-1); expect(select.getRawValue()).toBe(''); });