Remove unsafe code from tests

This commit is contained in:
Sunli 2020-05-29 17:29:15 +08:00
parent 05a4f73490
commit e76dcb94da
24 changed files with 329 additions and 370 deletions

View File

@ -92,6 +92,7 @@
#![allow(clippy::needless_doctest_main)]
#![allow(clippy::needless_lifetimes)]
#![recursion_limit = "256"]
#![forbid(unsafe_code)]
#[macro_use]
extern crate thiserror;

View File

@ -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#"
{

View File

@ -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]) {

View File

@ -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 {

View File

@ -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 {

View File

@ -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#"
{

View File

@ -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) {

View File

@ -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#"
{

View File

@ -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) {

View File

@ -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#"
{

View File

@ -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 }

View File

@ -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) {

View File

@ -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 {

View File

@ -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) {

View File

@ -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 }

View File

@ -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#"
{

View File

@ -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 {

View File

@ -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#"
{

View File

@ -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 {

View File

@ -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 {

View File

@ -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 }

View File

@ -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) {

View File

@ -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) {

View File

@ -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<Schema<QueryRoot, MutationRoot, EmptySubscription>> =
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);
};
}