summaryrefslogtreecommitdiff
path: root/source/Test
diff options
context:
space:
mode:
authoradelon <22380201+adelon@users.noreply.github.com>2026-08-02 15:21:38 +0200
committeradelon <22380201+adelon@users.noreply.github.com>2026-08-02 15:21:38 +0200
commit689941b76cfbcf1b6ca5226b519f1a2fad1b26d9 (patch)
tree2eae21880dd2938fad5a21b210fd39a7dcaeaa88 /source/Test
parentdbbb5e0dbc302d5a0b6c4cd9f73a56518a6d95f5 (diff)
Retain exact omitted-proof locations
Diffstat (limited to 'source/Test')
-rw-r--r--source/Test/Unit/Module.hs56
1 files changed, 56 insertions, 0 deletions
diff --git a/source/Test/Unit/Module.hs b/source/Test/Unit/Module.hs
index d5367b9..4a1122e 100644
--- a/source/Test/Unit/Module.hs
+++ b/source/Test/Unit/Module.hs
@@ -72,6 +72,8 @@ unitTests =
confinesFoundationLeafCompletion
, testCase "builds the confined final prelude"
buildsConfinedFinalPrelude
+ , testCase "retains exact omitted-proof locations"
+ retainsExactOmittedProofLocation
, testCase "coalesces syntax without collapsing semantic imports"
coalescesSharedDirectSyntax
, testCase "resets gloss state between modules"
@@ -424,6 +426,60 @@ buildsConfinedFinalPrelude = do
FinalPrelude.FinalPreludeSourceParseFailed failure ->
assertFailure ("final prelude did not parse: " <> show failure)
+retainsExactOmittedProofLocation :: Assertion
+retainsExactOmittedProofLocation = do
+ foundation <- expectRight Foundation.checkedFoundation
+ source <-
+ expectRight
+ (Prelude.reservedPreludeSourceInput
+ (Text.encodeUtf8
+ (StrictText.unlines
+ [ "\\begin{proposition}\\label{omitted_location}"
+ , " For all $x$ we have $x = x$."
+ , "\\end{proposition}"
+ , "\\begin{proof}"
+ , " Omitted."
+ , "\\end{proof}"
+ ])))
+ parsed <- expectRight =<< Prelude.parseReservedPreludeSource source
+ let blocks =
+ Parse.identifiedParsedModuleBlocks
+ (Prelude.reservedParsedPreludeModule parsed)
+ claim <- sole "omitted claim"
+ [ block
+ | block@Raw.BlockClaim{} <- blocks
+ ]
+ proof <- sole "omitted proof"
+ [ sourceProof
+ | Raw.BlockProof _location sourceProof _end <- blocks
+ ]
+ outcome <-
+ Declaration.runModuleDriver
+ foundation
+ preludeModuleName
+ []
+ unusedResolver
+ Declaration.FreshValidation do
+ ExactProof.prepareExactProof claim (Just proof)
+ >>= either Declaration.failModuleDriver pure
+ case outcome of
+ Right (Declaration.DriverSucceeded
+ prepared _semantic prefix _closure) -> do
+ location <-
+ maybe
+ (assertFailure "prepared omitted proof lost its location")
+ pure
+ (ExactProof.preparedExactProofFirstOmission prepared)
+ assertEqual "omitted source line" 5 (locLine location)
+ assertBool "preparation publishes no declaration"
+ (null (Declaration.pendingModulePrefixBatches prefix))
+ Right (Declaration.DriverFailed failure _prefix) ->
+ assertFailure ("omitted preparation failed: " <> show failure)
+ Right (Declaration.DriverSealFailed failure _prefix) ->
+ assertFailure ("omitted preparation did not seal: " <> show failure)
+ Left failure ->
+ assertFailure ("omitted preparation did not open: " <> show failure)
+
coalescesSharedDirectSyntax :: Assertion
coalescesSharedDirectSyntax = do
foundation <- expectRight Foundation.checkedFoundation