mirror of
https://github.com/danneu/html-parser.git
synced 2024-11-22 11:02:29 +03:00
78 lines
2.0 KiB
Elm
78 lines
2.0 KiB
Elm
|
module ParserExtraTests exposing (..)
|
||
|
|
||
|
{- Here are test our parser helpers / higher order parsers so that
|
||
|
we can track down bugs caused by them rather than leaving them mingled with the
|
||
|
main library logic.
|
||
|
-}
|
||
|
|
||
|
import Expect exposing (Expectation)
|
||
|
import Html.Parser exposing (Document, Node(..))
|
||
|
import Parser exposing (..)
|
||
|
import Parser.Extra exposing (..)
|
||
|
import Test exposing (..)
|
||
|
|
||
|
|
||
|
eq : String -> String -> Parser a -> Result (List DeadEnd) a -> Test
|
||
|
eq name input parser expected =
|
||
|
test (name ++ ": " ++ input) <|
|
||
|
\_ ->
|
||
|
let
|
||
|
actual =
|
||
|
Parser.run parser input
|
||
|
in
|
||
|
Expect.equal actual expected
|
||
|
|
||
|
|
||
|
err : String -> String -> Parser a -> Test
|
||
|
err name input parser =
|
||
|
test (name ++ ": " ++ input) <|
|
||
|
\_ ->
|
||
|
let
|
||
|
actual =
|
||
|
Parser.run parser input
|
||
|
in
|
||
|
Expect.err actual
|
||
|
|
||
|
|
||
|
caseInsensitiveTokenTests =
|
||
|
let
|
||
|
parser =
|
||
|
succeed ()
|
||
|
|. caseInsensitiveToken "eEe"
|
||
|
|. end
|
||
|
in
|
||
|
describe "caseInsensitiveToken"
|
||
|
[ eq "basic1" "eee" parser (Ok ())
|
||
|
, eq "basic2" "EEE" parser (Ok ())
|
||
|
, err "expect end" "eeE xyz" parser
|
||
|
, err "basic4" "nope" parser
|
||
|
, eq "can orig case with getChompedString"
|
||
|
"Eee"
|
||
|
(parser |> getChompedString)
|
||
|
(Ok "Eee")
|
||
|
]
|
||
|
|
||
|
|
||
|
chompUntilLookAheadTests =
|
||
|
let
|
||
|
parser =
|
||
|
chompUntilLookAhead (\c -> c /= 'x') (token "xxx")
|
||
|
|> getChompedString
|
||
|
in
|
||
|
describe "chompUntilLookAhead"
|
||
|
[ eq "" "abcxxx" parser (Ok "abc")
|
||
|
, err "requires at least one char consumed"
|
||
|
"xxx"
|
||
|
parser
|
||
|
, eq "unconsumes"
|
||
|
"abcxxx"
|
||
|
(succeed Tuple.pair
|
||
|
|= parser
|
||
|
|= (token "x" |> getChompedString)
|
||
|
|. token "x"
|
||
|
|. token "x"
|
||
|
|. end
|
||
|
)
|
||
|
(Ok ( "abc", "x" ))
|
||
|
]
|