diff options
author | Sylvain Baudoin <sylvain.baudoin@gmail.com> | 2018-04-06 18:21:17 +0200 |
---|---|---|
committer | Sylvain Baudoin <sylvain.baudoin@gmail.com> | 2018-04-06 18:21:17 +0200 |
commit | 622dc5594c64b56fc9ab029da293dde4a27b4fe8 (patch) | |
tree | 4da56a0b0235088ac54880412b1abeb5c71a3ecc | |
parent | 1ab443caa684655738c326f2b7bf556eed5a9f81 (diff) | |
download | snakeyaml-622dc5594c64b56fc9ab029da293dde4a27b4fe8.tar.gz |
Enhanced output of token id's
5 files changed, 89 insertions, 8 deletions
diff --git a/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java b/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java index b5a7d713..8402eb9e 100644 --- a/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java +++ b/src/main/java/org/yaml/snakeyaml/parser/ParserImpl.java @@ -222,8 +222,8 @@ public class ParserImpl implements Parser { Mark startMark = token.getStartMark(); VersionTagsTuple tuple = processDirectives(); if (!scanner.checkToken(Token.ID.DocumentStart)) { - throw new ParserException(null, null, "expected '<document start>', but found " - + scanner.peekToken().getTokenId(), scanner.peekToken().getStartMark()); + throw new ParserException(null, null, "expected '<document start>', but found '" + + scanner.peekToken().getTokenId() + "'", scanner.peekToken().getStartMark()); } token = scanner.getToken(); Mark endMark = token.getEndMark(); @@ -478,7 +478,7 @@ public class ParserImpl implements Parser { } Token token = scanner.peekToken(); throw new ParserException("while parsing a " + node + " node", startMark, - "expected the node content, but found " + token.getTokenId(), + "expected the node content, but found '" + token.getTokenId() + "'", token.getStartMark()); } } @@ -512,7 +512,7 @@ public class ParserImpl implements Parser { if (!scanner.checkToken(Token.ID.BlockEnd)) { Token token = scanner.peekToken(); throw new ParserException("while parsing a block collection", marks.pop(), - "expected <block end>, but found " + token.getTokenId(), + "expected <block end>, but found '" + token.getTokenId() + "'", token.getStartMark()); } Token token = scanner.getToken(); @@ -568,7 +568,7 @@ public class ParserImpl implements Parser { if (!scanner.checkToken(Token.ID.BlockEnd)) { Token token = scanner.peekToken(); throw new ParserException("while parsing a block mapping", marks.pop(), - "expected <block end>, but found " + token.getTokenId(), + "expected <block end>, but found '" + token.getTokenId() + "'", token.getStartMark()); } Token token = scanner.getToken(); diff --git a/src/main/java/org/yaml/snakeyaml/tokens/Token.java b/src/main/java/org/yaml/snakeyaml/tokens/Token.java index 3298c831..2b1c74bf 100644 --- a/src/main/java/org/yaml/snakeyaml/tokens/Token.java +++ b/src/main/java/org/yaml/snakeyaml/tokens/Token.java @@ -20,7 +20,41 @@ import org.yaml.snakeyaml.error.YAMLException; public abstract class Token { public enum ID { - Alias, Anchor, BlockEnd, BlockEntry, BlockMappingStart, BlockSequenceStart, Directive, DocumentEnd, DocumentStart, FlowEntry, FlowMappingEnd, FlowMappingStart, FlowSequenceEnd, FlowSequenceStart, Key, Scalar, StreamEnd, StreamStart, Tag, Value, Whitespace, Comment, Error + Alias("<alias>"), + Anchor("<anchor>"), + BlockEnd("<block end>"), + BlockEntry("-"), + BlockMappingStart("<block mapping start>"), + BlockSequenceStart("<block sequence start>"), + Directive("<directive>"), + DocumentEnd("<document end>"), + DocumentStart("<document start>"), + FlowEntry(","), + FlowMappingEnd("}"), + FlowMappingStart("{"), + FlowSequenceEnd("]"), + FlowSequenceStart("["), + Key("?"), + Scalar("<scalar>"), + StreamEnd("<stream end>"), + StreamStart("<stream start>"), + Tag("<tag>"), + Value(":"), + Whitespace("<whitespace>"), + Comment("#"), + Error("<error>"); + + + private final String description; + + ID(String s) { + description = s; + } + + @Override + public String toString() { + return description; + } } private final Mark startMark; diff --git a/src/test/java/org/yaml/snakeyaml/YamlTest.java b/src/test/java/org/yaml/snakeyaml/YamlTest.java index 8f71b66b..a20967cc 100644 --- a/src/test/java/org/yaml/snakeyaml/YamlTest.java +++ b/src/test/java/org/yaml/snakeyaml/YamlTest.java @@ -52,7 +52,7 @@ public class YamlTest extends TestCase { } catch (Exception e) { assertEquals("while parsing a flow node\n" + " in 'reader', line 2, column 6:\n" + " --- [:]\n" + " ^\n" - + "expected the node content, but found Value\n" + + "expected the node content, but found ':'\n" + " in 'reader', line 2, column 6:\n" + " --- [:]\n" + " ^\n", e.getMessage()); } diff --git a/src/test/java/org/yaml/snakeyaml/javabeans/ConstructEmptyBeanTest.java b/src/test/java/org/yaml/snakeyaml/javabeans/ConstructEmptyBeanTest.java index 8dea2315..56d2004f 100644 --- a/src/test/java/org/yaml/snakeyaml/javabeans/ConstructEmptyBeanTest.java +++ b/src/test/java/org/yaml/snakeyaml/javabeans/ConstructEmptyBeanTest.java @@ -99,7 +99,7 @@ public class ConstructEmptyBeanTest extends TestCase { fail("Invalid document provided."); } catch (Exception e) { assertEquals("while parsing a flow node\n" + " in 'string', line 1, column 2:\n" - + " {\n" + " ^\n" + "expected the node content, but found StreamEnd\n" + + " {\n" + " ^\n" + "expected the node content, but found '<stream end>'\n" + " in 'string', line 1, column 2:\n" + " {\n" + " ^\n", e.getMessage()); } } diff --git a/src/test/java/org/yaml/snakeyaml/tokens/TokenTest.java b/src/test/java/org/yaml/snakeyaml/tokens/TokenTest.java new file mode 100644 index 00000000..d351ce03 --- /dev/null +++ b/src/test/java/org/yaml/snakeyaml/tokens/TokenTest.java @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2018, http://www.snakeyaml.org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.yaml.snakeyaml.tokens; + +import junit.framework.TestCase; + +public class TokenTest extends TestCase { + public void testTokenID() { + assertEquals("<alias>", Token.ID.Alias.toString()); + assertEquals("<anchor>", Token.ID.Anchor.toString()); + assertEquals("<block end>", Token.ID.BlockEnd.toString()); + assertEquals("-", Token.ID.BlockEntry.toString()); + assertEquals("<block mapping start>", Token.ID.BlockMappingStart.toString()); + assertEquals("<block sequence start>", Token.ID.BlockSequenceStart.toString()); + assertEquals("<directive>", Token.ID.Directive.toString()); + assertEquals("<document end>", Token.ID.DocumentEnd.toString()); + assertEquals("<document start>", Token.ID.DocumentStart.toString()); + assertEquals(",", Token.ID.FlowEntry.toString()); + assertEquals("}", Token.ID.FlowMappingEnd.toString()); + assertEquals("{", Token.ID.FlowMappingStart.toString()); + assertEquals("]", Token.ID.FlowSequenceEnd.toString()); + assertEquals("[", Token.ID.FlowSequenceStart.toString()); + assertEquals("?", Token.ID.Key.toString()); + assertEquals("<scalar>", Token.ID.Scalar.toString()); + assertEquals("<stream end>", Token.ID.StreamEnd.toString()); + assertEquals("<stream start>", Token.ID.StreamStart.toString()); + assertEquals("<tag>", Token.ID.Tag.toString()); + assertEquals(":", Token.ID.Value.toString()); + assertEquals("<whitespace>", Token.ID.Whitespace.toString()); + assertEquals("#", Token.ID.Comment.toString()); + assertEquals("<error>", Token.ID.Error.toString()); + } +} + |