KnodesCommunity/typedoc-plugins

View on GitHub
packages/plugin-code-blocks/src/code-sample-file.spec.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { restoreFs, setVirtualFs } from '#plugintestbed';

import { DEFAULT_BLOCK_NAME, readCodeSample } from './code-sample-file';

afterEach( restoreFs );
describe( 'Valid parses', () => {
    it.each( [
        [ 'No region', `Hello

World`, { [DEFAULT_BLOCK_NAME]: { startLine: 1, endLine: 3, code: 'Hello\n\nWorld' }} ],
        [ 'Single region', `Hello

World
// #region Test
Coucou
//#endregion`, { Test: { startLine: 4, endLine: 6, code: 'Coucou' }} ],
        [ 'Single region wide', `Hello

World
// #region Test
Coucou
//Test comment
Hello
//#endregion`, { Test: { startLine: 4, endLine: 8, code: 'Coucou\n//Test comment\nHello' }} ],
        [ 'Multiple regions', `//#region A
Hello

World
//#endregion
Wololo
// #region B
Coucou
//Test comment
Hello
//#endregion`, {
            A: { startLine: 1, endLine: 5, code: 'Hello\n\nWorld' },
            B: { startLine: 7, endLine: 11, code: 'Coucou\n//Test comment\nHello' },
        } ],
        [ 'Nested', `//#region A
Foo
// #region B
Bar
//#endregion
Qux
//#endregion`, {
            A: { startLine: 1, endLine: 7, code: 'Foo\nBar\nQux' },
            B: { startLine: 3, endLine: 5, code: 'Bar' },
        } ],
        [ 'Nested 2', `//#region A
Foo
// #region B
Bar
// #region C
Baz
//#endregion
Qux
//#endregion
Baaz
//#endregion`, {
            A: { startLine: 1, endLine: 11, code: 'Foo\nBar\nBaz\nQux\nBaaz' },
            B: { startLine: 3, endLine: 9, code: 'Bar\nBaz\nQux' },
            C: { startLine: 5, endLine: 7, code: 'Baz' },
        } ],
        [ 'Interleaved', `//#region A
Foo
// #region B
Bar
//#endregion A
Baz
//#endregion`, {
            A: { startLine: 1, endLine: 5, code: 'Foo\nBar' },
            B: { startLine: 3, endLine: 7, code: 'Bar\nBaz' },
        } ],
        [ 'Nested Interleaved', `//#region A
Foo
// #region B
Bar
// #region C
Baz
//#endregion B
Qux
// #endregion C
Baz
//#endregion`, {
            A: { startLine: 1, endLine: 11, code: 'Foo\nBar\nBaz\nQux\nBaz' },
            B: { startLine: 3, endLine: 7, code: 'Bar\nBaz' },
            C: { startLine: 5, endLine: 9, code: 'Baz\nQux' },
        } ],
    ] )( 'should parse correctly "%s"', ( _, content, output ) => {
        setVirtualFs( {
            'test.txt': content,
        } );
        const res = Object.fromEntries( readCodeSample( 'test.txt' ).entries() );
        const expected = Object.fromEntries( Object.entries( output )
            .map( ( [ k, v ] ) => [ k, { ...v, file: 'test.txt', region: k } ] ) );
        expect( res ).toEqual( expected );
    } );
} );