diff -r f1112f777ce9 -r 96906a986c3b testdev/ite/src/com.nokia.testfw.resultview/src/com/nokia/testfw/resultview/view/TestResultTree.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testdev/ite/src/com.nokia.testfw.resultview/src/com/nokia/testfw/resultview/view/TestResultTree.java Tue Mar 30 14:39:29 2010 +0800 @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). + * All rights reserved. + * This component and the accompanying materials are made available + * under the terms of "Eclipse Public License v1.0" + * which accompanies this distribution, and is available + * at the URL "http://www.eclipse.org/legal/epl-v10.html". + * + * Initial Contributors: + * Nokia Corporation - initial contribution. + * + * Contributors: + * + * Description: + * + */ +package com.nokia.testfw.resultview.view; + +import java.util.Hashtable; +import java.util.Stack; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.swt.widgets.TreeItem; + +import com.nokia.testfw.core.model.result.TestCaseResult; +import com.nokia.testfw.core.model.result.TestResult; +import com.nokia.testfw.core.model.result.TestRunResult; +import com.nokia.testfw.core.model.result.TestSuiteResult; +import com.nokia.testfw.resultview.ResultViewPlugin; + +public class TestResultTree { + private static final Image passedIcon = ResultViewPlugin + .getImage("obj16/testok.gif"); //$NON-NLS-1$ + private static final Image failedIcon = ResultViewPlugin + .getImage("obj16/testfail.gif"); //$NON-NLS-1$ + private static final Image testIcon = ResultViewPlugin + .getImage("obj16/test.gif"); //$NON-NLS-1$ + private static final Image skipIcon = ResultViewPlugin + .getImage("obj16/testskip.gif"); //$NON-NLS-1$ + private static final Image runIcon = ResultViewPlugin + .getImage("obj16/testrun.gif"); //$NON-NLS-1$ + + Tree tree; + Hashtable treeItems; + + public TestResultTree(Composite parent) { + treeItems = new Hashtable(); + tree = new Tree(parent, SWT.V_SCROLL | SWT.SINGLE); + GridData gridData = new GridData(GridData.FILL_BOTH + | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL); + + tree.setLayoutData(gridData); + } + + public Tree getTree() { + return tree; + } + + /** + * initial the tree with empty test result + */ + public void init(TestRunResult runResult) { + // create a root node + for (TestResult result : runResult.getResults()) { + createTreeItems(null, result); + } + } + + /** + * update one test case result + * + * @param result + */ + public void update(TestCaseResult result) { + // since it is using same result object, just redraw the tree + TreeItem item = treeItems.get(result.getUniqueName()); + updateTreeItem(item); + // make sure to show this item in the tree + tree.showItem(item); + // update parent suite is any + TestSuiteResult suite; + TestResult child = result; + while ((suite = child.getParent()) != null) { + updateTreeItem(treeItems.get(suite.getUniqueName())); + child = suite; + } + } + + public boolean addTestCase(TestCaseResult result) { + if (treeItems.get(result.getUniqueName()) != null) + return false; + + TestSuiteResult parent = result.getParent(); + if (parent == null) { + createNewTreeItem(null, result); + } else { + Stack stack = new Stack(); + TreeItem parentItem = null; + stack.push(result); + while (parent != null) { + parentItem = treeItems.get(parent.getUniqueName()); + if (parentItem == null) { + stack.push(parent); + } else { + break; + } + parent = parent.getParent(); + } + while (!stack.isEmpty()) { + TestResult test = stack.pop(); + parentItem = createNewTreeItem(parentItem, test); + } + } + return true; + } + + /** + * reset the result tree and clean it is contents + */ + public void reset() { + tree.removeAll(); + treeItems.clear(); + } + + /** + * create one tree item to show a testcase(suite) result + * + * @param testResult + */ + protected void createTreeItems(TreeItem parent, TestResult testResult) { + TreeItem item = createNewTreeItem(parent, testResult); + // create items for its children is any + if (testResult instanceof TestSuiteResult) { + TestSuiteResult suite = (TestSuiteResult) testResult; + for (TestResult child : suite.getChildren()) { + createTreeItems(item, child); + } + } + } + + private TreeItem createNewTreeItem(TreeItem parentItem, TestResult result) { + TreeItem treeItem = null; + if (parentItem == null) { + treeItem = new TreeItem(tree, SWT.NONE); + } else { + treeItem = new TreeItem(parentItem, SWT.NONE); + } + treeItem.setData(result); + treeItem.setExpanded(true); + updateTreeItem(treeItem); + // set to show all items. may change to only show suite later + tree.showItem(treeItem); + treeItems.put(result.getUniqueName(), treeItem); + return treeItem; + } + + private void updateTreeItem(TreeItem item) { + TestResult result = (TestResult) item.getData(); + item.setText(result.getDesc()); + + switch (result.getStatus()) { + case SUCCESS: + item.setImage(passedIcon); + break; + case FAILURE: + item.setImage(failedIcon); + break; + case SKIP: + item.setImage(skipIcon); + break; + case STARTED: + item.setImage(runIcon); + break; + default: + item.setImage(testIcon); + } + + } + + // // handle the double click selection + // private void setupSelection() { + // tree.addListener(SWT.Selection, new Listener() { + // + // public void handleEvent(Event event) { + // TreeItem item = tree.getSelection()[0]; + // if (item == null) { + // return; + // } + // TestResult result = (TestResult) item.getData(); + // if (result == null) { + // ResultViewPlugin.log(IStatus.WARNING, + // "can't find selected test result"); + // } + // // find the file + // if (result.getFile() == null) { + // ResultViewPlugin.log(IStatus.OK, + // "no locaiton information associated with the test"); + // return; + // } + // // find file in workspace + // WorkspaceUtils.openFile(result.getFile(), result.getLine(), + // result.getColumn()); + // } + // + // }); + // } +}