Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions src/report/cobertura.ml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ type line = {

type class_ = {
name : string;
filename: string;
line_rate : float;
lines : line list;
}
Expand Down Expand Up @@ -44,12 +45,12 @@ let pp_lines fmt lines =
fprintf fmt " <lines>\n%a </lines>\n"
(pp_list pp_line) lines

let pp_class_ fmt {name; line_rate; lines} =
let pp_class_ fmt {name; filename; line_rate; lines} =
let open Format in
let class_infos =
Format.sprintf "name=\"%s\" filename=\"%s\" line-rate=\"%f\""
name
name
filename
line_rate
in
fprintf fmt
Expand Down Expand Up @@ -116,6 +117,12 @@ let update_counts counts line_counts =
let line line hits =
{number = line; hits}

let module_name_of_filename filename =
filename
|> Filename.basename
|> Filename.chop_extension
|> String.capitalize_ascii

let classes ~global_counts resolver coverage : class_ list =
let class_ {Bisect_common.filename; points; counts} =
match resolver ~filename with
Expand Down Expand Up @@ -145,7 +152,8 @@ let classes ~global_counts resolver coverage : class_ list =
|> List.rev
in

Some {name = filename; line_rate; lines}
let name = module_name_of_filename filename in
Some {name; filename; line_rate; lines}
in

Hashtbl.fold (fun _ file acc ->
Expand All @@ -155,16 +163,16 @@ let classes ~global_counts resolver coverage : class_ list =
coverage
[]

let package ~counts ~resolver ~coverage =
let package ~package_name ~counts ~resolver ~coverage =
let classes = classes ~global_counts:counts resolver coverage in
let line_rate = line_rate !counts in
{name = "."; line_rate; classes}
{name = package_name; line_rate; classes}

let packages ~packages = {packages}

let cobertura ~resolver ~coverage =
let cobertura ~package_name ~resolver ~coverage =
let counts = ref (0, 0) in
let package = package ~counts ~resolver ~coverage in
let package = package ~package_name ~counts ~resolver ~coverage in
let packages = packages ~packages:[package] in
let sources = ["."] in
let rate = line_rate !counts in
Expand All @@ -178,14 +186,14 @@ let cobertura ~resolver ~coverage =

let output
~to_file ~coverage_files ~coverage_paths ~source_paths ~ignore_missing_files
~expect ~do_not_expect =
~package_name ~expect ~do_not_expect =

let coverage =
Input.load_coverage
~coverage_files ~coverage_paths ~expect ~do_not_expect in
let resolver =
Util.find_source_file ~source_roots:source_paths ~ignore_missing_files in
let cobertura = cobertura ~resolver ~coverage in
let cobertura = cobertura ~package_name ~resolver ~coverage in
let () = Util.mkdirs (Filename.dirname to_file) in
let oc =
try open_out to_file
Expand Down
1 change: 1 addition & 0 deletions src/report/cobertura.mli
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ val output :
coverage_paths:string list ->
source_paths:string list ->
ignore_missing_files:bool ->
package_name:string ->
expect:string list ->
do_not_expect:string list ->
unit
12 changes: 9 additions & 3 deletions src/report/main.ml
Original file line number Diff line number Diff line change
Expand Up @@ -244,16 +244,22 @@ let text =


let cobertura =
let package_name =
Arg.(value @@ opt string "." @@
info ["package"] ~docv:"STRING" ~doc:
"Package name to include in the Cobertura XML report.")
in

let call_with_labels
to_file coverage_files coverage_paths source_paths ignore_missing_files
expect do_not_expect =
package_name expect do_not_expect =
Cobertura.output
~to_file ~coverage_files ~coverage_paths ~source_paths
~ignore_missing_files ~expect ~do_not_expect
~ignore_missing_files ~package_name ~expect ~do_not_expect
in
Term.(const set_verbose $ verbose $ const call_with_labels $ to_file
$ coverage_files 1 $ coverage_paths $ source_paths $ ignore_missing_files
$ expect $ do_not_expect),
$ package_name $ expect $ do_not_expect),
term_info "cobertura" ~doc:"Generate Cobertura XML report"


Expand Down
27 changes: 26 additions & 1 deletion test/report/cobertura.t
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,32 @@
<packages>
<package name="." line-rate="0.333333">
<classes>
<class name="test.ml" filename="test.ml" line-rate="0.333333">
<class name="Test" filename="test.ml" line-rate="0.333333">
<lines>
<line number="2" hits="1"/>
<line number="5" hits="0"/>
<line number="8" hits="1"/>
<line number="13" hits="0"/>
<line number="14" hits="0"/>
<line number="16" hits="0"/>
</lines>
</class>
</classes>
</package>
</packages>
</coverage>
$ bisect-ppx-report cobertura --package foo coverage2.xml --verbose
Info: found *.coverage files in './'
$ cat coverage2.xml
<?xml version="1.0" ?>
<coverage lines-valid="6" lines-covered="2" line-rate="0.333333">
<sources>
<source>.</source>
</sources>
<packages>
<package name="foo" line-rate="0.333333">
<classes>
<class name="Test" filename="test.ml" line-rate="0.333333">
<lines>
<line number="2" hits="1"/>
<line number="5" hits="0"/>
Expand Down
Loading