diff --git a/plugins/techdocs/src/test-utils/index.ts b/plugins/techdocs/src/test-utils/index.ts index f9ced5f930..d782f225d5 100644 --- a/plugins/techdocs/src/test-utils/index.ts +++ b/plugins/techdocs/src/test-utils/index.ts @@ -15,49 +15,10 @@ */ import FIXTURE_STANDARD_PAGE from './fixtures/mkdocs-index'; -import transformer from '../reader/transformers'; -import type { Transformer } from '../reader/transformers'; export const FIXTURES = { FIXTURE_STANDARD_PAGE, }; -export type CreateTestShadowDomOptions = { - transformers: Transformer[]; -}; - -export const createTestShadowDom = ( - fixture: string, - opts: CreateTestShadowDomOptions = { transformers: [] }, -): ShadowRoot => { - const divElement = document.createElement('div'); - divElement.attachShadow({ mode: 'open' }); - document.body.appendChild(divElement); - - const domParser = new DOMParser().parseFromString(fixture, 'text/html'); - divElement.shadowRoot?.appendChild(domParser.documentElement); - - if (opts.transformers) { - transformer(divElement.shadowRoot!.children[0], opts.transformers); - } - - return divElement.shadowRoot!; -}; - -export const getSample = ( - shadowDom: ShadowRoot, - elementName: string, - elementAttribute: string, - sampleSize = 2, -) => { - const rootElement = shadowDom.children[0]; - - return Array.from(rootElement.getElementsByTagName(elementName)) - .filter(elem => { - return elem.hasAttribute(elementAttribute); - }) - .slice(0, sampleSize) - .map(elem => { - return elem.getAttribute(elementAttribute); - }); -}; +export * from './stylesheets'; +export * from './shadowDom'; diff --git a/plugins/techdocs/src/test-utils/shadowDom.ts b/plugins/techdocs/src/test-utils/shadowDom.ts new file mode 100644 index 0000000000..ded6b6a860 --- /dev/null +++ b/plugins/techdocs/src/test-utils/shadowDom.ts @@ -0,0 +1,58 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import transformer from '../reader/transformers'; +import type { Transformer } from '../reader/transformers'; + +export type CreateTestShadowDomOptions = { + transformers: Transformer[]; +}; + +export const createTestShadowDom = ( + fixture: string, + opts: CreateTestShadowDomOptions = { transformers: [] }, +): ShadowRoot => { + const divElement = document.createElement('div'); + divElement.attachShadow({ mode: 'open' }); + document.body.appendChild(divElement); + + const domParser = new DOMParser().parseFromString(fixture, 'text/html'); + divElement.shadowRoot?.appendChild(domParser.documentElement); + + if (opts.transformers) { + transformer(divElement.shadowRoot!.children[0], opts.transformers); + } + + return divElement.shadowRoot!; +}; + +export const getSample = ( + shadowDom: ShadowRoot, + elementName: string, + elementAttribute: string, + sampleSize = 2, +) => { + const rootElement = shadowDom.children[0]; + + return Array.from(rootElement.getElementsByTagName(elementName)) + .filter(elem => { + return elem.hasAttribute(elementAttribute); + }) + .slice(0, sampleSize) + .map(elem => { + return elem.getAttribute(elementAttribute); + }); +}; diff --git a/plugins/techdocs/src/test-utils/stylesheets.ts b/plugins/techdocs/src/test-utils/stylesheets.ts new file mode 100644 index 0000000000..0532c71272 --- /dev/null +++ b/plugins/techdocs/src/test-utils/stylesheets.ts @@ -0,0 +1,35 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export const mockStylesheetEventListener = (timeToCallbackMs: number): void => { + HTMLLinkElement.prototype.addEventListener = ( + _eventName: string, + eventCallback: any, + ) => { + setTimeout(() => { + eventCallback(); + }, timeToCallbackMs); + }; +}; + +export const executeStylesheetEventListeners = (): void => { + jest.runOnlyPendingTimers(); +}; + +export const clearStylesheetEventListeners = (): void => { + HTMLLinkElement.prototype.addEventListener = + Element.prototype.addEventListener; +};