diff options
author | Steffen Pingel | 2013-04-26 20:54:58 +0000 |
---|---|---|
committer | Steffen Pingel | 2013-04-30 17:08:53 +0000 |
commit | af505574701f1e70b64d892666dac6f4cffe9945 (patch) | |
tree | 8858a2f7915f54acfc3b15b786127f664982fe70 /org.eclipse.mylyn.tasks.tests | |
parent | efd5db80f0b94f2b9d94df6a153a4e98cfbd9e8b (diff) | |
download | org.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.MF | 3 | ||||
-rw-r--r-- | org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/TaskDataStoreTest.java | 75 | ||||
-rw-r--r-- | org.eclipse.mylyn.tasks.tests/testdata/taskdata-bug406647.zip | bin | 0 -> 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 Binary files differnew file mode 100644 index 000000000..c4ddcb851 --- /dev/null +++ b/org.eclipse.mylyn.tasks.tests/testdata/taskdata-bug406647.zip |