it('should return UNRECOGNIZED state when the schema is valid but values are incorect or incomplete', () => { expect(detectSelectionType([1])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType([[1]])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType(['prop1'])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType([['prop1']])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType(range(1, 2))).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType([[range(1, 2), range(1, 2)]])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType([[range(1, 2), range(1, 2), range(1, 2)]])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType([[range(1, 2), range(1, 2), range(1, 2), range(1, 2)]])).toBe(SELECTION_TYPE_UNRECOGNIZED); });
it('should ignore nested structures', () => { expect(detectSelectionType([[[1, 1]]])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType([[[1, 1, 2, 2]]])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType([[[[1, 1]]]])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType([[[[1, 1, 2, 2]]]])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType([[[[[1, 1]]]]])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType([[[[[1, 1, 2, 2]]]]])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType([[[[[range(1, 2), range(1, 2)]]]]])).toBe(SELECTION_TYPE_UNRECOGNIZED); });
it('should return UNRECOGNIZED state when the schema is unrecognized', () => { expect(detectSelectionType(null)).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType(1)).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType('z')).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType(true)).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType([{}])).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType({})).toBe(SELECTION_TYPE_UNRECOGNIZED); expect(detectSelectionType()).toBe(SELECTION_TYPE_UNRECOGNIZED); });
it('should return OBJECT state on valid range selection schema', () => { expect(detectSelectionType([range(1, 2)])).toBe(SELECTION_TYPE_OBJECT); expect(detectSelectionType([range(1, 2), range(1, 2)])).toBe(SELECTION_TYPE_OBJECT); expect(detectSelectionType([range(1, 2), range(1, 2), range(1, 2)])).toBe(SELECTION_TYPE_OBJECT); expect(detectSelectionType([range(1, 2), range(1, 2), range(1, 2), range(1, 2)])).toBe(SELECTION_TYPE_OBJECT); });
it('should return ARRAY state on valid an array selection schema', () => { expect(detectSelectionType([1, 1])).toBe(SELECTION_TYPE_ARRAY); expect(detectSelectionType([1, 1, 2])).toBe(SELECTION_TYPE_ARRAY); expect(detectSelectionType([1, 1, 2, 2])).toBe(SELECTION_TYPE_ARRAY); expect(detectSelectionType([1, 'prop1'])).toBe(SELECTION_TYPE_ARRAY); expect(detectSelectionType([1, 'prop1', 2])).toBe(SELECTION_TYPE_ARRAY); expect(detectSelectionType([1, 'prop1', 2, 'prop2'])).toBe(SELECTION_TYPE_ARRAY); expect(detectSelectionType([[1, 1]])).toBe(SELECTION_TYPE_ARRAY); expect(detectSelectionType([[1, 1, 2]])).toBe(SELECTION_TYPE_ARRAY); expect(detectSelectionType([[1, 1, 2, 2]])).toBe(SELECTION_TYPE_ARRAY); expect(detectSelectionType([[1, 'prop1']])).toBe(SELECTION_TYPE_ARRAY); expect(detectSelectionType([[1, 'prop1', 2]])).toBe(SELECTION_TYPE_ARRAY); expect(detectSelectionType([[1, 'prop1', 2, 'prop2']])).toBe(SELECTION_TYPE_ARRAY); });
it('should return EMPTY state when the passed data is empty', () => { expect(detectSelectionType([])).toBe(SELECTION_TYPE_EMPTY); expect(detectSelectionType([[]])).toBe(SELECTION_TYPE_EMPTY); });
expect(() => detectSelectionType([1, 1], Symbol('child'))).toThrow();
expect(() => detectSelectionType([1, 1], null)).toThrow();
expect(() => detectSelectionType([1, 1], false)).toThrow();