@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>
63 lines (49 loc) • 1.93 kB
text/typescript
import { Language } from '../../../types';
import { RyuseiLight } from '../RyuseiLight';
import { ROOT, CONTAINER, BODY, CODE, LINE, TOKEN } from '../../../constants/classes';
import { PROJECT_CODE_SHORT } from '../../../constants/project';
describe( 'RyuseiLight#html()', () => {
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 ] );
function getResult( id: string, tag = 'code' ): string[] {
return [
`<pre class="${ ROOT } ${ ROOT }--${ id }">`,
`<div class="${ CONTAINER }">`,
`<div class="${ BODY }">`,
`<div class="${ CODE }">`,
`<div class="${ LINE }">`,
`<${ tag } class="${ TOKEN } ${ PROJECT_CODE_SHORT }__${ id }-a">aaa</${ tag }>`,
'</div>',
`<div class="${ LINE }">`,
`<${ tag } class="${ TOKEN } ${ PROJECT_CODE_SHORT }__${ id }-a">aaa</${ tag }>`,
'</div>',
'</div>',
'</div>',
'</div>',
'</pre>',
];
}
test( 'can return tokenized HTML.', () => {
const ryuseilight = new RyuseiLight();
expect( ryuseilight.html( 'aaa\naaa', { language: 'lang1' } ) ).toBe( getResult( 'lang1' ).join( '' ) );
expect( ryuseilight.html( 'aaa\naaa', { language: 'lang2' } ) ).toBe( getResult( 'lang2' ).join( '' ) );
} );
test( 'should respect options provided via the constructor.', () => {
const ryuseilight = new RyuseiLight( { language: 'lang2', span: true } );
// Use the default option:
expect( ryuseilight.html( 'aaa\naaa' ) )
.toBe( getResult( 'lang2', 'span' ).join( '' ) );
// Override:
expect( ryuseilight.html( 'aaa\naaa', { language: 'lang1', span: false } ) )
.toBe( getResult( 'lang1' ).join( '' ) );
} );
} );