platinum-parsing-0.1.0.0: test/PPTest/Grammars/Lexical.hs
module PPTest.Grammars.Lexical (specs) where
import PP
import PP.Grammars.Lexical
import Test.Hspec
specs = describe "PPTest.Grammars.Lexical" $ do
it "should parse a regular expression (any)" $
case parseAst "." :: To RegExpr of
Left e -> show e `shouldBe` "not an error"
Right o -> stringify o `shouldBe` "."
it "should parse a regular expression (value)" $
case parseAst "a" :: To RegExpr of
Left e -> show e `shouldBe` "not an error"
Right o -> stringify o `shouldBe` "a"
it "should parse a regular expression (class interval)" $
case parseAst "[a-z]" :: To RegExpr of
Left e -> show e `shouldBe` "not an error"
Right o -> stringify o `shouldBe` "[a-z]"
it "should parse a regular expression (class)" $
case parseAst "[a-z0-9.-]" :: To RegExpr of
Left e -> show e `shouldBe` "not an error"
Right o -> stringify o `shouldBe` "[a-z0-9.-]"
it "should parse a regular expression (group)" $
case parseAst "(a)" :: To RegExpr of
Left e -> show e `shouldBe` "not an error"
Right o -> stringify o `shouldBe` "(a)"
it "should parse a regular expression (option)" $
case parseAst "a?" :: To RegExpr of
Left e -> show e `shouldBe` "not an error"
Right o -> stringify o `shouldBe` "a?"
it "should parse a regular expression (many1)" $
case parseAst "a+" :: To RegExpr of
Left e -> show e `shouldBe` "not an error"
Right o -> stringify o `shouldBe` "a+"
it "should parse a regular expression (many0)" $
case parseAst "a*" :: To RegExpr of
Left e -> show e `shouldBe` "not an error"
Right o -> stringify o `shouldBe` "a*"
it "should parse a regular expression (choice)" $
case parseAst "abc" :: To RegExpr of
Left e -> show e `shouldBe` "not an error"
Right o -> stringify o `shouldBe` "abc"
it "should parse a regular expression (regexpr)" $
case parseAst "ab|cd" :: To RegExpr of
Left e -> show e `shouldBe` "not an error"
Right o -> stringify o `shouldBe` "ab|cd"
it "should parse a complex regular expression" $
case parseAst "(a*b)?|[a-z]+(a|[b-d])?|(a|(b|c))de|.|" :: To RegExpr of
Left e -> show e `shouldBe` "not an error"
Right o -> stringify o `shouldBe` "(a*b)?|[a-z]+(a|[b-d])?|(a|(b|c))de|.|"
it "should parse all meta symbols into class" $
case parseAst "[[][|][*][+][?][(][(][]][.]" :: To RegExpr of
Left e -> show e `shouldBe` "not an error"
Right o -> stringify o `shouldBe` "[[][|][*][+][?][(][(][]][.]"