Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteffen Pingel2013-04-26 20:54:58 +0000
committerSteffen Pingel2013-04-30 17:08:53 +0000
commitaf505574701f1e70b64d892666dac6f4cffe9945 (patch)
tree8858a2f7915f54acfc3b15b786127f664982fe70 /org.eclipse.mylyn.tasks.tests
parentefd5db80f0b94f2b9d94df6a153a4e98cfbd9e8b (diff)
downloadorg.eclipse.mylyn.tasks-af505574701f1e70b64d892666dac6f4cffe9945.tar.gz
org.eclipse.mylyn.tasks-af505574701f1e70b64d892666dac6f4cffe9945.tar.xz
org.eclipse.mylyn.tasks-af505574701f1e70b64d892666dac6f4cffe9945.zip
406647: task data gets corrupted when falling back to XML 1.1
Change-Id: I28a69c4aec071ae5ac72aa007285f9ca2acbedb1 Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=406647
Diffstat (limited to 'org.eclipse.mylyn.tasks.tests')
-rw-r--r--org.eclipse.mylyn.tasks.tests/META-INF/MANIFEST.MF3
-rw-r--r--org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataStoreTest.java75
-rw-r--r--org.eclipse.mylyn.tasks.tests/testdata/taskdata-bug406647.zipbin0 -> 2430 bytes
3 files changed, 69 insertions, 9 deletions
diff --git a/org.eclipse.mylyn.tasks.tests/META-INF/MANIFEST.MF b/org.eclipse.mylyn.tasks.tests/META-INF/MANIFEST.MF
index e94d6cc2f..35965e294 100644
--- a/org.eclipse.mylyn.tasks.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.mylyn.tasks.tests/META-INF/MANIFEST.MF
@@ -5,7 +5,8 @@ Bundle-SymbolicName: org.eclipse.mylyn.tasks.tests;singleton:=true
Bundle-Version: 3.9.0.qualifier
Bundle-Activator: org.eclipse.mylyn.tasks.tests.TasksTestsPlugin
Bundle-Vendor: Eclipse Mylyn
-Require-Bundle: org.junit;bundle-version="4.8.2",
+Require-Bundle: org.junit;bundle-version="4.8.2",
+ org.apache.xerces;bundle-version="2.9.0",
org.eclipse.core.expressions,
org.eclipse.core.resources,
org.eclipse.core.runtime,
diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataStoreTest.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataStoreTest.java
index a506fd4cc..bce08e9e5 100644
--- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataStoreTest.java
+++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataStoreTest.java
@@ -16,7 +16,9 @@ import java.util.Date;
import junit.framework.TestCase;
+import org.apache.commons.lang.RandomStringUtils;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.mylyn.commons.sdk.util.CommonTestUtil;
import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
import org.eclipse.mylyn.internal.tasks.core.data.TaskDataState;
import org.eclipse.mylyn.internal.tasks.core.data.TaskDataStore;
@@ -198,8 +200,6 @@ public class TaskDataStoreTest extends TestCase {
setupData();
data.getRoot().createAttribute("attribute").setValue("\u0000");
- File file = File.createTempFile("mylyn", null);
- file.deleteOnExit();
storage.putTaskData(file, state);
try {
@@ -213,8 +213,6 @@ public class TaskDataStoreTest extends TestCase {
setupData();
data.getRoot().createAttribute("attribute").setValue("\u0001\u001F");
- File file = File.createTempFile("mylyn", null);
- file.deleteOnExit();
storage.putTaskData(file, state);
TaskDataState state2 = storage.getTaskDataState(file);
@@ -225,8 +223,6 @@ public class TaskDataStoreTest extends TestCase {
setupData();
data.getRoot().createAttribute("attribute").setValue("\u007F\u0080");
- File file = File.createTempFile("mylyn", null);
- file.deleteOnExit();
storage.putTaskData(file, state);
TaskDataState state2 = storage.getTaskDataState(file);
@@ -237,8 +233,6 @@ public class TaskDataStoreTest extends TestCase {
setupData();
data.getRoot().createAttribute("attribute").setValue("\u0001\u001F\u007F\u0080");
- File file = File.createTempFile("mylyn", null);
- file.deleteOnExit();
storage.putTaskData(file, state);
if (System.getProperty("java.version").compareTo("1.6") < 0) {
@@ -288,4 +282,69 @@ public class TaskDataStoreTest extends TestCase {
TaskDataState state2 = storage.getTaskDataState(file);
assertFalse(state2.getRepositoryData().getRoot().getAttribute("attribute").hasValue());
}
+
+ public void testCorruptedData() throws Exception {
+ if (!hasXerces()) {
+ System.err.println("Skipping testCorruptedData() due to Xerces missing");
+ return;
+ }
+ state = storage.getTaskDataState(CommonTestUtil.getFile(this, "testdata/taskdata-bug406647.zip"));
+ assertFalse(state.getRepositoryData().getRoot().toString().contains("<ke"));
+ assertFalse(state.getRepositoryData().getRoot().toString().contains("<va"));
+ assertFalse(state.getRepositoryData().getRoot().toString().contains("ey>"));
+ assertFalse(state.getRepositoryData().getRoot().toString().contains("al>"));
+ }
+
+ private boolean hasXerces() {
+ try {
+ Class.forName("org.apache.xerces.parsers.SAXParser");
+ return true;
+ } catch (ClassNotFoundException e) {
+ return false;
+ }
+ }
+
+ public void testRandomDataXml_1_0() throws Exception {
+ randomData(32, Integer.MAX_VALUE);
+ }
+
+ public void testRandomDataXml_1_1() throws Exception {
+ if (!hasXerces()) {
+ System.err.println("Skipping testRandomDataXml_1_1 due to Xerces missing");
+ return;
+ }
+ randomData(0, Integer.MAX_VALUE);
+ }
+
+ private void randomData(int start, int end) throws Exception {
+ setupData();
+
+ for (int i = 0; i < 1000; i++) {
+ TaskAttribute attribute = data.getRoot().createAttribute("testId");
+ attribute.getMetaData().setLabel(generateString(start, end));
+ attribute.putOption(generateString(start, end), generateString(start, end));
+ attribute.putOption(generateString(start, end), generateString(start, end));
+ attribute.addValue(generateString(start, end));
+ attribute.addValue(generateString(start, end));
+ if (start == 0) {
+ // ensure that XML is read as version 1.1
+ attribute.addValue(generateString(start, end) + "\u0001");
+ }
+ }
+
+ String expectedValue = data.getRoot().toString();
+ storage.putTaskData(file, state);
+
+ state = storage.getTaskDataState(file);
+ String actualValue = state.getRepositoryData().getRoot().toString();
+ assertEquals(expectedValue, actualValue);
+ }
+
+ /**
+ * Returns a random string that doesn't contain "key" or "val".
+ */
+ private String generateString(int start, int end) {
+ return RandomStringUtils.random(1000, start, end, true, true);
+ }
+
}
diff --git a/org.eclipse.mylyn.tasks.tests/testdata/taskdata-bug406647.zip b/org.eclipse.mylyn.tasks.tests/testdata/taskdata-bug406647.zip
new file mode 100644
index 000000000..c4ddcb851
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.tests/testdata/taskdata-bug406647.zip
Binary files differ

Back to the top