mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 10:59:13 +00:00
fix(coverage): better handling of multi-byte characters (#15159)
This commit is contained in:
parent
b68115db3a
commit
82431062fa
8 changed files with 129 additions and 113 deletions
|
@ -54,15 +54,15 @@ pub fn merge_scripts(
|
|||
let first: &ScriptCoverage = &scripts[0];
|
||||
(first.script_id.clone(), first.url.clone())
|
||||
};
|
||||
let mut range_to_funcs: BTreeMap<Range, Vec<FunctionCoverage>> =
|
||||
let mut range_to_funcs: BTreeMap<CharRange, Vec<FunctionCoverage>> =
|
||||
BTreeMap::new();
|
||||
for script_cov in scripts {
|
||||
for func_cov in script_cov.functions {
|
||||
let root_range = {
|
||||
let root_range_cov: &CoverageRange = &func_cov.ranges[0];
|
||||
Range {
|
||||
start: root_range_cov.start_offset,
|
||||
end: root_range_cov.end_offset,
|
||||
CharRange {
|
||||
start: root_range_cov.start_char_offset,
|
||||
end: root_range_cov.end_char_offset,
|
||||
}
|
||||
};
|
||||
range_to_funcs
|
||||
|
@ -85,12 +85,12 @@ pub fn merge_scripts(
|
|||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Hash, Copy, Clone, Debug)]
|
||||
struct Range {
|
||||
struct CharRange {
|
||||
start: usize,
|
||||
end: usize,
|
||||
}
|
||||
|
||||
impl Ord for Range {
|
||||
impl Ord for CharRange {
|
||||
fn cmp(&self, other: &Self) -> ::std::cmp::Ordering {
|
||||
if self.start != other.start {
|
||||
self.start.cmp(&other.start)
|
||||
|
@ -100,7 +100,7 @@ impl Ord for Range {
|
|||
}
|
||||
}
|
||||
|
||||
impl PartialOrd for Range {
|
||||
impl PartialOrd for CharRange {
|
||||
fn partial_cmp(&self, other: &Self) -> Option<::std::cmp::Ordering> {
|
||||
if self.start != other.start {
|
||||
self.start.partial_cmp(&other.start)
|
||||
|
@ -249,7 +249,7 @@ fn merge_range_tree_children<'a>(
|
|||
Vec::with_capacity(parent_trees.len());
|
||||
let mut wrapped_children: Vec<Vec<&'a mut RangeTree<'a>>> =
|
||||
Vec::with_capacity(parent_trees.len());
|
||||
let mut open_range: Option<Range> = None;
|
||||
let mut open_range: Option<CharRange> = None;
|
||||
|
||||
for _parent_tree in parent_trees.iter() {
|
||||
flat_children.push(Vec::new());
|
||||
|
@ -318,7 +318,7 @@ fn merge_range_tree_children<'a>(
|
|||
.push(tree);
|
||||
}
|
||||
start_event_queue.set_pending_offset(open_range_end);
|
||||
open_range = Some(Range {
|
||||
open_range = Some(CharRange {
|
||||
start: event.offset,
|
||||
end: open_range_end,
|
||||
});
|
||||
|
@ -452,8 +452,8 @@ mod tests {
|
|||
function_name: String::from("lib"),
|
||||
is_block_coverage: true,
|
||||
ranges: vec![CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 9,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 9,
|
||||
count: 1,
|
||||
}],
|
||||
}],
|
||||
|
@ -467,8 +467,8 @@ mod tests {
|
|||
function_name: String::from("lib"),
|
||||
is_block_coverage: true,
|
||||
ranges: vec![CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 9,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 9,
|
||||
count: 2,
|
||||
}],
|
||||
}],
|
||||
|
@ -483,8 +483,8 @@ mod tests {
|
|||
function_name: String::from("lib"),
|
||||
is_block_coverage: true,
|
||||
ranges: vec![CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 9,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 9,
|
||||
count: 3,
|
||||
}],
|
||||
}],
|
||||
|
@ -506,13 +506,13 @@ mod tests {
|
|||
is_block_coverage: true,
|
||||
ranges: vec![
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 9,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 9,
|
||||
count: 10,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 3,
|
||||
end_offset: 6,
|
||||
start_char_offset: 3,
|
||||
end_char_offset: 6,
|
||||
count: 1,
|
||||
},
|
||||
],
|
||||
|
@ -528,13 +528,13 @@ mod tests {
|
|||
is_block_coverage: true,
|
||||
ranges: vec![
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 9,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 9,
|
||||
count: 20,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 3,
|
||||
end_offset: 6,
|
||||
start_char_offset: 3,
|
||||
end_char_offset: 6,
|
||||
count: 2,
|
||||
},
|
||||
],
|
||||
|
@ -551,13 +551,13 @@ mod tests {
|
|||
is_block_coverage: true,
|
||||
ranges: vec![
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 9,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 9,
|
||||
count: 30,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 3,
|
||||
end_offset: 6,
|
||||
start_char_offset: 3,
|
||||
end_char_offset: 6,
|
||||
count: 3,
|
||||
},
|
||||
],
|
||||
|
@ -580,13 +580,13 @@ mod tests {
|
|||
is_block_coverage: true,
|
||||
ranges: vec![
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 9,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 9,
|
||||
count: 10,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 2,
|
||||
end_offset: 5,
|
||||
start_char_offset: 2,
|
||||
end_char_offset: 5,
|
||||
count: 1,
|
||||
},
|
||||
],
|
||||
|
@ -602,13 +602,13 @@ mod tests {
|
|||
is_block_coverage: true,
|
||||
ranges: vec![
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 9,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 9,
|
||||
count: 20,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 4,
|
||||
end_offset: 7,
|
||||
start_char_offset: 4,
|
||||
end_char_offset: 7,
|
||||
count: 2,
|
||||
},
|
||||
],
|
||||
|
@ -625,23 +625,23 @@ mod tests {
|
|||
is_block_coverage: true,
|
||||
ranges: vec![
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 9,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 9,
|
||||
count: 30,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 2,
|
||||
end_offset: 5,
|
||||
start_char_offset: 2,
|
||||
end_char_offset: 5,
|
||||
count: 21,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 4,
|
||||
end_offset: 5,
|
||||
start_char_offset: 4,
|
||||
end_char_offset: 5,
|
||||
count: 3,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 5,
|
||||
end_offset: 7,
|
||||
start_char_offset: 5,
|
||||
end_char_offset: 7,
|
||||
count: 12,
|
||||
},
|
||||
],
|
||||
|
@ -664,23 +664,23 @@ mod tests {
|
|||
is_block_coverage: true,
|
||||
ranges: vec![
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 9,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 9,
|
||||
count: 1,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 1,
|
||||
end_offset: 8,
|
||||
start_char_offset: 1,
|
||||
end_char_offset: 8,
|
||||
count: 6,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 1,
|
||||
end_offset: 5,
|
||||
start_char_offset: 1,
|
||||
end_char_offset: 5,
|
||||
count: 5,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 5,
|
||||
end_offset: 8,
|
||||
start_char_offset: 5,
|
||||
end_char_offset: 8,
|
||||
count: 7,
|
||||
},
|
||||
],
|
||||
|
@ -696,23 +696,23 @@ mod tests {
|
|||
is_block_coverage: true,
|
||||
ranges: vec![
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 9,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 9,
|
||||
count: 4,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 1,
|
||||
end_offset: 8,
|
||||
start_char_offset: 1,
|
||||
end_char_offset: 8,
|
||||
count: 8,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 1,
|
||||
end_offset: 5,
|
||||
start_char_offset: 1,
|
||||
end_char_offset: 5,
|
||||
count: 9,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 5,
|
||||
end_offset: 8,
|
||||
start_char_offset: 5,
|
||||
end_char_offset: 8,
|
||||
count: 7,
|
||||
},
|
||||
],
|
||||
|
@ -729,13 +729,13 @@ mod tests {
|
|||
is_block_coverage: true,
|
||||
ranges: vec![
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 9,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 9,
|
||||
count: 5,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 1,
|
||||
end_offset: 8,
|
||||
start_char_offset: 1,
|
||||
end_char_offset: 8,
|
||||
count: 14,
|
||||
},
|
||||
],
|
||||
|
@ -758,13 +758,13 @@ mod tests {
|
|||
is_block_coverage: true,
|
||||
ranges: vec![
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 7,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 7,
|
||||
count: 10,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 4,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 4,
|
||||
count: 1,
|
||||
},
|
||||
],
|
||||
|
@ -780,18 +780,18 @@ mod tests {
|
|||
is_block_coverage: true,
|
||||
ranges: vec![
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 7,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 7,
|
||||
count: 20,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 1,
|
||||
end_offset: 6,
|
||||
start_char_offset: 1,
|
||||
end_char_offset: 6,
|
||||
count: 11,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 2,
|
||||
end_offset: 5,
|
||||
start_char_offset: 2,
|
||||
end_char_offset: 5,
|
||||
count: 2,
|
||||
},
|
||||
],
|
||||
|
@ -808,23 +808,23 @@ mod tests {
|
|||
is_block_coverage: true,
|
||||
ranges: vec![
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 7,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 7,
|
||||
count: 30,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 0,
|
||||
end_offset: 6,
|
||||
start_char_offset: 0,
|
||||
end_char_offset: 6,
|
||||
count: 21,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 1,
|
||||
end_offset: 5,
|
||||
start_char_offset: 1,
|
||||
end_char_offset: 5,
|
||||
count: 12,
|
||||
},
|
||||
CoverageRange {
|
||||
start_offset: 2,
|
||||
end_offset: 4,
|
||||
start_char_offset: 2,
|
||||
end_char_offset: 4,
|
||||
count: 3,
|
||||
},
|
||||
],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue