diff options
-rw-r--r-- | org.eclipse.mylyn.tasks.core.tests/src/org/eclipse/mylyn/internal/tasks/core/externalization/SaxTaskBuilderTest.java | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/org.eclipse.mylyn.tasks.core.tests/src/org/eclipse/mylyn/internal/tasks/core/externalization/SaxTaskBuilderTest.java b/org.eclipse.mylyn.tasks.core.tests/src/org/eclipse/mylyn/internal/tasks/core/externalization/SaxTaskBuilderTest.java new file mode 100644 index 000000000..9a4244c22 --- /dev/null +++ b/org.eclipse.mylyn.tasks.core.tests/src/org/eclipse/mylyn/internal/tasks/core/externalization/SaxTaskBuilderTest.java @@ -0,0 +1,174 @@ +/******************************************************************************* + * Copyright (c) 2016 Tasktop Technologies 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: + * Tasktop Technologies - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.internal.tasks.core.externalization; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import java.util.Map; + +import org.eclipse.mylyn.internal.tasks.core.AbstractTask; +import org.eclipse.mylyn.internal.tasks.core.LocalRepositoryConnector; +import org.eclipse.mylyn.internal.tasks.core.LocalTask; +import org.eclipse.mylyn.internal.tasks.core.RepositoryModel; +import org.eclipse.mylyn.internal.tasks.core.TaskList; +import org.eclipse.mylyn.internal.tasks.core.TaskTask; +import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; +import org.eclipse.mylyn.tasks.core.IRepositoryManager; +import org.eclipse.mylyn.tasks.core.ITask.PriorityLevel; +import org.junit.Before; +import org.junit.Test; +import org.xml.sax.Attributes; +import org.xml.sax.helpers.AttributesImpl; + +import com.google.common.collect.ImmutableMap; + +public class SaxTaskBuilderTest { + + private SaxTaskBuilder builder; + + @Before + public void setup() { + TaskList taskList = new TaskList(); + IRepositoryManager repositoryManager = mock(IRepositoryManager.class); + doReturn(mock(AbstractRepositoryConnector.class)).when(repositoryManager) + .getRepositoryConnector("connector.kind"); + doReturn(mock(LocalRepositoryConnector.class)).when(repositoryManager).getRepositoryConnector("local"); + builder = new SaxTaskBuilder(new RepositoryModel(taskList, repositoryManager), repositoryManager); + } + + @Test + public void minimalTask() throws Exception { + Attributes elementAttributes = createAttributes(ImmutableMap.of(TaskListExternalizationConstants.KEY_HANDLE, + "1", TaskListExternalizationConstants.KEY_TASK_ID, "100", + TaskListExternalizationConstants.KEY_REPOSITORY_URL, "http://example.com", + TaskListExternalizationConstants.KEY_CONNECTOR_KIND, "connector.kind")); + + builder.beginItem(elementAttributes); + + assertTrue(builder.getErrors().isOK()); + AbstractTask task = builder.getItem(); + + assertNotNull(task); + assertTrue(task instanceof TaskTask); + assertEquals("http://example.com-100", task.getHandleIdentifier()); + assertEquals("100", task.getTaskId()); + assertEquals("http://example.com", task.getRepositoryUrl()); + assertEquals("", task.getSummary()); + assertEquals(PriorityLevel.P3.toString(), task.getPriority()); + assertNull(task.getTaskKey()); + } + + @Test + public void simpleTask() throws Exception { + ImmutableMap.Builder<String, String> attributesBuilder = ImmutableMap.builder(); + attributesBuilder.put(TaskListExternalizationConstants.KEY_HANDLE, "1"); + attributesBuilder.put(TaskListExternalizationConstants.KEY_TASK_ID, "100"); + attributesBuilder.put(TaskListExternalizationConstants.KEY_REPOSITORY_URL, "http://example.com"); + attributesBuilder.put(TaskListExternalizationConstants.KEY_LABEL, "Simple Task"); + attributesBuilder.put(TaskListExternalizationConstants.KEY_KEY, "EX-100"); + attributesBuilder.put(TaskListExternalizationConstants.KEY_PRIORITY, PriorityLevel.P1.toString()); + attributesBuilder.put(TaskListExternalizationConstants.KEY_CONNECTOR_KIND, "connector.kind"); + + builder.beginItem(createAttributes(attributesBuilder.build())); + + assertTrue(builder.getErrors().isOK()); + AbstractTask task = builder.getItem(); + + assertNotNull(task); + assertTrue(task instanceof TaskTask); + assertEquals("http://example.com-100", task.getHandleIdentifier()); + assertEquals("100", task.getTaskId()); + assertEquals("http://example.com", task.getRepositoryUrl()); + assertEquals("Simple Task", task.getSummary()); + assertEquals("EX-100", task.getTaskKey()); + assertEquals(PriorityLevel.P1.toString(), task.getPriority()); + } + + @Test + public void taskWithAttributes() throws Exception { + Attributes elementAttributes = createAttributes(ImmutableMap.of(TaskListExternalizationConstants.KEY_HANDLE, + "1", TaskListExternalizationConstants.KEY_TASK_ID, "100", + TaskListExternalizationConstants.KEY_REPOSITORY_URL, "http://example.com", + TaskListExternalizationConstants.KEY_CONNECTOR_KIND, "connector.kind")); + + builder.beginItem(elementAttributes); + putAttribute("att1", "value1"); + putAttribute("att2", "value2"); + + assertTrue(builder.getErrors().isOK()); + AbstractTask task = builder.getItem(); + + assertNotNull(task); + assertTrue(task instanceof TaskTask); + assertEquals(2, task.getAttributes().size()); + assertEquals("value1", task.getAttribute("att1")); + assertEquals("value2", task.getAttribute("att2")); + } + + @Test + public void invalidConnectorKind() throws Exception { + Attributes elementAttributes = createAttributes(ImmutableMap.of(TaskListExternalizationConstants.KEY_HANDLE, + "1", TaskListExternalizationConstants.KEY_TASK_ID, "100", + TaskListExternalizationConstants.KEY_REPOSITORY_URL, "http://example.com", + TaskListExternalizationConstants.KEY_CONNECTOR_KIND, "invalid")); + + builder.beginItem(elementAttributes); + assertFalse(builder.getErrors().isOK()); + } + + @Test + public void localTask() throws Exception { + ImmutableMap.Builder<String, String> attributesBuilder = ImmutableMap.builder(); + attributesBuilder.put(TaskListExternalizationConstants.KEY_HANDLE, "1"); + attributesBuilder.put(TaskListExternalizationConstants.KEY_TASK_ID, "100"); + attributesBuilder.put(TaskListExternalizationConstants.KEY_REPOSITORY_URL, "local"); + attributesBuilder.put(TaskListExternalizationConstants.KEY_LABEL, "Simple Task"); + attributesBuilder.put(TaskListExternalizationConstants.KEY_KEY, "EX-100"); + attributesBuilder.put(TaskListExternalizationConstants.KEY_PRIORITY, PriorityLevel.P1.toString()); + attributesBuilder.put(TaskListExternalizationConstants.KEY_CONNECTOR_KIND, "local"); + + builder.beginItem(createAttributes(attributesBuilder.build())); + + assertTrue(builder.getErrors().isOK()); + AbstractTask task = builder.getItem(); + + assertNotNull(task); + assertTrue(task instanceof LocalTask); + assertEquals("local-100", task.getHandleIdentifier()); + assertEquals("100", task.getTaskId()); + assertEquals("local", task.getRepositoryUrl()); + assertEquals("Simple Task", task.getSummary()); + assertEquals(PriorityLevel.P1.toString(), task.getPriority()); + assertNull(task.getTaskKey()); + } + + private void putAttribute(String key, String value) { + builder.startAttribute(createAttributes(ImmutableMap.of(TaskListExternalizationConstants.KEY_KEY, key))); + builder.acceptAttributeValueContent(value.toCharArray(), 0, value.length()); + builder.endAttribute(); + } + + private AttributesImpl createAttributes(Map<String, String> attributes) { + AttributesImpl xmlAttributes = new AttributesImpl(); + for (String key : attributes.keySet()) { + xmlAttributes.addAttribute("", key, key, "", attributes.get(key)); + } + return xmlAttributes; + } + +} |