|  | import './index'; | 
|  | import { assert } from 'chai'; | 
|  | import { | 
|  | QueryValuesSk, | 
|  | QueryValuesSkQueryValuesChangedEventDetail, | 
|  | } from './query-values-sk'; | 
|  | import { QueryValuesSkPO } from './query-values-sk_po'; | 
|  | import { setUpElementUnderTest, eventPromise } from '../test_util'; | 
|  |  | 
|  | describe('query-values-sk', () => { | 
|  | const newInstance = setUpElementUnderTest<QueryValuesSk>('query-values-sk'); | 
|  |  | 
|  | let queryValuesSk: QueryValuesSk; | 
|  | let queryValuesSkPO: QueryValuesSkPO; | 
|  |  | 
|  | beforeEach(() => { | 
|  | queryValuesSk = newInstance(); | 
|  | queryValuesSk.options = ['x86', 'arm']; | 
|  |  | 
|  | queryValuesSkPO = new QueryValuesSkPO(queryValuesSk); | 
|  | }); | 
|  |  | 
|  | describe('selected property setter', () => { | 
|  | it('removes tildes', () => { | 
|  | queryValuesSk.selected = ['~ar']; | 
|  | assert.deepEqual(['ar'], queryValuesSk.selected); | 
|  | }); | 
|  |  | 
|  | it('removes checks', () => { | 
|  | queryValuesSk.selected = ['!x86', '!arm']; | 
|  | assert.deepEqual(['x86', 'arm'], queryValuesSk.selected); | 
|  | }); | 
|  |  | 
|  | it('leaves the value unchanged if it does not contain checks or tildes', () => { | 
|  | queryValuesSk.selected = ['x86', 'arm']; | 
|  | assert.deepEqual(['x86', 'arm'], queryValuesSk.selected); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | describe('with regex', () => { | 
|  | // We mark the beforeEach hook as async to give the MultiSelectSk's MutationObserver microtask | 
|  | // a chance to run and detect the selection change before we execute the tests. | 
|  | beforeEach(async () => { | 
|  | queryValuesSk.selected = ['~ar']; | 
|  | }); | 
|  |  | 
|  | it('shows the options and initial selection', async () => { | 
|  | assert.deepEqual(['x86', 'arm'], await queryValuesSkPO.getOptions()); | 
|  | assert.deepEqual(['~ar'], await queryValuesSkPO.getSelected()); | 
|  | }); | 
|  |  | 
|  | it('allows the user to set the regex', async () => { | 
|  | assert.isTrue(await queryValuesSkPO.isRegexCheckboxChecked()); | 
|  |  | 
|  | const event = queryValuesChangedEventPromise(); | 
|  | await queryValuesSkPO.setRegexValue('x8'); | 
|  | const value = (await event).detail; | 
|  |  | 
|  | assert.deepEqual({ invert: false, regex: true, values: ['~x8'] }, value); | 
|  | }); | 
|  |  | 
|  | it('toggles a regex correctly on invert click', async () => { | 
|  | assert.isTrue(await queryValuesSkPO.isRegexCheckboxChecked()); | 
|  |  | 
|  | const value = await clickInvertAndWaitForEvent(); | 
|  | assert.deepEqual(value.values, []); | 
|  | assert.isTrue(value.invert); | 
|  | assert.isFalse(value.regex); | 
|  |  | 
|  | // Regex and Invert are mutually exclusive. | 
|  | assert.isFalse( | 
|  | await queryValuesSkPO.isRegexCheckboxChecked(), | 
|  | 'Regex checkbox is unchecked' | 
|  | ); | 
|  | assert.isTrue( | 
|  | await queryValuesSkPO.isInvertCheckboxChecked(), | 
|  | 'Invert is checked' | 
|  | ); | 
|  | }); | 
|  |  | 
|  | it('toggles a regex correctly for regex click', async () => { | 
|  | assert.isTrue(await queryValuesSkPO.isRegexCheckboxChecked()); | 
|  |  | 
|  | let value = await clickRegexAndWaitForEvent(); | 
|  | assert.deepEqual([], value.values); | 
|  | assert.isFalse(value.invert); | 
|  | assert.isFalse(value.regex); | 
|  | assert.isFalse( | 
|  | await queryValuesSkPO.isRegexCheckboxChecked(), | 
|  | 'Regex is unchecked' | 
|  | ); | 
|  | assert.isFalse( | 
|  | await queryValuesSkPO.isInvertCheckboxChecked(), | 
|  | 'Invert stays unchecked' | 
|  | ); | 
|  |  | 
|  | // Now go back to regex. | 
|  | value = await clickRegexAndWaitForEvent(); | 
|  | assert.deepEqual( | 
|  | { invert: false, regex: true, values: ['~ar'] }, | 
|  | value, | 
|  | 'Event was sent.' | 
|  | ); | 
|  | assert.isTrue( | 
|  | await queryValuesSkPO.isRegexCheckboxChecked(), | 
|  | 'Regex is checked' | 
|  | ); | 
|  | assert.isFalse( | 
|  | await queryValuesSkPO.isInvertCheckboxChecked(), | 
|  | 'Invert stays unchecked' | 
|  | ); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | describe('normal input', () => { | 
|  | // We mark the beforeEach hook as async to give the MultiSelectSk's MutationObserver microtask | 
|  | // a chance to run and detect the selection change before we execute the tests. | 
|  | beforeEach(async () => { | 
|  | queryValuesSk.selected = ['arm']; | 
|  | }); | 
|  |  | 
|  | it('shows the options and initial selection', async () => { | 
|  | assert.deepEqual(['x86', 'arm'], await queryValuesSkPO.getOptions()); | 
|  | assert.deepEqual(['arm'], await queryValuesSkPO.getSelected()); | 
|  | }); | 
|  |  | 
|  | it('can change the selection via the UI', async () => { | 
|  | await queryValuesSkPO.setSelected(['x86']); | 
|  | assert.deepEqual(['x86'], queryValuesSk.selected); | 
|  | }); | 
|  |  | 
|  | it('toggles invert correctly for invert click', async () => { | 
|  | assert.isFalse(await queryValuesSkPO.isRegexCheckboxChecked()); | 
|  | assert.isFalse(await queryValuesSkPO.isInvertCheckboxChecked()); | 
|  |  | 
|  | let value = await clickInvertAndWaitForEvent(); | 
|  | assert.deepEqual( | 
|  | { invert: true, regex: false, values: ['!arm'] }, | 
|  | value, | 
|  | 'Event was sent.' | 
|  | ); | 
|  | assert.isFalse(await queryValuesSkPO.isRegexCheckboxChecked()); | 
|  | assert.isTrue(await queryValuesSkPO.isInvertCheckboxChecked()); | 
|  |  | 
|  | value = await clickInvertAndWaitForEvent(); | 
|  | assert.deepEqual( | 
|  | { invert: false, regex: false, values: ['arm'] }, | 
|  | value, | 
|  | 'Event was sent.' | 
|  | ); | 
|  | assert.isFalse(await queryValuesSkPO.isRegexCheckboxChecked()); | 
|  | assert.isFalse(await queryValuesSkPO.isInvertCheckboxChecked()); | 
|  | }); | 
|  |  | 
|  | it('checks if filtering on options is done correctly.', async () => { | 
|  | const originalOptions = await queryValuesSkPO.getOptions(); | 
|  | await queryValuesSkPO.setFilterInputValue('ar'); | 
|  | assert.deepEqual( | 
|  | await queryValuesSkPO.getOptions(), | 
|  | ['arm'], | 
|  | 'Filtering not done correctly.' | 
|  | ); | 
|  |  | 
|  | await queryValuesSkPO.setFilterInputValue(''); | 
|  | assert.deepEqual( | 
|  | await queryValuesSkPO.getOptions(), | 
|  | originalOptions, | 
|  | 'Empty filter value should reset the options to the original list.' | 
|  | ); | 
|  |  | 
|  | await queryValuesSkPO.setFilterInputValue('returnNothing'); | 
|  | assert.deepEqual( | 
|  | await queryValuesSkPO.getOptions(), | 
|  | [], | 
|  | 'Query should not return any options' | 
|  | ); | 
|  | }); | 
|  |  | 
|  | it('checks if the clear filter button works correctly.', async () => { | 
|  | const originalOptions = await queryValuesSkPO.getOptions(); | 
|  | await queryValuesSkPO.setFilterInputValue('ar'); | 
|  | assert.deepEqual( | 
|  | await queryValuesSkPO.getOptions(), | 
|  | ['arm'], | 
|  | 'Filtering not done correctly.' | 
|  | ); | 
|  |  | 
|  | await queryValuesSkPO.clickClearFilter(); | 
|  | assert.deepEqual( | 
|  | await queryValuesSkPO.getOptions(), | 
|  | originalOptions, | 
|  | 'Clear filter button expected to revert to original options.' | 
|  | ); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | describe('with inverted input', () => { | 
|  | // We mark the beforeEach hook as async to give the MultiSelectSk's MutationObserver microtask | 
|  | // a chance to run and detect the selection change before we execute the tests. | 
|  | beforeEach(async () => { | 
|  | queryValuesSk.selected = ['!arm']; | 
|  | }); | 
|  |  | 
|  | it('shows the options and initial selection', async () => { | 
|  | assert.deepEqual(['x86', 'arm'], await queryValuesSkPO.getOptions()); | 
|  | assert.deepEqual(['!arm'], await queryValuesSkPO.getSelected()); | 
|  | }); | 
|  |  | 
|  | it('toggles correctly for invert click when starting inverted', async () => { | 
|  | assert.isFalse(await queryValuesSkPO.isRegexCheckboxChecked()); | 
|  | assert.isTrue(await queryValuesSkPO.isInvertCheckboxChecked()); | 
|  |  | 
|  | let value = await clickInvertAndWaitForEvent(); | 
|  | assert.deepEqual( | 
|  | { invert: false, regex: false, values: ['arm'] }, | 
|  | value, | 
|  | 'Event was sent.' | 
|  | ); | 
|  | assert.isFalse(await queryValuesSkPO.isRegexCheckboxChecked()); | 
|  | assert.isFalse(await queryValuesSkPO.isInvertCheckboxChecked()); | 
|  |  | 
|  | value = await clickInvertAndWaitForEvent(); | 
|  | assert.deepEqual( | 
|  | { invert: true, regex: false, values: ['!arm'] }, | 
|  | value, | 
|  | 'Event was sent.' | 
|  | ); | 
|  | assert.isFalse(await queryValuesSkPO.isRegexCheckboxChecked()); | 
|  | assert.isTrue(await queryValuesSkPO.isInvertCheckboxChecked()); | 
|  | }); | 
|  |  | 
|  | it('sends right event when value is clicked', async () => { | 
|  | assert.isFalse(await queryValuesSkPO.isRegexCheckboxChecked()); | 
|  | assert.isTrue(await queryValuesSkPO.isInvertCheckboxChecked()); | 
|  |  | 
|  | const event = queryValuesChangedEventPromise(); | 
|  | await queryValuesSkPO.clickOption('x86'); | 
|  | let value = (await event).detail; | 
|  | assert.deepEqual( | 
|  | { invert: true, regex: false, values: ['!x86', '!arm'] }, | 
|  | value, | 
|  | 'Event was sent.' | 
|  | ); | 
|  |  | 
|  | value = await clickInvertAndWaitForEvent(); | 
|  | assert.deepEqual( | 
|  | { invert: false, regex: false, values: ['x86', 'arm'] }, | 
|  | value, | 
|  | 'Event was sent.' | 
|  | ); | 
|  | assert.isFalse(await queryValuesSkPO.isRegexCheckboxChecked()); | 
|  | assert.isFalse(await queryValuesSkPO.isInvertCheckboxChecked()); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | describe('with invert and regex hidden', () => { | 
|  | beforeEach(() => { | 
|  | queryValuesSk.setAttribute('hide_invert', 'true'); | 
|  | queryValuesSk.setAttribute('hide_regex', 'true'); | 
|  | }); | 
|  |  | 
|  | it('can hide the regex and invert boxes', async () => { | 
|  | assert.isTrue(await queryValuesSkPO.isInvertCheckboxHidden()); | 
|  | assert.isTrue(await queryValuesSkPO.isRegexCheckboxHidden()); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | const queryValuesChangedEventPromise = () => | 
|  | eventPromise<CustomEvent<QueryValuesSkQueryValuesChangedEventDetail>>( | 
|  | 'query-values-changed' | 
|  | ); | 
|  |  | 
|  | const clickInvertAndWaitForEvent = async () => { | 
|  | const event = queryValuesChangedEventPromise(); | 
|  | await queryValuesSkPO.clickInvertCheckbox(); | 
|  | return (await event).detail; | 
|  | }; | 
|  |  | 
|  | const clickRegexAndWaitForEvent = async () => { | 
|  | const event = queryValuesChangedEventPromise(); | 
|  | await queryValuesSkPO.clickRegexCheckbox(); | 
|  | return (await event).detail; | 
|  | }; | 
|  | }); |