From a5b2e9430aa6276fd39d33b3b337c0e2520859e3 Mon Sep 17 00:00:00 2001 From: Brian de Alwis Date: Thu, 10 Mar 2016 17:02:37 -0500 Subject: [Help] Fix JSON generation to create conformant JSON Change-Id: I5ac232360beff296d1c256a14a759912d9218cb7 --- .../help/internal/webapp/parser/AboutParser.java | 4 ++-- .../eclipse/help/internal/webapp/parser/NavParser.java | 4 ++-- .../help/internal/webapp/parser/ParseElement.java | 8 ++++---- .../help/internal/webapp/parser/ResultParser.java | 6 +++--- .../eclipse/help/internal/webapp/utils/JSonHelper.java | 12 +++++++++--- .../eclipse/ua/tests/help/webapp/AllWebappTests.java | 3 ++- .../eclipse/ua/tests/help/webapp/JsonHelperTests.java | 17 +++++++++++++++++ 7 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/webapp/JsonHelperTests.java diff --git a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/AboutParser.java b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/AboutParser.java index d0c21f958..d24570b07 100644 --- a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/AboutParser.java +++ b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/AboutParser.java @@ -102,13 +102,13 @@ public class AboutParser extends ResultParser { buf.append(JSonHelper.BEGIN_BRACE); buf.append(JSonHelper.NEWLINE + JSonHelper.SPACE); - buf.append(JSonHelper.IDENTIFIER); + buf.append(JSonHelper.getQuotes(JSonHelper.IDENTIFIER)); buf.append(JSonHelper.COLON); buf.append(JSonHelper.getQuotes(id)); buf.append(JSonHelper.COMMA); buf.append(JSonHelper.NEWLINE + JSonHelper.SPACE); - buf.append(JSonHelper.LABEL); + buf.append(JSonHelper.getQuotes(JSonHelper.LABEL)); buf.append(JSonHelper.COLON); buf.append(JSonHelper.getQuotes(label)); buf.append(JSonHelper.COMMA); diff --git a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/NavParser.java b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/NavParser.java index 0dcab04e8..c1446fa65 100644 --- a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/NavParser.java +++ b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/NavParser.java @@ -60,13 +60,13 @@ public class NavParser extends ResultParser { buf.append(JSonHelper.BEGIN_BRACE); buf.append(JSonHelper.NEWLINE + JSonHelper.SPACE); - buf.append(JSonHelper.IDENTIFIER); + buf.append(JSonHelper.getQuotes(JSonHelper.IDENTIFIER)); buf.append(JSonHelper.COLON); buf.append(JSonHelper.getQuotes(id)); buf.append(JSonHelper.COMMA); buf.append(JSonHelper.NEWLINE + JSonHelper.SPACE); - buf.append(JSonHelper.LABEL); + buf.append(JSonHelper.getQuotes(JSonHelper.LABEL)); buf.append(JSonHelper.COLON); buf.append(JSonHelper.getQuotes(label)); buf.append(JSonHelper.COMMA); diff --git a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ParseElement.java b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ParseElement.java index 2e72fca8b..909d3839a 100644 --- a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ParseElement.java +++ b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ParseElement.java @@ -82,7 +82,7 @@ public class ParseElement { String val = props.getProperty(key); buff.append(JSonHelper.NEWLINE + space + JSonHelper.SPACE); - buff.append(key); + buff.append(JSonHelper.getQuotes(key)); buff.append(JSonHelper.COLON); try { val = URLEncoder.encode(val, "UTF-8"); //$NON-NLS-1$ @@ -105,7 +105,7 @@ public class ParseElement { } else { buff.append(JSonHelper.NEWLINE + space + JSonHelper.SPACE); - buff.append(JSonHelper.CHILDREN); + buff.append(JSonHelper.getQuotes(JSonHelper.CHILDREN)); buff.append(JSonHelper.COLON); buff.append(JSonHelper.BEGIN_BRACKET); @@ -141,7 +141,7 @@ public class ParseElement { String val = props.getProperty(key); buff.append(JSonHelper.NEWLINE + JSonHelper.SPACE); - buff.append(key); + buff.append(JSonHelper.getQuotes(key)); buff.append(JSonHelper.COLON); try { val = URLEncoder.encode(val, "UTF-8"); //$NON-NLS-1$ @@ -164,7 +164,7 @@ public class ParseElement { } else { buff.append(JSonHelper.NEWLINE + JSonHelper.SPACE); - buff.append(JSonHelper.ITEMS); + buff.append(JSonHelper.getQuotes(JSonHelper.ITEMS)); buff.append(JSonHelper.COLON); buff.append(JSonHelper.BEGIN_BRACKET); diff --git a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ResultParser.java b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ResultParser.java index 48c905c6d..cd3829553 100644 --- a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ResultParser.java +++ b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/parser/ResultParser.java @@ -77,19 +77,19 @@ public class ResultParser extends DefaultHandler { buf.append(JSonHelper.BEGIN_BRACE); buf.append(JSonHelper.NEWLINE + JSonHelper.SPACE); - buf.append(JSonHelper.IDENTIFIER); + buf.append(JSonHelper.getQuotes(JSonHelper.IDENTIFIER)); buf.append(JSonHelper.COLON); buf.append(JSonHelper.getQuotes(id)); buf.append(JSonHelper.COMMA); buf.append(JSonHelper.NEWLINE + JSonHelper.SPACE); - buf.append(JSonHelper.LABEL); + buf.append(JSonHelper.getQuotes(JSonHelper.LABEL)); buf.append(JSonHelper.COLON); buf.append(JSonHelper.getQuotes(label)); buf.append(JSonHelper.COMMA); buf.append(JSonHelper.NEWLINE + JSonHelper.SPACE); - buf.append(JSonHelper.ITEMS); + buf.append(JSonHelper.getQuotes(JSonHelper.ITEMS)); buf.append(JSonHelper.COLON); buf.append(JSonHelper.BEGIN_BRACKET); diff --git a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/JSonHelper.java b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/JSonHelper.java index 225573048..1043d559f 100644 --- a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/JSonHelper.java +++ b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/utils/JSonHelper.java @@ -15,7 +15,7 @@ public final class JSonHelper { //JSON Characters public static final String BEGIN_BRACE = "{"; //$NON-NLS-1$ public static final String END_BRACE = "}"; //$NON-NLS-1$ - public static final String QUOTE = "\'"; //$NON-NLS-1$ + public static final String DOUBLEQUOTE = "\""; //$NON-NLS-1$ public static final String COLON = ":"; //$NON-NLS-1$ public static final String BEGIN_BRACKET = "["; //$NON-NLS-1$ public static final String END_BRACKET = "]"; //$NON-NLS-1$ @@ -52,8 +52,14 @@ public final class JSonHelper { public static final String TOPIC = "Topic"; //$NON-NLS-1$ public static final String NUMERIC_PATH = "NumericPath"; //$NON-NLS-1$ - public static String getQuotes(String str){ - return ((str != null)?QUOTE + str + QUOTE:""); //$NON-NLS-1$ + public static String getQuotes(String str) { + if (str == null) { + return ""; //$NON-NLS-1$ + } + if (str.indexOf(DOUBLEQUOTE) < 0) { + return DOUBLEQUOTE + str + DOUBLEQUOTE; + } + return DOUBLEQUOTE + str.replaceAll(DOUBLEQUOTE, "\\\\" + DOUBLEQUOTE) + DOUBLEQUOTE; //$NON-NLS-1$ } } diff --git a/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/webapp/AllWebappTests.java b/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/webapp/AllWebappTests.java index 8ec2d1bd6..fb2912396 100644 --- a/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/webapp/AllWebappTests.java +++ b/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/webapp/AllWebappTests.java @@ -32,7 +32,8 @@ import org.junit.runners.Suite; HelpServerInterrupt.class, HelpServerBinding.class, HtmlCoderTest.class, - TocZipTest.class + TocZipTest.class, + JsonHelperTests.class }) public class AllWebappTests { } diff --git a/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/webapp/JsonHelperTests.java b/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/webapp/JsonHelperTests.java new file mode 100644 index 000000000..6df0223be --- /dev/null +++ b/org.eclipse.ua.tests/help/org/eclipse/ua/tests/help/webapp/JsonHelperTests.java @@ -0,0 +1,17 @@ +package org.eclipse.ua.tests.help.webapp; + +import static org.junit.Assert.assertEquals; + +import org.eclipse.help.internal.webapp.utils.JSonHelper; +import org.junit.Test; + +public class JsonHelperTests { + @Test + public void testQuoted() { + assertEquals("\"test\"", JSonHelper.getQuotes("test")); + assertEquals("\"test test\"", JSonHelper.getQuotes("test test")); + assertEquals("\"test\\\"test\"", JSonHelper.getQuotes("test\"test")); + assertEquals("\"\\\"test test\\\"\"", JSonHelper.getQuotes("\"test test\"")); + assertEquals("\"\\\\\"test test\\\\\"\"", JSonHelper.getQuotes("\\\"test test\\\"")); + } +} -- cgit v1.2.3