--- /dev/null
+package org.simantics.tests.modelled.ui;\r
+\r
+import java.text.DecimalFormat;\r
+import java.util.Collection;\r
+\r
+import org.eclipse.jface.viewers.ITreeContentProvider;\r
+import org.eclipse.jface.viewers.LabelProvider;\r
+import org.eclipse.jface.viewers.Viewer;\r
+import org.simantics.scl.compiler.module.coverage.CombinedCoverage;\r
+import org.simantics.scl.compiler.module.coverage.Coverage;\r
+import org.simantics.scl.compiler.module.coverage.FunctionCoverage;\r
+import org.simantics.scl.compiler.module.coverage.ModuleCoverage;\r
+import org.simantics.tests.modelled.ui.STSTestSuiteModel.STSSuite;\r
+import org.simantics.tests.modelled.ui.STSTestSuiteModel.STSTest;\r
+\r
+public class STSCoverageProvider extends LabelProvider implements ITreeContentProvider {\r
+\r
+ private Object input;\r
+ \r
+ @Override\r
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {\r
+ input = newInput;\r
+ }\r
+\r
+ @Override\r
+ public Object[] getElements(Object inputElement) {\r
+ CombinedCoverage coverage;\r
+ if (input instanceof STSTest) {\r
+ STSTest test = (STSTest) input;\r
+ coverage = test.getCoverage();\r
+ } else if (input instanceof STSSuite) {\r
+ STSSuite suite = (STSSuite) input;\r
+ coverage = suite.getCoverage();\r
+ } else {\r
+ return new Object[0];\r
+ }\r
+ if (coverage == null)\r
+ return new Object[0];\r
+ \r
+ return new Object[] { coverage };\r
+ \r
+// Collection<ModuleCoverage> moduleCoverages = coverage.moduleCoverages.values();\r
+// return moduleCoverages.toArray(new ModuleCoverage[moduleCoverages.size()]);\r
+ }\r
+\r
+ @Override\r
+ public Object[] getChildren(Object parentElement) {\r
+ if (parentElement instanceof CombinedCoverage) {\r
+ CombinedCoverage coverage = (CombinedCoverage) parentElement;\r
+ Collection<ModuleCoverage> moduleCoverages = coverage.moduleCoverages.values();\r
+ return moduleCoverages.toArray(new ModuleCoverage[moduleCoverages.size()]);\r
+ } else if (parentElement instanceof ModuleCoverage) {\r
+ ModuleCoverage coverage = (ModuleCoverage) parentElement;\r
+ Collection<FunctionCoverage> coverages = coverage.functionCoverages.values();\r
+ return coverages.toArray(new FunctionCoverage[coverages.size()]);\r
+ } else {\r
+ return null;\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public Object getParent(Object element) {\r
+ if (element instanceof FunctionCoverage) {\r
+ FunctionCoverage coverage = (FunctionCoverage) element;\r
+ return new ModuleCoverage[] { null };\r
+ } else {\r
+ return null;\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public boolean hasChildren(Object element) {\r
+ if (element instanceof CombinedCoverage)\r
+ return !((CombinedCoverage) element).moduleCoverages.isEmpty();\r
+ else if (element instanceof ModuleCoverage)\r
+ return !((ModuleCoverage)element).functionCoverages.isEmpty();\r
+ else\r
+ return false;\r
+ }\r
+ \r
+ @Override\r
+ public String getText(Object element) {\r
+ if (element instanceof Coverage)\r
+ return ((Coverage) element).getIdentifier();\r
+ return super.getText(element);\r
+ }\r
+\r
+ public String getRatio(Object element) {\r
+ if (element instanceof Coverage)\r
+ return formatPercentage(((Coverage) element).getCoverage());\r
+ return "unknown " + element;\r
+ }\r
+\r
+ public String getCovered(Object element) {\r
+ if (element instanceof Coverage)\r
+ return ((Coverage) element).getCoveredCodeSize() + "";\r
+ return "unknown " + element;\r
+ }\r
+\r
+ public String getMissed(Object element) {\r
+ if (element instanceof Coverage)\r
+ return ((Coverage) element).getMissedCodeSize() + "";\r
+ return "unknown " + element;\r
+ }\r
+\r
+ public String getTotal(Object element) {\r
+ if (element instanceof Coverage)\r
+ return ((Coverage) element).getTotalCodeSize() + "";\r
+ return "unknown " + element;\r
+ }\r
+ \r
+ private static final DecimalFormat MAX_PERCENTAGE_STRING = new DecimalFormat("0.0 %");\r
+ \r
+ private static String formatPercentage(double perc) {\r
+ return MAX_PERCENTAGE_STRING.format(perc);\r
+ }\r
+\r
+}\r