func TestVisitor_AllowsForEditingOnEnter(t *testing.T) { query := `{ a, b, c { a, b, c } }` astDoc := parse(t, query) expectedQuery := `{ a, c { a, c } }` expectedAST := parse(t, expectedQuery) v := &visitor.VisitorOptions{ Enter: func(p visitor.VisitFuncParams) (string, interface{}) { switch node := p.Node.(type) { case map[string]interface{}: if getMapValueString(node, "Kind") == "Field" && getMapValueString(node, "Name.Value") == "b" { return visitor.ActionUpdate, nil } } return visitor.ActionNoChange, nil }, } editedAst := visitor.Visit(astDoc, v, nil) if !reflect.DeepEqual(testutil.ASTToJSON(t, expectedAST), editedAst) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(expectedAST, editedAst)) } }
func TestPrinter_DoesNotAlterAST(t *testing.T) { b, err := ioutil.ReadFile("./../parser/kitchen-sink.graphql") if err != nil { t.Fatalf("unable to load kitchen-sink.graphql") } query := string(b) astDoc := parse(t, query) astDocBefore := testutil.ASTToJSON(t, astDoc) _ = printer.Print(astDoc) astDocAfter := testutil.ASTToJSON(t, astDoc) _ = testutil.ASTToJSON(t, astDoc) if !reflect.DeepEqual(astDocAfter, astDocBefore) { t.Fatalf("Unexpected result, Diff: %v", testutil.Diff(astDocAfter, astDocBefore)) } }