diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-30 16:53:16 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-30 16:53:16 +0100 |
| commit | d71b9ef7b2ed7d72df132b5e38448fbbac7036be (patch) | |
| tree | b872d6a4aeac5f043a61bb0a856ec85e202469a3 | |
| parent | ff98a9a2804d5e7c042d6bb400cd9265cf00fa85 (diff) | |
Produce nicer error messages in C#
8 files changed, 61 insertions, 19 deletions
diff --git a/couscous.json b/couscous.json index f478d4b..e628c14 100644 --- a/couscous.json +++ b/couscous.json @@ -8,6 +8,8 @@ "!src/main/java/org/zwobble/mammoth/DocumentConverter.java", "!src/main/java/org/zwobble/mammoth/internal/docx/ZippedDocxFile.java", "!src/main/java/org/zwobble/mammoth/internal/docx/InMemoryDocxFile.java", + "!src/main/java/org/zwobble/mammoth/internal/styles/parsing/LineParseException.java", + "!src/main/java/org/zwobble/mammoth/internal/styles/parsing/ParseException.java", "!src/main/java/org/zwobble/mammoth/internal/util", "src/main/java/org/zwobble/mammoth/internal/util/InputStreamSupplier.java", "src/main/java/org/zwobble/mammoth/internal/util/Optionals.java", diff --git a/dotnet/Mammoth.Tests/DocumentConverterTests.cs b/dotnet/Mammoth.Tests/DocumentConverterTests.cs index 89ade1c..92a3adf 100644 --- a/dotnet/Mammoth.Tests/DocumentConverterTests.cs +++ b/dotnet/Mammoth.Tests/DocumentConverterTests.cs @@ -151,13 +151,24 @@ namespace Mammoth.Tests { } [Fact] - public void RulesFromPreviouslyAddedStyleMapsStillTakeEffectIfNotOverriden() { + public void RulesFromPreviouslyAddedStyleMapsStillTakeEffectIfNotOverridden() { AssertSuccessfulConversion( ConvertToHtml("underline.docx", mammoth => mammoth.AddStyleMap("u => em").AddStyleMap("strike => del")), "<p><strong>The <em>Sunset</em> Tree</strong></p>"); } [Fact] + public void ErrorIsRaisedIfStyleMapCannotBeParsed() { + var exception = Assert.ThrowsAny<Exception>(() => + new DocumentConverter().AddStyleMap("p =>\np[style-name=] =>")); + Assert.Equal( + "error reading style map at line 2, character 14: expected token of type _STRING but was of type _CLOSE_SQUARE_BRACKET\n\n" + + "p[style-name=] =>\n" + + " ^", + exception.Message); + } + + [Fact] public void CanDisableDefaultStyleMap() { var result = ConvertToHtml("simple-list.docx", mammoth => mammoth.DisableDefaultStyleMap()); Assert.Equal(new[]{"Unrecognised paragraph style: List Paragraph (Style ID: ListParagraph)"}, result.Warnings); diff --git a/dotnet/Mammoth/Couscous/HorribleHacks.cs b/dotnet/Mammoth/Couscous/HorribleHacks.cs index 9f1ac30..c97dc0a 100644 --- a/dotnet/Mammoth/Couscous/HorribleHacks.cs +++ b/dotnet/Mammoth/Couscous/HorribleHacks.cs @@ -26,5 +26,9 @@ namespace Mammoth.Couscous { internal static bool equals(this TokenType first, TokenType second) { return first == second; } + + internal static string getMessage(this System.Exception exception) { + return exception.Message; + } } } diff --git a/dotnet/Mammoth/Couscous/mammoth/internal/styles/parsing/LineParseException.cs b/dotnet/Mammoth/Couscous/mammoth/internal/styles/parsing/LineParseException.cs new file mode 100644 index 0000000..6ca9381 --- /dev/null +++ b/dotnet/Mammoth/Couscous/mammoth/internal/styles/parsing/LineParseException.cs @@ -0,0 +1,15 @@ +using Mammoth.Couscous.java.lang; + +namespace Mammoth.Couscous.org.zwobble.mammoth.@internal.styles.parsing { + internal class LineParseException : RuntimeException { + private readonly Token _token; + + internal LineParseException(Token token, string message) : base(message) { + _token = token; + } + + internal Token getToken() { + return _token; + } + } +} diff --git a/dotnet/Mammoth/Couscous/mammoth/internal/styles/parsing/ParseException.cs b/dotnet/Mammoth/Couscous/mammoth/internal/styles/parsing/ParseException.cs new file mode 100644 index 0000000..73f349c --- /dev/null +++ b/dotnet/Mammoth/Couscous/mammoth/internal/styles/parsing/ParseException.cs @@ -0,0 +1,8 @@ +using Mammoth.Couscous.java.lang; + +namespace Mammoth.Couscous.org.zwobble.mammoth.@internal.styles.parsing { + internal class ParseException : RuntimeException { + internal ParseException(string message) : base(message) { + } + } +} diff --git a/dotnet/Mammoth/Mammoth.csproj b/dotnet/Mammoth/Mammoth.csproj index 4e945d0..6e2c473 100644 --- a/dotnet/Mammoth/Mammoth.csproj +++ b/dotnet/Mammoth/Mammoth.csproj @@ -81,6 +81,8 @@ <Compile Include="Couscous\java\util\Set.cs" /> <Compile Include="Couscous\mammoth\internal\docx\InMemoryDocxFile.cs" /> <Compile Include="Couscous\mammoth\internal\docx\ZippedDocxFile.cs" /> + <Compile Include="Couscous\mammoth\internal\styles\parsing\LineParseException.cs" /> + <Compile Include="Couscous\mammoth\internal\styles\parsing\ParseException.cs" /> <Compile Include="Couscous\mammoth\internal\util\Base64Encoding.cs" /> <Compile Include="Couscous\mammoth\internal\util\Casts.cs" /> <Compile Include="Couscous\mammoth\internal\util\Lists.cs" /> diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/ParseException.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/ParseException.java index 40fb16b..718bb30 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/ParseException.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/ParseException.java @@ -1,22 +1,7 @@ package org.zwobble.mammoth.internal.styles.parsing; public class ParseException extends RuntimeException { - public ParseException(String line, int lineNumber, Token token, String message) { - super(generateMessage(line, lineNumber, token, message)); - } - - private static String generateMessage(String line, int lineNumber, Token token, String message) { - return "error reading style map at line " + lineNumber + ", character " + (token.getCharacterIndex() + 1) + - ": " + message + "\n\n" + - line + "\n" + - repeatString(" ", token.getCharacterIndex()) + "^"; - } - - private static String repeatString(String value, int times) { - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < times; i++) { - builder.append(value); - } - return builder.toString(); + public ParseException(String message) { + super(message); } } diff --git a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java index d1ceb72..8dd4099 100644 --- a/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java +++ b/src/main/java/org/zwobble/mammoth/internal/styles/parsing/StyleMapParser.java @@ -22,7 +22,7 @@ public class StyleMapParser { try { handleLine(styleMap, line); } catch (LineParseException exception) { - throw new ParseException(line, lineIndex + 1, exception.getToken(), exception.getMessage()); + throw new ParseException(generateErrorMessage(line, lineIndex + 1, exception.getToken(), exception.getMessage())); } } return styleMap.build(); @@ -63,4 +63,19 @@ public class StyleMapParser { return HtmlPathParser.parse(tokens); } } + + private static String generateErrorMessage(String line, int lineNumber, Token token, String message) { + return "error reading style map at line " + lineNumber + ", character " + (token.getCharacterIndex() + 1) + + ": " + message + "\n\n" + + line + "\n" + + repeatString(" ", token.getCharacterIndex()) + "^"; + } + + private static String repeatString(String value, int times) { + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < times; i += 1) { + builder.append(value); + } + return builder.toString(); + } } |
