From 2a5f68746a795e68a0578bb1eddde33270353325 Mon Sep 17 00:00:00 2001 From: Jiayu Liu Date: Sat, 3 Sep 2016 16:02:05 +0800 Subject: [PATCH] adding parsing test --- .../parser/GraphqlAntlrToLanguage.java | 10 ++- src/main/java/graphql/parser/Parser.java | 3 +- .../parser/GraphqlAntlrToLanguageTest.groovy | 66 +++++++++++++++++++ 3 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 src/test/groovy/graphql/parser/GraphqlAntlrToLanguageTest.groovy diff --git a/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java index ae271ad6e2..269b569392 100644 --- a/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java +++ b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java @@ -15,7 +15,7 @@ public class GraphqlAntlrToLanguage extends GraphqlBaseVisitor { - Document result; + private Document result; private enum ContextProperty { OperationDefinition, @@ -96,6 +96,9 @@ private void newField(Field field) { ((SelectionSet) getFromContextStack(ContextProperty.SelectionSet)).getSelections().add(field); } + Document getResult() { + return result; + } @Override public Void visitDocument(GraphqlParser.DocumentContext ctx) { @@ -407,9 +410,12 @@ private Value getValue(GraphqlParser.ValueContext ctx) { throw new ShouldNotHappenException(); } - private String parseString(String string) { + static String parseString(String string) { + assert string.length() >= 2; StringWriter writer = new StringWriter(string.length() - 2); int end = string.length() - 1; + assert string.charAt(0) == '"' : "string did not start with '\"'"; + assert string.charAt(end) == '"' : "string did not end with '\"'"; for (int i = 1; i < end; i++) { char c = string.charAt(i); if (c != '\\') { diff --git a/src/main/java/graphql/parser/Parser.java b/src/main/java/graphql/parser/Parser.java index cb9d0fcff4..27b1d73abf 100644 --- a/src/main/java/graphql/parser/Parser.java +++ b/src/main/java/graphql/parser/Parser.java @@ -14,7 +14,6 @@ public class Parser { private static final Logger log = LoggerFactory.getLogger(Parser.class); - public Document parseDocument(String input) { GraphqlLexer lexer = new GraphqlLexer(new ANTLRInputStream(input)); @@ -30,6 +29,6 @@ public Document parseDocument(String input) { GraphqlAntlrToLanguage antlrToLanguage = new GraphqlAntlrToLanguage(); antlrToLanguage.visitDocument(document); - return antlrToLanguage.result; + return antlrToLanguage.getResult(); } } diff --git a/src/test/groovy/graphql/parser/GraphqlAntlrToLanguageTest.groovy b/src/test/groovy/graphql/parser/GraphqlAntlrToLanguageTest.groovy new file mode 100644 index 0000000000..081d005c66 --- /dev/null +++ b/src/test/groovy/graphql/parser/GraphqlAntlrToLanguageTest.groovy @@ -0,0 +1,66 @@ +package graphql.parser + +import spock.lang.Ignore +import spock.lang.Specification +/** + * Created by jiayu on 9/3/16. + */ +class GraphqlAntlrToLanguageTest extends Specification { + + def "parsing quoted string should work"() { + given: + def input = '''"simple quoted"''' + + when: + String parsed = GraphqlAntlrToLanguage.parseString(input) + + then: + parsed == "simple quoted" + } + + def "parsing escaped json should work"() { + given: + def input = '''"{\"name\": \"graphql\", \"year\": 2015}"''' + + when: + String parsed = GraphqlAntlrToLanguage.parseString(input) + + then: + parsed == '''{\"name\": \"graphql\", \"year\": 2015}''' + } + + def "parsing quoted quote should work"() { + given: + def input = '''"""''' + + when: + String parsed = GraphqlAntlrToLanguage.parseString(input) + + then: + parsed == '''"''' + } + + @Ignore("sadly this does not work yet") + def "parsing emoji should work"() { + given: + def input = '''"\\u1f37a"''' + + when: + String parsed = GraphqlAntlrToLanguage.parseString(input) + + then: + parsed == '''🍺''' + } + + def "parsing simple unicode should work"() { + given: + def input = '''"\\u56fe"''' + + when: + String parsed = GraphqlAntlrToLanguage.parseString(input) + + then: + parsed == '''图''' + } + +}