| /******************************************************************************* |
| * 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; |
| } |
| |
| } |