fix(coverage): better handling of multi-byte characters (#15159)

This commit is contained in:
David Sherret 2022-07-11 19:02:11 -04:00 committed by GitHub
parent b68115db3a
commit 82431062fa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 129 additions and 113 deletions

View file

@ -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,
},
],