4.3: the markdown property #80

Merged
lilleman merged 12 commits from markdown-property into main 2026-09-15 22:48:43 +02:00
6 changed files with 11 additions and 9 deletions
Showing only changes of commit 8e7d429379 - Show all commits
+2 -1
View File
@@ -229,7 +229,8 @@ editor wrote; the CommonMark spec suite against `markdownToAdf` and `markdownToH
Beside the corpus, properties run over documents generated from the node tables and over generated
markdown, on a fixed seed in the gate; `PROPERTY_RUNS=<runs>` raises the runs and randomizes the
seed for local digging, and a counterexample found becomes a round-trip fixture.
seed for local digging, and a counterexample found becomes a round-trip fixture. The generators and
run parameters properties share live in `src/property-harness.ts`, outside the build and coverage.
`spec/flavour.md` is read as a source too, so the node tables cannot drift from the prose they
copy: each `- ` bullet in `## Block nodes`, `## Inline nodes` and `## Marks` declares the nodes
+1 -1
View File
@@ -23,7 +23,7 @@
},
"scripts": {
"build": "tsc -p tsconfig.build.json",
"test": "node --test --experimental-test-coverage --test-coverage-exclude=\"src/**/*.test.ts\" --test-coverage-exclude=src/property-generators.ts --test-coverage-branches=98 --test-coverage-functions=100 --test-coverage-lines=100 \"src/**/*.test.ts\"",
"test": "node --test --experimental-test-coverage --test-coverage-exclude=\"src/**/*.test.ts\" --test-coverage-exclude=src/property-harness.ts --test-coverage-branches=98 --test-coverage-functions=100 --test-coverage-lines=100 \"src/**/*.test.ts\"",
"typecheck": "tsc --noEmit && tsc --noEmit -p tsconfig.build.json"
},
"devDependencies": {
+1 -1
View File
@@ -2,7 +2,7 @@ import fc from 'fast-check'
import assert from 'node:assert/strict'
import test from 'node:test'
import { adfDocument, propertyRuns, propertyTimeout } from './property-generators.ts'
import { adfDocument, propertyRuns, propertyTimeout } from './property-harness.ts'
import { adfToMarkdown } from './markdown/emit/adf-to-markdown.ts'
import { markdownToAdf } from './markdown/parse/markdown-to-adf.ts'
import { toEditorNormal } from './adf/editor-normal.ts'
+6 -5
View File
@@ -5,7 +5,8 @@ import test from 'node:test'
import type { Arbitrary, DepthIdentifier } from 'fast-check'
import type { AttributeVocabulary } from './adf/attribute-vocabulary.ts'
import type { JsonValue } from './json-value.ts'
import { adfDocument, attributes, jsonKey, jsonValue, markdownPieces, propertyRuns, propertyTimeout, textOf } from './property-generators.ts'
import type { Result } from './result.ts'
import { adfDocument, attributes, jsonKey, jsonValue, markdownPieces, propertyRuns, propertyTimeout, textOf } from './property-harness.ts'
import { adfToMarkdown } from './markdown/emit/adf-to-markdown.ts'
import { blockArgument } from './markdown/block-directive-arguments.ts'
import { blockDirectives } from './adf/block-directives.ts'
@@ -360,10 +361,10 @@ function blockMarkdown(hostile: boolean, { inlines, oneLine }: InlineMarkdown, {
const cleanMarkdown = markdownOf(false)
const hostileMarkdown = markdownOf(true)
const canonical = adfDocument.map((document) => {
const emitted = adfToMarkdown(document)
return emitted.ok ? emitted.value : ''
})
const canonical = adfDocument
.map((document) => adfToMarkdown(document))
.filter((emitted): emitted is Extract<Result<string>, { ok: true }> => emitted.ok)
.map((emitted) => emitted.value)
function edited(markdown: string, edits: readonly Edit[]): string {
let text = markdown
+1 -1
View File
@@ -27,6 +27,6 @@
"forceConsistentCasingInFileNames": true,
"skipLibCheck": true
},
"exclude": ["src/**/*.test.ts", "src/property-generators.ts"],
"exclude": ["src/**/*.test.ts", "src/property-harness.ts"],
"include": ["src"]
}