| 31 | |
| 32 | namespace cel::test { |
| 33 | void CoverageReportingEnvironment::TearDown() { |
| 34 | CoverageIndex::CoverageReport coverage_report = |
| 35 | coverage_index_.GetCoverageReport(); |
| 36 | testing::Test::RecordProperty("CEL Expression", |
| 37 | coverage_report.cel_expression); |
| 38 | std::cout << "CEL Expression: " << coverage_report.cel_expression; |
| 39 | if (coverage_report.nodes == 0) { |
| 40 | testing::Test::RecordProperty("CEL Coverage", "No coverage stats found"); |
| 41 | std::cout << "CEL Coverage: " << "No coverage stats found"; |
| 42 | return; |
| 43 | } |
| 44 | |
| 45 | // Log Node Coverage results |
| 46 | double node_coverage = static_cast<double>(coverage_report.covered_nodes) / |
| 47 | static_cast<double>(coverage_report.nodes) * 100.0; |
| 48 | std::string node_coverage_string = |
| 49 | absl::StrFormat("%.2f%% (%d out of %d nodes covered)", node_coverage, |
| 50 | coverage_report.covered_nodes, coverage_report.nodes); |
| 51 | testing::Test::RecordProperty("AST Node Coverage", node_coverage_string); |
| 52 | std::cout << "AST Node Coverage: " << node_coverage_string; |
| 53 | if (!coverage_report.unencountered_nodes.empty()) { |
| 54 | testing::Test::RecordProperty( |
| 55 | "Interesting Unencountered Nodes", |
| 56 | absl::StrJoin(coverage_report.unencountered_nodes, "\n")); |
| 57 | std::cout << "Interesting Unencountered Nodes: " |
| 58 | << absl::StrJoin(coverage_report.unencountered_nodes, "\n"); |
| 59 | } |
| 60 | |
| 61 | // Log Branch Coverage results |
| 62 | double branch_coverage = 0.0; |
| 63 | if (coverage_report.branches > 0) { |
| 64 | branch_coverage = |
| 65 | static_cast<double>(coverage_report.covered_boolean_outcomes) / |
| 66 | static_cast<double>(coverage_report.branches) * 100.0; |
| 67 | } |
| 68 | std::string branch_coverage_string = absl::StrFormat( |
| 69 | "%.2f%% (%d out of %d branch outcomes covered)", branch_coverage, |
| 70 | coverage_report.covered_boolean_outcomes, coverage_report.branches); |
| 71 | testing::Test::RecordProperty("AST Branch Coverage", branch_coverage_string); |
| 72 | std::cout << "AST Branch Coverage: " << branch_coverage_string; |
| 73 | if (!coverage_report.unencountered_branches.empty()) { |
| 74 | testing::Test::RecordProperty( |
| 75 | "Interesting Unencountered Branch Paths", |
| 76 | absl::StrJoin(coverage_report.unencountered_branches, "\n")); |
| 77 | std::cout << "Interesting Unencountered Branch Paths: " |
| 78 | << absl::StrJoin(coverage_report.unencountered_branches, |
| 79 | "\n"); |
| 80 | } |
| 81 | if (!coverage_report.dot_graph.empty()) { |
| 82 | WriteDotGraphToArtifact(coverage_report.dot_graph); |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | void CoverageReportingEnvironment::WriteDotGraphToArtifact( |
| 87 | absl::string_view dot_graph) { |
no test coverage detected