import { setHTMLFixture, resetHTMLFixture } from 'helpers/fixtures'; import { cachedData, getCurrentHoverElement, setCurrentHoverElement, addInteractionClass, } from '~/code_navigation/utils'; afterEach(() => { if (cachedData.has('current')) { cachedData.delete('current'); } }); describe('getCurrentHoverElement', () => { it.each` value ${'test'} ${undefined} `('it returns cached current key', ({ value }) => { if (value) { cachedData.set('current', value); } expect(getCurrentHoverElement()).toEqual(value); }); }); describe('setCurrentHoverElement', () => { it('sets cached current key', () => { setCurrentHoverElement('test'); expect(getCurrentHoverElement()).toEqual('test'); }); }); describe('addInteractionClass', () => { beforeEach(() => { setHTMLFixture( '
console.log
function
', ); }); afterEach(() => { resetHTMLFixture(); }); it.each` line | char | index ${0} | ${0} | ${0} ${0} | ${8} | ${2} ${1} | ${0} | ${0} ${1} | ${0} | ${0} `( 'it sets code navigation attributes for line $line and character $char', ({ line, char, index }) => { addInteractionClass({ path: 'index.js', d: { start_line: line, start_char: char } }); expect(document.querySelectorAll(`#LC${line + 1} span`)[index].classList).toContain( 'js-code-navigation', ); }, ); describe('wrapTextNodes', () => { beforeEach(() => { setHTMLFixture( '
Text
', ); }); const params = { path: 'index.js', d: { start_line: 0, start_char: 0 } }; const findAllSpans = () => document.querySelectorAll('#LC1 span'); it('does not wrap text nodes by default', () => { addInteractionClass(params); const spans = findAllSpans(); expect(spans.length).toBe(0); }); it('wraps text nodes if wrapTextNodes is true', () => { addInteractionClass({ ...params, wrapTextNodes: true }); const spans = findAllSpans(); expect(spans.length).toBe(3); expect(spans[0].textContent).toBe(' '); expect(spans[1].textContent).toBe('Text'); expect(spans[2].textContent).toBe(' '); }); }); });