diff --git a/test/Package.hs b/test/Package.hs index 1d5eebce0a..71496f6a3b 100644 --- a/test/Package.hs +++ b/test/Package.hs @@ -5,6 +5,7 @@ where import Base import Package.Negative qualified as N +import Package.Positive qualified as P allTests :: TestTree -allTests = testGroup "Package loading tests" [N.allTests] +allTests = testGroup "Package loading tests" [N.allTests, P.allTests] diff --git a/test/Package/Positive.hs b/test/Package/Positive.hs new file mode 100644 index 0000000000..e4cd7a49d4 --- /dev/null +++ b/test/Package/Positive.hs @@ -0,0 +1,62 @@ +module Package.Positive where + +import Base +import Juvix.Compiler.Pipeline.Package + +type FailMsg = String + +data PosTest = PosTest + { _name :: String, + _relDir :: Path Rel Dir, + _checkPackage :: Package -> BuildDir -> Maybe FailMsg + } + +root :: Path Abs Dir +root = relToProject $(mkRelDir "tests/positive/PackageLoader") + +testDescr :: PosTest -> TestDescr +testDescr PosTest {..} = + let tRoot = root _relDir + in TestDescr + { _testName = _name, + _testRoot = tRoot, + _testAssertion = Single $ do + withTempDir' $ \d -> do + let buildDir = CustomBuildDir (Abs d) + res <- runM . runError @JuvixError . runFilesIO . readPackage tRoot $ buildDir + case res of + Right p -> whenJust (_checkPackage p buildDir) assertFailure + Left {} -> assertFailure "An error ocurred when reading the package." + } + +allTests :: TestTree +allTests = + testGroup + "Package loading positive tests" + ( map (mkTest . testDescr) packageLoadingTests + ) + +packageLoadingTests :: [PosTest] +packageLoadingTests = + [ + PosTest + "empty YAML is valid" + $(mkRelDir "YamlEmpty") + $ \p _ -> if + | p ^. packageName == defaultPackageName -> Nothing + | otherwise -> Just "Package did not have default name", + PosTest + "no dependencies uses default stdlib" + $(mkRelDir "YamlNoDependencies") + $ \p b -> case p ^? packageDependencies . _head of + Just d -> if + | d == defaultStdlibDep b -> Nothing + | otherwise -> Just "Package dependency is not the default standard library" + _ -> Just "The package has no dependencies", + PosTest + "empty dependencies does not use default stdlib" + $(mkRelDir "YamlEmptyDependencies") + $ \p _ -> if + | null (p ^. packageDependencies) -> Nothing + | otherwise -> Just "Expected dependencies to be empty" + ] diff --git a/tests/positive/PackageLoader/YamlEmpty/juvix.yaml b/tests/positive/PackageLoader/YamlEmpty/juvix.yaml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/positive/PackageLoader/YamlEmptyDependencies/juvix.yaml b/tests/positive/PackageLoader/YamlEmptyDependencies/juvix.yaml new file mode 100644 index 0000000000..f6637dfb49 --- /dev/null +++ b/tests/positive/PackageLoader/YamlEmptyDependencies/juvix.yaml @@ -0,0 +1,2 @@ +name: abc +dependencies: [] diff --git a/tests/positive/PackageLoader/YamlNoDependencies/juvix.yaml b/tests/positive/PackageLoader/YamlNoDependencies/juvix.yaml new file mode 100644 index 0000000000..a1eaae409a --- /dev/null +++ b/tests/positive/PackageLoader/YamlNoDependencies/juvix.yaml @@ -0,0 +1 @@ +name: abc