diff options
-rw-r--r-- | cli/tests/integration/coverage_tests.rs | 65 | ||||
-rw-r--r-- | cli/tests/testdata/coverage/no_internal_code_test.ts | 7 | ||||
-rw-r--r-- | cli/tests/testdata/coverage/no_internal_node_code_test.ts | 8 | ||||
-rw-r--r-- | cli/tools/coverage/mod.rs | 7 |
4 files changed, 87 insertions, 0 deletions
diff --git a/cli/tests/integration/coverage_tests.rs b/cli/tests/integration/coverage_tests.rs index a8b3ec3a1..d8a11a624 100644 --- a/cli/tests/integration/coverage_tests.rs +++ b/cli/tests/integration/coverage_tests.rs @@ -1,8 +1,10 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +use deno_core::serde_json; use std::fs; use test_util as util; use test_util::TempDir; +use util::assert_starts_with; use util::env_vars_for_npm_tests; use util::TestContext; use util::TestContextBuilder; @@ -439,3 +441,66 @@ fn no_transpiled_lines() { output.assert_exit_code(0); } + +#[test] +fn no_internal_code() { + let context = TestContext::default(); + let tempdir = context.temp_dir(); + let tempdir = tempdir.path().join("cov"); + + let output = context + .new_command() + .args_vec(vec![ + "test".to_string(), + "--quiet".to_string(), + format!("--coverage={}", tempdir), + "coverage/no_internal_code_test.ts".to_string(), + ]) + .run(); + + output.assert_exit_code(0); + output.skip_output_check(); + + // Check that coverage files contain no internal urls + let paths = fs::read_dir(tempdir).unwrap(); + for path in paths { + let unwrapped = path.unwrap().path(); + let data = fs::read_to_string(&unwrapped.clone()).unwrap(); + + let value: serde_json::Value = serde_json::from_str(&data).unwrap(); + let url = value["url"].as_str().unwrap(); + assert_starts_with!(url, "file:"); + } +} + +#[test] +fn no_internal_node_code() { + let context = TestContext::default(); + let tempdir = context.temp_dir(); + let tempdir = tempdir.path().join("cov"); + + let output = context + .new_command() + .args_vec(vec![ + "test".to_string(), + "--quiet".to_string(), + "--no-check".to_string(), + format!("--coverage={}", tempdir), + "coverage/no_internal_node_code_test.ts".to_string(), + ]) + .run(); + + output.assert_exit_code(0); + output.skip_output_check(); + + // Check that coverage files contain no internal urls + let paths = fs::read_dir(tempdir).unwrap(); + for path in paths { + let unwrapped = path.unwrap().path(); + let data = fs::read_to_string(&unwrapped.clone()).unwrap(); + + let value: serde_json::Value = serde_json::from_str(&data).unwrap(); + let url = value["url"].as_str().unwrap(); + assert_starts_with!(url, "file:"); + } +} diff --git a/cli/tests/testdata/coverage/no_internal_code_test.ts b/cli/tests/testdata/coverage/no_internal_code_test.ts new file mode 100644 index 000000000..0cf46d252 --- /dev/null +++ b/cli/tests/testdata/coverage/no_internal_code_test.ts @@ -0,0 +1,7 @@ +const add = (a: number, b: number) => a + b; + +Deno.test(function addTest() { + if (add(2, 3) !== 5) { + throw new Error("fail"); + } +}); diff --git a/cli/tests/testdata/coverage/no_internal_node_code_test.ts b/cli/tests/testdata/coverage/no_internal_node_code_test.ts new file mode 100644 index 000000000..dc53e0c52 --- /dev/null +++ b/cli/tests/testdata/coverage/no_internal_node_code_test.ts @@ -0,0 +1,8 @@ +import * as path from "node:path"; + +Deno.test(function test() { + const res = path.join("foo", "bar"); + if (!res.includes("foo")) { + throw new Error("fail"); + } +}); diff --git a/cli/tools/coverage/mod.rs b/cli/tools/coverage/mod.rs index 6dca349f7..2b8e67c82 100644 --- a/cli/tools/coverage/mod.rs +++ b/cli/tools/coverage/mod.rs @@ -127,6 +127,13 @@ impl CoverageCollector { let script_coverages = self.take_precise_coverage().await?.result; for script_coverage in script_coverages { + // Filter out internal JS files from being included in coverage reports + if script_coverage.url.starts_with("ext:") + || script_coverage.url.starts_with("[ext:") + { + continue; + } + let filename = format!("{}.json", Uuid::new_v4()); let filepath = self.dir.join(filename); |