on 376c19e help sign in
149 lines 3.7 kB history raw
1use helix_core::Rope;
2use tokio::task::JoinHandle;
4use crate::diff::{DiffHandle, Hunk};
6impl DiffHandle {
7 fn new_test(diff_base: &str, doc: &str) -> (DiffHandle, JoinHandle<()>) {
8 DiffHandle::new_with_handle(
9 Rope::from_str(diff_base),
10 Rope::from_str(doc),
11 Default::default(),
12 )
13 }
14 async fn into_diff(self, handle: JoinHandle<()>) -> Vec<Hunk> {
15 let hunks = self.hunks;
16 // dropping the channel terminates the task
17 drop(self.channel);
18 handle.await.unwrap();
19 let hunks = hunks.lock();
20 Vec::clone(&*hunks)
21 }
24#[tokio::test]
25async fn append_line() {
26 let (differ, handle) = DiffHandle::new_test("foo\n", "foo\nbar\n");
27 let line_diffs = differ.into_diff(handle).await;
28 assert_eq!(
29 &line_diffs,
30 &[Hunk {
31 before: 1..1,
32 after: 1..2
33 }]
34 )
37#[tokio::test]
38async fn prepend_line() {
39 let (differ, handle) = DiffHandle::new_test("foo\n", "bar\nfoo\n");
40 let line_diffs = differ.into_diff(handle).await;
41 assert_eq!(
42 &line_diffs,
43 &[Hunk {
44 before: 0..0,
45 after: 0..1
46 }]
47 )
50#[tokio::test]
51async fn modify() {
52 let (differ, handle) = DiffHandle::new_test("foo\nbar\n", "foo bar\nbar\n");
53 let line_diffs = differ.into_diff(handle).await;
54 assert_eq!(
55 &line_diffs,
56 &[Hunk {
57 before: 0..1,
58 after: 0..1
59 }]
60 )
63#[tokio::test]
64async fn delete_line() {
65 let (differ, handle) = DiffHandle::new_test("foo\nfoo bar\nbar\n", "foo\nbar\n");
66 let line_diffs = differ.into_diff(handle).await;
67 assert_eq!(
68 &line_diffs,
69 &[Hunk {
70 before: 1..2,
71 after: 1..1
72 }]
73 )
76#[tokio::test]
77async fn delete_line_and_modify() {
78 let (differ, handle) = DiffHandle::new_test("foo\nbar\ntest\nfoo", "foo\ntest\nfoo bar");
79 let line_diffs = differ.into_diff(handle).await;
80 assert_eq!(
81 &line_diffs,
82 &[
83 Hunk {
84 before: 1..2,
85 after: 1..1
86 },
87 Hunk {
88 before: 3..4,
89 after: 2..3
90 },
91 ]
92 )
95#[tokio::test]
96async fn add_use() {
97 let (differ, handle) = DiffHandle::new_test(
98 "use ropey::Rope;\nuse tokio::task::JoinHandle;\n",
99 "use ropey::Rope;\nuse ropey::RopeSlice;\nuse tokio::task::JoinHandle;\n",
100 );
101 let line_diffs = differ.into_diff(handle).await;
102 assert_eq!(
103 &line_diffs,
104 &[Hunk {
105 before: 1..1,
106 after: 1..2
107 },]
108 )
111#[tokio::test]
112async fn update_document() {
113 let (differ, handle) = DiffHandle::new_test("foo\nbar\ntest\nfoo", "foo\nbar\ntest\nfoo");
114 differ.update_document(Rope::from_str("foo\ntest\nfoo bar"), false);
115 let line_diffs = differ.into_diff(handle).await;
116 assert_eq!(
117 &line_diffs,
118 &[
119 Hunk {
120 before: 1..2,
121 after: 1..1
122 },
123 Hunk {
124 before: 3..4,
125 after: 2..3
126 },
127 ]
128 )
131#[tokio::test]
132async fn update_base() {
133 let (differ, handle) = DiffHandle::new_test("foo\ntest\nfoo bar", "foo\ntest\nfoo bar");
134 differ.update_diff_base(Rope::from_str("foo\nbar\ntest\nfoo"));
135 let line_diffs = differ.into_diff(handle).await;
136 assert_eq!(
137 &line_diffs,
138 &[
139 Hunk {
140 before: 1..2,
141 after: 1..1
142 },
143 Hunk {
144 before: 3..4,
145 after: 2..3
146 },
147 ]
148 )