From e76dcb94da7b5a708eb67f716c3c2b7a89580fc1 Mon Sep 17 00:00:00 2001 From: Sunli Date: Fri, 29 May 2020 17:29:15 +0800 Subject: [PATCH] Remove unsafe code from tests --- src/lib.rs | 1 + .../rules/arguments_of_correct_type.rs | 126 +++++++++--------- .../rules/default_values_of_correct_type.rs | 16 +-- .../rules/fields_on_correct_type.rs | 40 +++--- .../rules/fragments_on_composite_types.rs | 20 +-- src/validation/rules/known_argument_names.rs | 24 ++-- src/validation/rules/known_directives.rs | 14 +- src/validation/rules/known_fragment_names.rs | 6 +- src/validation/rules/known_type_names.rs | 6 +- .../rules/lone_anonymous_operation.rs | 14 +- src/validation/rules/no_fragment_cycles.rs | 32 ++--- .../rules/no_undefined_variables.rs | 36 ++--- src/validation/rules/no_unused_fragments.rs | 12 +- src/validation/rules/no_unused_variables.rs | 26 ++-- .../rules/possible_fragment_spreads.rs | 46 +++---- .../rules/provided_non_null_arguments.rs | 36 ++--- src/validation/rules/scalar_leafs.rs | 20 +-- src/validation/rules/unique_argument_names.rs | 28 ++-- src/validation/rules/unique_fragment_names.rs | 16 +-- .../rules/unique_operation_names.rs | 18 +-- src/validation/rules/unique_variable_names.rs | 6 +- .../rules/variables_are_input_types.rs | 6 +- .../rules/variables_in_allowed_position.rs | 44 +++--- src/validation/test_harness.rs | 106 +++++---------- 24 files changed, 329 insertions(+), 370 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 0159ef18..0b33f1cf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -92,6 +92,7 @@ #![allow(clippy::needless_doctest_main)] #![allow(clippy::needless_lifetimes)] #![recursion_limit = "256"] +#![forbid(unsafe_code)] #[macro_use] extern crate thiserror; diff --git a/src/validation/rules/arguments_of_correct_type.rs b/src/validation/rules/arguments_of_correct_type.rs index 544ae40d..2e269869 100644 --- a/src/validation/rules/arguments_of_correct_type.rs +++ b/src/validation/rules/arguments_of_correct_type.rs @@ -84,7 +84,7 @@ impl<'a> Visitor<'a> for ArgumentsOfCorrectType<'a> { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> ArgumentsOfCorrectType<'a> { ArgumentsOfCorrectType::default() @@ -92,7 +92,7 @@ mod tests { #[test] fn good_null_value() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -106,7 +106,7 @@ mod tests { #[test] fn null_into_int() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -120,7 +120,7 @@ mod tests { #[test] fn good_int_value() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -134,7 +134,7 @@ mod tests { #[test] fn good_boolean_value() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -148,7 +148,7 @@ mod tests { #[test] fn good_string_value() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -162,7 +162,7 @@ mod tests { #[test] fn good_float_value() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -176,7 +176,7 @@ mod tests { #[test] fn int_into_float() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -190,7 +190,7 @@ mod tests { #[test] fn int_into_id() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -204,7 +204,7 @@ mod tests { #[test] fn string_into_id() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -218,7 +218,7 @@ mod tests { #[test] fn good_enum_value() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -232,7 +232,7 @@ mod tests { #[test] fn int_into_string() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -246,7 +246,7 @@ mod tests { #[test] fn float_into_string() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -260,7 +260,7 @@ mod tests { #[test] fn boolean_into_string() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -274,7 +274,7 @@ mod tests { #[test] fn unquoted_string_into_string() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -288,7 +288,7 @@ mod tests { #[test] fn string_into_int() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -302,7 +302,7 @@ mod tests { #[test] fn unquoted_string_into_int() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -316,7 +316,7 @@ mod tests { #[test] fn simple_float_into_int() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -330,7 +330,7 @@ mod tests { #[test] fn float_into_int() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -344,7 +344,7 @@ mod tests { #[test] fn string_into_float() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -358,7 +358,7 @@ mod tests { #[test] fn boolean_into_float() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -372,7 +372,7 @@ mod tests { #[test] fn unquoted_into_float() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -386,7 +386,7 @@ mod tests { #[test] fn int_into_boolean() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -400,7 +400,7 @@ mod tests { #[test] fn float_into_boolean() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -414,7 +414,7 @@ mod tests { #[test] fn string_into_boolean() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -428,7 +428,7 @@ mod tests { #[test] fn unquoted_into_boolean() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -442,7 +442,7 @@ mod tests { #[test] fn float_into_id() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -456,7 +456,7 @@ mod tests { #[test] fn boolean_into_id() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -470,7 +470,7 @@ mod tests { #[test] fn unquoted_into_id() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -484,7 +484,7 @@ mod tests { #[test] fn int_into_enum() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -498,7 +498,7 @@ mod tests { #[test] fn float_into_enum() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -512,7 +512,7 @@ mod tests { #[test] fn string_into_enum() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -526,7 +526,7 @@ mod tests { #[test] fn boolean_into_enum() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -540,7 +540,7 @@ mod tests { #[test] fn unknown_enum_value_into_enum() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -554,7 +554,7 @@ mod tests { #[test] fn different_case_enum_value_into_enum() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -568,7 +568,7 @@ mod tests { #[test] fn good_list_value() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -582,7 +582,7 @@ mod tests { #[test] fn empty_list_value() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -596,7 +596,7 @@ mod tests { #[test] fn single_value_into_list() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -610,7 +610,7 @@ mod tests { #[test] fn incorrect_item_type() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -624,7 +624,7 @@ mod tests { #[test] fn single_value_of_incorrect_type() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -638,7 +638,7 @@ mod tests { #[test] fn arg_on_optional_arg() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -652,7 +652,7 @@ mod tests { #[test] fn no_arg_on_optional_arg() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -666,7 +666,7 @@ mod tests { #[test] fn multiple_args() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -680,7 +680,7 @@ mod tests { #[test] fn multiple_args_reverse_order() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -694,7 +694,7 @@ mod tests { #[test] fn no_args_on_multiple_optional() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -708,7 +708,7 @@ mod tests { #[test] fn one_arg_on_multiple_optional() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -722,7 +722,7 @@ mod tests { #[test] fn second_arg_on_multiple_optional() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -736,7 +736,7 @@ mod tests { #[test] fn multiple_reqs_on_mixed_list() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -750,7 +750,7 @@ mod tests { #[test] fn multiple_reqs_and_one_opt_on_mixed_list() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -764,7 +764,7 @@ mod tests { #[test] fn all_reqs_and_opts_on_mixed_list() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -778,7 +778,7 @@ mod tests { #[test] fn incorrect_value_type() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -792,7 +792,7 @@ mod tests { #[test] fn incorrect_value_and_missing_argument() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -806,7 +806,7 @@ mod tests { #[test] fn optional_arg_despite_required_field_in_type() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -820,7 +820,7 @@ mod tests { #[test] fn partial_object_only_required() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -834,7 +834,7 @@ mod tests { #[test] fn partial_object_required_field_can_be_falsy() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -848,7 +848,7 @@ mod tests { #[test] fn partial_object_including_required() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -862,7 +862,7 @@ mod tests { #[test] fn full_object() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -882,7 +882,7 @@ mod tests { #[test] fn full_object_with_fields_in_different_order() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -902,7 +902,7 @@ mod tests { #[test] fn partial_object_missing_required() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -916,7 +916,7 @@ mod tests { #[test] fn partial_object_invalid_field_type() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -933,7 +933,7 @@ mod tests { #[test] fn partial_object_unknown_field_arg() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -950,7 +950,7 @@ mod tests { #[test] fn directive_with_valid_types() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -967,7 +967,7 @@ mod tests { #[test] fn directive_with_incorrect_types() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { diff --git a/src/validation/rules/default_values_of_correct_type.rs b/src/validation/rules/default_values_of_correct_type.rs index bf882e00..2dd47d61 100644 --- a/src/validation/rules/default_values_of_correct_type.rs +++ b/src/validation/rules/default_values_of_correct_type.rs @@ -39,7 +39,7 @@ impl<'a> Visitor<'a> for DefaultValuesOfCorrectType { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> DefaultValuesOfCorrectType { DefaultValuesOfCorrectType @@ -47,7 +47,7 @@ mod tests { #[test] fn variables_with_no_default_values() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query NullableValues($a: Int, $b: String, $c: ComplexInput) { @@ -59,7 +59,7 @@ mod tests { #[test] fn required_variables_without_default_values() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query RequiredValues($a: Int!, $b: String!) { @@ -71,7 +71,7 @@ mod tests { #[test] fn variables_with_valid_default_values() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query WithDefaultValues( @@ -87,7 +87,7 @@ mod tests { #[test] fn no_required_variables_with_default_values() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query UnreachableDefaultValues($a: Int! = 3, $b: String! = "default") { @@ -99,7 +99,7 @@ mod tests { #[test] fn variables_with_invalid_default_values() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query InvalidDefaultValues( @@ -115,7 +115,7 @@ mod tests { #[test] fn complex_variables_missing_required_field() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query MissingRequiredField($a: ComplexInput = {intField: 3}) { @@ -127,7 +127,7 @@ mod tests { #[test] fn list_variables_with_invalid_item() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query InvalidItem($a: [String] = ["one", 2]) { diff --git a/src/validation/rules/fields_on_correct_type.rs b/src/validation/rules/fields_on_correct_type.rs index 0393b3df..465b3065 100644 --- a/src/validation/rules/fields_on_correct_type.rs +++ b/src/validation/rules/fields_on_correct_type.rs @@ -49,7 +49,7 @@ impl<'a> Visitor<'a> for FieldsOnCorrectType { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> FieldsOnCorrectType { FieldsOnCorrectType @@ -57,7 +57,7 @@ mod tests { #[test] fn selection_on_object() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment objectFieldSelection on Dog { @@ -70,7 +70,7 @@ mod tests { #[test] fn aliased_selection_on_object() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment aliasedObjectFieldSelection on Dog { @@ -83,7 +83,7 @@ mod tests { #[test] fn selection_on_interface() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment interfaceFieldSelection on Pet { @@ -96,7 +96,7 @@ mod tests { #[test] fn aliased_selection_on_interface() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment interfaceFieldSelection on Pet { @@ -108,7 +108,7 @@ mod tests { #[test] fn lying_alias_selection() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment lyingAliasSelection on Dog { @@ -120,7 +120,7 @@ mod tests { #[test] fn ignores_unknown_type() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment unknownSelection on UnknownType { @@ -132,7 +132,7 @@ mod tests { #[test] fn nested_unknown_fields() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment typeKnownAgain on Pet { @@ -148,7 +148,7 @@ mod tests { #[test] fn unknown_field_on_fragment() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fieldNotDefined on Dog { @@ -160,7 +160,7 @@ mod tests { #[test] fn ignores_deeply_unknown_field() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment deepFieldNotDefined on Dog { @@ -174,7 +174,7 @@ mod tests { #[test] fn unknown_subfield() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment subFieldNotDefined on Human { @@ -188,7 +188,7 @@ mod tests { #[test] fn unknown_field_on_inline_fragment() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fieldNotDefined on Pet { @@ -202,7 +202,7 @@ mod tests { #[test] fn unknown_aliased_target() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment aliasedFieldTargetNotDefined on Dog { @@ -214,7 +214,7 @@ mod tests { #[test] fn unknown_aliased_lying_field_target() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment aliasedLyingFieldTargetNotDefined on Dog { @@ -226,7 +226,7 @@ mod tests { #[test] fn not_defined_on_interface() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment notDefinedOnInterface on Pet { @@ -238,7 +238,7 @@ mod tests { #[test] fn defined_in_concrete_types_but_not_interface() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment definedOnImplementorsButNotInterface on Pet { @@ -250,7 +250,7 @@ mod tests { #[test] fn meta_field_on_union() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment definedOnImplementorsButNotInterface on Pet { @@ -262,7 +262,7 @@ mod tests { #[test] fn fields_on_union() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment definedOnImplementorsQueriedOnUnion on CatOrDog { @@ -274,7 +274,7 @@ mod tests { #[test] fn typename_on_union() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment objectFieldSelection on Pet { @@ -292,7 +292,7 @@ mod tests { #[test] fn valid_field_in_inline_fragment() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment objectFieldSelection on Pet { diff --git a/src/validation/rules/fragments_on_composite_types.rs b/src/validation/rules/fragments_on_composite_types.rs index 15854fec..27b96cbb 100644 --- a/src/validation/rules/fragments_on_composite_types.rs +++ b/src/validation/rules/fragments_on_composite_types.rs @@ -47,7 +47,7 @@ impl<'a> Visitor<'a> for FragmentsOnCompositeTypes { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> FragmentsOnCompositeTypes { FragmentsOnCompositeTypes @@ -55,7 +55,7 @@ mod tests { #[test] fn on_object() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment validFragment on Dog { @@ -67,7 +67,7 @@ mod tests { #[test] fn on_interface() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment validFragment on Pet { @@ -79,7 +79,7 @@ mod tests { #[test] fn on_object_inline() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment validFragment on Pet { @@ -93,7 +93,7 @@ mod tests { #[test] fn on_inline_without_type_cond() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment validFragment on Pet { @@ -107,7 +107,7 @@ mod tests { #[test] fn on_union() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment validFragment on CatOrDog { @@ -119,7 +119,7 @@ mod tests { #[test] fn not_on_scalar() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment scalarFragment on Boolean { @@ -131,7 +131,7 @@ mod tests { #[test] fn not_on_enum() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment scalarFragment on FurColor { @@ -143,7 +143,7 @@ mod tests { #[test] fn not_on_input_object() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment inputFragment on ComplexInput { @@ -155,7 +155,7 @@ mod tests { #[test] fn not_on_scalar_inline() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidFragment on Pet { diff --git a/src/validation/rules/known_argument_names.rs b/src/validation/rules/known_argument_names.rs index 46531d35..af2d4897 100644 --- a/src/validation/rules/known_argument_names.rs +++ b/src/validation/rules/known_argument_names.rs @@ -115,7 +115,7 @@ impl<'a> Visitor<'a> for KnownArgumentNames<'a> { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> KnownArgumentNames<'a> { KnownArgumentNames::default() @@ -123,7 +123,7 @@ mod tests { #[test] fn single_arg_is_known() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment argOnRequiredArg on Dog { @@ -135,7 +135,7 @@ mod tests { #[test] fn multiple_args_are_known() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment multipleArgs on ComplicatedArgs { @@ -147,7 +147,7 @@ mod tests { #[test] fn ignores_args_of_unknown_fields() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment argOnUnknownField on Dog { @@ -159,7 +159,7 @@ mod tests { #[test] fn multiple_args_in_reverse_order_are_known() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment multipleArgsReverseOrder on ComplicatedArgs { @@ -171,7 +171,7 @@ mod tests { #[test] fn no_args_on_optional_arg() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment noArgOnOptionalArg on Dog { @@ -183,7 +183,7 @@ mod tests { #[test] fn args_are_known_deeply() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -204,7 +204,7 @@ mod tests { #[test] fn directive_args_are_known() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -216,7 +216,7 @@ mod tests { #[test] fn undirective_args_are_invalid() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -228,7 +228,7 @@ mod tests { #[test] fn invalid_arg_name() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidArgName on Dog { @@ -240,7 +240,7 @@ mod tests { #[test] fn unknown_args_amongst_known_args() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment oneGoodArgOneInvalidArg on Dog { @@ -252,7 +252,7 @@ mod tests { #[test] fn unknown_args_deeply() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { diff --git a/src/validation/rules/known_directives.rs b/src/validation/rules/known_directives.rs index d43fd14b..dff8c2e9 100644 --- a/src/validation/rules/known_directives.rs +++ b/src/validation/rules/known_directives.rs @@ -121,7 +121,7 @@ impl<'a> Visitor<'a> for KnownDirectives { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory() -> KnownDirectives { KnownDirectives::default() @@ -129,7 +129,7 @@ mod tests { #[test] fn with_no_directives() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo { @@ -145,7 +145,7 @@ mod tests { #[test] fn with_known_directives() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -162,7 +162,7 @@ mod tests { #[test] fn with_unknown_directive() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -176,7 +176,7 @@ mod tests { #[test] fn with_many_unknown_directives() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -196,7 +196,7 @@ mod tests { #[test] fn with_well_placed_directives() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo { @@ -214,7 +214,7 @@ mod tests { #[test] fn with_misplaced_directives() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo @include(if: true) { diff --git a/src/validation/rules/known_fragment_names.rs b/src/validation/rules/known_fragment_names.rs index 91822eeb..d64ff1b3 100644 --- a/src/validation/rules/known_fragment_names.rs +++ b/src/validation/rules/known_fragment_names.rs @@ -23,7 +23,7 @@ impl<'a> Visitor<'a> for KnownFragmentNames { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory() -> KnownFragmentNames { KnownFragmentNames::default() @@ -31,7 +31,7 @@ mod tests { #[test] fn known() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -61,7 +61,7 @@ mod tests { #[test] fn unknown() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { diff --git a/src/validation/rules/known_type_names.rs b/src/validation/rules/known_type_names.rs index 159f7f70..99a2e81b 100644 --- a/src/validation/rules/known_type_names.rs +++ b/src/validation/rules/known_type_names.rs @@ -50,7 +50,7 @@ fn validate_type(ctx: &mut VisitorContext<'_>, type_name: &str, pos: Pos) { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory() -> KnownTypeNames { KnownTypeNames::default() @@ -58,7 +58,7 @@ mod tests { #[test] fn known_type_names_are_valid() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($var: String, $required: [String!]!) { @@ -75,7 +75,7 @@ mod tests { #[test] fn unknown_type_names_are_invalid() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($var: JumbledUpLetters) { diff --git a/src/validation/rules/lone_anonymous_operation.rs b/src/validation/rules/lone_anonymous_operation.rs index 75b0ee39..c8b57fc4 100644 --- a/src/validation/rules/lone_anonymous_operation.rs +++ b/src/validation/rules/lone_anonymous_operation.rs @@ -55,7 +55,7 @@ impl<'a> Visitor<'a> for LoneAnonymousOperation { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory() -> LoneAnonymousOperation { LoneAnonymousOperation::default() @@ -63,7 +63,7 @@ mod tests { #[test] fn no_operations() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment fragA on Type { @@ -75,7 +75,7 @@ mod tests { #[test] fn one_anon_operation() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -87,7 +87,7 @@ mod tests { #[test] fn multiple_named_operations() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo { @@ -102,7 +102,7 @@ mod tests { #[test] fn anon_operation_with_fragment() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -117,7 +117,7 @@ mod tests { #[test] fn multiple_anon_operations() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -132,7 +132,7 @@ mod tests { #[test] fn anon_operation_with_a_mutation() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { diff --git a/src/validation/rules/no_fragment_cycles.rs b/src/validation/rules/no_fragment_cycles.rs index 4d8cf01a..191bfb57 100644 --- a/src/validation/rules/no_fragment_cycles.rs +++ b/src/validation/rules/no_fragment_cycles.rs @@ -106,7 +106,7 @@ impl<'a> Visitor<'a> for NoFragmentCycles<'a> { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> NoFragmentCycles<'a> { NoFragmentCycles::default() @@ -114,7 +114,7 @@ mod tests { #[test] fn single_reference_is_valid() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment fragA on Dog { ...fragB } @@ -125,7 +125,7 @@ mod tests { #[test] fn spreading_twice_is_not_circular() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment fragA on Dog { ...fragB, ...fragB } @@ -136,7 +136,7 @@ mod tests { #[test] fn spreading_twice_indirectly_is_not_circular() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment fragA on Dog { ...fragB, ...fragC } @@ -148,7 +148,7 @@ mod tests { #[test] fn double_spread_within_abstract_types() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment nameFragment on Pet { @@ -165,7 +165,7 @@ mod tests { #[test] fn does_not_false_positive_on_unknown_fragment() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment nameFragment on Pet { @@ -177,7 +177,7 @@ mod tests { #[test] fn spreading_recursively_within_field_fails() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fragA on Human { relatives { ...fragA } }, @@ -187,7 +187,7 @@ mod tests { #[test] fn no_spreading_itself_directly() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fragA on Dog { ...fragA } @@ -197,7 +197,7 @@ mod tests { #[test] fn no_spreading_itself_directly_within_inline_fragment() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fragA on Pet { @@ -211,7 +211,7 @@ mod tests { #[test] fn no_spreading_itself_indirectly() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fragA on Dog { ...fragB } @@ -222,7 +222,7 @@ mod tests { #[test] fn no_spreading_itself_indirectly_reports_opposite_order() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fragB on Dog { ...fragA } @@ -233,7 +233,7 @@ mod tests { #[test] fn no_spreading_itself_indirectly_within_inline_fragment() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fragA on Pet { @@ -252,7 +252,7 @@ mod tests { #[test] fn no_spreading_itself_deeply() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fragA on Dog { ...fragB } @@ -269,7 +269,7 @@ mod tests { #[test] fn no_spreading_itself_deeply_two_paths() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fragA on Dog { ...fragB, ...fragC } @@ -281,7 +281,7 @@ mod tests { #[test] fn no_spreading_itself_deeply_two_paths_alt_traversal_order() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fragA on Dog { ...fragC } @@ -293,7 +293,7 @@ mod tests { #[test] fn no_spreading_itself_deeply_and_immediately() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fragA on Dog { ...fragB } diff --git a/src/validation/rules/no_undefined_variables.rs b/src/validation/rules/no_undefined_variables.rs index d0812f00..f9805cac 100644 --- a/src/validation/rules/no_undefined_variables.rs +++ b/src/validation/rules/no_undefined_variables.rs @@ -138,7 +138,7 @@ impl<'a> Visitor<'a> for NoUndefinedVariables<'a> { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> NoUndefinedVariables<'a> { NoUndefinedVariables::default() @@ -146,7 +146,7 @@ mod tests { #[test] fn all_variables_defined() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String, $b: String, $c: String) { @@ -158,7 +158,7 @@ mod tests { #[test] fn all_variables_deeply_defined() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String, $b: String, $c: String) { @@ -174,7 +174,7 @@ mod tests { #[test] fn all_variables_deeply_defined_in_inline_fragments_defined() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String, $b: String, $c: String) { @@ -194,7 +194,7 @@ mod tests { #[test] fn all_variables_in_fragments_deeply_defined() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String, $b: String, $c: String) { @@ -219,7 +219,7 @@ mod tests { #[test] fn variable_within_single_fragment_defined_in_multiple_operations() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String) { @@ -237,7 +237,7 @@ mod tests { #[test] fn variable_within_fragments_defined_in_operations() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String) { @@ -258,7 +258,7 @@ mod tests { #[test] fn variable_within_recursive_fragment_defined() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String) { @@ -275,7 +275,7 @@ mod tests { #[test] fn variable_not_defined() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($a: String, $b: String, $c: String) { @@ -287,7 +287,7 @@ mod tests { #[test] fn variable_not_defined_by_unnamed_query() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -299,7 +299,7 @@ mod tests { #[test] fn multiple_variables_not_defined() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($b: String) { @@ -311,7 +311,7 @@ mod tests { #[test] fn variable_in_fragment_not_defined_by_unnamed_query() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -326,7 +326,7 @@ mod tests { #[test] fn variable_in_fragment_not_defined_by_operation() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($a: String, $b: String) { @@ -351,7 +351,7 @@ mod tests { #[test] fn multiple_variables_in_fragments_not_defined() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($b: String) { @@ -376,7 +376,7 @@ mod tests { #[test] fn single_variable_in_fragment_not_defined_by_multiple_operations() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($a: String) { @@ -394,7 +394,7 @@ mod tests { #[test] fn variables_in_fragment_not_defined_by_multiple_operations() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($b: String) { @@ -412,7 +412,7 @@ mod tests { #[test] fn variable_in_fragment_used_by_other_operation() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($b: String) { @@ -433,7 +433,7 @@ mod tests { #[test] fn multiple_undefined_variables_produce_multiple_errors() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($b: String) { diff --git a/src/validation/rules/no_unused_fragments.rs b/src/validation/rules/no_unused_fragments.rs index 9c68ed78..71065904 100644 --- a/src/validation/rules/no_unused_fragments.rs +++ b/src/validation/rules/no_unused_fragments.rs @@ -90,7 +90,7 @@ impl<'a> Visitor<'a> for NoUnusedFragments<'a> { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> NoUnusedFragments<'a> { NoUnusedFragments::default() @@ -98,7 +98,7 @@ mod tests { #[test] fn all_fragment_names_are_used() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -125,7 +125,7 @@ mod tests { #[test] fn all_fragment_names_are_used_by_multiple_operations() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo { @@ -154,7 +154,7 @@ mod tests { #[test] fn contains_unknown_fragments() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo { @@ -189,7 +189,7 @@ mod tests { #[test] fn contains_unknown_fragments_with_ref_cycle() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo { @@ -226,7 +226,7 @@ mod tests { #[test] fn contains_unknown_and_undef_fragments() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo { diff --git a/src/validation/rules/no_unused_variables.rs b/src/validation/rules/no_unused_variables.rs index 5369685e..9a87416a 100644 --- a/src/validation/rules/no_unused_variables.rs +++ b/src/validation/rules/no_unused_variables.rs @@ -136,7 +136,7 @@ impl<'a> Visitor<'a> for NoUnusedVariables<'a> { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> NoUnusedVariables<'a> { NoUnusedVariables::default() @@ -144,7 +144,7 @@ mod tests { #[test] fn uses_all_variables() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query ($a: String, $b: String, $c: String) { @@ -156,7 +156,7 @@ mod tests { #[test] fn uses_all_variables_deeply() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String, $b: String, $c: String) { @@ -172,7 +172,7 @@ mod tests { #[test] fn uses_all_variables_deeply_in_inline_fragments() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String, $b: String, $c: String) { @@ -192,7 +192,7 @@ mod tests { #[test] fn uses_all_variables_in_fragments() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String, $b: String, $c: String) { @@ -217,7 +217,7 @@ mod tests { #[test] fn variable_used_by_fragment_in_multiple_operations() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String) { @@ -238,7 +238,7 @@ mod tests { #[test] fn variable_used_by_recursive_fragment() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String) { @@ -255,7 +255,7 @@ mod tests { #[test] fn variable_not_used() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query ($a: String, $b: String, $c: String) { @@ -267,7 +267,7 @@ mod tests { #[test] fn multiple_variables_not_used_1() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($a: String, $b: String, $c: String) { @@ -279,7 +279,7 @@ mod tests { #[test] fn variable_not_used_in_fragment() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($a: String, $b: String, $c: String) { @@ -304,7 +304,7 @@ mod tests { #[test] fn multiple_variables_not_used_2() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($a: String, $b: String, $c: String) { @@ -329,7 +329,7 @@ mod tests { #[test] fn variable_not_used_by_unreferenced_fragment() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($b: String) { @@ -347,7 +347,7 @@ mod tests { #[test] fn variable_not_used_by_fragment_used_by_other_operation() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($b: String) { diff --git a/src/validation/rules/possible_fragment_spreads.rs b/src/validation/rules/possible_fragment_spreads.rs index 6fb3e0b6..4107205e 100644 --- a/src/validation/rules/possible_fragment_spreads.rs +++ b/src/validation/rules/possible_fragment_spreads.rs @@ -74,7 +74,7 @@ impl<'a> Visitor<'a> for PossibleFragmentSpreads<'a> { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> PossibleFragmentSpreads<'a> { PossibleFragmentSpreads::default() @@ -82,7 +82,7 @@ mod tests { #[test] fn of_the_same_object() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment objectWithinObject on Dog { ...dogFragment } @@ -93,7 +93,7 @@ mod tests { #[test] fn of_the_same_object_with_inline_fragment() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment objectWithinObjectAnon on Dog { ... on Dog { barkVolume } } @@ -103,7 +103,7 @@ mod tests { #[test] fn object_into_an_implemented_interface() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment objectWithinInterface on Pet { ...dogFragment } @@ -114,7 +114,7 @@ mod tests { #[test] fn object_into_containing_union() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment objectWithinUnion on CatOrDog { ...dogFragment } @@ -125,7 +125,7 @@ mod tests { #[test] fn union_into_contained_object() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment unionWithinObject on Dog { ...catOrDogFragment } @@ -136,7 +136,7 @@ mod tests { #[test] fn union_into_overlapping_interface() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment unionWithinInterface on Pet { ...catOrDogFragment } @@ -147,7 +147,7 @@ mod tests { #[test] fn union_into_overlapping_union() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment unionWithinUnion on DogOrHuman { ...catOrDogFragment } @@ -158,7 +158,7 @@ mod tests { #[test] fn interface_into_implemented_object() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment interfaceWithinObject on Dog { ...petFragment } @@ -169,7 +169,7 @@ mod tests { #[test] fn interface_into_overlapping_interface() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment interfaceWithinInterface on Pet { ...beingFragment } @@ -180,7 +180,7 @@ mod tests { #[test] fn interface_into_overlapping_interface_in_inline_fragment() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment interfaceWithinInterface on Pet { ... on Being { name } } @@ -190,7 +190,7 @@ mod tests { #[test] fn interface_into_overlapping_union() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment interfaceWithinUnion on CatOrDog { ...petFragment } @@ -201,7 +201,7 @@ mod tests { #[test] fn different_object_into_object() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidObjectWithinObject on Cat { ...dogFragment } @@ -212,7 +212,7 @@ mod tests { #[test] fn different_object_into_object_in_inline_fragment() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidObjectWithinObjectAnon on Cat { @@ -224,7 +224,7 @@ mod tests { #[test] fn object_into_not_implementing_interface() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidObjectWithinInterface on Pet { ...humanFragment } @@ -235,7 +235,7 @@ mod tests { #[test] fn object_into_not_containing_union() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidObjectWithinUnion on CatOrDog { ...humanFragment } @@ -246,7 +246,7 @@ mod tests { #[test] fn union_into_not_contained_object() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidUnionWithinObject on Human { ...catOrDogFragment } @@ -257,7 +257,7 @@ mod tests { #[test] fn union_into_non_overlapping_interface() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidUnionWithinInterface on Pet { ...humanOrAlienFragment } @@ -268,7 +268,7 @@ mod tests { #[test] fn union_into_non_overlapping_union() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidUnionWithinUnion on CatOrDog { ...humanOrAlienFragment } @@ -279,7 +279,7 @@ mod tests { #[test] fn interface_into_non_implementing_object() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidInterfaceWithinObject on Cat { ...intelligentFragment } @@ -290,7 +290,7 @@ mod tests { #[test] fn interface_into_non_overlapping_interface() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidInterfaceWithinInterface on Pet { @@ -303,7 +303,7 @@ mod tests { #[test] fn interface_into_non_overlapping_interface_in_inline_fragment() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidInterfaceWithinInterfaceAnon on Pet { @@ -315,7 +315,7 @@ mod tests { #[test] fn interface_into_non_overlapping_union() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment invalidInterfaceWithinUnion on HumanOrAlien { ...petFragment } diff --git a/src/validation/rules/provided_non_null_arguments.rs b/src/validation/rules/provided_non_null_arguments.rs index 28fa9bdf..2b9299fa 100644 --- a/src/validation/rules/provided_non_null_arguments.rs +++ b/src/validation/rules/provided_non_null_arguments.rs @@ -59,7 +59,7 @@ impl<'a> Visitor<'a> for ProvidedNonNullArguments { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory() -> ProvidedNonNullArguments { ProvidedNonNullArguments @@ -67,7 +67,7 @@ mod tests { #[test] fn ignores_unknown_arguments() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -81,7 +81,7 @@ mod tests { #[test] fn arg_on_optional_arg() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -95,7 +95,7 @@ mod tests { #[test] fn no_arg_on_optional_arg() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -109,7 +109,7 @@ mod tests { #[test] fn multiple_args() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -123,7 +123,7 @@ mod tests { #[test] fn multiple_args_reverse_order() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -137,7 +137,7 @@ mod tests { #[test] fn no_args_on_multiple_optional() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -151,7 +151,7 @@ mod tests { #[test] fn one_arg_on_multiple_optional() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -165,7 +165,7 @@ mod tests { #[test] fn second_arg_on_multiple_optional() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -179,7 +179,7 @@ mod tests { #[test] fn muliple_reqs_on_mixed_list() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -193,7 +193,7 @@ mod tests { #[test] fn multiple_reqs_and_one_opt_on_mixed_list() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -207,7 +207,7 @@ mod tests { #[test] fn all_reqs_on_opts_on_mixed_list() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -221,7 +221,7 @@ mod tests { #[test] fn missing_one_non_nullable_argument() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -235,7 +235,7 @@ mod tests { #[test] fn missing_multiple_non_nullable_arguments() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -249,7 +249,7 @@ mod tests { #[test] fn incorrect_value_and_missing_argument() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -263,7 +263,7 @@ mod tests { #[test] fn ignores_unknown_directives() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -275,7 +275,7 @@ mod tests { #[test] fn with_directives_of_valid_types() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -292,7 +292,7 @@ mod tests { #[test] fn with_directive_with_missing_types() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { diff --git a/src/validation/rules/scalar_leafs.rs b/src/validation/rules/scalar_leafs.rs index e3aaff80..a3dc676c 100644 --- a/src/validation/rules/scalar_leafs.rs +++ b/src/validation/rules/scalar_leafs.rs @@ -34,7 +34,7 @@ impl<'a> Visitor<'a> for ScalarLeafs { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory() -> ScalarLeafs { ScalarLeafs @@ -42,7 +42,7 @@ mod tests { #[test] fn valid_scalar_selection() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment scalarSelection on Dog { @@ -54,7 +54,7 @@ mod tests { #[test] fn object_type_missing_selection() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query directQueryOnObjectWithoutSubFields { @@ -66,7 +66,7 @@ mod tests { #[test] fn interface_type_missing_selection() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -78,7 +78,7 @@ mod tests { #[test] fn valid_scalar_selection_with_args() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment scalarSelectionWithArgs on Dog { @@ -90,7 +90,7 @@ mod tests { #[test] fn scalar_selection_not_allowed_on_boolean() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment scalarSelectionsNotAllowedOnBoolean on Dog { @@ -102,7 +102,7 @@ mod tests { #[test] fn scalar_selection_not_allowed_on_enum() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment scalarSelectionsNotAllowedOnEnum on Cat { @@ -114,7 +114,7 @@ mod tests { #[test] fn scalar_selection_not_allowed_with_args() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment scalarSelectionsNotAllowedWithArgs on Dog { @@ -126,7 +126,7 @@ mod tests { #[test] fn scalar_selection_not_allowed_with_directives() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment scalarSelectionsNotAllowedWithDirectives on Dog { @@ -138,7 +138,7 @@ mod tests { #[test] fn scalar_selection_not_allowed_with_directives_and_args() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment scalarSelectionsNotAllowedWithDirectivesAndArgs on Dog { diff --git a/src/validation/rules/unique_argument_names.rs b/src/validation/rules/unique_argument_names.rs index c44d0f28..c02e6227 100644 --- a/src/validation/rules/unique_argument_names.rs +++ b/src/validation/rules/unique_argument_names.rs @@ -39,7 +39,7 @@ impl<'a> Visitor<'a> for UniqueArgumentNames<'a> { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> UniqueArgumentNames<'a> { UniqueArgumentNames::default() @@ -47,7 +47,7 @@ mod tests { #[test] fn no_arguments_on_field() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -59,7 +59,7 @@ mod tests { #[test] fn no_arguments_on_directive() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -71,7 +71,7 @@ mod tests { #[test] fn argument_on_field() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -83,7 +83,7 @@ mod tests { #[test] fn argument_on_directive() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -95,7 +95,7 @@ mod tests { #[test] fn same_argument_on_two_fields() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -108,7 +108,7 @@ mod tests { #[test] fn same_argument_on_field_and_directive() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -120,7 +120,7 @@ mod tests { #[test] fn same_argument_on_two_directives() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -132,7 +132,7 @@ mod tests { #[test] fn multiple_field_arguments() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -144,7 +144,7 @@ mod tests { #[test] fn multiple_directive_arguments() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -156,7 +156,7 @@ mod tests { #[test] fn duplicate_field_arguments() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -168,7 +168,7 @@ mod tests { #[test] fn many_duplicate_field_arguments() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -180,7 +180,7 @@ mod tests { #[test] fn duplicate_directive_arguments() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -192,7 +192,7 @@ mod tests { #[test] fn many_duplicate_directive_arguments() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { diff --git a/src/validation/rules/unique_fragment_names.rs b/src/validation/rules/unique_fragment_names.rs index d53e60da..134deb10 100644 --- a/src/validation/rules/unique_fragment_names.rs +++ b/src/validation/rules/unique_fragment_names.rs @@ -29,7 +29,7 @@ impl<'a> Visitor<'a> for UniqueFragmentNames<'a> { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> UniqueFragmentNames<'a> { UniqueFragmentNames::default() @@ -37,7 +37,7 @@ mod tests { #[test] fn no_fragments() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -51,7 +51,7 @@ mod tests { #[test] fn one_fragment() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -68,7 +68,7 @@ mod tests { #[test] fn many_fragments() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -93,7 +93,7 @@ mod tests { #[test] fn inline_fragments_always_unique() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -112,7 +112,7 @@ mod tests { #[test] fn fragment_and_operation_named_the_same() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo { @@ -129,7 +129,7 @@ mod tests { #[test] fn fragments_named_the_same() { - expect_fails_rule( + expect_fails_rule!( factory, r#" { @@ -149,7 +149,7 @@ mod tests { #[test] fn fragments_named_the_same_no_reference() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment fragA on Dog { diff --git a/src/validation/rules/unique_operation_names.rs b/src/validation/rules/unique_operation_names.rs index eec6a7ae..412c1dcf 100644 --- a/src/validation/rules/unique_operation_names.rs +++ b/src/validation/rules/unique_operation_names.rs @@ -44,7 +44,7 @@ impl<'a> Visitor<'a> for UniqueOperationNames<'a> { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> UniqueOperationNames<'a> { UniqueOperationNames::default() @@ -52,7 +52,7 @@ mod tests { #[test] fn no_operations() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment fragA on Dog { @@ -64,7 +64,7 @@ mod tests { #[test] fn one_anon_operation() { - expect_passes_rule( + expect_passes_rule!( factory, r#" { @@ -76,7 +76,7 @@ mod tests { #[test] fn one_named_operation() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo { @@ -88,7 +88,7 @@ mod tests { #[test] fn multiple_operations() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo { @@ -107,7 +107,7 @@ mod tests { #[test] fn multiple_operations_of_different_types() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo { @@ -122,7 +122,7 @@ mod tests { #[test] fn fragment_and_operation_named_the_same() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo { @@ -139,7 +139,7 @@ mod tests { #[test] fn multiple_operations_of_same_name() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo { @@ -158,7 +158,7 @@ mod tests { #[test] fn multiple_ops_of_same_name_of_different_types() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo { diff --git a/src/validation/rules/unique_variable_names.rs b/src/validation/rules/unique_variable_names.rs index d2f4ef5d..587b245e 100644 --- a/src/validation/rules/unique_variable_names.rs +++ b/src/validation/rules/unique_variable_names.rs @@ -37,7 +37,7 @@ impl<'a> Visitor<'a> for UniqueVariableNames<'a> { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> UniqueVariableNames<'a> { UniqueVariableNames::default() @@ -45,7 +45,7 @@ mod tests { #[test] fn unique_variable_names() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query A($x: Int, $y: String) { __typename } @@ -56,7 +56,7 @@ mod tests { #[test] fn duplicate_variable_names() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query A($x: Int, $x: Int, $x: String) { __typename } diff --git a/src/validation/rules/variables_are_input_types.rs b/src/validation/rules/variables_are_input_types.rs index 51ed2307..bfbefff9 100644 --- a/src/validation/rules/variables_are_input_types.rs +++ b/src/validation/rules/variables_are_input_types.rs @@ -32,7 +32,7 @@ impl<'a> Visitor<'a> for VariablesAreInputTypes { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory() -> VariablesAreInputTypes { VariablesAreInputTypes @@ -40,7 +40,7 @@ mod tests { #[test] fn input_types_are_valid() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Foo($a: String, $b: [Boolean!]!, $c: ComplexInput) { @@ -52,7 +52,7 @@ mod tests { #[test] fn output_types_are_invalid() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Foo($a: Dog, $b: [[CatOrDog!]]!, $c: Pet) { diff --git a/src/validation/rules/variables_in_allowed_position.rs b/src/validation/rules/variables_in_allowed_position.rs index c73a41b1..99f21504 100644 --- a/src/validation/rules/variables_in_allowed_position.rs +++ b/src/validation/rules/variables_in_allowed_position.rs @@ -132,7 +132,7 @@ impl<'a> Visitor<'a> for VariableInAllowedPosition<'a> { #[cfg(test)] mod tests { use super::*; - use crate::validation::test_harness::{expect_fails_rule, expect_passes_rule}; + use crate::{expect_fails_rule, expect_passes_rule}; pub fn factory<'a>() -> VariableInAllowedPosition<'a> { VariableInAllowedPosition::default() @@ -140,7 +140,7 @@ mod tests { #[test] fn boolean_into_boolean() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Query($booleanArg: Boolean) @@ -155,7 +155,7 @@ mod tests { #[test] fn boolean_into_boolean_within_fragment() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment booleanArgFrag on ComplicatedArgs { @@ -170,7 +170,7 @@ mod tests { "#, ); - expect_passes_rule( + expect_passes_rule!( factory, r#" query Query($booleanArg: Boolean) @@ -188,7 +188,7 @@ mod tests { #[test] fn non_null_boolean_into_boolean() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Query($nonNullBooleanArg: Boolean!) @@ -203,7 +203,7 @@ mod tests { #[test] fn non_null_boolean_into_boolean_within_fragment() { - expect_passes_rule( + expect_passes_rule!( factory, r#" fragment booleanArgFrag on ComplicatedArgs { @@ -221,7 +221,7 @@ mod tests { #[test] fn int_into_non_null_int_with_default() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Query($intArg: Int = 1) @@ -236,7 +236,7 @@ mod tests { #[test] fn string_list_into_string_list() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Query($stringListVar: [String]) @@ -251,7 +251,7 @@ mod tests { #[test] fn non_null_string_list_into_string_list() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Query($stringListVar: [String!]) @@ -266,7 +266,7 @@ mod tests { #[test] fn string_into_string_list_in_item_position() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Query($stringVar: String) @@ -281,7 +281,7 @@ mod tests { #[test] fn non_null_string_into_string_list_in_item_position() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Query($stringVar: String!) @@ -296,7 +296,7 @@ mod tests { #[test] fn complex_input_into_complex_input() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Query($complexVar: ComplexInput) @@ -311,7 +311,7 @@ mod tests { #[test] fn complex_input_into_complex_input_in_field_position() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Query($boolVar: Boolean = false) @@ -326,7 +326,7 @@ mod tests { #[test] fn non_null_boolean_into_non_null_boolean_in_directive() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Query($boolVar: Boolean!) @@ -339,7 +339,7 @@ mod tests { #[test] fn boolean_in_non_null_in_directive_with_default() { - expect_passes_rule( + expect_passes_rule!( factory, r#" query Query($boolVar: Boolean = false) @@ -352,7 +352,7 @@ mod tests { #[test] fn int_into_non_null_int() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Query($intArg: Int) { @@ -366,7 +366,7 @@ mod tests { #[test] fn int_into_non_null_int_within_fragment() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment nonNullIntArgFieldFrag on ComplicatedArgs { @@ -383,7 +383,7 @@ mod tests { #[test] fn int_into_non_null_int_within_nested_fragment() { - expect_fails_rule( + expect_fails_rule!( factory, r#" fragment outerFrag on ComplicatedArgs { @@ -403,7 +403,7 @@ mod tests { #[test] fn string_over_boolean() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Query($stringVar: String) { @@ -417,7 +417,7 @@ mod tests { #[test] fn string_into_string_list() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Query($stringVar: String) { @@ -431,7 +431,7 @@ mod tests { #[test] fn boolean_into_non_null_boolean_in_directive() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Query($boolVar: Boolean) { @@ -443,7 +443,7 @@ mod tests { #[test] fn string_into_non_null_boolean_in_directive() { - expect_fails_rule( + expect_fails_rule!( factory, r#" query Query($stringVar: String) { diff --git a/src/validation/test_harness.rs b/src/validation/test_harness.rs index 112353c8..27519434 100644 --- a/src/validation/test_harness.rs +++ b/src/validation/test_harness.rs @@ -2,9 +2,10 @@ #![allow(dead_code)] #![allow(unreachable_code)] -use crate::parser::parse_query; use crate::validation::visitor::{visit, Visitor, VisitorContext}; use crate::*; +use async_graphql_parser::query::Document; +use once_cell::sync::Lazy; #[InputObject(internal)] struct TestInput { @@ -329,84 +330,31 @@ impl MutationRoot { } } -pub struct SubscriptionRoot; +static TEST_HARNESS: Lazy> = + Lazy::new(|| Schema::new(QueryRoot, MutationRoot, EmptySubscription)); -#[Subscription(internal)] -impl SubscriptionRoot {} - -pub fn expect_passes_rule<'a, V, F>(factory: F, query_source: &str) +pub fn validate<'a, V, F>(doc: &'a Document, factory: F) -> Result<()> where V: Visitor<'a> + 'a, F: Fn() -> V, { - expect_passes_rule_with_schema( - QueryRoot, - MutationRoot, - SubscriptionRoot, - factory, - query_source, - ); -} - -pub fn expect_fails_rule<'a, V, F>(factory: F, query_source: &str) -where - V: Visitor<'a> + 'a, - F: Fn() -> V, -{ - expect_fails_rule_with_schema( - QueryRoot, - MutationRoot, - SubscriptionRoot, - factory, - query_source, - ); -} - -pub fn validate<'a, Query, Mutation, Subscription, V, F>( - query: Query, - mutation: Mutation, - subscription: Subscription, - factory: F, - query_source: &str, -) -> Result<()> -where - Query: ObjectType + Send + Sync + 'static, - Mutation: ObjectType + Send + Sync + 'static, - Subscription: SubscriptionType + Send + Sync + 'static, - V: Visitor<'a> + 'a, - F: Fn() -> V, -{ - let schema = Schema::new(query, mutation, subscription); + let schema = &*TEST_HARNESS; let registry = &schema.env.registry; - let doc = parse_query(query_source).expect("Parse error"); - let mut ctx = VisitorContext::new( - unsafe { ::std::mem::transmute(&schema.env.registry) }, - unsafe { ::std::mem::transmute(&doc) }, - ); + let mut ctx = VisitorContext::new(registry, doc); let mut visitor = factory(); - visit(&mut visitor, &mut ctx, unsafe { - ::std::mem::transmute(&doc) - }); + visit(&mut visitor, &mut ctx, doc); if !ctx.errors.is_empty() { return Err(Error::Rule { errors: ctx.errors }); } Ok(()) } -pub fn expect_passes_rule_with_schema<'a, Query, Mutation, Subscription, V, F>( - query: Query, - mutation: Mutation, - subscription: Subscription, - factory: F, - query_source: &str, -) where - Query: ObjectType + Send + Sync + 'static, - Mutation: ObjectType + Send + Sync + 'static, - Subscription: SubscriptionType + Send + Sync + 'static, +pub(crate) fn expect_passes_rule_<'a, V, F>(doc: &'a Document, factory: F) +where V: Visitor<'a> + 'a, F: Fn() -> V, { - if let Err(err) = validate(query, mutation, subscription, factory, query_source) { + if let Err(err) = validate(doc, factory) { if let Error::Rule { errors } = err { for err in errors { if let Some(position) = err.locations.first() { @@ -419,20 +367,30 @@ pub fn expect_passes_rule_with_schema<'a, Query, Mutation, Subscription, V, F>( } } -pub fn expect_fails_rule_with_schema<'a, Query, Mutation, Subscription, V, F>( - query: Query, - mutation: Mutation, - subscription: Subscription, - factory: F, - query_source: &str, -) where - Query: ObjectType + Send + Sync + 'static, - Mutation: ObjectType + Send + Sync + 'static, - Subscription: SubscriptionType + Send + Sync + 'static, +#[macro_export] +#[doc(hidden)] +macro_rules! expect_passes_rule { + ($factory:expr, $query_source:literal $(,)*) => { + let doc = crate::parser::parse_query($query_source).expect("Parse error"); + crate::validation::test_harness::expect_passes_rule_(&doc, $factory); + }; +} + +pub(crate) fn expect_fails_rule_<'a, V, F>(doc: &'a Document, factory: F) +where V: Visitor<'a> + 'a, F: Fn() -> V, { - if let Ok(_) = validate(query, mutation, subscription, factory, query_source) { + if let Ok(_) = validate(doc, factory) { panic!("Expected rule to fail, but no errors were found"); } } + +#[macro_export] +#[doc(hidden)] +macro_rules! expect_fails_rule { + ($factory:expr, $query_source:literal $(,)*) => { + let doc = crate::parser::parse_query($query_source).expect("Parse error"); + crate::validation::test_harness::expect_fails_rule_(&doc, $factory); + }; +}