Tests.hs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. module Interactive.Tests where
  2. import Data.Foldable
  3. import Data.Text (Text)
  4. import qualified Data.Text as Text
  5. import qualified Data.Text.IO as TIO
  6. import Test.Tasty
  7. import Test.Tasty.HUnit
  8. import System.Directory
  9. import System.FilePath
  10. import System.Exit
  11. import Agda.Utils.Monad
  12. import Utils
  13. testDir :: FilePath
  14. testDir = "test" </> "Interactive"
  15. tests :: TestTree
  16. tests = testGroup "Interactive"
  17. [ testCase "Issue1430" $ do
  18. runAgda ["--no-libraries", testDir </> "Issue1430.agda"] "Issue1430"
  19. , bareTest "Naked"
  20. , bareTest "Load"
  21. ]
  22. where
  23. bareTest name = testCase name $ runAgda ["--no-libraries"] name
  24. agdaArgs = [ "-I", "-i.", "-i..", "-itest/Interactive", "--ignore-interfaces" ]
  25. runAgda :: [String] -> FilePath -> IO ()
  26. runAgda extraArgs testName = do
  27. inp <- TIO.readFile (testDir </> testName <.> "in")
  28. ret@(c, stdout, stderr) <- readAgdaProcessWithExitCode (agdaArgs ++ extraArgs) inp
  29. assertBool ("Agda returned error code: " ++ show ret) (c == ExitSuccess)
  30. let stdoutFp = testDir </> testName <.> "stdout" <.> "expected"
  31. stderrFp = testDir </> testName <.> "stderr" <.> "expected"
  32. -- Check that every line in testName.stdout.expected (if exists) is a substring of stdout. Same for stderr.
  33. whenM (doesFileExist $ testDir </> testName <.> "stdout" <.> "expected") $ do
  34. expected <- TIO.readFile stdoutFp
  35. for_ (Text.lines expected) $
  36. assertBool ("Invalid stdout: " ++ show stdout) . (`Text.isInfixOf` stdout)
  37. whenM (doesFileExist $ testDir </> testName <.> "stderr" <.> "expected") $ do
  38. expected <- TIO.readFile stderrFp
  39. for_ (Text.lines expected) $
  40. assertBool ("Invalid stderr: " ++ show stderr) . (`Text.isInfixOf` stderr)