| /* eslint-env jest */ |
| import getTabIndex from '../../../src/util/getTabIndex'; |
| import IdentifierMock from '../../../__mocks__/IdentifierMock'; |
| import JSXAttributeMock from '../../../__mocks__/JSXAttributeMock'; |
| |
| describe('getTabIndex', () => { |
| describe('tabIndex is defined', () => { |
| describe('as a number ', () => { |
| describe('zero', () => { |
| it('should return zero', () => { |
| expect(getTabIndex(JSXAttributeMock('tabIndex', 0))).toBe(0); |
| }); |
| }); |
| describe('positive integer', () => { |
| it('should return the integer', () => { |
| expect(getTabIndex(JSXAttributeMock('tabIndex', 1))).toBe(1); |
| }); |
| }); |
| describe('negative integer', () => { |
| it('should return the integer', () => { |
| expect(getTabIndex(JSXAttributeMock('tabIndex', -1))).toBe(-1); |
| }); |
| }); |
| describe('float', () => { |
| it('should return undefined', () => { |
| expect(getTabIndex(JSXAttributeMock('tabIndex', 9.1))).toBeUndefined(); |
| }); |
| }); |
| }); |
| describe('as a string', () => { |
| describe('empty', () => { |
| it('should return undefined', () => { |
| expect(getTabIndex(JSXAttributeMock('tabIndex', ''))).toBeUndefined(); |
| }); |
| }); |
| describe('which converts to a number', () => { |
| it('should return an integer', () => { |
| expect(getTabIndex(JSXAttributeMock('tabIndex', '0'))).toBe(0); |
| }); |
| }); |
| describe('which is NaN', () => { |
| it('should return undefined', () => { |
| expect(getTabIndex(JSXAttributeMock('tabIndex', '0a'))).toBeUndefined(); |
| }); |
| }); |
| }); |
| describe('as a boolean', () => { |
| describe('true', () => { |
| it('should return undefined', () => { |
| expect(getTabIndex(JSXAttributeMock('tabIndex', true))).toBeUndefined(); |
| }); |
| }); |
| describe('false', () => { |
| it('should return undefined', () => { |
| expect(getTabIndex(JSXAttributeMock('tabIndex', false))).toBeUndefined(); |
| }); |
| }); |
| }); |
| describe('as an expression', () => { |
| describe('function expression', () => { |
| it('should return the correct type', () => { |
| const attr = function mockFn() { return 0; }; |
| expect(typeof getTabIndex(JSXAttributeMock('tabIndex', attr))).toEqual('function'); |
| }); |
| }); |
| describe('variable expression', () => { |
| it('should return the Identifier name', () => { |
| const name = 'identName'; |
| expect(getTabIndex(JSXAttributeMock( |
| 'tabIndex', |
| IdentifierMock(name), |
| true, |
| ))).toEqual(name); |
| }); |
| }); |
| }); |
| }); |
| describe('tabIndex is not defined', () => { |
| it('should return undefined', () => { |
| expect(getTabIndex(JSXAttributeMock('tabIndex', undefined))).toBeUndefined(); |
| }); |
| }); |
| }); |