-package org.simantics.tests.modelled.ui;\r
-\r
-import java.util.List;\r
-import java.util.concurrent.Executors;\r
-\r
-import javax.annotation.PostConstruct;\r
-import javax.annotation.PreDestroy;\r
-\r
-import org.eclipse.e4.ui.di.Focus;\r
-import org.eclipse.jface.layout.TreeColumnLayout;\r
-import org.eclipse.jface.viewers.CellLabelProvider;\r
-import org.eclipse.jface.viewers.ColumnWeightData;\r
-import org.eclipse.jface.viewers.ISelection;\r
-import org.eclipse.jface.viewers.ISelectionChangedListener;\r
-import org.eclipse.jface.viewers.OwnerDrawLabelProvider;\r
-import org.eclipse.jface.viewers.SelectionChangedEvent;\r
-import org.eclipse.jface.viewers.TreeSelection;\r
-import org.eclipse.jface.viewers.TreeViewer;\r
-import org.eclipse.jface.viewers.TreeViewerColumn;\r
-import org.eclipse.jface.viewers.ViewerCell;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.custom.CTabFolder;\r
-import org.eclipse.swt.custom.CTabItem;\r
-import org.eclipse.swt.custom.SashForm;\r
-import org.eclipse.swt.custom.StyledText;\r
-import org.eclipse.swt.custom.ViewForm;\r
-import org.eclipse.swt.graphics.Point;\r
-import org.eclipse.swt.layout.FormAttachment;\r
-import org.eclipse.swt.layout.FormData;\r
-import org.eclipse.swt.layout.GridData;\r
-import org.eclipse.swt.layout.GridLayout;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Event;\r
-import org.eclipse.swt.widgets.Layout;\r
-import org.eclipse.swt.widgets.Tree;\r
-import org.eclipse.swt.widgets.TreeColumn;\r
-import org.eclipse.ui.part.PageBook;\r
-import org.simantics.db.Resource;\r
-import org.simantics.scl.compiler.module.coverage.Coverage;\r
-\r
-public class STSTestRunnerView {\r
- \r
- public static final String ID = "org.simantics.tests.modelled.ui.stsTestRunnerView";\r
-\r
- private Resource test;\r
- private SashForm sashForm;\r
- private PageBook viewerbook;\r
- private TreeViewer treeViewer;\r
-// private ITreeContentProvider treeContentProvider;\r
- private STSTestSuiteProvider provider;\r
- private StyledText output;\r
- private STSCounterPanel counterPanel;\r
- private STSProgressBar progressBar;\r
- private Composite counterComposite;\r
-\r
- @PostConstruct\r
- void createView(Composite parent) {\r
- \r
- GridLayout gridLayout= new GridLayout();\r
- gridLayout.marginWidth= 0;\r
- gridLayout.marginHeight= 0;\r
- parent.setLayout(gridLayout);\r
- \r
- counterComposite= createProgressCountPanel(parent);\r
- counterComposite.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));\r
- counterComposite.pack();\r
- \r
- SashForm sashForm = createSashForm(parent);\r
- sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));\r
- }\r
- \r
- private SashForm createSashForm(Composite parent) {\r
- sashForm = new SashForm(parent, SWT.VERTICAL);\r
-\r
- ViewForm top = new ViewForm(sashForm, SWT.NONE);\r
-\r
- Composite empty = new Composite(top, SWT.NONE);\r
- empty.setLayout(new Layout() {\r
- @Override\r
- protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {\r
- return new Point(1, 1); // (0, 0) does not work with super-intelligent ViewForm\r
- }\r
- @Override\r
- protected void layout(Composite composite, boolean flushCache) {\r
- }\r
- });\r
- top.setTopLeft(empty); // makes ViewForm draw the horizontal separator line ...\r
-// fTestViewer= new TestViewer(top, fClipboard, this);\r
- createTestViewers(top);\r
- top.setContent(viewerbook);\r
- treeViewer.setInput(test);\r
-\r
- ViewForm bottom = new ViewForm(sashForm, SWT.NONE);\r
-\r
- CTabFolder folder = new CTabFolder(bottom, SWT.BORDER);\r
- folder.setLayoutData(new GridData(GridData.FILL_BOTH));\r
- \r
- CTabItem item1 = new CTabItem(folder, SWT.NONE);\r
- item1.setText("Execution");\r
-// PageBook fViewerbook2= new PageBook(bottom, SWT.NULL);\r
- // Upper\r
- output = new StyledText(folder, SWT.MULTI | SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL);\r
-// output.setFont(textFont);\r
- {\r
- FormData formData = new FormData();\r
- formData.top = new FormAttachment(0); \r
-// formData.bottom = new FormAttachment(sash);\r
- formData.left = new FormAttachment(0);\r
- formData.right = new FormAttachment(100);\r
- output.setLayoutData(formData);\r
- }\r
- item1.setControl(output);\r
-// fViewerbook2.showPage(output);\r
- bottom.setContent(folder);\r
- folder.setSelection(0);\r
-\r
- CTabItem item2 = new CTabItem(folder, SWT.NONE);\r
- item2.setText("Coverage");\r
- \r
- Composite treeComposite = new Composite(folder, SWT.NONE);\r
- \r
- TreeViewer viewer = createCoverageViewer(treeComposite);\r
- item2.setControl(treeComposite);\r
- \r
- treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {\r
- \r
- @Override\r
- public void selectionChanged(SelectionChangedEvent event) {\r
- ISelection selection = event.getSelection();\r
- TreeSelection sel = (TreeSelection) selection;\r
- List<String> testOutput = provider.getModel().getOutput(sel.getFirstElement());\r
- \r
- viewer.setInput(sel.getFirstElement());\r
- \r
- StringBuilder sb = new StringBuilder();\r
- for (String o : testOutput) {\r
- sb.append(o);\r
- }\r
- output.setText(sb.toString());\r
- }\r
- });\r
- \r
- sashForm.setWeights(new int[] {50, 50});\r
- return sashForm;\r
- }\r
- \r
- protected static final int COLUMN_ELEMENT = 0;\r
- protected static final int COLUMN_RATIO = 1;\r
- protected static final int COLUMN_COVERED = 2;\r
- protected static final int COLUMN_MISSED = 3;\r
- protected static final int COLUMN_TOTAL = 4;\r
- \r
- private TreeViewer createCoverageViewer(Composite parent) {\r
- // Composite treeViewerComposite = new Composite(parent, SWT.NONE);\r
-\r
- TreeColumnLayout layout = new TreeColumnLayout();\r
- parent.setLayout(layout);\r
- \r
- Tree tree = new Tree(parent, SWT.MULTI | SWT.FULL_SELECTION);\r
- tree.setHeaderVisible(true);\r
- tree.setLinesVisible(true);\r
- \r
- STSCoverageProvider provider = new STSCoverageProvider();\r
-\r
- TreeViewer viewer = new TreeViewer(tree);\r
- \r
- CoverageViewSorter sorter = new CoverageViewSorter(viewer);\r
- \r
- final TreeViewerColumn column0 = new TreeViewerColumn(viewer, SWT.LEFT);\r
- \r
- column0.setLabelProvider(new CellLabelProvider() {\r
-\r
- \r
- @Override\r
- public void update(ViewerCell cell) {\r
- cell.setText(provider.getText(cell.getElement()));\r
- cell.setImage(provider.getImage(cell.getElement()));\r
- }\r
- });\r
- sorter.addColumn(column0, COLUMN_ELEMENT);\r
-\r
- final TreeViewerColumn column1 = new TreeViewerColumn(viewer, SWT.RIGHT);\r
- column1.setLabelProvider(new OwnerDrawLabelProvider() {\r
-\r
- @Override\r
- public void update(ViewerCell cell) {\r
- cell.setText(provider.getRatio(cell.getElement()));\r
- }\r
-\r
- @Override\r
- protected void erase(Event event, Object element) {\r
- }\r
-\r
- @Override\r
- protected void measure(Event event, Object element) {\r
- }\r
-\r
- @Override\r
- protected void paint(Event event, Object element) {\r
- final Coverage coverage = (Coverage) element;\r
- if (coverage != null) {\r
- RedGreenBar.draw(event, column1.getColumn().getWidth(), coverage);\r
- }\r
- }\r
- });\r
- sorter.addColumn(column1, COLUMN_RATIO);\r
-\r
- final TreeViewerColumn column2 = new TreeViewerColumn(viewer, SWT.RIGHT);\r
- column2.setLabelProvider(new CellLabelProvider() {\r
-\r
- @Override\r
- public void update(ViewerCell cell) {\r
- cell.setText(provider.getCovered(cell.getElement()));\r
- }\r
- });\r
- sorter.addColumn(column2, COLUMN_COVERED);\r
-\r
- final TreeViewerColumn column3 = new TreeViewerColumn(viewer, SWT.RIGHT);\r
- column3.setLabelProvider(new CellLabelProvider() {\r
-\r
- @Override\r
- public void update(ViewerCell cell) {\r
- cell.setText(provider.getMissed(cell.getElement()));\r
- }\r
- });\r
- sorter.addColumn(column3, COLUMN_MISSED);\r
-\r
- final TreeViewerColumn column4 = new TreeViewerColumn(viewer, SWT.RIGHT);\r
- column4.setLabelProvider(new CellLabelProvider() {\r
-\r
- @Override\r
- public void update(ViewerCell cell) {\r
- cell.setText(provider.getTotal(cell.getElement()));\r
- }\r
- });\r
- sorter.addColumn(column4, COLUMN_TOTAL);\r
-\r
-// viewer.addFilter(new ViewerFilter() {\r
-// public boolean select(Viewer viewer, Object parentElement, Object element) {\r
-// if (element == LOADING_ELEMENT) {\r
-// return true;\r
-// } else {\r
-// final ICoverageNode c = CoverageTools.getCoverageInfo(element);\r
-// if (c == null) {\r
-// return false;\r
-// }\r
-// final ICounter instructions = c.getInstructionCounter();\r
-// if (instructions.getTotalCount() == 0) {\r
-// return false;\r
-// }\r
-// if (settings.getHideUnusedElements() && instructions.getCoveredCount() == 0) {\r
-// return false;\r
-// }\r
-// return true;\r
-// }\r
-// }\r
-// });\r
- viewer.setComparator(sorter);\r
- \r
- layout.setColumnData(column0.getColumn(), new ColumnWeightData(0, 50, false));\r
- layout.setColumnData(column1.getColumn(), new ColumnWeightData(0, 50, false));\r
- layout.setColumnData(column2.getColumn(), new ColumnWeightData(0, 50, false));\r
- layout.setColumnData(column3.getColumn(), new ColumnWeightData(0, 50, false));\r
- layout.setColumnData(column4.getColumn(), new ColumnWeightData(0, 50, false));\r
- \r
- String[] columns = new String[] {"Module", "Coverage", "Covered Instructions", "Missed Instructions", "Total Instructions"};\r
- TreeColumn[] columns2 = viewer.getTree().getColumns();\r
- for (int i = 0; i < columns2.length; i++) {\r
- columns2[i].setText(columns[i]);\r
- }\r
- restoreColumnWidth(viewer);\r
- viewer.setContentProvider(provider);\r
- return viewer;\r
-\r
-// viewer.addOpenListener(new IOpenListener() {\r
-// public void open(OpenEvent event) {\r
-// openAction.run((IStructuredSelection) event.getSelection());\r
-// }\r
-// });\r
-\r
-// MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$\r
-// menuMgr.setRemoveAllWhenShown(true);\r
-// tree.setMenu(menuMgr.createContextMenu(tree));\r
-// getSite().registerContextMenu(menuMgr, viewer);\r
-//\r
-// CoverageTools.getSessionManager().addSessionListener(descriptionUpdater);\r
-// CoverageTools.addJavaCoverageListener(coverageListener);\r
- }\r
- \r
- private static final int[] DEFAULT_COLUMNWIDTH = new int[] { 200, 100, 120,\r
- 120, 120 };\r
- \r
- public void restoreColumnWidth(TreeViewer viewer) {\r
- final TreeColumn[] columns = viewer.getTree().getColumns();\r
- for (int i = 0; i < DEFAULT_COLUMNWIDTH.length; i++) {\r
- columns[i].setWidth(DEFAULT_COLUMNWIDTH[i]);\r
- }\r
- }\r
-\r
- protected Composite createProgressCountPanel(Composite parent) {\r
- Composite composite= new Composite(parent, SWT.NONE);\r
- GridLayout layout= new GridLayout();\r
- composite.setLayout(layout);\r
- layout.numColumns = 1;\r
-\r
- counterPanel = new STSCounterPanel(composite);\r
- counterPanel.setLayoutData(\r
- new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));\r
- progressBar = new STSProgressBar(composite);\r
- progressBar.setLayoutData(\r
- new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));\r
- return composite;\r
- }\r
- \r
- private void createTestViewers(Composite parent) {\r
- viewerbook = new PageBook(parent, SWT.NULL);\r
-\r
- treeViewer = new TreeViewer(viewerbook, SWT.V_SCROLL | SWT.SINGLE);\r
- treeViewer.setUseHashlookup(true);\r
- \r
- STSTestSuiteModel model = new STSTestSuiteModel();\r
- model.addListener(new STSExecutionListener() {\r
- \r
- @Override\r
- public void testExecuted() {\r
- treeViewer.getControl().getDisplay().syncExec(() -> {\r
- refreshCounters();\r
- treeViewer.refresh();\r
- });\r
- }\r
- });\r
- \r
- provider = new STSTestSuiteProvider(model);\r
- \r
- treeViewer.setContentProvider(provider);\r
- treeViewer.setLabelProvider(provider);\r
-\r
-\r
- viewerbook.showPage(treeViewer.getTree());\r
- \r
- }\r
- \r
-\r
- @Focus\r
- void setFocus() {\r
- sashForm.setFocus();\r
- }\r
-\r
- public void currentTest(Resource test) {\r
- treeViewer.setInput(test);\r
- refreshCounters();\r
- }\r
- \r
- private void refreshCounters() {\r
- // TODO: Inefficient. Either\r
- // - keep a boolean fHasTestRun and update only on changes, or\r
- // - improve components to only redraw on changes (once!).\r
-\r
- int startedCount;\r
- int ignoredCount;\r
- int totalCount;\r
- int errorCount;\r
- int failureCount;\r
- int assumptionFailureCount;\r
- boolean hasErrorsOrFailures;\r
- boolean stopped;\r
-\r
- STSTestSuiteModel model = provider.getModel();\r
- if (model != null) {\r
- startedCount= model.getStartedCount();\r
- ignoredCount= model.getIgnoredCount();\r
- totalCount= model.getTotalCount();\r
- errorCount= model.getErrorCount();\r
- failureCount= model.getFailureCount();\r
- assumptionFailureCount = model.getAssumptionFailureCount();\r
- hasErrorsOrFailures= errorCount + failureCount > 0;\r
- stopped= model.isStopped();\r
- } else {\r
- startedCount= 0;\r
- ignoredCount= 0;\r
- totalCount= 0;\r
- errorCount= 0;\r
- failureCount= 0;\r
- assumptionFailureCount = 0;\r
- hasErrorsOrFailures= false;\r
- stopped= false;\r
- }\r
-\r
- counterPanel.setTotal(totalCount);\r
- counterPanel.setRunValue(startedCount, ignoredCount, assumptionFailureCount);\r
- counterPanel.setErrorValue(errorCount);\r
- counterPanel.setFailureValue(failureCount);\r
-\r
- int ticksDone;\r
- if (startedCount == 0)\r
- ticksDone= 0;\r
- else if (startedCount == totalCount && model.isStopped())\r
- ticksDone= totalCount;\r
- else\r
- ticksDone= startedCount - 1;\r
-\r
- progressBar.reset(hasErrorsOrFailures, stopped, ticksDone, totalCount);\r
- }\r
-\r
- public void execute() {\r
- Executors.newSingleThreadExecutor().submit(new Runnable() {\r
-\r
- @Override\r
- public void run() {\r
- provider.getModel().execute();\r
- }\r
- });\r
- }\r
- \r
- @PreDestroy\r
- public void destroy() {\r
- provider.dispose();\r
- }\r
-}\r
+package org.simantics.tests.modelled.ui;
+
+import java.util.List;
+import java.util.concurrent.Executors;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+
+import org.eclipse.e4.ui.di.Focus;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.jface.layout.TreeColumnLayout;
+import org.eclipse.jface.viewers.CellLabelProvider;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.OwnerDrawLabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.TreeViewerColumn;
+import org.eclipse.jface.viewers.ViewerCell;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.custom.ViewForm;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Layout;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeColumn;
+import org.eclipse.ui.part.PageBook;
+import org.simantics.db.Resource;
+import org.simantics.scl.compiler.module.coverage.Coverage;
+
+public class STSTestRunnerView {
+
+ public static final String ID = "org.simantics.tests.modelled.ui.stsTestRunnerView";
+
+ private Resource test;
+ private SashForm sashForm;
+ private PageBook viewerbook;
+ private TreeViewer treeViewer;
+// private ITreeContentProvider treeContentProvider;
+ private STSTestSuiteProvider provider;
+ private StyledText output;
+ private STSCounterPanel counterPanel;
+ private STSProgressBar progressBar;
+ private Composite counterComposite;
+
+ @PostConstruct
+ void createView(MPart part, Composite parent) {
+
+ GridLayout gridLayout= new GridLayout();
+ gridLayout.marginWidth= 0;
+ gridLayout.marginHeight= 0;
+ parent.setLayout(gridLayout);
+
+ counterComposite = createProgressCountPanel(parent);
+ counterComposite.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
+ counterComposite.pack();
+
+ SashForm sashForm = createSashForm(parent);
+ sashForm.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+// IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
+ }
+
+ private SashForm createSashForm(Composite parent) {
+ sashForm = new SashForm(parent, SWT.VERTICAL);
+
+ ViewForm top = new ViewForm(sashForm, SWT.NONE);
+
+ Composite empty = new Composite(top, SWT.NONE);
+ empty.setLayout(new Layout() {
+ @Override
+ protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
+ return new Point(1, 1); // (0, 0) does not work with super-intelligent ViewForm
+ }
+ @Override
+ protected void layout(Composite composite, boolean flushCache) {
+ }
+ });
+ top.setTopLeft(empty); // makes ViewForm draw the horizontal separator line ...
+// fTestViewer= new TestViewer(top, fClipboard, this);
+ createTestViewers(top);
+ top.setContent(viewerbook);
+ treeViewer.setInput(test);
+
+ ViewForm bottom = new ViewForm(sashForm, SWT.NONE);
+
+ CTabFolder folder = new CTabFolder(bottom, SWT.BORDER);
+ folder.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ CTabItem item1 = new CTabItem(folder, SWT.NONE);
+ item1.setText("Execution");
+// PageBook fViewerbook2= new PageBook(bottom, SWT.NULL);
+ // Upper
+ output = new StyledText(folder, SWT.MULTI | SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL);
+// output.setFont(textFont);
+ {
+ FormData formData = new FormData();
+ formData.top = new FormAttachment(0);
+// formData.bottom = new FormAttachment(sash);
+ formData.left = new FormAttachment(0);
+ formData.right = new FormAttachment(100);
+ output.setLayoutData(formData);
+ }
+ item1.setControl(output);
+// fViewerbook2.showPage(output);
+ bottom.setContent(folder);
+ folder.setSelection(0);
+
+ CTabItem item2 = new CTabItem(folder, SWT.NONE);
+ item2.setText("Coverage");
+
+ Composite treeComposite = new Composite(folder, SWT.NONE);
+
+ TreeViewer viewer = createCoverageViewer(treeComposite);
+ item2.setControl(treeComposite);
+
+ treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ @Override
+ public void selectionChanged(SelectionChangedEvent event) {
+ ISelection selection = event.getSelection();
+ TreeSelection sel = (TreeSelection) selection;
+ List<String> testOutput = provider.getModel().getOutput(sel.getFirstElement());
+
+ viewer.setInput(sel.getFirstElement());
+
+ StringBuilder sb = new StringBuilder();
+ for (String o : testOutput) {
+ sb.append(o);
+ }
+ output.setText(sb.toString());
+ }
+ });
+
+ sashForm.setWeights(new int[] {50, 50});
+ return sashForm;
+ }
+
+ protected static final int COLUMN_ELEMENT = 0;
+ protected static final int COLUMN_RATIO = 1;
+ protected static final int COLUMN_COVERED = 2;
+ protected static final int COLUMN_MISSED = 3;
+ protected static final int COLUMN_TOTAL = 4;
+
+ private TreeViewer createCoverageViewer(Composite parent) {
+ // Composite treeViewerComposite = new Composite(parent, SWT.NONE);
+
+ TreeColumnLayout layout = new TreeColumnLayout();
+ parent.setLayout(layout);
+
+ Tree tree = new Tree(parent, SWT.MULTI | SWT.FULL_SELECTION);
+ tree.setHeaderVisible(true);
+ tree.setLinesVisible(true);
+
+ STSCoverageProvider provider = new STSCoverageProvider();
+
+ TreeViewer viewer = new TreeViewer(tree);
+
+ CoverageViewSorter sorter = new CoverageViewSorter(viewer);
+
+ final TreeViewerColumn column0 = new TreeViewerColumn(viewer, SWT.LEFT);
+
+ column0.setLabelProvider(new CellLabelProvider() {
+
+
+ @Override
+ public void update(ViewerCell cell) {
+ cell.setText(provider.getText(cell.getElement()));
+ cell.setImage(provider.getImage(cell.getElement()));
+ }
+ });
+ sorter.addColumn(column0, COLUMN_ELEMENT);
+
+ final TreeViewerColumn column1 = new TreeViewerColumn(viewer, SWT.RIGHT);
+ column1.setLabelProvider(new OwnerDrawLabelProvider() {
+
+ @Override
+ public void update(ViewerCell cell) {
+ cell.setText(provider.getRatio(cell.getElement()));
+ }
+
+ @Override
+ protected void erase(Event event, Object element) {
+ }
+
+ @Override
+ protected void measure(Event event, Object element) {
+ }
+
+ @Override
+ protected void paint(Event event, Object element) {
+ final Coverage coverage = (Coverage) element;
+ if (coverage != null) {
+ RedGreenBar.draw(event, column1.getColumn().getWidth(), coverage);
+ }
+ }
+ });
+ sorter.addColumn(column1, COLUMN_RATIO);
+
+ final TreeViewerColumn column2 = new TreeViewerColumn(viewer, SWT.RIGHT);
+ column2.setLabelProvider(new CellLabelProvider() {
+
+ @Override
+ public void update(ViewerCell cell) {
+ cell.setText(provider.getCovered(cell.getElement()));
+ }
+ });
+ sorter.addColumn(column2, COLUMN_COVERED);
+
+ final TreeViewerColumn column3 = new TreeViewerColumn(viewer, SWT.RIGHT);
+ column3.setLabelProvider(new CellLabelProvider() {
+
+ @Override
+ public void update(ViewerCell cell) {
+ cell.setText(provider.getMissed(cell.getElement()));
+ }
+ });
+ sorter.addColumn(column3, COLUMN_MISSED);
+
+ final TreeViewerColumn column4 = new TreeViewerColumn(viewer, SWT.RIGHT);
+ column4.setLabelProvider(new CellLabelProvider() {
+
+ @Override
+ public void update(ViewerCell cell) {
+ cell.setText(provider.getTotal(cell.getElement()));
+ }
+ });
+ sorter.addColumn(column4, COLUMN_TOTAL);
+
+// viewer.addFilter(new ViewerFilter() {
+// public boolean select(Viewer viewer, Object parentElement, Object element) {
+// if (element == LOADING_ELEMENT) {
+// return true;
+// } else {
+// final ICoverageNode c = CoverageTools.getCoverageInfo(element);
+// if (c == null) {
+// return false;
+// }
+// final ICounter instructions = c.getInstructionCounter();
+// if (instructions.getTotalCount() == 0) {
+// return false;
+// }
+// if (settings.getHideUnusedElements() && instructions.getCoveredCount() == 0) {
+// return false;
+// }
+// return true;
+// }
+// }
+// });
+ viewer.setComparator(sorter);
+
+ layout.setColumnData(column0.getColumn(), new ColumnWeightData(0, 50, false));
+ layout.setColumnData(column1.getColumn(), new ColumnWeightData(0, 50, false));
+ layout.setColumnData(column2.getColumn(), new ColumnWeightData(0, 50, false));
+ layout.setColumnData(column3.getColumn(), new ColumnWeightData(0, 50, false));
+ layout.setColumnData(column4.getColumn(), new ColumnWeightData(0, 50, false));
+
+ String[] columns = new String[] {"Module", "Coverage", "Covered Instructions", "Missed Instructions", "Total Instructions"};
+ TreeColumn[] columns2 = viewer.getTree().getColumns();
+ for (int i = 0; i < columns2.length; i++) {
+ columns2[i].setText(columns[i]);
+ }
+ restoreColumnWidth(viewer);
+ viewer.setContentProvider(provider);
+ return viewer;
+
+// viewer.addOpenListener(new IOpenListener() {
+// public void open(OpenEvent event) {
+// openAction.run((IStructuredSelection) event.getSelection());
+// }
+// });
+
+// MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
+// menuMgr.setRemoveAllWhenShown(true);
+// tree.setMenu(menuMgr.createContextMenu(tree));
+// getSite().registerContextMenu(menuMgr, viewer);
+//
+// CoverageTools.getSessionManager().addSessionListener(descriptionUpdater);
+// CoverageTools.addJavaCoverageListener(coverageListener);
+ }
+
+ private static final int[] DEFAULT_COLUMNWIDTH = new int[] { 200, 100, 120,
+ 120, 120 };
+
+ public void restoreColumnWidth(TreeViewer viewer) {
+ final TreeColumn[] columns = viewer.getTree().getColumns();
+ for (int i = 0; i < DEFAULT_COLUMNWIDTH.length; i++) {
+ columns[i].setWidth(DEFAULT_COLUMNWIDTH[i]);
+ }
+ }
+
+ protected Composite createProgressCountPanel(Composite parent) {
+ Composite composite= new Composite(parent, SWT.NONE);
+ GridLayout layout= new GridLayout();
+ composite.setLayout(layout);
+ layout.numColumns = 1;
+
+ counterPanel = new STSCounterPanel(composite);
+ counterPanel.setLayoutData(
+ new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
+ progressBar = new STSProgressBar(composite);
+ progressBar.setLayoutData(
+ new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL));
+ return composite;
+ }
+
+ private void createTestViewers(Composite parent) {
+ viewerbook = new PageBook(parent, SWT.NULL);
+
+ treeViewer = new TreeViewer(viewerbook, SWT.V_SCROLL | SWT.SINGLE);
+ treeViewer.setUseHashlookup(true);
+
+ STSTestSuiteModel model = new STSTestSuiteModel();
+ model.addListener(new STSExecutionListener() {
+
+ @Override
+ public void testExecuted() {
+ treeViewer.getControl().getDisplay().syncExec(() -> {
+ refreshCounters();
+ treeViewer.refresh();
+ });
+ }
+ });
+
+ provider = new STSTestSuiteProvider(model);
+
+ treeViewer.setContentProvider(provider);
+ treeViewer.setLabelProvider(provider);
+
+
+ Menu menu = new Menu(treeViewer.getControl());
+
+ MenuItem item1 = new MenuItem(menu, SWT.PUSH);
+ item1.setText("Stop");
+ item1.addListener(SWT.Selection, new Listener() {
+
+ @Override
+ public void handleEvent(Event event) {
+ TreeSelection selec = (TreeSelection) treeViewer.getSelection();
+ if (!selec.isEmpty()) {
+ Object elem = selec.getFirstElement();
+ provider.getModel().interrupt();
+
+ }
+ }
+ });
+
+ treeViewer.getControl().setMenu(menu);
+
+
+ viewerbook.showPage(treeViewer.getTree());
+
+ }
+
+
+ @Focus
+ void setFocus() {
+ sashForm.setFocus();
+ }
+
+ public void currentTest(Resource test) {
+ treeViewer.setInput(test);
+ refreshCounters();
+ }
+
+ private void refreshCounters() {
+ // TODO: Inefficient. Either
+ // - keep a boolean fHasTestRun and update only on changes, or
+ // - improve components to only redraw on changes (once!).
+
+ int startedCount;
+ int ignoredCount;
+ int totalCount;
+ int errorCount;
+ int failureCount;
+ int assumptionFailureCount;
+ boolean hasErrorsOrFailures;
+ boolean stopped;
+
+ STSTestSuiteModel model = provider.getModel();
+ if (model != null) {
+ startedCount= model.getStartedCount();
+ ignoredCount= model.getIgnoredCount();
+ totalCount= model.getTotalCount();
+ errorCount= model.getErrorCount();
+ failureCount= model.getFailureCount();
+ assumptionFailureCount = model.getAssumptionFailureCount();
+ hasErrorsOrFailures= errorCount + failureCount > 0;
+ stopped= model.isStopped();
+ } else {
+ startedCount= 0;
+ ignoredCount= 0;
+ totalCount= 0;
+ errorCount= 0;
+ failureCount= 0;
+ assumptionFailureCount = 0;
+ hasErrorsOrFailures= false;
+ stopped= false;
+ }
+
+ counterPanel.setTotal(totalCount);
+ counterPanel.setRunValue(startedCount, ignoredCount, assumptionFailureCount);
+ counterPanel.setIgnoredValue(ignoredCount);
+ counterPanel.setErrorValue(errorCount);
+ counterPanel.setFailureValue(failureCount);
+
+ int ticksDone;
+ if (startedCount == 0)
+ ticksDone= 0;
+ else if (startedCount == totalCount && model.isStopped())
+ ticksDone= totalCount;
+ else
+ ticksDone= startedCount - 1;
+
+ progressBar.reset(hasErrorsOrFailures, stopped, ticksDone, totalCount);
+ }
+
+ public void execute() {
+ Executors.newSingleThreadExecutor().submit(new Runnable() {
+
+ @Override
+ public void run() {
+ provider.getModel().execute();
+ }
+ });
+ }
+
+ @PreDestroy
+ public void destroy() {
+ provider.dispose();
+ }
+}