@ryusei/code
Version:
<div align="center"> <a href="https://code.ryuseijs.com"> <img alt="RyuseiCode" src="https://code.ryuseijs.com/images/svg/logo.svg" width="70"> </a>
62 lines (45 loc) • 2.48 kB
text/typescript
import { CLASS_LINE, CLASS_ROOT } from '../../../constants/classes';
import { RyuseiCode } from '../../../core/RyuseiCode/RyuseiCode';
import { generate } from '../../../test';
import { CLASS_GUTTER, CLASS_GUTTER_ROW, CLASS_HAS_GUTTER, CLASS_STICKY } from '../classes';
describe( 'Gutter#render()', () => {
test( 'can render the gutter by Editor#html().', () => {
const ryuseiCode = new RyuseiCode();
document.body.innerHTML = ryuseiCode.html( generate( 10 ) );
const root = document.querySelector( `.${ CLASS_ROOT }` );
const gutter = root.querySelector( `.${ CLASS_GUTTER }` );
const rows = gutter.getElementsByClassName( CLASS_GUTTER_ROW );
const lines = root.getElementsByClassName( CLASS_LINE );
expect( gutter ).not.toBeNull();
for ( let i = 0; i < rows.length - 1; i++ ) {
expect( rows[ i ].textContent ).toBe( `${ i + 1 }` );
}
// The last hidden row has the length of gutter rows.
expect( rows[ rows.length - 1 ].textContent ).toBe( `${ lines.length }` );
expect( root.classList.contains( CLASS_HAS_GUTTER ) ).toBe( true );
} );
test( 'should add a sticky class if required.', () => {
const ryuseiCode = new RyuseiCode( { gutter: { sticky: true } } );
document.body.innerHTML = ryuseiCode.html( generate( 10 ) );
const gutter = document.querySelector( `.${ CLASS_GUTTER }` );
expect( gutter.classList.contains( CLASS_STICKY ) ).toBe( true );
} );
test( 'can specify the start number.', () => {
const ryuseiCode = new RyuseiCode( { gutter: { start: 5 } } );
document.body.innerHTML = ryuseiCode.html( generate( 10 ) );
const rows = document.getElementsByClassName( CLASS_GUTTER_ROW );
const lines = document.getElementsByClassName( CLASS_LINE );
for ( let i = 0; i < rows.length - 1; i++ ) {
expect( rows[ i ].textContent ).toBe( `${ i + 5 }` );
}
expect( rows[ rows.length - 1 ].textContent ).toBe( `${ lines.length + 5 - 1 }` );
} );
test( 'can respect the maxInitialLines.', () => {
const ryuseiCode = new RyuseiCode( { maxInitialLines: 50 } );
document.body.innerHTML = ryuseiCode.html( generate( 100 ) );
const rows = document.getElementsByClassName( CLASS_GUTTER_ROW );
expect( rows.length ).toBe( 50 + 1 );
// The last row always describes the total length of lines.
expect( rows[ rows.length - 1 ].textContent ).toBe( '100' );
} );
} );