import * as React from 'react'; import { render } from '../src/renderer'; test('should render plain text', () => { expect((render('abcd') as string).trim()).toBe('abcd'); }); test('should render numbers as text', () => { expect((render(123) as string).trim()).toBe('123'); }); test('should render null and not fail for empty values', () => { expect(render(null)).toBe(null); expect(render(undefined)).toBe(null); expect(render([])).toBe(null); }); test('should render plain text with simple Function Component', () => { function TestComponent() { return 'abcd'; } // Note: Rendering string from function comp shows TS error (https://github.com/DefinitelyTyped/DefinitelyTyped/issues/20544). This is a workaround. expect( (render( React.createElement((TestComponent as unknown) as React.FunctionComponent) ) as string).trim() ).toBe('abcd'); }); test('should render plain text with simple Class Component', () => { class TestComponent extends React.Component { render() { return 'abcd'; } } expect((render() as string).trim()).toBe('abcd'); }); test('should render paragraph with plain text', () => { expect((render(

abcd

) as string).trim()).toBe('abcd'); }); test('should render plain h1 with text', () => { expect((render(

abcd

) as string).trim()).toBe('# abcd'); }); test('should render plain h2 with text', () => { expect((render(

abcd

) as string).trim()).toBe('## abcd'); }); test('should render plain h3 with text', () => { expect((render(

abcd

) as string).trim()).toBe('### abcd'); }); test('should render plain h4 with text', () => { expect((render(

abcd

) as string).trim()).toBe('#### abcd'); }); test('should render plain h5 with text', () => { expect((render(
abcd
) as string).trim()).toBe('##### abcd'); }); test('should render plain h6 with text', () => { expect((render(
abcd
) as string).trim()).toBe('###### abcd'); }); test('should render plain strong with text', () => { expect((render(abcd) as string).trim()).toBe('**abcd**'); }); test('should render plain em with text', () => { expect((render(abcd) as string).trim()).toBe('_abcd_'); }); test('should render H1 with mixed strong and em text', () => { expect( (render(

This is Hello World

) as string).trim() ).toBe('# This is **Hello** _World_'); }); test('should render plain unordered list with text', () => { expect( (render( ) as string).trim() ).toBe('- a\n- b\n- c'); }); test('should render plain ordered list with text', () => { expect( (render(
  1. a
  2. b
  3. c
) as string).trim() ).toBe('1. a\n2. b\n3. c'); }); test('should render image with alt text and title', () => { expect( (render( some alt ) as string).trim() ).toBe('![some alt](./test.jpg "some title")'); }); test('should render image with only alt text', () => { expect( (render(some alt) as string).trim() ).toBe('![some alt](./test.jpg)'); }); test('should render image with only title', () => { expect( (render() as string).trim() ).toBe('![](./test.jpg "some title")'); }); test('should render image without attributes', () => { expect((render() as string).trim()).toBe( '![](./test.jpg)' ); }); test('should render link with text and title', () => { expect( (render( some text ) as string).trim() ).toBe('[some text](./test "some title")'); }); test('should render link with only text', () => { expect((render(some text) as string).trim()).toBe( '[some text](./test)' ); }); test('should render link with only title', () => { expect( (render() as string).trim() ).toBe('[](./test "some title")'); }); test('should render link without title and text', () => { expect((render() as string).trim()).toBe('[](./test)'); }); test('should render blockquote with plain text', () => { expect((render(
some text
) as string).trim()).toBe( '> some text' ); }); test('should render blockquote with mixed text', () => { expect( (render(

This is hello world

) as string).trim() ).toBe('> This is _hello_ **world**'); });