diff options
| author | Martin Karpisek | 2016-10-15 13:28:39 +0000 |
|---|---|---|
| committer | Lars Vogel | 2016-11-28 20:02:24 +0000 |
| commit | 22c05f142881289b22e11436831f244d2db36f29 (patch) | |
| tree | 62b7e7071c22a3f0d6d88933559d979b13f3b2a1 | |
| parent | 6142d58cff205fdbed7296f5fe9712f96ed4a422 (diff) | |
| download | eclipse.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>
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=\"(& (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; } |
