UNPKG

@ryusei/light

Version:

<div align="center"> <a href="https://light.ryuseijs.com"> <img alt="RyuseiLight" src="https://light.ryuseijs.com/images/svg/logo.svg" width="70"> </a>

87 lines (65 loc) 2.72 kB
import { CONTAINER, BODY, CODE, LINE, TOKEN } from '../../../constants/classes'; import { PROJECT_CODE_SHORT } from '../../../constants/project'; import { Language } from '../../../types'; import { RyuseiLight } from '../RyuseiLight'; describe( 'RyuseiLight#apply()', () => { const lang1: Language = { id : 'lang1', name : 'Language 1', grammar: { main: [ [ 'lang1-a', /a+/ ] ] }, }; const lang2: Language = { id : 'lang2', name : 'Language 2', grammar: { main: [ [ 'lang2-a', /a+/ ] ] }, }; RyuseiLight.register( [ lang1, lang2 ] ); beforeEach( () => { document.body.innerHTML = '<pre id="pre1">aaa</pre><pre id="pre2">aaa</pre>'; } ); function getResult( id: string, tag = 'code' ): string[] { return [ `<div class="${ CONTAINER }">`, `<div class="${ BODY }">`, `<div class="${ CODE }">`, `<div class="${ LINE }">`, `<${ tag } class="${ TOKEN } ${ PROJECT_CODE_SHORT }__${ id }-a">aaa</${ tag }>`, '</div>', '</div>', '</div>', '</div>', ]; } test( 'can highlight a provided element.', () => { const pre1 = document.querySelector( '#pre1' ); const ryuseiLight = new RyuseiLight(); ryuseiLight.apply( pre1, { language: 'lang1' } ); expect( pre1.innerHTML ).toBe( getResult( 'lang1' ).join( '' ) ); } ); test( 'can highlight all elements that matches a provided selector.', () => { const pre1 = document.querySelector( '#pre1' ); const pre2 = document.querySelector( '#pre2' ); const ryuseiLight = new RyuseiLight(); ryuseiLight.apply( 'pre', { language: 'lang1' } ); expect( pre1.innerHTML ).toBe( getResult( 'lang1' ).join( '' ) ); expect( pre2.innerHTML ).toBe( getResult( 'lang1' ).join( '' ) ); } ); test( 'should not highlight elements that does not match a selector.', () => { const pre1 = document.querySelector( '#pre1' ); const pre2 = document.querySelector( '#pre2' ); const ryuseiLight = new RyuseiLight(); ryuseiLight.apply( '#pre1', { language: 'lang1' } ); expect( pre1.innerHTML ).toBe( getResult( 'lang1' ).join( '' ) ); expect( pre2.innerHTML ).toBe( 'aaa' ); } ); test( 'should respect options provided via the constructor.', () => { const pre1 = document.querySelector( '#pre1' ); const pre2 = document.querySelector( '#pre2' ); const ryuseiLight = new RyuseiLight( { language: 'lang2' } ); ryuseiLight.apply( pre1 ); // Use a span tag only for the #pre2. ryuseiLight.apply( pre2, { span: true } ); expect( pre1.innerHTML ).toBe( getResult( 'lang2' ).join( '' ) ); expect( pre2.innerHTML ).toBe( getResult( 'lang2', 'span' ).join( '' ) ); } ); } );