Add kitchen sink parse/encode unit test

This also includes the fixes to make it work. Golden tests have been
removed.
This commit is contained in:
Danny Navarro
2015-09-22 13:53:37 +02:00
parent 4508364266
commit 06b3302862
7 changed files with 49 additions and 56 deletions

View File

@ -14,7 +14,6 @@ import Data.Char
import Data.Foldable (traverse_)
import Data.Text (Text, append)
import qualified Data.Text as T
import Data.Attoparsec.Text
( Parser
, (<?>)
@ -29,7 +28,6 @@ import Data.Attoparsec.Text
, peekChar
, sepBy1
, signed
, takeText
, takeWhile
, takeWhile1
)
@ -170,15 +168,9 @@ booleanValue :: Parser Bool
booleanValue = True <$ tok "true"
<|> False <$ tok "false"
-- TODO: Escape characters. Look at `jsstring_` in aeson package.
stringValue :: Parser StringValue
stringValue = StringValue <$> quotes (T.foldl' step mempty <$> takeText)
where
-- TODO: Handle unicode and the rest of escaped chars.
step acc c
| T.null acc = T.singleton c
| T.last acc == '\\' = if c == '"' then T.init acc `T.snoc` '"'
else acc `T.snoc` c
| otherwise = acc `T.snoc` c
stringValue = StringValue <$> quotes (takeWhile (/= '"'))
-- Notice it can be empty
listValue :: Parser ListValue
@ -205,9 +197,9 @@ directive = Directive
-- * Type Reference
type_ :: Parser Type
type_ = TypeNamed <$> namedType
<|> TypeList <$> listType
type_ = TypeList <$> listType
<|> TypeNonNull <$> nonNullType
<|> TypeNamed <$> namedType
<?> "type_ error!"
namedType :: Parser NamedType

View File

@ -10,8 +10,9 @@ import Data.GraphQL.AST
-- * Document
-- TODO: Use query shorthand
document :: Document -> Text
document (Document defs) = mconcat $ definition <$> defs
document (Document defs) = (`snoc` '\n') . mconcat $ definition <$> defs
definition :: Definition -> Text
definition (DefinitionOperation x) = operationDefinition x
@ -102,7 +103,7 @@ booleanValue False = "false"
-- TODO: Escape characters
stringValue :: StringValue -> Text
stringValue (StringValue x) = x
stringValue (StringValue v) = quotes v
listValue :: ListValue -> Text
listValue (ListValue vs) = bracketsCommas value vs
@ -222,6 +223,9 @@ brackets = between '[' ']'
braces :: Text -> Text
braces = between '{' '}'
quotes :: Text -> Text
quotes = between '"' '"'
spaces :: (a -> Text) -> [a] -> Text
spaces f = intercalate "\SP" . fmap f