Skip to content

Commit

Permalink
Add negative Package loading tests
Browse files Browse the repository at this point in the history
  • Loading branch information
paulcadman committed Oct 23, 2023
1 parent 559e0f2 commit ba0faa8
Show file tree
Hide file tree
Showing 8 changed files with 95 additions and 1 deletion.
4 changes: 3 additions & 1 deletion test/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -43,7 +44,8 @@ fastTests =
Typecheck.allTests,
Reachability.allTests,
Format.allTests,
Formatter.allTests
Formatter.allTests,
Package.allTests
]

main :: IO ()
Expand Down
10 changes: 10 additions & 0 deletions test/Package.hs
Original file line number Diff line number Diff line change
@@ -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]
68 changes: 68 additions & 0 deletions test/Package/Negative.hs
Original file line number Diff line number Diff line change
@@ -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
]
1 change: 1 addition & 0 deletions tests/negative/Package/InvalidLockfile/juvix.lock.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dependencies: 123
Empty file.
10 changes: 10 additions & 0 deletions tests/negative/Package/YamlDuplicateDependencies/juvix.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
name: abc
dependencies:
- git:
url: repo
name: dep
ref: abc
- git:
url: repo
name: dep
ref: abc
2 changes: 2 additions & 0 deletions tests/negative/Package/YamlInvalidVersion/juvix.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
name: abc
version: def
1 change: 1 addition & 0 deletions tests/negative/Package/YamlParseError/juvix.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
name: 123

0 comments on commit ba0faa8

Please sign in to comment.