+ add Testable#coverageBlocks()tags/3.5
@@ -20,14 +20,14 @@ | |||
package org.sonar.core.test; | |||
import com.tinkerpop.blueprints.Direction; | |||
import org.sonar.api.test.Cover; | |||
import org.sonar.api.test.CoverageBlock; | |||
import org.sonar.api.test.TestCase; | |||
import org.sonar.api.test.Testable; | |||
import org.sonar.core.graph.BeanEdge; | |||
import java.util.List; | |||
public class DefaultCover extends BeanEdge implements Cover { | |||
public class DefaultCoverageBlock extends BeanEdge implements CoverageBlock { | |||
public TestCase testCase() { | |||
return getVertex(DefaultTestCase.class, Direction.OUT); |
@@ -24,8 +24,9 @@ import com.google.common.collect.Iterables; | |||
import com.tinkerpop.blueprints.Direction; | |||
import com.tinkerpop.blueprints.Edge; | |||
import com.tinkerpop.blueprints.Vertex; | |||
import org.sonar.api.test.Cover; | |||
import org.sonar.api.test.CoverageBlock; | |||
import org.sonar.api.test.MutableTestCase; | |||
import org.sonar.api.test.MutableTestPlan; | |||
import org.sonar.api.test.TestPlan; | |||
import org.sonar.api.test.Testable; | |||
import org.sonar.api.test.exception.IllegalDurationException; | |||
@@ -38,6 +39,15 @@ import java.util.List; | |||
public class DefaultTestCase extends BeanVertex implements MutableTestCase { | |||
public String type() { | |||
return (String) getProperty("type"); | |||
} | |||
public MutableTestCase setType(@Nullable String s) { | |||
setProperty("type", s); | |||
return this; | |||
} | |||
public Long durationInMs() { | |||
return (Long) getProperty("duration"); | |||
} | |||
@@ -51,11 +61,11 @@ public class DefaultTestCase extends BeanVertex implements MutableTestCase { | |||
} | |||
public Status status() { | |||
return Status.of((String)getProperty("status")); | |||
return Status.of((String) getProperty("status")); | |||
} | |||
public MutableTestCase setStatus(@Nullable Status s) { | |||
setProperty("status", s == null ? null : s.toString()); | |||
setProperty("status", s == null ? null : s.name()); | |||
return this; | |||
} | |||
@@ -86,8 +96,9 @@ public class DefaultTestCase extends BeanVertex implements MutableTestCase { | |||
return this; | |||
} | |||
public void setCover(Testable testable, List<Integer> lines) { | |||
public MutableTestCase setCoverageBlock(Testable testable, List<Integer> lines) { | |||
beanGraph().getUnderlyingGraph().addEdge(null, element(), ((BeanVertex) testable).element(), "covers").setProperty("lines", lines); | |||
return this; | |||
} | |||
public TestPlan testPlan() { | |||
@@ -108,13 +119,13 @@ public class DefaultTestCase extends BeanVertex implements MutableTestCase { | |||
return result; | |||
} | |||
public Iterable covers() { | |||
return getEdges(DefaultCover.class, Direction.OUT, "covers"); | |||
public Iterable<CoverageBlock> coverageBlocks() { | |||
return (Iterable) getEdges(DefaultCoverageBlock.class, Direction.OUT, "covers"); | |||
} | |||
public Cover coverOfTestable(final Testable testable) { | |||
return Iterables.find(getEdges(DefaultCover.class, Direction.OUT, "covers"), new Predicate<Cover>() { | |||
public boolean apply(Cover input) { | |||
public CoverageBlock coverageBlock(final Testable testable) { | |||
return Iterables.find(getEdges(DefaultCoverageBlock.class, Direction.OUT, "covers"), new Predicate<CoverageBlock>() { | |||
public boolean apply(CoverageBlock input) { | |||
return input.testable().component().key().equals(testable.component().key()); | |||
} | |||
}, null); |
@@ -39,15 +39,6 @@ public class DefaultTestPlan extends BeanVertex implements MutableTestPlan { | |||
return beanGraph().wrap(component, ComponentVertex.class); | |||
} | |||
public String type() { | |||
return (String) getProperty("type"); | |||
} | |||
public MutableTestPlan setType(String s) { | |||
setProperty("type", s); | |||
return this; | |||
} | |||
@CheckForNull | |||
public Iterable<MutableTestCase> testCasesByName(String name) { | |||
List<MutableTestCase> result = Lists.newArrayList(); |
@@ -27,7 +27,7 @@ import com.tinkerpop.blueprints.Direction; | |||
import com.tinkerpop.blueprints.Edge; | |||
import com.tinkerpop.blueprints.Vertex; | |||
import org.sonar.api.component.Component; | |||
import org.sonar.api.test.Cover; | |||
import org.sonar.api.test.CoverageBlock; | |||
import org.sonar.api.test.MutableTestable; | |||
import org.sonar.api.test.TestCase; | |||
import org.sonar.core.component.ComponentVertex; | |||
@@ -46,7 +46,7 @@ public class DefaultTestable extends BeanVertex implements MutableTestable { | |||
public List<TestCase> testCases() { | |||
ImmutableList.Builder<TestCase> cases = ImmutableList.builder(); | |||
for (Edge coversEdge : covers()) { | |||
for (Edge coversEdge : coverEdges()) { | |||
Vertex testable = coversEdge.getVertex(Direction.OUT); | |||
cases.add(beanGraph().wrap(testable, DefaultTestCase.class)); | |||
} | |||
@@ -63,7 +63,7 @@ public class DefaultTestable extends BeanVertex implements MutableTestable { | |||
public int countTestCasesOfLine(Integer line) { | |||
int number = 0; | |||
for (Edge edge : covers()) { | |||
for (Edge edge : coverEdges()) { | |||
if (Iterables.contains(lines(edge), line)) { | |||
number++; | |||
} | |||
@@ -73,7 +73,7 @@ public class DefaultTestable extends BeanVertex implements MutableTestable { | |||
public List<TestCase> testCasesOfLine(int line) { | |||
ImmutableList.Builder<TestCase> cases = ImmutableList.builder(); | |||
for (Edge edge : covers()) { | |||
for (Edge edge : coverEdges()) { | |||
if (lines(edge).contains(line)) { | |||
Vertex vertexTestable = edge.getVertex(Direction.OUT); | |||
DefaultTestCase testCase = beanGraph().wrap(vertexTestable, DefaultTestCase.class); | |||
@@ -85,21 +85,25 @@ public class DefaultTestable extends BeanVertex implements MutableTestable { | |||
public SortedSet<Integer> testedLines() { | |||
ImmutableSortedSet.Builder<Integer> coveredLines = ImmutableSortedSet.naturalOrder(); | |||
for (Edge edge : covers()) { | |||
for (Edge edge : coverEdges()) { | |||
coveredLines.addAll(lines(edge)); | |||
} | |||
return coveredLines.build(); | |||
} | |||
public Cover coverOfTestCase(final TestCase testCase) { | |||
return Iterables.find(getEdges(DefaultCover.class, Direction.IN, "covers"), new Predicate<Cover>() { | |||
public boolean apply(Cover input) { | |||
public CoverageBlock coverageBlock(final TestCase testCase) { | |||
return Iterables.find(getEdges(DefaultCoverageBlock.class, Direction.IN, "covers"), new Predicate<CoverageBlock>() { | |||
public boolean apply(CoverageBlock input) { | |||
return input.testCase().name().equals(testCase.name()); | |||
} | |||
}, null); | |||
} | |||
private Iterable<Edge> covers() { | |||
public Iterable<CoverageBlock> coverageBlocks() { | |||
return (Iterable)getEdges(DefaultCoverageBlock.class, Direction.IN, "covers"); | |||
} | |||
private Iterable<Edge> coverEdges() { | |||
return element().query().labels("covers").direction(Direction.IN).edges(); | |||
} | |||
@@ -24,7 +24,7 @@ import org.junit.Rule; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
import org.sonar.api.component.mock.MockSourceFile; | |||
import org.sonar.api.test.Cover; | |||
import org.sonar.api.test.CoverageBlock; | |||
import org.sonar.api.test.TestCase; | |||
import org.sonar.api.test.exception.IllegalDurationException; | |||
import org.sonar.core.component.ComponentVertex; | |||
@@ -41,13 +41,13 @@ public class DefaultTestCaseTest { | |||
public ExpectedException thrown = ExpectedException.none(); | |||
@Test | |||
public void no_coverage_data() { | |||
public void no_coverage_blocks() { | |||
BeanGraph beanGraph = BeanGraph.createInMemory(); | |||
DefaultTestCase testCase = beanGraph.createVertex(DefaultTestCase.class); | |||
assertThat(testCase.doesCover()).isFalse(); | |||
assertThat(testCase.countCoveredLines()).isEqualTo(0); | |||
assertThat(testCase.covers()).isEmpty(); | |||
assertThat(testCase.coverageBlocks()).isEmpty(); | |||
} | |||
@Test | |||
@@ -55,13 +55,13 @@ public class DefaultTestCaseTest { | |||
BeanGraph beanGraph = BeanGraph.createInMemory(); | |||
DefaultTestable testable = beanGraph.createVertex(DefaultTestable.class); | |||
DefaultTestCase testCase = beanGraph.createVertex(DefaultTestCase.class); | |||
testCase.setCover(testable, Arrays.asList(10, 11, 12)); | |||
testCase.setCoverageBlock(testable, Arrays.asList(10, 11, 12)); | |||
assertThat(testCase.doesCover()).isTrue(); | |||
assertThat(testCase.countCoveredLines()).isEqualTo(3); | |||
assertThat(testCase.covers()).hasSize(1); | |||
assertThat(testCase.coverageBlocks()).hasSize(1); | |||
Cover cover = Iterables.<Cover>getFirst(testCase.covers(), null); | |||
CoverageBlock cover = Iterables.getFirst(testCase.coverageBlocks(), null); | |||
assertThat(cover.testCase()).isEqualTo(testCase); | |||
assertThat(cover.testable()).isSameAs(testable); | |||
assertThat(cover.lines()).containsExactly(10, 11, 12); | |||
@@ -74,12 +74,12 @@ public class DefaultTestCaseTest { | |||
DefaultTestable testable2 = beanGraph.createVertex(DefaultTestable.class); | |||
DefaultTestCase testCase = beanGraph.createVertex(DefaultTestCase.class); | |||
testCase.setCover(testable1, Arrays.asList(10, 11, 12)); | |||
testCase.setCover(testable2, Arrays.asList(12, 13, 14)); | |||
testCase.setCoverageBlock(testable1, Arrays.asList(10, 11, 12)); | |||
testCase.setCoverageBlock(testable2, Arrays.asList(12, 13, 14)); | |||
assertThat(testCase.doesCover()).isTrue(); | |||
assertThat(testCase.countCoveredLines()).isEqualTo(6); | |||
assertThat(testCase.covers()).hasSize(2); | |||
assertThat(testCase.coverageBlocks()).hasSize(2); | |||
} | |||
@Test | |||
@@ -94,11 +94,11 @@ public class DefaultTestCaseTest { | |||
DefaultTestable testable2 = beanGraph.createAdjacentVertex(file2, DefaultTestable.class, "testable"); | |||
DefaultTestCase testCase = beanGraph.createVertex(DefaultTestCase.class); | |||
testCase.setCover(testable1, Arrays.asList(10, 11, 12)); | |||
testCase.setCoverageBlock(testable1, Arrays.asList(10, 11, 12)); | |||
assertThat(testCase.coverOfTestable(testable1).testable()).isEqualTo(testable1); | |||
assertThat(testCase.coverOfTestable(testable1).testCase()).isEqualTo(testCase); | |||
assertThat(testCase.coverOfTestable(testable2)).isNull(); | |||
assertThat(testCase.coverageBlock(testable1).testable()).isEqualTo(testable1); | |||
assertThat(testCase.coverageBlock(testable1).testCase()).isEqualTo(testCase); | |||
assertThat(testCase.coverageBlock(testable2)).isNull(); | |||
} | |||
@Test | |||
@@ -110,6 +110,7 @@ public class DefaultTestCaseTest { | |||
.setDurationInMs(1234L) | |||
.setMessage("Error msg") | |||
.setStackTrace("xxx") | |||
.setType(TestCase.TYPE_UNIT) | |||
.setStatus(TestCase.Status.ERROR); | |||
assertThat(testCase.name()).isEqualTo("T1"); | |||
@@ -117,6 +118,7 @@ public class DefaultTestCaseTest { | |||
assertThat(testCase.stackTrace()).isEqualTo("xxx"); | |||
assertThat(testCase.durationInMs()).isEqualTo(1234L); | |||
assertThat(testCase.status()).isEqualTo(TestCase.Status.ERROR); | |||
assertThat(testCase.type()).isEqualTo(TestCase.TYPE_UNIT); | |||
} | |||
@Test |
@@ -82,15 +82,4 @@ public class DefaultTestPlanTest { | |||
assertThat(plan.testCasesByName("T1")).hasSize(2); | |||
} | |||
@Test | |||
public void should_set_type() { | |||
BeanGraph beanGraph = BeanGraph.createInMemory(); | |||
DefaultTestPlan plan = beanGraph.createVertex(DefaultTestPlan.class); | |||
assertThat(plan.type()).isNull(); | |||
plan.setType(TestPlan.TYPE_UNIT); | |||
assertThat(plan.type()).isEqualTo(TestPlan.TYPE_UNIT); | |||
} | |||
} |
@@ -46,9 +46,9 @@ public class DefaultTestableTest { | |||
DefaultTestable testable = beanGraph.createVertex(DefaultTestable.class); | |||
DefaultTestCase testCase1 = beanGraph.createVertex(DefaultTestCase.class); | |||
testCase1.setCover(testable, Arrays.asList(10, 11, 12)); | |||
testCase1.setCoverageBlock(testable, Arrays.asList(10, 11, 12)); | |||
DefaultTestCase testCase2 = beanGraph.createVertex(DefaultTestCase.class); | |||
testCase2.setCover(testable, Arrays.asList(12, 48, 49)); | |||
testCase2.setCoverageBlock(testable, Arrays.asList(12, 48, 49)); | |||
assertThat(testable.testedLines()).containsOnly(10, 11, 12, 48, 49); | |||
assertThat(testable.countTestCasesOfLine(2)).isEqualTo(0); | |||
@@ -62,9 +62,9 @@ public class DefaultTestableTest { | |||
DefaultTestable testable = beanGraph.createVertex(DefaultTestable.class); | |||
DefaultTestCase testCase1 = beanGraph.createVertex(DefaultTestCase.class); | |||
testCase1.setCover(testable, Arrays.asList(10, 11, 12)); | |||
testCase1.setCoverageBlock(testable, Arrays.asList(10, 11, 12)); | |||
DefaultTestCase testCase2 = beanGraph.createVertex(DefaultTestCase.class); | |||
testCase2.setCover(testable, Arrays.asList(12, 48, 49)); | |||
testCase2.setCoverageBlock(testable, Arrays.asList(12, 48, 49)); | |||
assertThat(testable.testCases()).containsOnly(testCase1, testCase2); | |||
assertThat(testable.testCasesOfLine(5)).isEmpty(); | |||
@@ -82,9 +82,9 @@ public class DefaultTestableTest { | |||
DefaultTestable testable = beanGraph.createVertex(DefaultTestable.class); | |||
MutableTestCase testCase1 = Iterables.get(plan.testCases(), 0); | |||
testCase1.setCover(testable, Arrays.asList(10, 11, 12)); | |||
testCase1.setCoverageBlock(testable, Arrays.asList(10, 11, 12)); | |||
MutableTestCase testCase2 = Iterables.get(plan.testCases(), 1); | |||
testCase2.setCover(testable, Arrays.asList(12, 48, 49)); | |||
testCase2.setCoverageBlock(testable, Arrays.asList(12, 48, 49)); | |||
assertThat(testable.testCaseByName("T1")).isEqualTo(testCase1); | |||
assertThat(testable.testCaseByName("T2")).isEqualTo(testCase2); | |||
@@ -106,10 +106,10 @@ public class DefaultTestableTest { | |||
plan.addTestCase("T1"); | |||
MutableTestCase testCase = Iterables.get(plan.testCases(), 0); | |||
testCase.setCover(testable1, Arrays.asList(10, 11, 12)); | |||
testCase.setCoverageBlock(testable1, Arrays.asList(10, 11, 12)); | |||
assertThat(testable1.coverOfTestCase(testCase).testCase()).isEqualTo(testCase); | |||
assertThat(testable1.coverOfTestCase(testCase).testable()).isEqualTo(testable1); | |||
assertThat(testable2.coverOfTestCase(testCase)).isNull(); | |||
assertThat(testable1.coverageBlock(testCase).testCase()).isEqualTo(testCase); | |||
assertThat(testable1.coverageBlock(testCase).testable()).isEqualTo(testable1); | |||
assertThat(testable2.coverageBlock(testCase)).isNull(); | |||
} | |||
} |
@@ -21,7 +21,7 @@ package org.sonar.api.test; | |||
import java.util.List; | |||
public interface Cover { | |||
public interface CoverageBlock { | |||
TestCase testCase(); | |||
@@ -24,13 +24,15 @@ import javax.annotation.Nullable; | |||
import java.util.List; | |||
public interface MutableTestCase extends TestCase { | |||
MutableTestCase setStatus(Status s); | |||
MutableTestCase setStatus(@Nullable Status s); | |||
MutableTestCase setDurationInMs(@Nullable Long l); | |||
MutableTestCase setMessage(String s); | |||
MutableTestCase setMessage(@Nullable String s); | |||
MutableTestCase setStackTrace(String s); | |||
MutableTestCase setStackTrace(@Nullable String s); | |||
void setCover(Testable testable, List<Integer> lines); | |||
MutableTestCase setType(@Nullable String s); | |||
MutableTestCase setCoverageBlock(Testable testable, List<Integer> lines); | |||
} |
@@ -23,7 +23,6 @@ import org.sonar.api.component.MutablePerspective; | |||
public interface MutableTestPlan extends TestPlan<MutableTestCase>, MutablePerspective { | |||
MutableTestPlan setType(String s); | |||
MutableTestCase addTestCase(String name); | |||
MutableTestCase addTestCase(String key); | |||
} |
@@ -30,11 +30,16 @@ public interface TestCase { | |||
} | |||
} | |||
String TYPE_UNIT = "unit"; | |||
String TYPE_INTEGRATION = "integration"; | |||
/** | |||
* Duration in milliseconds | |||
*/ | |||
Long durationInMs(); | |||
String type(); | |||
Status status(); | |||
String name(); | |||
@@ -49,7 +54,7 @@ public interface TestCase { | |||
int countCoveredLines(); | |||
Iterable<Cover> covers(); | |||
Iterable<CoverageBlock> coverageBlocks(); | |||
Cover coverOfTestable(Testable testable); | |||
CoverageBlock coverageBlock(Testable testable); | |||
} |
@@ -24,12 +24,6 @@ import org.sonar.api.component.Perspective; | |||
import java.util.List; | |||
public interface TestPlan<T extends TestCase> extends Perspective { | |||
String TYPE_UNIT = "unit"; | |||
String TYPE_INTEGRATION = "integration"; | |||
// unit test/integration test/... | |||
String type(); | |||
Iterable<T> testCases(); | |||
Iterable<T> testCasesByName(String name); |
@@ -36,6 +36,7 @@ public interface Testable extends Perspective { | |||
SortedSet<Integer> testedLines(); | |||
Cover coverOfTestCase(TestCase testCase); | |||
CoverageBlock coverageBlock(TestCase testCase); | |||
Iterable<CoverageBlock> coverageBlocks(); | |||
} |