| import Test.Delate |
| import Test.Environment |
| import Test.Frontend |
| import Test.Integration |
| import Test.Library |
| import Test.Metavar |
| import Test.Parser |
| import Test.Proofs |
| import Test.Serial |
| import Test.Tactic |
|
|
| import LSpec |
|
|
| |
|
|
| namespace Pantograph.Test |
|
|
| def addPrefix (pref: String) (tests: List (String × α)): List (String × α) := |
| tests.map (λ (name, x) => (pref ++ "/" ++ name, x)) |
|
|
| abbrev TestTask := Task (Except IO.Error LSpec.TestSeq) |
| def filterTestGroup (tests : List (String × IO LSpec.TestSeq)) (nameFilter? : Option String) |
| : IO (List (String × TestTask)) := do |
| let tests : List (String × IO LSpec.TestSeq) := match nameFilter? with |
| | .some nameFilter => tests.filter (λ (name, _) => nameFilter.isPrefixOf name) |
| | .none => tests |
| tests.mapM λ (name, t) => return (name, ← IO.asTask t) |
|
|
| / |
| def runTestTask (t : (String × TestTask)) : IO LSpec.TestSeq := do |
| let (name, task) := t |
| let v: Except IO.Error LSpec.TestSeq := task.get |
| return match v with |
| | .ok case => LSpec.group name case |
| | .error e => expectationFailure name e.toString |
|
|
| end Pantograph.Test |
|
|
| open Pantograph.Test |
|
|
| / |
| def main (args: List String) := do |
| let nameFilter? := args.head? |
| Lean.initSearchPath (← Lean.findSysroot) |
| let env_default : Lean.Environment ← Lean.importModules |
| (imports := #[`Init]) |
| (opts := {}) |
| (trustLevel := 1) |
| (loadExts := true) |
|
|
| let suites: List (String × (Lean.Environment → List (String × IO LSpec.TestSeq))) := [ |
| ("Environment", Environment.suite), |
| ("Frontend/Collect", Frontend.Collect.suite), |
| ("Frontend/Distil", Frontend.Distil.suite), |
| ("Frontend/Refactor", Frontend.Refactor.suite), |
| ("Integration", Integration.suite), |
| ("Library", Library.suite), |
| ("Metavar", Metavar.suite), |
| ("Parser", Parser.suite), |
| ("Proofs", Proofs.suite), |
| ("Delate", Delate.suite), |
| ("Serial", Serial.suite), |
| ("Tactic/Assign", Tactic.Assign.suite), |
| ("Tactic/Fragment", Tactic.Fragment.suite), |
| ("Tactic/Prograde", Tactic.Prograde.suite), |
| ] |
| let suiterunner (f : Lean.Environment → List (String × IO LSpec.TestSeq)) := |
| f env_default |
| let tests : List (String × IO LSpec.TestSeq) := suites.foldl (init := []) λ acc (name, suite) => |
| acc ++ (addPrefix name $ suiterunner suite) |
| LSpec.lspecEachIO (← filterTestGroup tests nameFilter?) runTestTask |
|
|