From ba0faa8bfaf5743adc9885e2f63338b2da70653c Mon Sep 17 00:00:00 2001 From: Paul Cadman Date: Fri, 20 Oct 2023 13:33:43 +0100 Subject: [PATCH] Add negative Package loading tests --- test/Main.hs | 4 +- test/Package.hs | 10 +++ test/Package/Negative.hs | 68 +++++++++++++++++++ .../Package/InvalidLockfile/juvix.lock.yaml | 1 + .../Package/InvalidLockfile/juvix.yaml | 0 .../YamlDuplicateDependencies/juvix.yaml | 10 +++ .../Package/YamlInvalidVersion/juvix.yaml | 2 + .../Package/YamlParseError/juvix.yaml | 1 + 8 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 test/Package.hs create mode 100644 test/Package/Negative.hs create mode 100644 tests/negative/Package/InvalidLockfile/juvix.lock.yaml create mode 100644 tests/negative/Package/InvalidLockfile/juvix.yaml create mode 100644 tests/negative/Package/YamlDuplicateDependencies/juvix.yaml create mode 100644 tests/negative/Package/YamlInvalidVersion/juvix.yaml create mode 100644 tests/negative/Package/YamlParseError/juvix.yaml diff --git a/test/Main.hs b/test/Main.hs index ce3e4fa03e..74153c3e99 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -10,6 +10,7 @@ import Examples qualified import Format qualified import Formatter qualified import Internal qualified +import Package qualified import Parsing qualified import Reachability qualified import Runtime qualified @@ -43,7 +44,8 @@ fastTests = Typecheck.allTests, Reachability.allTests, Format.allTests, - Formatter.allTests + Formatter.allTests, + Package.allTests ] main :: IO () diff --git a/test/Package.hs b/test/Package.hs new file mode 100644 index 0000000000..1d5eebce0a --- /dev/null +++ b/test/Package.hs @@ -0,0 +1,10 @@ +module Package + ( allTests, + ) +where + +import Base +import Package.Negative qualified as N + +allTests :: TestTree +allTests = testGroup "Package loading tests" [N.allTests] diff --git a/test/Package/Negative.hs b/test/Package/Negative.hs new file mode 100644 index 0000000000..9d17497c90 --- /dev/null +++ b/test/Package/Negative.hs @@ -0,0 +1,68 @@ +module Package.Negative where + +import Base +import Juvix.Compiler.Pipeline.Package +import Juvix.Compiler.Pipeline.Package.Loader.Error + +type FailMsg = String + +data NegTest a = NegTest + { _name :: String, + _relDir :: Path Rel Dir, + _checkErr :: a -> Maybe FailMsg + } + +root :: Path Abs Dir +root = relToProject $(mkRelDir "tests/negative/Package") + +testDescr :: (Typeable a) => NegTest a -> TestDescr +testDescr NegTest {..} = + let tRoot = root _relDir + in TestDescr + { _testName = _name, + _testRoot = tRoot, + _testAssertion = Single $ do + res <- withTempDir' (runM . runError . runFilesIO . readPackage tRoot . CustomBuildDir . Abs) + case mapLeft fromJuvixError res of + Left (Just err) -> whenJust (_checkErr err) assertFailure + Left Nothing -> assertFailure "An error ocurred but it was not when reading the package." + Right {} -> assertFailure "There was no error when reading the package" + } + +allTests :: TestTree +allTests = + testGroup + "Package loading negative tests" + ( map (mkTest . testDescr) packageErrorTests + ) + +wrongError :: Maybe FailMsg +wrongError = Just "Incorrect error" + +packageErrorTests :: [NegTest PackageLoaderError] +packageErrorTests = + [ NegTest + "package YAML parse error" + $(mkRelDir "YamlParseError") + $ \case + PackageLoaderError _ ErrPackageYamlParseError {} -> Nothing + _ -> wrongError, + NegTest + "lockfile YAML parse error" + $(mkRelDir "InvalidLockfile") + $ \case + PackageLoaderError _ ErrLockfileYamlParseError {} -> Nothing + _ -> wrongError, + NegTest + "package YAML invalid version" + $(mkRelDir "YamlInvalidVersion") + $ \case + PackageLoaderError _ ErrVersionParseError {} -> Nothing + _ -> wrongError, + NegTest + "package YAML duplicate dependencies" + $(mkRelDir "YamlDuplicateDependencies") + $ \case + PackageLoaderError _ ErrDuplicateDependencyError {} -> Nothing + _ -> wrongError + ] diff --git a/tests/negative/Package/InvalidLockfile/juvix.lock.yaml b/tests/negative/Package/InvalidLockfile/juvix.lock.yaml new file mode 100644 index 0000000000..846803f036 --- /dev/null +++ b/tests/negative/Package/InvalidLockfile/juvix.lock.yaml @@ -0,0 +1 @@ +dependencies: 123 diff --git a/tests/negative/Package/InvalidLockfile/juvix.yaml b/tests/negative/Package/InvalidLockfile/juvix.yaml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/negative/Package/YamlDuplicateDependencies/juvix.yaml b/tests/negative/Package/YamlDuplicateDependencies/juvix.yaml new file mode 100644 index 0000000000..864845c2e3 --- /dev/null +++ b/tests/negative/Package/YamlDuplicateDependencies/juvix.yaml @@ -0,0 +1,10 @@ +name: abc +dependencies: + - git: + url: repo + name: dep + ref: abc + - git: + url: repo + name: dep + ref: abc diff --git a/tests/negative/Package/YamlInvalidVersion/juvix.yaml b/tests/negative/Package/YamlInvalidVersion/juvix.yaml new file mode 100644 index 0000000000..ac8223db55 --- /dev/null +++ b/tests/negative/Package/YamlInvalidVersion/juvix.yaml @@ -0,0 +1,2 @@ +name: abc +version: def diff --git a/tests/negative/Package/YamlParseError/juvix.yaml b/tests/negative/Package/YamlParseError/juvix.yaml new file mode 100644 index 0000000000..cf6586294e --- /dev/null +++ b/tests/negative/Package/YamlParseError/juvix.yaml @@ -0,0 +1 @@ +name: 123