module babybearparser.Testing
open FParsec
open Microsoft.VisualStudio.TestTools.UnitTesting
open System
open babybearparser.Parser
let equals actual expected = Assert.IsTrue ((actual = expected), String.Format("{0} <> {1}", actual, expected))
let throwsParseError (f: unit -> unit) contains =
try
f(); Assert.Fail ("throws: no exception thrown of type ParseError")
with
| ParseError(x) -> Assert.IsTrue (x.Contains(contains), String.Format("{0} does not contain {1}", x, contains))
[<TestClass>]
type public Tests () =
(* Tests that testing works *)
[<TestMethod>]
member this.TestsWorking() =
equals 1 1
[<TestMethod>]
member this.TestsKeywords() =
equals (parse "foo bar") [KeywordAtom <| Word "foo"; KeywordAtom <| Word "bar"]
[<TestMethod>]
member this.TestsEmpty() =
equals (List.length <| parse "") 0
[<TestMethod>]
member this.TestsPhrase() =
equals (parse "\"foo \\\" bar\"") [KeywordAtom <| Phrase "foo \" bar"]
[<TestMethod>]
member this.TestsPhraseAndKeyword() =
equals (parse "\"foo bar\" boo") [KeywordAtom <| Phrase "foo bar"; KeywordAtom <| Word "boo"]
[<TestMethod>]
member this.TestsFilter() =
equals (parse "\"foo bar\" project:boo") [KeywordAtom <| Phrase "foo bar"; FilterAtom <| Project "boo"]
[<TestMethod>]
member this.TestsFilters() =
equals (parse "\"foo bar\" project:boo repo:radley") [KeywordAtom <| Phrase "foo bar"; FilterAtom <| Project "boo"; FilterAtom <| Repo "radley"]
[<TestMethod>]
member this.TestsFilterPhrase() =
equals (parse "\"foo bar\" project:\"boo radley\"") [KeywordAtom <| Phrase "foo bar"; FilterAtom <| Project "boo radley"]
[<TestMethod>]
member this.TestsEmptyFilter() =
equals (parse "\"foo bar\" project:\"\"") [KeywordAtom <| Phrase "foo bar"; FilterAtom <| Project ""]
[<TestMethod>]
member this.TestsConfusingFilter() =
equals (parse ":taft:") [KeywordAtom <| Word ":taft:"]
[<TestMethod>]
member this.TestsMissingFilter() =
let f () = parse "\"foo bar\" project:" |> ignore
throwsParseError f "filter argument"
[<TestMethod>]
member this.TestsUnknownFilter() =
equals (parse "unknown:careless") [KeywordAtom <| Word "unknown:careless"]
|
Loading...