| import Lean.Meta | |
| import Lean.Elab | |
| import LSpec | |
| import Test.Common | |
| open Lean | |
| namespace Pantograph.Test.Tactic.Assign | |
| def test_draft : TestT Elab.TermElabM Unit := do | |
| let expr := "forall (p : Prop), (p β¨ p) β¨ p" | |
| let skeleton := "by\nhave a : p β¨ p := sorry\nsorry" | |
| let expr β parseSentence expr | |
| Meta.forallTelescope expr $ Ξ» _ body => do | |
| let skeleton' β match Parser.runParserCategory | |
| (env := β MonadEnv.getEnv) | |
| (catName := `term) | |
| (input := skeleton) | |
| (fileName := β getFileName) with | |
| | .ok syn => pure syn | |
| | .error error => throwError "Failed to parse: {error}" | |
| -- Apply the tactic | |
| let target β Meta.mkFreshExprSyntheticOpaqueMVar body | |
| let tactic := Tactic.evalDraft skeleton' | |
| let newGoals β runTacticOnMVar tactic target.mvarId! | |
| addTest $ LSpec.check "goals" ((β newGoals.mapM (Ξ» g => do exprToStr (β g.getType))) = ["p β¨ p", "(p β¨ p) β¨ p"]) | |
| def suite (env: Environment): List (String Γ IO LSpec.TestSeq) := | |
| [ | |
| ("draft", test_draft), | |
| ] |>.map (Ξ» (name, t) => (name, runTestTermElabM env t)) | |