Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2008-11-30 10:44:59 +0000
committerspingel2008-11-30 10:44:59 +0000
commita738bdb5243bf7c90de5d68d6382084f23b218b1 (patch)
tree798240a95276df0fd71c25d5f3100df47df0d658 /org.eclipse.mylyn.tests.report
parent60af685605c9e321691b60ea5c40369babca9fab (diff)
downloadorg.eclipse.mylyn.incubator-a738bdb5243bf7c90de5d68d6382084f23b218b1.tar.gz
org.eclipse.mylyn.incubator-a738bdb5243bf7c90de5d68d6382084f23b218b1.tar.xz
org.eclipse.mylyn.incubator-a738bdb5243bf7c90de5d68d6382084f23b218b1.zip
NEW - bug 248310: [releng] use continuous integration to run builds and tests
https://bugs.eclipse.org/bugs/show_bug.cgi?id=248310
Diffstat (limited to 'org.eclipse.mylyn.tests.report')
-rw-r--r--org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/Main.java53
-rw-r--r--org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/TaskReporter.java142
2 files changed, 154 insertions, 41 deletions
diff --git a/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/Main.java b/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/Main.java
index 15f0fc38..37b32c8f 100644
--- a/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/Main.java
+++ b/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/Main.java
@@ -14,7 +14,10 @@ package org.eclipse.mylyn.internal.tests.report;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Properties;
+import java.util.StringTokenizer;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
@@ -31,53 +34,65 @@ import org.eclipse.mylyn.tasks.core.TaskRepository;
public class Main {
public static void main(String[] args) {
+ List<String> filenames = new ArrayList<String>();
Build build = null;
- String filename = null;
String propertiesFilename = null;
String tag = null;
+ boolean clear = false;
for (int i = 0; i < args.length; i++) {
- if ("-build".equals(args[i])) {
- build = new Build(readArg(args, ++i));
- } else if ("-in".equals(args[i])) {
- filename = readArg(args, ++i);
- }
- if ("-config".equals(args[i])) {
- propertiesFilename = readArg(args, ++i);
- }
- if ("-tag".equals(args[i])) {
- tag = readArg(args, ++i);
+ if (args[i].startsWith("-")) {
+ if ("-build".equals(args[i])) {
+ build = new Build(readArg(args, ++i));
+ } else if ("-config".equals(args[i])) {
+ propertiesFilename = readArg(args, ++i);
+ } else if ("-tag".equals(args[i])) {
+ tag = readArg(args, ++i);
+ } else if ("-clear".equals(args[i])) {
+ clear = "YES".equals(readArg(args, ++i));
+ }
+
+ } else {
+ StringTokenizer t = new StringTokenizer(args[i], File.pathSeparator);
+ while (t.hasMoreTokens()) {
+ filenames.add(t.nextToken());
+ }
}
}
- if (build == null || filename == null || propertiesFilename == null) {
+ if (build == null || filenames.isEmpty() || propertiesFilename == null) {
printUsage();
System.exit(1);
}
try {
TaskRepository repository = readConfig(new File(propertiesFilename));
- process(repository, new File(filename), build, tag);
+ TaskReporter reporter = new TaskReporter(build, repository, tag);
+ if (clear) {
+ reporter.clearAll();
+ }
+ reporter.initialize();
+ for (String filename : filenames) {
+ process(repository, new File(filename), reporter);
+ }
+ reporter.done();
+ System.out.println(reporter.getStatistics());
} catch (Exception e) {
e.printStackTrace();
}
}
private static void printUsage() {
- System.err.println("Main -in [junit report file] -config [config file] -build [id]");
+ System.err.println("Main -config [config file] -build [id] [junit report file]...");
}
- private static void process(TaskRepository repository, File file, Build build, String tag) throws Exception {
+ private static void process(TaskRepository repository, File file, TaskReporter reporter) throws Exception {
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
InputStream in = new FileInputStream(file);
try {
XMLEventReader reader = inputFactory.createXMLEventReader(in);
- TaskReporter reporter = new TaskReporter(build, repository, tag);
- reporter.initialize();
JUnitReportParser parser = new JUnitReportParser(reporter);
parser.parse(reader);
- reporter.done();
- System.out.println(reporter.getStatistics());
} finally {
in.close();
}
diff --git a/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/TaskReporter.java b/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/TaskReporter.java
index b863505f..138e16b7 100644
--- a/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/TaskReporter.java
+++ b/org.eclipse.mylyn.tests.report/src/org/eclipse/mylyn/internal/tests/report/TaskReporter.java
@@ -12,7 +12,11 @@
package org.eclipse.mylyn.internal.tests.report;
import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
@@ -22,6 +26,7 @@ import org.eclipse.mylyn.internal.tasks.core.TaskList;
import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
import org.eclipse.mylyn.internal.tests.report.TestCaseResult.TestCaseResultType;
import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector;
+import org.eclipse.mylyn.internal.trac.core.TracTaskDataHandler;
import org.eclipse.mylyn.internal.trac.core.TracTaskMapper;
import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector.TaskStatus;
import org.eclipse.mylyn.internal.trac.core.client.ITracClient;
@@ -30,6 +35,7 @@ import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.ITaskMapping;
import org.eclipse.mylyn.tasks.core.RepositoryResponse;
+import org.eclipse.mylyn.tasks.core.RepositoryStatus;
import org.eclipse.mylyn.tasks.core.TaskMapping;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.core.data.AbstractTaskDataHandler;
@@ -66,9 +72,9 @@ class TaskReporter implements TestCaseVisitor {
private final String tag;
- private List<TaskData> tasks;
+ private Map<String, TaskData> tasks;
- private List<TaskData> processedTasks;
+ private Set<String> processedTasks;
public TaskReporter(Build build, TaskRepository taskRepository, String tag) {
this.build = build;
@@ -101,6 +107,25 @@ class TaskReporter implements TestCaseVisitor {
return taskData;
}
+ private TaskData createParentTaskData(final TestCase testCase) throws CoreException {
+ TaskData taskData = new TaskData(taskDataHandler.getAttributeMapper(taskRepository),
+ taskRepository.getConnectorKind(), taskRepository.getRepositoryUrl(), "");
+ ITaskMapping initializationData = new TaskMapping() {
+ @Override
+ public String getSummary() {
+ return getParentTaskSummary(testCase);
+ }
+
+ @Override
+ public String getDescription() {
+ return getParentTaskDescription(testCase);
+ }
+ };
+ taskDataHandler.initializeTaskData(taskRepository, taskData, null, null);
+ connector.getTaskMapping(taskData).merge(initializationData);
+ return taskData;
+ }
+
// private String getQueryUrl(TestCase testCase) {
// TracSearch search = new TracSearch();
// search.addFilter("summary", getTaskSummary(testCase));
@@ -113,7 +138,7 @@ class TaskReporter implements TestCaseVisitor {
// return sb.toString();
// }
- private String getQueryUrl() {
+ private String getQueryUrl(String tag) {
TracSearch search = new TracSearch();
if (tag != null) {
search.addFilter("summary", "^" + tag);
@@ -151,18 +176,32 @@ class TaskReporter implements TestCaseVisitor {
return "Test results for " + testCase.getClassName() + "." + testCase.getTestName() + "()";
}
+ private String getParentTaskDescription(TestCase testCase) {
+ return "Test results for " + testCase.getClassName();
+ }
+
private String getTaskSummary(TestCase testCase) {
StringBuilder sb = new StringBuilder();
if (tag != null) {
sb.append(tag);
sb.append(" ");
}
- sb.append(testCase.getShortClassName());
- sb.append(": ");
+// sb.append(testCase.getShortClassName());
+// sb.append(": ");
sb.append(testCase.getTestName());
return sb.toString();
}
+ private String getParentTaskSummary(TestCase testCase) {
+ StringBuilder sb = new StringBuilder();
+ if (tag != null) {
+ sb.append(tag);
+ sb.append(" ");
+ }
+ sb.append(testCase.getShortClassName());
+ return sb.toString();
+ }
+
private void handleError(IStatus status) {
System.err.println(status);
if (status.getException() != null) {
@@ -186,12 +225,15 @@ class TaskReporter implements TestCaseVisitor {
return;
}
} else {
- processedTasks.add(taskData);
+ processedTasks.add(taskData.getTaskId());
if (taskData.isPartial()) {
taskData = connector.getTaskData(taskRepository, taskData.getTaskId(), null);
}
}
+ // set as sub task
+ updateParentTask(testCase, taskData);
+
ITaskMapping taskMapping = connector.getTaskMapping(taskData);
String status = taskMapping.getStatus();
if (testCase.getResult() != null) {
@@ -224,6 +266,35 @@ class TaskReporter implements TestCaseVisitor {
taskDataHandler.postTaskData(taskRepository, taskData, null, new NullProgressMonitor());
}
+ private void updateParentTask(TestCase testCase, TaskData taskData) throws CoreException {
+ TaskData parentTaskData = getParentTask(testCase);
+ if (parentTaskData == null) {
+ message(" creating parent task");
+ parentTaskData = createParentTaskData(testCase);
+ RepositoryResponse response = taskDataHandler.postTaskData(taskRepository, parentTaskData, null, null);
+ parentTaskData = connector.getTaskData(taskRepository, response.getTaskId(), null);
+ tasks.put(parentTaskData.getTaskId(), parentTaskData);
+ }
+
+ TaskAttribute attribute = parentTaskData.getRoot().getAttribute(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY);
+ if (attribute != null) {
+ String childId = " " + taskData.getTaskId();
+ if (!(" " + attribute.getValue() + " ").contains(childId + " ")) {
+ message(" updating parent task");
+ attribute.setValue(attribute.getValue() + childId);
+// try {
+// Thread.sleep(1000);
+// } catch (InterruptedException e) {
+// }
+ RepositoryResponse response = taskDataHandler.postTaskData(taskRepository, parentTaskData, null, null);
+ parentTaskData = connector.getTaskData(taskRepository, response.getTaskId(), null);
+ tasks.put(parentTaskData.getTaskId(), parentTaskData);
+ }
+ }
+
+ processedTasks.add(parentTaskData.getTaskId());
+ }
+
private void setNewComment(TaskData taskData, String comment) {
TaskAttribute attribute = taskData.getRoot().getMappedAttribute(TaskAttribute.COMMENT_NEW);
taskData.getAttributeMapper().setValue(attribute, comment);
@@ -288,7 +359,7 @@ class TaskReporter implements TestCaseVisitor {
}
private TaskData getTask(TestCase testCase) {
- for (TaskData task : tasks) {
+ for (TaskData task : tasks.values()) {
TracTaskMapper mapping = connector.getTaskMapping(task);
if (getTaskSummary(testCase).equals(mapping.getSummary())
&& getTaskDescription(testCase).equals(mapping.getDescription())) {
@@ -298,6 +369,17 @@ class TaskReporter implements TestCaseVisitor {
return null;
}
+ private TaskData getParentTask(TestCase testCase) {
+ for (TaskData task : tasks.values()) {
+ TracTaskMapper mapping = connector.getTaskMapping(task);
+ if (getParentTaskSummary(testCase).equals(mapping.getSummary())
+ && getParentTaskDescription(testCase).equals(mapping.getDescription())) {
+ return task;
+ }
+ }
+ return null;
+ }
+
// private class SingleResultCollector extends TaskDataCollector {
// private TaskData taskData;
//
@@ -326,32 +408,27 @@ class TaskReporter implements TestCaseVisitor {
public void initialize() {
message("Retrieving tasks from " + taskRepository.getRepositoryLabel());
- String queryUrl = getQueryUrl();
+ String queryUrl = getQueryUrl(tag);
IRepositoryQuery query = repositoryModel.createRepositoryQuery(taskRepository);
query.setUrl(queryUrl);
ResultCollector resultCollector = new ResultCollector();
IStatus status = connector.performQuery(taskRepository, query, resultCollector, null, new NullProgressMonitor());
if (status.isOK()) {
- this.tasks = resultCollector.getResults();
-// for (TaskData task : this.tasks) {
-// ITracClient client = connector.getClientManager().getTracClient(taskRepository);
-// try {
-// client.deleteTicket(Integer.parseInt(task.getTaskId()), null);
-// } catch (Exception e) {
-// e.printStackTrace();
-// }
-// }
- this.processedTasks = new ArrayList<TaskData>();
+ this.processedTasks = new HashSet<String>();
+ this.tasks = new HashMap<String, TaskData>();
+ for (TaskData task : resultCollector.getResults()) {
+ this.tasks.put(task.getTaskId(), task);
+ }
} else {
handleError(status);
}
}
public void done() {
- List<TaskData> deletedTasks = new ArrayList<TaskData>(tasks);
+ List<String> deletedTasks = new ArrayList<String>(tasks.keySet());
deletedTasks.removeAll(processedTasks);
- for (TaskData taskData : deletedTasks) {
- handleDeleted(taskData);
+ for (String taskId : deletedTasks) {
+ handleDeleted(tasks.get(taskId));
}
}
@@ -359,7 +436,7 @@ class TaskReporter implements TestCaseVisitor {
ITaskMapping taskMapping = connector.getTaskMapping(taskData);
message("Processing task: " + taskMapping.getSummary());
try {
- processedTasks.add(taskData);
+ processedTasks.add(taskData.getTaskId());
String status = taskMapping.getStatus();
if (TaskStatus.CLOSED == TaskStatus.fromStatus(status)) {
@@ -381,4 +458,25 @@ class TaskReporter implements TestCaseVisitor {
}
}
+ public void clearAll() {
+ message("Deleting all tasks from " + taskRepository.getRepositoryLabel());
+ String queryUrl = getQueryUrl(null);
+ IRepositoryQuery query = repositoryModel.createRepositoryQuery(taskRepository);
+ query.setUrl(queryUrl);
+ ResultCollector resultCollector = new ResultCollector();
+ IStatus status = connector.performQuery(taskRepository, query, resultCollector, null, new NullProgressMonitor());
+ if (status.isOK()) {
+ ITracClient client = connector.getClientManager().getTracClient(taskRepository);
+ for (TaskData task : resultCollector.getResults()) {
+ try {
+ client.deleteTicket(Integer.parseInt(task.getTaskId()), null);
+ } catch (Exception e) {
+ handleError(new RepositoryStatus(taskRepository, IStatus.ERROR, "", 0, "Error deleting task", e));
+ }
+ }
+ } else {
+ handleError(status);
+ }
+ }
+
}

Back to the top