Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Karpisek2016-10-15 13:28:39 +0000
committerLars Vogel2016-11-28 20:02:24 +0000
commit22c05f142881289b22e11436831f244d2db36f29 (patch)
tree62b7e7071c22a3f0d6d88933559d979b13f3b2a1
parent6142d58cff205fdbed7296f5fe9712f96ed4a422 (diff)
downloadeclipse.pde.ui-22c05f142881289b22e11436831f244d2db36f29.tar.gz
eclipse.pde.ui-22c05f142881289b22e11436831f244d2db36f29.tar.xz
eclipse.pde.ui-22c05f142881289b22e11436831f244d2db36f29.zip
Bug 322975 - FeatureData writes attributes without encodingI20161128-2000
added attribute value encoding using already existing xml encoding code also new test case with and without ldap style filter Change-Id: Ieebb9e81ad9f71bc6edc62f289c7789d0dd0b6b4 Signed-off-by: Martin Karpisek <martin.karpisek@gmail.com>
-rw-r--r--ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureData.java6
-rw-r--r--ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/core/tests/internal/feature/FeatureDataTestCase.java105
-rw-r--r--ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/model/xml/AllXMLModelTests.java2
3 files changed, 111 insertions, 2 deletions
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureData.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureData.java
index afbf44c62c..e9fc5b711f 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureData.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureData.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2016 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -7,12 +7,14 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
+ * Martin Karpisek <martin.karpisek@gmail.com> - Bug 322975
*******************************************************************************/
package org.eclipse.pde.internal.core.feature;
import java.io.File;
import java.io.PrintWriter;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.pde.internal.core.XMLPrintHandler;
import org.eclipse.pde.internal.core.ifeature.IFeatureData;
import org.w3c.dom.Node;
@@ -80,7 +82,7 @@ public class FeatureData extends IdentifiableObject implements IFeatureData {
writer.print(indent2);
writer.print(attribute);
writer.print("=\""); //$NON-NLS-1$
- writer.print(value);
+ writer.print(XMLPrintHandler.encode(value));
writer.print("\""); //$NON-NLS-1$
}
}
diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/core/tests/internal/feature/FeatureDataTestCase.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/core/tests/internal/feature/FeatureDataTestCase.java
new file mode 100644
index 0000000000..df605722be
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/core/tests/internal/feature/FeatureDataTestCase.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Martin Karpisek and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Martin Karpisek <martin.karpisek@gmail.com> - initial API and implementationBug 322975
+ *******************************************************************************/
+package org.eclipse.pde.core.tests.internal.feature;
+
+import java.io.*;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import junit.framework.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.pde.internal.core.feature.FeatureData;
+import org.eclipse.pde.internal.core.feature.WorkspaceFeatureModel;
+import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
+import org.w3c.dom.*;
+import org.xml.sax.InputSource;
+public class FeatureDataTestCase extends TestCase {
+ public static Test suite() {
+ return new TestSuite(FeatureDataTestCase.class);
+ }
+
+ private static final String FEATURE_INDENT = " ";
+
+ public void testSerialization() throws Exception {
+ String expected = String.format("<data%n" +
+ FEATURE_INDENT + "id=\"id.1\"%n" + FEATURE_INDENT + "os=\"win32\"%n" + FEATURE_INDENT
+ + "arch=\"x86_64\"%n" + FEATURE_INDENT
+ + "download-size=\"1000\"%n" +
+ FEATURE_INDENT + "install-size=\"0\"/>%n"
+ );
+ FeatureData data = newFeatureData();
+ String actual = toXml(data);
+ assertEquals(expected, actual);
+
+ FeatureData data2 = fromXml(actual);
+ assertEquals(data.getId(), data2.getId());
+ assertEquals(data.getOS(), data2.getOS());
+ assertEquals(data.getArch(), data2.getArch());
+ assertEquals(data.getFilter(), data2.getFilter());
+ assertEquals(data.getDownloadSize(), data2.getDownloadSize());
+ }
+
+ public void testSerializationWithLdapFilter() throws CoreException {
+ String expected = String.format("<data%n" + FEATURE_INDENT + "id=\"id.1\"%n" + FEATURE_INDENT + "os=\"win32\"%n"
+ + FEATURE_INDENT + "arch=\"x86_64\"%n" + FEATURE_INDENT
+ + "filter=\"(&amp; (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))\"%n" + FEATURE_INDENT
+ + "download-size=\"1000\"%n" + FEATURE_INDENT
+ + "install-size=\"0\"/>%n");
+ FeatureData data = newFeatureData();
+ data.setFilter("(& (osgi.ws=win32) (osgi.os=win32) (osgi.arch=x86))");
+ String actual = toXml(data);
+ assertEquals(expected, actual);
+ }
+
+ private FeatureData newFeatureData() throws CoreException {
+ IFeatureModel mock = new WorkspaceFeatureModel();
+
+ FeatureData data = new FeatureData();
+ data.setModel(mock);
+ data.setId("id.1");
+ data.setLabel("Feature1");
+ data.setArch("x86_64");
+ data.setOS("win32");
+ data.setDownloadSize(1000);
+ return data;
+ }
+
+ private String toXml(FeatureData data) {
+ StringWriter sw = new StringWriter();
+ data.write("", new PrintWriter(sw));
+ String actual = sw.toString();
+ return actual;
+ }
+
+ public static FeatureData fromXml(String xml) throws Exception {
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ InputSource is = new InputSource(new StringReader(xml));
+ Document doc = builder.parse(is);
+
+ assertNotNull(doc);
+
+ NodeList nodes = doc.getElementsByTagName("data");
+ assertEquals(1, nodes.getLength());
+ Node node = nodes.item(0);
+
+ FeatureDataForTesting data = new FeatureDataForTesting();
+ data.parse(node);
+ return data;
+ }
+
+ @SuppressWarnings("serial")
+ public static class FeatureDataForTesting extends FeatureData {
+ @Override
+ public void parse(Node node) {
+ super.parse(node);
+ }
+ }
+}
diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/model/xml/AllXMLModelTests.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/model/xml/AllXMLModelTests.java
index c5862431e2..8a3b149e37 100644
--- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/model/xml/AllXMLModelTests.java
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/model/xml/AllXMLModelTests.java
@@ -12,6 +12,7 @@ package org.eclipse.pde.ui.tests.model.xml;
import junit.framework.Test;
import junit.framework.TestSuite;
+import org.eclipse.pde.core.tests.internal.feature.FeatureDataTestCase;
public class AllXMLModelTests {
@@ -27,6 +28,7 @@ public class AllXMLModelTests {
suite.addTest(ExtensionAttributeTestCase.suite());
suite.addTest(ExtensionElementTestCase.suite());
suite.addTest(ManifestEditorSpellCheckTestCase.suite());
+ suite.addTest(FeatureDataTestCase.suite());
return suite;
}

Back to the top