import { element, Selection } from '../src/index' import { InvalidArgumentError } from '../src/errors' test('isSelection()', () => { expect(Selection.isSelection(123)).toEqual(false) expect(Selection.isSelection(element())).toEqual(true) }) test('element(): should return a Selection', () => { expect(element()).toBeInstanceOf(Selection) }) test('element(): create the element type specified', () => { expect(element({ type: 'button' }).element.nodeName).toEqual('BUTTON') }) test('element(): should default to div', () => { expect(element().element.nodeName).toEqual('DIV') expect(element({}).element.nodeName).toEqual('DIV') }) test('element(): should set the class', () => { expect(element({ class: 'my-class' }).class()).toEqual('my-class') expect(element({ class: { 'my-class': true } }).class()).toEqual('my-class') expect(element({ class: { 'class-1': true, 'class-2': false, 'class-3': true } }).class()) .toEqual('class-1 class-3') }) test('Selection::class(): element should add/remove classes', () => { expect(element({ class: { 'class-1': true, 'class-2': true } }).class({ 'class-2': false, 'class-3': true }).class()) .toEqual('class-1 class-3') }) test('Selection::::hasClass(cls)', () => { expect(element({ class: 'my-class' }).hasClass('my-class')).toEqual(true) expect(element({ class: 'my-class' }).hasClass('not-my-class')).toEqual(false) }) test('Selection::::attr(key, value)', () => { expect(element().attr('width', 23).element.getAttribute('width')).toEqual('23') expect(element().attr('class', 'my-class-2').element.getAttribute('class')).toEqual('my-class-2') }) test('Selection::::attr(key, undefined)', () => { expect(element().attr('width', 23).attr('width', undefined).attr('width')).toEqual(undefined) }) test('Selection::::attr(key)', () => { expect(element().attr('width', 23).attr('width')).toEqual('23') }) test('Selection::::attr({key: value})', () => { expect(element().attr({ 'width': 23 }).attr('width')).toEqual('23') expect(element().attr({ 'width': 23 }).attr({ 'width': undefined }).attr('width')).toEqual(undefined) }) test('Selection::::attr(): should throw invalid argument exceptions', () => { // @ts-ignore expect(() => element().attr({}, 123)) .toThrow(new InvalidArgumentError('key should be a string')) // @ts-ignore expect(() => element().attr("", 2, 3)) .toThrow(new InvalidArgumentError('expected 1 or 2 arguments')) }) test('Selection::::prop(key, value)', () => { expect(element().prop('className', 23).element.className).toEqual('23') expect(element().prop('className', 'my-class-2').element.className).toEqual('my-class-2') }) test('Selection::::prop(key)', () => { expect(element().prop('className', 23).prop('className')).toEqual('23') }) test('Selection::::prop({key: value})', () => { expect(element().prop({ 'className': 23 }).prop('className')).toEqual('23') }) test('Selection::::prop(): should throw invalid argument exceptions', () => { // @ts-ignore expect(() => element().prop({}, 123)) .toThrow(new InvalidArgumentError('key should be a string')) // @ts-ignore expect(() => element().prop("", 2, 3)) .toThrow(new InvalidArgumentError('expected 1 or 2 arguments')) })