Path: blob/main/tests/unit/pandoc-formats.test.ts
6448 views
import { unitTest } from "../test.ts";1import { assert } from "testing/asserts";2import {3FormatDescriptor,4parseFormatString,5} from "../../src/core/pandoc/pandoc-formats.ts";67unitTest(8"pandoc-format",9// deno-lint-ignore require-await10async () => {11const tests: Record<string, FormatDescriptor> = {12"pdf": {13baseFormat: "pdf",14variants: [],15modifiers: [],16formatWithVariants: "pdf",17},18"acm-pdf": {19baseFormat: "pdf",20extension: "acm",21variants: [],22modifiers: [],23formatWithVariants: "pdf",24},25"acm-pdf+draft": {26baseFormat: "pdf",27extension: "acm",28variants: [],29modifiers: ["+draft"],30formatWithVariants: "pdf",31},32"acm-2023-pdf+draft": {33baseFormat: "pdf",34extension: "acm-2023",35variants: [],36modifiers: ["+draft"],37formatWithVariants: "pdf",38},39"gfm-rebase_relative_paths": {40baseFormat: "gfm",41variants: ["-rebase_relative_paths"],42modifiers: [],43formatWithVariants: "gfm-rebase_relative_paths",44},45"gfm-rebase_relative_paths+markdown_in_html_blocks": {46baseFormat: "gfm",47variants: ["-rebase_relative_paths", "+markdown_in_html_blocks"],48modifiers: [],49formatWithVariants: "gfm-rebase_relative_paths+markdown_in_html_blocks",50},51};5253Object.keys(tests).forEach((test) => {54const parsed = parseFormatString(test);55assertDescriptorsEqual(parsed, tests[test]);56});57},58);5960function assertDescriptorsEqual(61desc1: FormatDescriptor,62desc2: FormatDescriptor,63) {64const msg = (text: string) => {65return `${text}\n${JSON.stringify(desc1, undefined, 2)}\n${66JSON.stringify(desc2, undefined, 2)67}`;68};6970assert(71desc1.baseFormat === desc2.baseFormat,72msg("mismatching base format"),73);74assert(75desc1.formatWithVariants === desc2.formatWithVariants,76msg("mismatching format variant string"),77);78assert(79arraysEqual(desc1.modifiers, desc2.modifiers),80msg("mismatching modifiers"),81);82assert(83arraysEqual(desc1.variants, desc2.variants),84msg("mismatching variants"),85);86assert(87desc1.extension === desc2.extension,88msg("mismatching format extension"),89);90}9192function arraysEqual(arr1: string[], arr2: string[]) {93if (arr1.length !== arr2.length) {94return false;95}9697const filtered = arr1.filter((val, i) => {98return val === arr2[i];99});100return filtered.length === arr1.length;101}102103104