Rework randomized test, ensuring order of folds is maintained correctly

This commit is contained in:
Antonio Scandurra
2021-05-04 11:27:32 +02:00
parent a0428667d0
commit d326e80657
+32 -25
View File
@@ -487,6 +487,8 @@ impl<'a> Dimension<'a, TransformSummary> for usize {
#[cfg(test)]
mod tests {
use std::cmp::Reverse;
use super::*;
use crate::test::sample_text;
use buffer::ToPoint;
@@ -703,10 +705,10 @@ mod tests {
for _ in 0..operations {
log::info!("text: {:?}", buffer.read(app).text());
{
if rng.gen() {
let buffer = buffer.read(app);
let fold_count = rng.gen_range(0..=2);
let fold_count = rng.gen_range(1..=5);
let mut fold_ranges: Vec<Range<usize>> = Vec::new();
for _ in 0..fold_count {
let end = rng.gen_range(0..buffer.len() + 1);
@@ -715,29 +717,16 @@ mod tests {
}
log::info!("folding {:?}", fold_ranges);
map.fold(fold_ranges.clone(), app.as_ref()).unwrap();
map.check_invariants(app.as_ref());
let mut expected_text = buffer.text();
for fold_range in map.merged_fold_ranges(app.as_ref()).into_iter().rev() {
expected_text.replace_range(fold_range.start..fold_range.end, "");
}
assert_eq!(map.text(app.as_ref()), expected_text);
for fold_range in map.merged_fold_ranges(app.as_ref()) {
let display_point =
map.to_display_point(fold_range.start.to_point(buffer).unwrap());
assert!(map.is_line_folded(display_point.row()));
}
} else {
let edits = buffer.update(app, |buffer, ctx| {
let start_version = buffer.version.clone();
let edit_count = rng.gen_range(1..=5);
buffer.randomly_edit(&mut rng, edit_count, Some(ctx));
buffer.edits_since(start_version).collect::<Vec<_>>()
});
log::info!("editing {:?}", edits);
map.apply_edits(&edits, app.as_ref()).unwrap();
}
let edits = buffer.update(app, |buffer, ctx| {
let start_version = buffer.version.clone();
let edit_count = rng.gen_range(0..=2);
buffer.randomly_edit(&mut rng, edit_count, Some(ctx));
buffer.edits_since(start_version).collect::<Vec<_>>()
});
log::info!("editing {:?}", edits);
map.apply_edits(&edits, app.as_ref()).unwrap();
map.check_invariants(app.as_ref());
let buffer = map.buffer.read(app);
@@ -764,6 +753,12 @@ mod tests {
expected_buffer_rows[idx..],
);
}
for fold_range in map.merged_fold_ranges(app.as_ref()) {
let display_point =
map.to_display_point(fold_range.start.to_point(buffer).unwrap());
assert!(map.is_line_folded(display_point.row()));
}
}
});
}
@@ -832,11 +827,23 @@ mod tests {
}
fn check_invariants(&self, app: &AppContext) {
let buffer = self.buffer.read(app);
assert_eq!(
self.transforms.summary().buffer.chars,
self.buffer.read(app).len(),
buffer.len(),
"transform tree does not match buffer's length"
);
let mut fold_ranges = Vec::new();
let mut sorted_fold_ranges = Vec::new();
for fold in &self.folds {
let start = fold.start.to_offset(buffer).unwrap();
let end = fold.end.to_offset(buffer).unwrap();
fold_ranges.push(start..end);
sorted_fold_ranges.push(start..end);
}
sorted_fold_ranges.sort_by_key(|fold| (fold.start, Reverse(fold.end)));
assert_eq!(fold_ranges, sorted_fold_ranges);
}
}
}