coverage_viewer.unit_tests=Unit Tests
coverage_viewer.integration_tests=Integration Tests
coverage_viewer.overall_tests=All Tests
+lines_covered_per_test=Lines covered per test
#------------------------------------------------------------------------------
*/
package org.sonar.core.test;
+import com.google.common.base.Predicate;
+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.MutableTestCase;
import org.sonar.api.test.TestPlan;
import org.sonar.api.test.Testable;
public Iterable covers() {
return getEdges(DefaultCover.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) {
+ return input.testable().component().key().equals(testable.component().key());
+ }
+ }, null);
+ }
+
+
}
*/
package org.sonar.core.test;
+import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Iterables;
return cases.build();
}
+ public TestCase testCaseByKey(final String key) {
+ return Iterables.find(testCases(), new Predicate<TestCase>() {
+ public boolean apply(TestCase input) {
+ return input.key().equals(key);
+ }
+ }, null);
+ }
+
public int countTestCasesOfLine(int line) {
int number = 0;
// TODO filter on edge
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.TestCase;
import org.sonar.api.test.exception.IllegalDurationException;
+import org.sonar.core.component.ComponentVertex;
+import org.sonar.core.component.ScanGraph;
import org.sonar.core.graph.BeanGraph;
import java.util.Arrays;
assertThat(testCase.covers()).hasSize(2);
}
+ @Test
+ public void should_return_cover_of_testable(){
+ BeanGraph beanGraph = BeanGraph.createInMemory();
+
+ ScanGraph graph = ScanGraph.create();
+ ComponentVertex file1 = graph.addComponent(MockSourceFile.createMain("org.foo.Bar"));
+ DefaultTestable testable1 = beanGraph.createAdjacentVertex(file1, DefaultTestable.class, "testable");
+
+ ComponentVertex file2 = graph.addComponent(MockSourceFile.createMain("org.foo.File"));
+ DefaultTestable testable2 = beanGraph.createAdjacentVertex(file2, DefaultTestable.class, "testable");
+
+ DefaultTestCase testCase = beanGraph.createVertex(DefaultTestCase.class);
+ testCase.setCover(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();
+ }
+
@Test
public void should_set_metadata() {
BeanGraph beanGraph = BeanGraph.createInMemory();
*/
package org.sonar.core.test;
+import com.google.common.collect.Iterables;
import org.junit.Test;
+import org.sonar.api.test.MutableTestCase;
import org.sonar.core.graph.BeanGraph;
import java.util.Arrays;
assertThat(testable.testCasesOfLine(10)).containsExactly(testCase1);
assertThat(testable.testCasesOfLine(12)).contains(testCase1, testCase2);
}
+
+ @Test
+ public void should_get_test_case_by_key() {
+ BeanGraph beanGraph = BeanGraph.createInMemory();
+
+ DefaultTestPlan plan = beanGraph.createVertex(DefaultTestPlan.class);
+ plan.addTestCase("T1");
+ plan.addTestCase("T2");
+
+ DefaultTestable testable = beanGraph.createVertex(DefaultTestable.class);
+ MutableTestCase testCase1 = Iterables.get(plan.testCases(), 0);
+ testCase1.setCover(testable, Arrays.asList(10, 11, 12));
+ MutableTestCase testCase2 = Iterables.get(plan.testCases(), 1);
+ testCase2.setCover(testable, Arrays.asList(12, 48, 49));
+
+ assertThat(testable.testCaseByKey("T1")).isEqualTo(testCase1);
+ assertThat(testable.testCaseByKey("T2")).isEqualTo(testCase2);
+ assertThat(testable.testCaseByKey("Unknown")).isNull();
+ }
}
int countCoveredLines();
Iterable<Cover> covers();
+
+ Cover coverOfTestable(Testable testable);
}
List<TestCase> testCases();
+ TestCase testCaseByKey(String key);
+
int countTestCasesOfLine(int line);
List<TestCase> testCasesOfLine(int line);
@conditions_by_line = load_distribution("#{it_prefix}conditions_by_line")
@covered_conditions_by_line = load_distribution("#{it_prefix}covered_conditions_by_line")
- testable = java_facade.getTestable(@snapshot.id)
+ @testable = java_facade.getTestable(@snapshot.id)
@hits_by_line.each_pair do |line_id, hits|
line = @lines[line_id-1]
if line
line.covered_lines = 0
- line.covered_lines = testable.countTestCasesOfLine(line_id) if testable
+ line.covered_lines = @testable.countTestCasesOfLine(line_id) if @testable
line.hits = hits.to_i
line.conditions = @conditions_by_line[line_id].to_i
line.covered_conditions = @covered_conditions_by_line[line_id].to_i
end
end
+ @test_case_filter = params[:test_case_filter]
+ if @test_case_filter && @testable
+ #lines = @testable.coverOfTestable(@testable.testCaseByKey(@test_case_filter)).lines
+ #filter_lines { |line| lines.include? line }
+ end
+
render :action => 'index', :layout => !request.xhr?
end
class TestController < ApplicationController
def working_view
- #verify_ajax_request
+ verify_ajax_request
require_parameters :sid, :value, :type
type = params[:type].to_s
snapshot_id = params[:sid].to_i
<% end %>
</select>
</td>
+
+ <% if @testable && !@testable.testCases.empty? %>
+ <td class="<%= 'first' if first -%>">
+ <select id="test_case_filter" name="test_case_filter" onchange="applyOptions()">
+ <option value=""><%= message('lines_covered_per_test') -%></option>
+ <% @testable.testCases.each do |test_case| %>
+ <option value="<%= test_case.key -%>" <%= 'selected' if @test_case_filter==test_case.key -%>><%= test_case.name -%></option>
+ <% end %>
+ </select>
+ </td>
+ <% end %>
+
<% first=false
end %>
</tr>