import { assertEquals } from "testing/asserts.ts"; import { HtmlStrRenderer } from "../ren/html_str.ts"; import { MarkdownParser } from "./md.ts"; const ren = new HtmlStrRenderer(); // Misc Deno.test({ name: "should skip empty line", only: true, fn: () => { const par = new MarkdownParser(); assertEquals(ren.render(par.parse("\n")), ""); assertEquals(ren.render(par.parse("\r\n")), ""); assertEquals(ren.render(par.parse("\n\r\n")), ""); assertEquals(ren.render(par.parse("\n \n")), ""); }, }); // ATX Header Deno.test({ name: "should parse empty ATX header", only: true, fn: () => { const par = new MarkdownParser(); assertEquals(ren.render(par.parse("#")), "
"); assertEquals(ren.render(par.parse("##")), ""); }, }); Deno.test({ name: "should parse ATX header if line contains additional spaces", only: true, fn: () => { const par = new MarkdownParser(); assertEquals(ren.render(par.parse(" #")), ""); assertEquals(ren.render(par.parse(" #")), ""); assertEquals(ren.render(par.parse(" ##")), ""); assertEquals(ren.render(par.parse(" #")), ""); assertEquals(ren.render(par.parse(" ##")), ""); }, }); Deno.test({ name: "should parse ATX header with text", only: true, fn: () => { const par = new MarkdownParser(); assertEquals(ren.render(par.parse("# hello")), "hello
"); }, }); Deno.test({ name: "should parse paragraph with softbreak", fn: () => { const par = new MarkdownParser(); assertEquals( ren.render(par.parse(`\ hello world`)), "hello world
", ); }, }); Deno.test({ name: "should parse many big paragraphs", fn: () => { const par = new MarkdownParser(); assertEquals( ren.render(par.parse(`\ hello world`)), "hello world
", ); assertEquals( ren.render(par.parse(`\ Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.`)), "Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.
It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
", ); }, }); // Link Deno.test({ name: "should parse link", fn: () => { const par = new MarkdownParser(); assertEquals( ren.render(par.parse("[]()")), '', ); assertEquals( ren.render(par.parse("[hello]()")), '', ); assertEquals( ren.render(par.parse("[hello]()")), '', ); }, }); Deno.test({ name: "should parse link destination", fn: () => { const par = new MarkdownParser(); assertEquals( ren.render(par.parse("[](/hello)")), '', ); assertEquals( ren.render(par.parse("[](/hello?key=value&key2=value2)")), '', ); assertEquals( ren.render(par.parse("[hello](https://example.com)")), '', ); assertEquals( ren.render(par.parse("[hello](mailto:john@example.com)")), '', ); assertEquals( ren.render(par.parse("[](/привет)")), '', ); assertEquals( ren.render(par.parse("[]()")), '', ); assertEquals( ren.render(par.parse("[]()")), '', ); }, }); Deno.test({ name: "should parse link title", fn: () => { const par = new MarkdownParser(); assertEquals( ren.render(par.parse("[](/hello 'hello')")), '', ); assertEquals( ren.render(par.parse('[hello](/hello "world")')), '', ); assertEquals( ren.render(par.parse('[hello]( "hello world")')), '', ); }, }); // List Deno.test({ name: "should parse list with empty items", fn: () => { const par = new MarkdownParser(); assertEquals( ren.render(par.parse("-")), "Lorem Ipsum is simply dummy text of the printing and typesetting industry.