File size: 1,101 Bytes
0115dcf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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))
|