From ad2e8ac9f3d80260fb352c5e7d87dad4387ebf7a Mon Sep 17 00:00:00 2001 From: Jimmy Byrd Date: Tue, 5 Sep 2023 23:06:46 -0400 Subject: [PATCH] Fixes Expecto Theory AST traversal --- src/FsAutoComplete.Core/TestAdapter.fs | 32 ++++++++++++------- .../TestCases/ExpectoTests/Sample.fs | 10 +++--- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/FsAutoComplete.Core/TestAdapter.fs b/src/FsAutoComplete.Core/TestAdapter.fs index 840855223..cfe6b40ec 100644 --- a/src/FsAutoComplete.Core/TestAdapter.fs +++ b/src/FsAutoComplete.Core/TestAdapter.fs @@ -100,6 +100,25 @@ let getExpectoTests (ast: ParsedInput) : TestAdapterEntry list = else NotExpecto | _ -> NotExpecto + let (|FindTestCases|_|) expr = + match expr with + | SynExpr.App( + funcExpr = SynExpr.App( + funcExpr = SynExpr.App(funcExpr = expr1; argExpr = SynExpr.Const(constant = SynConst.String(text = s))))) + | SynExpr.App( + argExpr = SynExpr.App( + funcExpr = SynExpr.App(funcExpr = expr1; argExpr = SynExpr.Const(constant = SynConst.String(text = s))))) + | SynExpr.App( + funcExpr = SynExpr.App(funcExpr = expr1); argExpr = SynExpr.Const(constant = SynConst.String(text = s))) + | SynExpr.App( + funcExpr = SynExpr.App(funcExpr = SynExpr.App(funcExpr = expr1)) + argExpr = SynExpr.Const(constant = SynConst.String(text = s))) + | SynExpr.App( + funcExpr = SynExpr.App(funcExpr = SynExpr.App(funcExpr = SynExpr.App(funcExpr = expr1))) + argExpr = SynExpr.Const(constant = SynConst.String(text = s))) + | SynExpr.App(funcExpr = expr1; argExpr = SynExpr.Const(constant = SynConst.String(text = s))) -> Some (expr1, s) + | _ -> None + let rec visitExpr (parent: TestAdapterEntry) = function | SynExpr.App(_, _, SynExpr.App(_, _, expr1, SynExpr.Const(SynConst.String(text = s), _), range), expr2, _) -> @@ -139,18 +158,7 @@ let getExpectoTests (ast: ParsedInput) : TestAdapterEntry list = | _ -> visitExpr parent expr1 visitExpr parent expr2 - | SynExpr.App(_, _, SynExpr.App(_, _, expr1, _, _range), SynExpr.Const(SynConst.String(text = s), _), _) - | SynExpr.App(_, - _, - SynExpr.App(_, _, SynExpr.App(_, _, expr1, _, _range), _, _), - SynExpr.Const(SynConst.String(text = s), _), - _) - | SynExpr.App(_, - _, - SynExpr.App(_, _, SynExpr.App(_, _, SynExpr.App(_, _, expr1, _, _range), _, _), _, _), - SynExpr.Const(SynConst.String(text = s), _), - _) - | SynExpr.App(_, _, expr1, SynExpr.Const(SynConst.String(text = s), _), _range) -> //Take those applications that are using string constant as an argument + | FindTestCases (expr1, s) -> //Take those applications that are using string constant as an argument match expr1 with | Case -> ident <- ident + 1 diff --git a/test/FsAutoComplete.Tests.Lsp/TestCases/ExpectoTests/Sample.fs b/test/FsAutoComplete.Tests.Lsp/TestCases/ExpectoTests/Sample.fs index 1f608c9ab..3f1c27766 100644 --- a/test/FsAutoComplete.Tests.Lsp/TestCases/ExpectoTests/Sample.fs +++ b/test/FsAutoComplete.Tests.Lsp/TestCases/ExpectoTests/Sample.fs @@ -44,16 +44,14 @@ let tests = Expect.equal 4 (2+2) "2+2" } - testTheory "odd numbers" [1; 3; 5] <| fun x -> - Expect.isTrue (x % 2 = 1) "should be odd" + testTheory "odd numbers" [1; 3; 5] ( fun x -> + Expect.isTrue (x % 2 = 1) "should be odd" ) - testTheoryAsync "async even numbers" [2; 4; 6] <| fun x -> async { + testTheoryAsync "async even numbers" [2; 4; 6] ( fun x -> async { Expect.isTrue (x % 2 = 0) "should be even" - } + }) testTheoryTask "task odd numbers" [1; 3; 5;] <| fun x -> task { Expect.isTrue (x % 2 = 1) "should be odd" } - - ]