/*******************************************************************************
* Copyright (c) 2006, 2009 Steffen Pingel 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:
* Steffen Pingel - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.trac.tests.support;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.trac.core.client.ITracClient.Version;
import org.eclipse.mylyn.internal.trac.core.model.TracTicket;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITaskAttachment;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.eclipse.mylyn.tasks.ui.TasksUi;
import org.eclipse.mylyn.trac.tests.support.XmlRpcServer.Ticket;
/**
* @author Steffen Pingel
*/
public class TracTestUtil {
public static List<ITaskAttachment> getTaskAttachments(ITask task) throws CoreException {
TaskData taskData = TasksUi.getTaskDataManager().getTaskData(task);
List<ITaskAttachment> attachments = new ArrayList<ITaskAttachment>();
List<TaskAttribute> attributes = taskData.getAttributeMapper().getAttributesByType(taskData,
TaskAttribute.TYPE_ATTACHMENT);
if (attributes != null) {
for (TaskAttribute taskAttribute : attributes) {
ITaskAttachment taskAttachment = TasksUiPlugin.getRepositoryModel().createTaskAttachment(taskAttribute);
taskData.getAttributeMapper().updateTaskAttachment(taskAttachment, taskAttribute);
attachments.add(taskAttachment);
}
}
return attachments;
}
public static void assertTicketEquals(Ticket expectedTicket, TracTicket actualTicket) throws Exception {
assertTrue(actualTicket.isValid());
Map<?, ?> expectedValues = expectedTicket.getValues();
Map<String, String> values = actualTicket.getValues();
for (String key : values.keySet()) {
Object expected = expectedValues.get(key);
String actual = values.get(key);
if (key.equals("reporter")) {
// Trac 0.11 obfuscates email addresses by replacing the domain with the Ellipses character,
// mangle expected value accordingly
if (actual != null && actual.endsWith("\u2026") && expected instanceof String) {
String expectedString = (String) expected;
int i = expectedString.indexOf("@");
if (i != -1) {
expected = expectedString.substring(0, i + 1) + "\u2026";
}
}
} else if (key.startsWith("_")) {
// ignore internal values
continue;
}
assertEquals("Values for key '" + key + "' did not match", expected, actual);
}
}
public static void assertTicketEquals(Version accessMode, TracTicket expectedTicket, TracTicket actualTicket)
throws Exception {
assertTrue(actualTicket.isValid());
Map<?, ?> expectedValues = expectedTicket.getValues();
Map<String, String> actualValues = actualTicket.getValues();
for (String key : actualValues.keySet()) {
Object expected = expectedValues.get(key);
String actual = actualValues.get(key);
if (key.equals("reporter")) {
// Trac 0.11 obfuscates email addresses by replacing the domain with the Ellipses character,
// mangle expected value accordingly
if (actual != null && actual.endsWith("\u2026") && expected instanceof String) {
String expectedString = (String) expected;
int i = expectedString.indexOf("@");
if (i != -1) {
expected = expectedString.substring(0, i + 1) + "\u2026";
}
}
} else if (key.startsWith("_")) {
// ignore internal values
continue;
}
if (accessMode == Version.TRAC_0_9 && expected == null && "".equals(actual)) {
// the web-client handles some values as the empty string that are represented as null in XML-RPC
continue;
}
assertEquals("Values for key '" + key + "' did not match", expected, actual);
}
}
public static void assertTicketEquals(TracTicket expectedTicket, TracTicket actualTicket) throws Exception {
assertTicketEquals(null, expectedTicket, actualTicket);
}
}