feat: persist diff file review checkmarks
This commit is contained in:
@@ -2163,6 +2163,51 @@ fn reviewed_files_survive_lazy_details_and_views_but_reset_on_comparison() {
|
||||
assert!(state.reviewed_files.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn restored_review_marks_use_revision_pairs_and_rename_paths_not_catalog_order() {
|
||||
let mut state = DiffState::new();
|
||||
state.request_kind = Some(RequestKind::Comparison);
|
||||
state.apply_result(1, Ok(Outcome::Comparison(comparison())));
|
||||
assert_eq!(state.toggle_reviewed(), Ok(true));
|
||||
state.comparison.as_mut().unwrap().files.swap(0, 1);
|
||||
state.restore_reviewed_files();
|
||||
assert_eq!(state.reviewed_files, BTreeSet::from([1]));
|
||||
state.comparison.as_mut().unwrap().files[1].old_path = Some("different.txt".into());
|
||||
state.restore_reviewed_files();
|
||||
assert!(state.reviewed_files.is_empty());
|
||||
state.comparison.as_mut().unwrap().files[1].old_path = Some("old.txt".into());
|
||||
for side in [0, 1] {
|
||||
let original = state.comparison.as_ref().unwrap().revisions[side].clone();
|
||||
state.comparison.as_mut().unwrap().revisions[side].push_str("-different");
|
||||
state.restore_reviewed_files();
|
||||
assert!(state.reviewed_files.is_empty());
|
||||
state.comparison.as_mut().unwrap().revisions[side] = original;
|
||||
}
|
||||
state.comparison.as_mut().unwrap().files[1].loaded = false;
|
||||
state.restore_reviewed_files();
|
||||
assert_eq!(state.reviewed_files, BTreeSet::from([1]));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn restored_live_review_marks_require_exact_text_and_final_newline() {
|
||||
let mut state = live_state(vec!["base".into()], vec!["changed".into()], false);
|
||||
state.refresh_after(&["unsaved".into(), String::new()], 1);
|
||||
assert_eq!(state.toggle_reviewed(), Ok(true));
|
||||
let document = state.local_review.document.clone();
|
||||
let mut reopened = live_state(vec!["base".into()], vec!["changed".into()], false);
|
||||
reopened.local_review.document = document.clone();
|
||||
reopened.restore_reviewed_files();
|
||||
assert!(reopened.reviewed_files.is_empty());
|
||||
reopened.refresh_after(&["unsaved".into(), String::new()], 1);
|
||||
assert_eq!(reopened.reviewed_files, BTreeSet::from([0]));
|
||||
reopened.refresh_after(&["unsaved".into()], 2);
|
||||
assert!(reopened.reviewed_files.is_empty());
|
||||
assert!(reopened.local_review.document.reviewed_files.is_empty());
|
||||
reopened.local_review.document = document;
|
||||
reopened.restore_reviewed_files();
|
||||
assert!(reopened.reviewed_files.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn working_review_marks_clear_only_for_changed_bytes_or_eof() {
|
||||
for (after, eof, lines) in [
|
||||
|
||||
Reference in New Issue
Block a user