hssqlppp-0.6.2: tests/Database/HsSqlPpp/Tests/Parsing/LexerTests.lhs
todo:
quickcheck:
generate random symbols
print then parse, check equal
generate random strings
try to parse, if parses, print and check equal to original string
> {-# LANGUAGE OverloadedStrings #-}
> module Database.HsSqlPpp.Tests.Parsing.LexerTests where
> import Database.HsSqlPpp.Lex
> --import Database.HsSqlPpp.Internals.Dialect
> import Database.HsSqlPpp.Tests.TestTypes
> import Database.HsSqlPpp.Dialect
> --import Database.HsSqlPpp.Tests.Parsing.Utils
> lexerTests :: Item
> lexerTests = Group "lexing"
> [Lex postgresDialect "'string'" [SqlString "'" "'" "string"]
> ,Lex postgresDialect "E'string\\n'" [SqlString "E'" "'" "string\\n"] -- the \\n is to put a literal \ and n in the string
> ,Lex postgresDialect "E'bsquoteend\\''" [SqlString "E'" "'" "bsquoteend\\'"]
> ,Lex postgresDialect "E'bsquote\\'xx'" [SqlString "E'" "'" "bsquote\\'xx"]
> ,Lex postgresDialect "E'quoteend'''" [SqlString "E'" "'" "quoteend''"]
> ,Lex postgresDialect "E'quote''x'" [SqlString "E'" "'" "quote''x"]
> ,Lex postgresDialect "'normal '' quote'" [SqlString "'" "'" "normal '' quote"]
> ,Lex postgresDialect "'normalendquote '''" [SqlString "'" "'" "normalendquote ''"]
> ,Lex postgresDialect "$$dollar quoting$$" [SqlString "$$" "$$" "dollar quoting"]
> ,Lex postgresDialect "$x$dollar $$ quoting$x$" [SqlString "$x$" "$x$" "dollar $$ quoting"]
identifiers
> ,Lex postgresDialect "test" [Identifier Nothing "test"]
> ,Lex postgresDialect "_test" [Identifier Nothing "_test"]
> ,Lex postgresDialect "\"test test\"" [Identifier (Just ("\"","\"")) "test test"]
> ,Lex postgresDialect "test123" [Identifier Nothing "test123"]
> ,Lex sqlServerDialect "[test \"]" [Identifier (Just ("[","]")) "test \""]
> ,Lex sqlServerDialect "@test" [PrefixedVariable '@' "test"]
> ,Lex sqlServerDialect "#test" [PrefixedVariable '#' "test"]
> ,Lex oracleDialect ":test" [PrefixedVariable ':' "test"]
symbols
> ,Lex postgresDialect "+" [Symbol "+"]
> ,Lex postgresDialect "*" [Symbol "*"]
numbers
> ,Lex postgresDialect "10" [SqlNumber "10"]
> ,Lex postgresDialect ".1" [SqlNumber ".1"]
> ,Lex postgresDialect "5e3" [SqlNumber "5e3"]
> ,Lex postgresDialect "5e+3" [SqlNumber "5e+3"]
> ,Lex postgresDialect "5e-3" [SqlNumber "5e-3"]
> ,Lex postgresDialect "10.2" [SqlNumber "10.2"]
> ,Lex postgresDialect "10.2e7" [SqlNumber "10.2e7"]
whitespace
> ,Lex postgresDialect " " [Whitespace " "]
> ,Lex postgresDialect " " [Whitespace " "]
> ,Lex postgresDialect "\n" [Whitespace "\n"]
> ,Lex postgresDialect "\t" [Whitespace "\t"]
check dots
> ,Lex postgresDialect "a.b" [Identifier Nothing "a"
> ,Symbol "."
> ,Identifier Nothing "b"]
positional arg
> ,Lex postgresDialect "$1" [PositionalArg 1]
line comment
> ,Lex postgresDialect "-- this is a comment\n" [LineComment "-- this is a comment\n"]
> -- check eof with no trailing newline
> ,Lex postgresDialect "-- this is a comment" [LineComment "-- this is a comment"]
block comment
> ,Lex postgresDialect "/* block\ncomment */" [BlockComment "/* block\ncomment */"]
> ,Lex postgresDialect "/* nested /*block*/ comment */" [BlockComment "/* nested /*block*/ comment */"]
splice
> ,Lex postgresDialect "$c(splice)" [Splice 'c' "splice"]
> ,Lex postgresDialect "1 .. 2"
> [SqlNumber "1", Whitespace " ", Symbol ".."
> ,Whitespace " ", SqlNumber "2"]
> ,Lex postgresDialect "1..2"
> [SqlNumber "1", Symbol "..", SqlNumber "2"]
> ]