summaryrefslogtreecommitdiff
path: root/source/Test/Unit/Migration.hs
diff options
context:
space:
mode:
Diffstat (limited to 'source/Test/Unit/Migration.hs')
-rw-r--r--source/Test/Unit/Migration.hs161
1 files changed, 0 insertions, 161 deletions
diff --git a/source/Test/Unit/Migration.hs b/source/Test/Unit/Migration.hs
deleted file mode 100644
index d9042cc..0000000
--- a/source/Test/Unit/Migration.hs
+++ /dev/null
@@ -1,161 +0,0 @@
-{-# LANGUAGE NoImplicitPrelude #-}
-
-module Test.Unit.Migration (unitTests) where
-
-import Base
-import Felix.Migration
-import Felix.Parse qualified as Parse
-import Felix.Prelude qualified as Prelude
-import Felix.Source
-import Syntax.Interface qualified as Syntax
-
-import System.Directory (getCurrentDirectory)
-import System.FilePath.Posix qualified as Posix
-import Test.Tasty
-import Test.Tasty.HUnit
-
-
-unitTests :: TestTree
-unitTests =
- testGroup "Migration manifest"
- [ testCase "resolves references from prepared mount roots"
- resolvesManifestReferences
- , testCase "selects one driver for the complete graph"
- selectsCompleteGraphDriver
- ]
-
-resolvesManifestReferences :: Assertion
-resolvesManifestReferences = do
- mounts <-
- expectRight
- =<< prepareSourceMounts
- [ (sourceMountId "project", "/tmp/felix-project")
- , (sourceMountId "library", "/tmp/felix-library")
- , (sourceMountId "debug", "/tmp/felix-debug")
- ]
- forM_
- (toList activeMigrationRoots
- <> toList protectedMigrationModules
- <> toList phase53LibraryMigrationModules)
- \reference -> do
- assertEqual
- "manifest role"
- MigrationLibrary
- (migrationModuleRefRole reference)
- candidate <-
- expectRight
- (migrationModuleCandidatePath mounts reference)
- assertEqual
- "mount-relative candidate"
- ("/tmp/felix-library"
- Posix.</> safeRelativePathFilePath
- (migrationModuleRefPath reference))
- candidate
- forM_ (toList typedMigrationModules) \reference ->
- assertEqual
- "typed module mount role"
- (if reference `elem`
- (toList protectedMigrationModules
- <> toList phase53LibraryMigrationModules)
- then MigrationLibrary
- else MigrationProject)
- (migrationModuleRefRole reference)
-
-selectsCompleteGraphDriver :: Assertion
-selectsCompleteGraphDriver = do
- root <- getCurrentDirectory
- mounts <-
- expectRight
- =<< prepareSourceMounts
- [ (sourceMountId "project", root)
- , (sourceMountId "library", root Posix.</> "library")
- , (sourceMountId "debug", root Posix.</> "debug")
- ]
- selection <-
- expectRight
- (resolveMigrationSelection mounts typedMigrationModules)
- reserved <-
- expectRight
- =<< Prelude.parseReservedPreludeSource
- Prelude.emptyBootstrapSourceInput
- let bootstrapSyntax =
- Parse.identifiedParsedModuleSyntaxInterface
- (Prelude.reservedParsedPreludeModule reserved)
- syntaxInputs source
- | migrationSelectionContains selection source =
- [bootstrapSyntax]
- | otherwise = []
- parseRoot path = do
- request <- expectRight (searchedRoot path)
- Parse.parseSourceWorkspaceMeasuredWithSyntaxInputs
- mounts request syntaxInputs
- (producer, _producerMeasurements) <-
- expectRight
- =<< parseRoot "test/phase3/typed-producer.tex"
- assertEqual "selected root uses typed driver"
- TypedMigrationGraph
- (classifyMigrationGraph selection producer)
- assertEqual "selected parse receives the bootstrap syntax input"
- [Syntax.moduleSyntaxAssertedId bootstrapSyntax]
- (Syntax.moduleSyntaxDirectInputs
- (Parse.parsedModuleSyntaxInterface
- (Parse.parsedWorkspaceRootModule producer)))
- (importer, _importerMeasurements) <-
- expectRight
- =<< parseRoot "test/phase3/legacy-importer.tex"
- assertEqual "unselected importer keeps the complete graph legacy"
- LegacyMigrationGraph
- (classifyMigrationGraph selection importer)
- forM_
- [ ( "set/bipartition.tex"
- , ["set.tex", "set/cons.tex", "set/powerset.tex"]
- )
- , ("set/product.tex", ["set.tex"])
- , ("set/filter.tex", ["set.tex", "set/powerset.tex"])
- , ( "relation.tex"
- , ["set.tex", "set/powerset.tex", "set/product.tex"]
- )
- , ( "relation/properties.tex"
- , ["set.tex", "relation.tex"]
- )
- , ( "relation/uniqueness.tex"
- , ["set.tex", "relation.tex"]
- )
- , ( "function.tex"
- , ["set.tex", "relation.tex", "relation/uniqueness.tex"]
- )
- , ( "set/cantor.tex"
- , ["set/powerset.tex", "function.tex"]
- )
- , ( "set/fixpoint.tex"
- , ["set/powerset.tex", "function.tex"]
- )
- ]
- \(path, expectedImports) -> do
- (phase53, _phase53Measurements) <-
- expectRight =<< parseRoot path
- assertEqual
- (path <> " closure uses the typed driver")
- TypedMigrationGraph
- (classifyMigrationGraph selection phase53)
- assertEqual
- (path <> " direct imports")
- expectedImports
- [ safeRelativePathFilePath
- (sourceAddressRelativePath
- (Parse.parsedImportedAddress imported))
- | imported <- Parse.parsedModuleImports
- (Parse.parsedWorkspaceRootModule phase53)
- ]
- (functionImporter, _functionMeasurements) <-
- expectRight =<< parseRoot "set/equinumerosity.tex"
- assertEqual "unselected function importer remains legacy"
- LegacyMigrationGraph
- (classifyMigrationGraph selection functionImporter)
-
-expectRight :: Show err => Either err value -> IO value
-expectRight = \case
- Left err ->
- assertFailure (show err) >> fail "unreachable"
- Right value ->
- pure value