diff options
Diffstat (limited to 'tests/Language/GraphQL')
| -rw-r--r-- | tests/Language/GraphQL/AST/Arbitrary.hs | 59 |
1 files changed, 31 insertions, 28 deletions
diff --git a/tests/Language/GraphQL/AST/Arbitrary.hs b/tests/Language/GraphQL/AST/Arbitrary.hs index 8d0544e..4f74bf3 100644 --- a/tests/Language/GraphQL/AST/Arbitrary.hs +++ b/tests/Language/GraphQL/AST/Arbitrary.hs @@ -7,6 +7,7 @@ import Test.QuickCheck.Arbitrary (Arbitrary (arbitrary)) import Test.QuickCheck (oneof, elements, listOf, resize, NonEmptyList (..)) import Test.QuickCheck.Gen (Gen (..)) import Data.Text (Text, pack) +import Data.Functor ((<&>)) newtype AnyPrintableChar = AnyPrintableChar { getAnyPrintableChar :: Char } deriving (Eq, Show) @@ -59,34 +60,36 @@ instance Arbitrary a => Arbitrary (AnyObjectField a) where location' <- getAnyLocation <$> arbitrary pure $ AnyObjectField $ Doc.ObjectField name' value' location' -newtype AnyValue = AnyValue { getAnyValue :: Doc.Value } deriving (Eq, Show) - -instance Arbitrary AnyValue where - arbitrary = AnyValue <$> oneof - [ variableGen - , Doc.Int <$> arbitrary - , Doc.Float <$> arbitrary - , Doc.String <$> (getAnyPrintableText <$> arbitrary) - , Doc.Boolean <$> arbitrary - , MkGen $ \_ _ -> Doc.Null - , Doc.Enum <$> (getAnyName <$> arbitrary) - , Doc.List <$> listGen - , Doc.Object <$> objectGen - ] - where - variableGen :: Gen Doc.Value - variableGen = Doc.Variable <$> (getAnyName <$> arbitrary) - listGen :: Gen [Doc.Node Doc.Value] - listGen = (resize 5 . listOf) nodeGen - nodeGen = do - node' <- getAnyNode <$> (arbitrary :: Gen (AnyNode AnyValue)) - pure (getAnyValue <$> node') - objectGen :: Gen [Doc.ObjectField Doc.Value] - objectGen = resize 1 $ do - list <- getNonEmpty <$> (arbitrary :: Gen (NonEmptyList (AnyObjectField AnyValue))) - pure $ map (fmap getAnyValue . getAnyObjectField) list - -newtype AnyArgument a = AnyArgument { getAnyArgument :: Doc.Argument } deriving (Eq, Show) +newtype AnyValue = AnyValue { getAnyValue :: Doc.Value } + deriving (Eq, Show) + +instance Arbitrary AnyValue + where + arbitrary = + let variableGen :: Gen Doc.Value + variableGen = Doc.Variable . getAnyName <$> arbitrary + listGen :: Gen [Doc.Node Doc.Value] + listGen = (resize 5 . listOf) nodeGen + nodeGen :: Gen (Doc.Node Doc.Value) + nodeGen = fmap getAnyNode arbitrary <&> fmap getAnyValue + objectGen :: Gen [Doc.ObjectField Doc.Value] + objectGen = resize 1 + $ fmap getNonEmpty arbitrary + <&> map (fmap getAnyValue . getAnyObjectField) + in AnyValue <$> oneof + [ variableGen + , Doc.Int <$> arbitrary + , Doc.Float <$> arbitrary + , Doc.String . getAnyPrintableText <$> arbitrary + , Doc.Boolean <$> arbitrary + , MkGen $ \_ _ -> Doc.Null + , Doc.Enum . getAnyName <$> arbitrary + , Doc.List <$> listGen + , Doc.Object <$> objectGen + ] + +newtype AnyArgument a = AnyArgument { getAnyArgument :: Doc.Argument } + deriving (Eq, Show) instance Arbitrary a => Arbitrary (AnyArgument a) where arbitrary = do |
