summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoshiya Hinosawa <stibium121@gmail.com>2024-05-28 12:37:30 +0900
committerGitHub <noreply@github.com>2024-05-28 12:37:30 +0900
commitd99c6c1ea4f5711c3f48c5617d7224852fb294d2 (patch)
tree2d333b2d4636539d52c85245b68df5455a09a355
parentc4211e2ffceaa01ebeeab0a3b16809dd8e08667b (diff)
fix(coverage): handle ignore patterns (#23974)
closes #23972
-rw-r--r--cli/tools/coverage/mod.rs26
-rw-r--r--tests/integration/coverage_tests.rs45
2 files changed, 55 insertions, 16 deletions
diff --git a/cli/tools/coverage/mod.rs b/cli/tools/coverage/mod.rs
index 47841b037..e1c5d9eb4 100644
--- a/cli/tools/coverage/mod.rs
+++ b/cli/tools/coverage/mod.rs
@@ -397,11 +397,7 @@ fn collect_coverages(
)?
}
}),
- exclude: PathOrPatternSet::from_exclude_relative_path_or_patterns(
- initial_cwd,
- &files.ignore,
- )
- .context("Invalid ignore pattern.")?,
+ exclude: PathOrPatternSet::new(vec![]),
};
let file_paths = FileCollector::new(|e| {
e.path.extension().map(|ext| ext == "json").unwrap_or(false)
@@ -411,12 +407,28 @@ fn collect_coverages(
.set_vendor_folder(cli_options.vendor_dir_path().map(ToOwned::to_owned))
.collect_file_patterns(file_patterns)?;
+ let coverage_patterns = FilePatterns {
+ base: initial_cwd.to_path_buf(),
+ include: None,
+ exclude: PathOrPatternSet::from_exclude_relative_path_or_patterns(
+ initial_cwd,
+ &files.ignore,
+ )
+ .context("Invalid ignore pattern.")?,
+ };
+
for file_path in file_paths {
let new_coverage = fs::read_to_string(file_path.as_path())
.map_err(AnyError::from)
- .and_then(|json| serde_json::from_str(&json).map_err(AnyError::from))
+ .and_then(|json| {
+ serde_json::from_str::<cdp::ScriptCoverage>(&json)
+ .map_err(AnyError::from)
+ })
.with_context(|| format!("Failed reading '{}'", file_path.display()))?;
- coverages.push(new_coverage);
+ let url = Url::parse(&new_coverage.url)?;
+ if coverage_patterns.matches_specifier(&url) {
+ coverages.push(new_coverage);
+ }
}
coverages.sort_by_key(|k| k.url.clone());
diff --git a/tests/integration/coverage_tests.rs b/tests/integration/coverage_tests.rs
index f6011b054..c1e5055da 100644
--- a/tests/integration/coverage_tests.rs
+++ b/tests/integration/coverage_tests.rs
@@ -547,14 +547,15 @@ fn test_summary_reporter() {
output.assert_exit_code(0);
output.skip_output_check();
- let output = context
- .new_command()
- .args_vec(vec!["coverage".to_string(), format!("{}/", tempdir)])
- .run();
-
- output.assert_exit_code(0);
- output.assert_matches_text(
- "----------------------------------
+ {
+ let output = context
+ .new_command()
+ .args_vec(vec!["coverage".to_string(), format!("{}/", tempdir)])
+ .run();
+
+ output.assert_exit_code(0);
+ output.assert_matches_text(
+ "----------------------------------
File | Branch % | Line % |
----------------------------------
bar.ts | 0.0 | 57.1 |
@@ -565,7 +566,33 @@ File | Branch % | Line % |
All files | 40.0 | 61.0 |
----------------------------------
",
- );
+ );
+ }
+
+ // test --ignore flag works
+ {
+ let output = context
+ .new_command()
+ .args_vec(vec![
+ "coverage".to_string(),
+ format!("{}/", tempdir),
+ "--ignore=**/bar.ts,**/quux.ts".to_string(),
+ ])
+ .run();
+
+ output.assert_exit_code(0);
+ output.assert_matches_text(
+ "---------------------------------
+File | Branch % | Line % |
+---------------------------------
+ baz/qux.ts | 100.0 | 100.0 |
+ foo.ts | 50.0 | 76.9 |
+---------------------------------
+ All files | 66.7 | 85.0 |
+---------------------------------
+",
+ );
+ }
}
#[test]