Mercurial > hg > truffle
diff truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/CoverageTrackerTest.java @ 22266:0d36601f233e
Merge revised Instrumentation framework into the Polyglot API
- Required language implementation support now in TruffleLanguage
- Instrumentation services provided by the new Instrumenter class
- Reduced public API exposure; communication with other components via Accessor
- Several methods removed from the Node class
- Many test rewritten or using a new "test mode" because of limited access to Engine services
Merge with c66f520ad8562b906a878e9b3293aaf54270db90
author | Michael Van De Vanter <michael.van.de.vanter@oracle.com> |
---|---|
date | Wed, 30 Sep 2015 16:33:56 -0700 |
parents | c7b6dae6d1fa |
children | 906a5f6e07cc |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/CoverageTrackerTest.java Tue Sep 29 18:04:11 2015 +0200 +++ b/truffle/com.oracle.truffle.tools.test/src/com/oracle/truffle/tools/test/CoverageTrackerTest.java Wed Sep 30 16:33:56 2015 -0700 @@ -24,25 +24,34 @@ */ package com.oracle.truffle.tools.test; -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 static org.junit.Assert.assertEquals; +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.Test; + +import com.oracle.truffle.api.instrument.Instrumenter; +import com.oracle.truffle.api.source.Source; +import com.oracle.truffle.api.vm.PolyglotEngine; import com.oracle.truffle.tools.CoverageTracker; -import static com.oracle.truffle.tools.test.TestNodes.createExpr13TestRootNode; -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 org.junit.Test; +import com.oracle.truffle.tools.test.ToolTestUtil.ToolTestTag; public class CoverageTrackerTest { @Test - public void testNoExecution() { + public void testNoExecution() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { + final PolyglotEngine vm = PolyglotEngine.buildNew().build(); + final Field field = PolyglotEngine.class.getDeclaredField("instrumenter"); + field.setAccessible(true); + final Instrumenter instrumenter = (Instrumenter) field.get(vm); + instrumenter.registerASTProber(new ToolTestUtil.TestASTProber()); final CoverageTracker tool = new CoverageTracker(); assertEquals(tool.getCounts().entrySet().size(), 0); - tool.install(); + instrumenter.install(tool); assertEquals(tool.getCounts().entrySet().size(), 0); tool.setEnabled(false); assertEquals(tool.getCounts().entrySet().size(), 0); @@ -54,66 +63,56 @@ assertEquals(tool.getCounts().entrySet().size(), 0); } - @Test - public void testToolCreatedTooLate() { - final RootNode expr13rootNode = createExpr13TestRootNode(); - final CoverageTracker tool = new CoverageTracker(); - tool.install(); - assertEquals(13, expr13rootNode.execute(null)); - assertTrue(tool.getCounts().isEmpty()); - tool.dispose(); - } - - @Test - public void testToolInstalledcTooLate() { - final CoverageTracker tool = new CoverageTracker(); - final RootNode expr13rootNode = createExpr13TestRootNode(); - tool.install(); - assertEquals(13, expr13rootNode.execute(null)); - assertTrue(tool.getCounts().isEmpty()); - tool.dispose(); + 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 testCountingCoverage() { - final CoverageTracker tool = new CoverageTracker(); - tool.install(); - final RootNode expr13rootNode = createExpr13TestRootNode(); + public void testCountingCoverage() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, IOException { + final PolyglotEngine vm = PolyglotEngine.buildNew().build(); + final Field field = PolyglotEngine.class.getDeclaredField("instrumenter"); + field.setAccessible(true); + final Instrumenter instrumenter = (Instrumenter) field.get(vm); + instrumenter.registerASTProber(new ToolTestUtil.TestASTProber()); + final Source source = ToolTestUtil.createTestSource("testCountingCoverage"); - // Not probed yet. - assertEquals(13, expr13rootNode.execute(null)); - assertTrue(tool.getCounts().isEmpty()); + final CoverageTracker valueCoverage = new CoverageTracker(ToolTestTag.VALUE_TAG); + final CoverageTracker addCoverage = new CoverageTracker(ToolTestTag.ADD_TAG); - final Node addNode = expr13rootNode.getChildren().iterator().next(); - final Probe probe = addNode.probe(); + instrumenter.install(valueCoverage); + assertTrue(valueCoverage.getCounts().isEmpty()); + + 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(1), null, Long.valueOf(1), null}); - probe.tagAs(StandardSyntaxTag.STATEMENT, "fake statement for testing"); + instrumenter.install(addCoverage); - // Counting now; execute once - assertEquals(13, expr13rootNode.execute(null)); + 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(2), null, Long.valueOf(2), null}); + checkCounts(source, addCoverage, new Long[]{null, Long.valueOf(1), null, null}); + + valueCoverage.setEnabled(false); + assertEquals(vm.eval(source).get(), 13); - // Execute 99 more times - for (int i = 0; i < 99; i++) { - assertEquals(13, expr13rootNode.execute(null)); - } + checkCounts(source, valueCoverage, new Long[]{Long.valueOf(2), null, Long.valueOf(2), null}); + checkCounts(source, addCoverage, new Long[]{null, Long.valueOf(2), null, null}); + + valueCoverage.setEnabled(true); + 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, valueCoverage, new Long[]{Long.valueOf(3), null, Long.valueOf(3), null}); + checkCounts(source, addCoverage, new Long[]{null, Long.valueOf(3), null, null}); + + valueCoverage.dispose(); + assertEquals(vm.eval(source).get(), 13); - tool.dispose(); + checkCounts(source, addCoverage, new Long[]{null, Long.valueOf(4), null, null}); + + addCoverage.dispose(); } - }