The suite is now one tasty binary over shared modules, so the Djot
tests can sit next to the Markdown ones without another copy of the
harness:
tests/Main.hs the TestTree
tests/Test/Harness.hs running a parser inside a property
tests/Test/Gen.hs generators, shrinkers, escaping
tests/Test/Gen/Document.hs whole document generation
tests/Markdown/Parse.hs the Markdown properties
Generated values moved from `pick` to `Arbitrary` instances on
newtypes. `pick` embeds its value with `forAll (return a)` and cannot
shrink; going through Arbitrary gets shrinking back at the cost of
hand written shrinkers, which have to preserve the invariants their
generator established.
IR now derives Eq, and the properties assert against a complete
expected tree rather than pattern matching. The old patterns bound
fresh names that shadowed the generated ones, so they only ever
checked the shape of the tree and never its content.
Test.Gen.Document generates a description of a document which renders
to source and derives its own expected tree, so the two stay in step
while shrinking. Rendering goes through a Syntax record so Djot can
reuse the spec and the expectations. Escaping is a generator level
concern: an Escaper says which characters are special and how (or
whether) they can be written literally.
Two properties fail, both on parser bugs rather than test bugs:
code_block fencedCodeBlock inverts its language test, so a
fence naming a language reports Nothing. Djot.hs
gets this right at src/Djot.hs:354.
document_round_trip a nested list with more than one item makes the
whole list fail to parse and fall back to a
paragraph. In listBlock's child parser the second
alternative has no `try`, so it fails having
consumed the first item's indentation. The
existing nesting tests only ever used one nested
item.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
60 lines
2.4 KiB
Text
60 lines
2.4 KiB
Text
cabal-version: 3.4
|
|
name: psb
|
|
|
|
-- The package version.
|
|
-- See the Haskell package versioning policy (PVP) for standards
|
|
-- guiding when and how versions should be incremented.
|
|
-- https://pvp.haskell.org
|
|
-- PVP summary: +-+------- breaking API changes
|
|
-- | | +----- non-breaking API additions
|
|
-- | | | +--- code changes with no API change
|
|
version: 0.2.0.0
|
|
|
|
license: MIT
|
|
license-file: LICENSE
|
|
|
|
author: Pagwin
|
|
maintainer: dev@pagwin.xyz
|
|
|
|
category: Web
|
|
build-type: Simple
|
|
extra-doc-files: CHANGELOG.md
|
|
description: A Static site generator I've built for my purposes
|
|
|
|
|
|
common warnings
|
|
ghc-options: -Wall
|
|
|
|
library
|
|
hs-source-dirs: src
|
|
exposed-modules: Djot Markdown HTML Logger IR Logger.Shake Psb.Main Utilities Utilities.FilePath Utilities.Action Utilities.Javascript Utilities.CSS Templates Types Config Utilities.Bundling
|
|
other-modules: Utilities.Parsing
|
|
build-depends: base, mustache >=2.4.2, shake >= 0.19.8, deriving-aeson >= 0.2.9, aeson, text >= 2.1.2, time, unordered-containers, yaml, megaparsec >= 9.7.0, transformers >= 0.6.2, bytestring
|
|
default-extensions: ApplicativeDo DataKinds NamedFieldPuns DerivingVia LambdaCase TypeApplications DeriveGeneric OverloadedRecordDot NamedFieldPuns DuplicateRecordFields DisambiguateRecordFields FlexibleInstances
|
|
|
|
test-suite test-markdown-parse
|
|
hs-source-dirs: tests
|
|
type: exitcode-stdio-1.0
|
|
main-is: Main.hs
|
|
other-modules: Test.Gen, Test.Gen.Document, Test.Harness, Markdown.Parse
|
|
build-depends: base, text, megaparsec, transformers, QuickCheck, tasty, tasty-quickcheck, time, psb
|
|
|
|
default-extensions: ApplicativeDo DataKinds NamedFieldPuns DerivingVia LambdaCase TypeApplications DeriveGeneric OverloadedRecordDot NamedFieldPuns DuplicateRecordFields DisambiguateRecordFields FlexibleInstances
|
|
default-language: Haskell2010
|
|
|
|
|
|
executable psb
|
|
import: warnings
|
|
hs-source-dirs: app
|
|
-- .hs or .lhs file containing the Main module.
|
|
main-is: Main.hs
|
|
ghc-options: -threaded
|
|
build-depends: psb, base
|
|
|
|
|
|
-- default-extensions: ApplicativeDo DataKinds NamedFieldPuns DerivingVia LambdaCase TypeApplications DeriveGeneric OverloadedRecordDot NamedFieldPuns DuplicateRecordFields DisambiguateRecordFields FlexibleInstances
|
|
|
|
source-repository head
|
|
type: git
|
|
location: https://git.pagwin.xyz/Pagwin/psb
|
|
|