Rework randomized test, ensuring order of folds is maintained correctly
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user