Mercurial > hg > truffle
diff truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/CoverageTrackerTest.java @ 22223:964e789e17f7
Truffle/Tools; rewrite tests for simple counting tools, e.g. CoverageTracker
author | Michael Van De Vanter <michael.van.de.vanter@oracle.com> |
---|---|
date | Sat, 19 Sep 2015 13:26:06 -0700 |
parents | 20380d1d41f2 |
children | 1f19e3cada3d |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/CoverageTrackerTest.java Sat Sep 19 13:25:41 2015 -0700 +++ b/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/CoverageTrackerTest.java Sat Sep 19 13:26:06 2015 -0700 @@ -24,33 +24,24 @@ */ package com.oracle.truffle.tools.test; -import static com.oracle.truffle.tools.test.TestNodes.createExpr13TestRootNode; -import static com.oracle.truffle.tools.test.ToolTestingLanguage.VALUE_TAG; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Map; -import org.junit.Ignore; import org.junit.Test; import com.oracle.truffle.api.instrument.Instrumenter; -import com.oracle.truffle.api.instrument.Probe; -import com.oracle.truffle.api.instrument.StandardSyntaxTag; -import com.oracle.truffle.api.nodes.Node; -import com.oracle.truffle.api.nodes.RootNode; import com.oracle.truffle.api.source.Source; import com.oracle.truffle.api.vm.TruffleVM; import com.oracle.truffle.tools.CoverageTracker; +import com.oracle.truffle.tools.test.ToolTestUtil.ToolTestTag; public class CoverageTrackerTest { - @SuppressWarnings("unused") private static com.oracle.truffle.tools.test.ToolTestingLanguage DUMMY = null; - @SuppressWarnings("unused") private static ToolTestingLanguage INSTANCE = ToolTestingLanguage.INSTANCE; - @Test public void testNoExecution() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { final TruffleVM vm = TruffleVM.newVM().build(); @@ -71,75 +62,55 @@ assertEquals(tool.getCounts().entrySet().size(), 0); } + void checkCounts(Source source, CoverageTracker coverage, Long[] expectedCounts) { + final Map<Source, Long[]> countMap = coverage.getCounts(); + assertEquals(countMap.size(), 1); + final Long[] resultCounts = countMap.get(source); + assertTrue(Arrays.equals(resultCounts, expectedCounts)); + } + @Test - public void testToolCreatedTooLate() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, IOException { + public void testCountingCoverage() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, IOException { final TruffleVM vm = TruffleVM.newVM().build(); final Field field = TruffleVM.class.getDeclaredField("instrumenter"); field.setAccessible(true); final Instrumenter instrumenter = (Instrumenter) field.get(vm); - final CoverageTracker tool = new CoverageTracker(VALUE_TAG); - tool.install(instrumenter); - final Source source = Source.fromText("testToolCreatedTooLate text", "testToolCreatedTooLate").withMimeType("text/x-toolTest"); - assertEquals(vm.eval(source).get(), 13); - assertTrue(tool.getCounts().isEmpty()); - tool.dispose(); - } + final Source source = ToolTestUtil.createTestSource("testCountingCoverage"); - @Ignore - @Test - public void testToolInstalledcTooLate() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { - final Instrumenter instrumenter = TestNodes.createInstrumenter(); - final CoverageTracker tool = new CoverageTracker(); - final RootNode expr13rootNode = createExpr13TestRootNode(instrumenter); + final CoverageTracker valueCoverage = new CoverageTracker(ToolTestTag.VALUE_TAG); + final CoverageTracker addCoverage = new CoverageTracker(ToolTestTag.ADD_TAG); + + valueCoverage.install(instrumenter); + assertTrue(valueCoverage.getCounts().isEmpty()); - tool.install(instrumenter); - assertEquals(13, expr13rootNode.execute(null)); - assertTrue(tool.getCounts().isEmpty()); - tool.dispose(); - } + assertEquals(vm.eval(source).get(), 13); + + checkCounts(source, valueCoverage, new Long[]{Long.valueOf(1), null, Long.valueOf(1), null}); - @Ignore - @Test - public void testCountingCoverage() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { - final Instrumenter instrumenter = TestNodes.createInstrumenter(); - final CoverageTracker tool = new CoverageTracker(); - tool.install(instrumenter); - final RootNode expr13rootNode = createExpr13TestRootNode(instrumenter); + addCoverage.install(instrumenter); - // Not probed yet. - assertEquals(13, expr13rootNode.execute(null)); - assertTrue(tool.getCounts().isEmpty()); + assertEquals(vm.eval(source).get(), 13); + + checkCounts(source, valueCoverage, new Long[]{Long.valueOf(2), null, Long.valueOf(2), null}); + checkCounts(source, addCoverage, new Long[]{null, Long.valueOf(1), null, null}); - final Node addNode = expr13rootNode.getChildren().iterator().next(); - final Probe probe = instrumenter.probe(addNode); + valueCoverage.setEnabled(false); + assertEquals(vm.eval(source).get(), 13); - // Probed but not tagged yet. - assertEquals(13, expr13rootNode.execute(null)); - assertTrue(tool.getCounts().isEmpty()); + checkCounts(source, valueCoverage, new Long[]{Long.valueOf(2), null, Long.valueOf(2), null}); + checkCounts(source, addCoverage, new Long[]{null, Long.valueOf(2), null, null}); - probe.tagAs(StandardSyntaxTag.STATEMENT, "fake statement for testing"); - - // Counting now; execute once - assertEquals(13, expr13rootNode.execute(null)); + valueCoverage.setEnabled(true); + assertEquals(vm.eval(source).get(), 13); - final Long[] longs1 = tool.getCounts().get(addNode.getSourceSection().getSource()); - assertNotNull(longs1); - assertEquals(longs1.length, 2); - assertNull(longs1[0]); // Line 1 is empty (text lines are 1-based) - assertEquals(1L, longs1[1].longValue()); // Expression is on line 2 + checkCounts(source, valueCoverage, new Long[]{Long.valueOf(3), null, Long.valueOf(3), null}); + checkCounts(source, addCoverage, new Long[]{null, Long.valueOf(3), null, null}); - // Execute 99 more times - for (int i = 0; i < 99; i++) { - assertEquals(13, expr13rootNode.execute(null)); - } + valueCoverage.dispose(); + assertEquals(vm.eval(source).get(), 13); - final Long[] longs100 = tool.getCounts().get(addNode.getSourceSection().getSource()); - assertNotNull(longs100); - assertEquals(longs100.length, 2); - assertNull(longs100[0]); - assertEquals(100L, longs100[1].longValue()); + checkCounts(source, addCoverage, new Long[]{null, Long.valueOf(4), null, null}); - tool.dispose(); + addCoverage.dispose(); } - }