Skip to content

Commit 4f4cc68

Browse files
committed
refactor: move tests to their own files
1 parent 61926c4 commit 4f4cc68

7 files changed

Lines changed: 484 additions & 482 deletions

File tree

src/app/deduplicate_arguments.rs

Lines changed: 3 additions & 286 deletions
Original file line numberDiff line numberDiff line change
@@ -118,289 +118,6 @@ pub fn remove_items_from_vec_by_indices<Item>(vec: &mut Vec<Item>, indices: &Has
118118

119119
#[cfg(unix)]
120120
#[cfg(test)]
121-
mod tests {
122-
use super::{deduplicate_arguments, remove_items_from_vec_by_indices, Api};
123-
use maplit::hashset;
124-
use normalize_path::NormalizePath;
125-
use pipe_trait::Pipe;
126-
use pretty_assertions::assert_eq;
127-
use std::{collections::HashSet, convert::Infallible, path::PathBuf};
128-
129-
const MOCKED_CURRENT_DIR: &str = "/home/user/current-dir";
130-
131-
const MOCKED_SYMLINKS: &[(&str, &str)] = &[
132-
("/home/user/current-dir/link-to-current-dir", "."),
133-
("/home/user/current-dir/link-to-parent-dir", ".."),
134-
("/home/user/current-dir/link-to-root", "/"),
135-
("/home/user/current-dir/link-to-bin", "/usr/bin"),
136-
("/home/user/current-dir/link-to-foo", "foo"),
137-
("/home/user/current-dir/link-to-bar", "bar"),
138-
("/home/user/current-dir/link-to-012", "0/1/2"),
139-
];
140-
141-
fn resolve_symlink(absolute_path: PathBuf) -> PathBuf {
142-
assert!(
143-
absolute_path.is_absolute(),
144-
"absolute_path should be absolute: {absolute_path:?}",
145-
);
146-
for &(link_path, link_target) in MOCKED_SYMLINKS {
147-
let link_path = PathBuf::from(link_path);
148-
assert!(
149-
link_path.is_absolute(),
150-
"link_path should be absolute: {link_path:?}",
151-
);
152-
let Some(parent) = link_path.parent() else {
153-
panic!("Cannot get parent of {link_path:?}");
154-
};
155-
if let Ok(suffix) = absolute_path.strip_prefix(&link_path) {
156-
return parent
157-
.join(link_target)
158-
.join(suffix)
159-
.normalize()
160-
.pipe(resolve_symlink);
161-
}
162-
}
163-
absolute_path
164-
}
165-
166-
/// Mocked implementation of [`Api`] for testing purposes.
167-
struct MockedApi;
168-
impl Api for MockedApi {
169-
type Argument = &'static str;
170-
type RealPath = PathBuf;
171-
type RealPathError = Infallible;
172-
173-
fn canonicalize(path: &Self::Argument) -> Result<Self::RealPath, Self::RealPathError> {
174-
MOCKED_CURRENT_DIR
175-
.pipe(PathBuf::from)
176-
.join(path)
177-
.normalize()
178-
.pipe(resolve_symlink)
179-
.pipe(Ok)
180-
}
181-
182-
fn is_real_dir(path: &Self::Argument) -> bool {
183-
let path = MOCKED_CURRENT_DIR.pipe(PathBuf::from).join(path);
184-
MOCKED_SYMLINKS
185-
.iter()
186-
.all(|(link, _)| PathBuf::from(link).normalize() != path)
187-
}
188-
189-
fn starts_with(a: &Self::RealPath, b: &Self::RealPath) -> bool {
190-
a.starts_with(b)
191-
}
192-
}
193-
194-
#[test]
195-
fn find_nothing_to_remove() {
196-
let original = vec!["foo", "bar", "abc/def", "0/1/2"];
197-
let mut actual = original.clone();
198-
deduplicate_arguments::<MockedApi>(&mut actual);
199-
let expected = original;
200-
assert_eq!(actual, expected);
201-
}
202-
203-
#[test]
204-
fn remove_duplicated_arguments() {
205-
let original = dbg!(vec![
206-
"foo",
207-
"bar",
208-
"abc/def",
209-
"foo",
210-
"0/1/2",
211-
"./bar",
212-
"./abc/./def",
213-
]);
214-
let mut actual = original.clone();
215-
deduplicate_arguments::<MockedApi>(&mut actual);
216-
let expected = vec!["foo", "bar", "abc/def", "0/1/2"];
217-
assert_eq!(actual, expected);
218-
219-
let original = dbg!(vec![
220-
"foo",
221-
"./bar",
222-
"bar",
223-
"./abc/./def",
224-
"abc/def",
225-
"foo",
226-
"0/1/2",
227-
]);
228-
let mut actual = original.clone();
229-
deduplicate_arguments::<MockedApi>(&mut actual);
230-
let expected = vec!["foo", "./bar", "./abc/./def", "0/1/2"];
231-
assert_eq!(actual, expected);
232-
}
233-
234-
#[test]
235-
fn remove_duplicated_sub_paths() {
236-
let original = vec![
237-
"foo/child",
238-
"foo",
239-
"bar",
240-
"abc/def",
241-
"0/1/2",
242-
"bar/child",
243-
"0/1/2/3",
244-
];
245-
let mut actual = original.clone();
246-
deduplicate_arguments::<MockedApi>(&mut actual);
247-
let expected = vec!["foo", "bar", "abc/def", "0/1/2"];
248-
assert_eq!(actual, expected);
249-
}
250-
251-
#[test]
252-
fn remove_all_except_current_dir() {
253-
let original = dbg!(vec!["foo", "bar", ".", "abc/def", "0/1/2"]);
254-
let mut actual = original.clone();
255-
deduplicate_arguments::<MockedApi>(&mut actual);
256-
let expected = vec!["."];
257-
assert_eq!(actual, expected);
258-
259-
let original = dbg!(vec![
260-
"foo",
261-
"bar",
262-
".",
263-
"abc/def",
264-
"0/1/2",
265-
MOCKED_CURRENT_DIR,
266-
]);
267-
let mut actual = original.clone();
268-
deduplicate_arguments::<MockedApi>(&mut actual);
269-
let expected = vec!["."];
270-
assert_eq!(actual, expected);
271-
272-
let original = dbg!(vec![
273-
"foo",
274-
"bar",
275-
MOCKED_CURRENT_DIR,
276-
".",
277-
"abc/def",
278-
"0/1/2",
279-
]);
280-
let mut actual = original.clone();
281-
deduplicate_arguments::<MockedApi>(&mut actual);
282-
let expected = vec![MOCKED_CURRENT_DIR];
283-
assert_eq!(actual, expected);
284-
}
285-
286-
#[test]
287-
fn remove_all_except_parent_dir() {
288-
let original = dbg!(vec!["foo", "bar", "..", "abc/def", ".", "0/1/2"]);
289-
let mut actual = original.clone();
290-
deduplicate_arguments::<MockedApi>(&mut actual);
291-
let expected = vec![".."];
292-
assert_eq!(actual, expected);
293-
294-
let original = dbg!(vec![
295-
"foo",
296-
"/home/user",
297-
"bar",
298-
"..",
299-
"abc/def",
300-
".",
301-
"0/1/2",
302-
]);
303-
let mut actual = original.clone();
304-
deduplicate_arguments::<MockedApi>(&mut actual);
305-
let expected = vec!["/home/user"];
306-
assert_eq!(actual, expected);
307-
}
308-
309-
#[test]
310-
fn remove_duplicated_real_paths() {
311-
let original = dbg!(vec![
312-
"foo",
313-
"bar",
314-
"abc/def",
315-
"link-to-foo/child",
316-
"link-to-bar/a/b/c",
317-
"0/1/2",
318-
]);
319-
let mut actual = original.clone();
320-
deduplicate_arguments::<MockedApi>(&mut actual);
321-
let expected = vec!["foo", "bar", "abc/def", "0/1/2"];
322-
assert_eq!(actual, expected);
323-
324-
let original = dbg!(vec![
325-
"link-to-foo/child",
326-
"link-to-bar/a/b/c",
327-
"foo",
328-
"bar",
329-
"abc/def",
330-
"0/1/2",
331-
]);
332-
let mut actual = original.clone();
333-
deduplicate_arguments::<MockedApi>(&mut actual);
334-
let expected = vec!["foo", "bar", "abc/def", "0/1/2"];
335-
assert_eq!(actual, expected);
336-
337-
let original = dbg!(vec![
338-
"link-to-current-dir/foo",
339-
"foo",
340-
"bar",
341-
"abc/def",
342-
"link-to-current-dir/bar",
343-
"0/1/2",
344-
]);
345-
let mut actual = original.clone();
346-
deduplicate_arguments::<MockedApi>(&mut actual);
347-
let expected = vec!["link-to-current-dir/foo", "bar", "abc/def", "0/1/2"];
348-
assert_eq!(actual, expected);
349-
}
350-
351-
#[test]
352-
fn do_not_remove_symlinks() {
353-
let original = dbg!(vec![
354-
"foo",
355-
"bar",
356-
"abc/def",
357-
"link-to-foo",
358-
"link-to-bar",
359-
"0/1/2",
360-
]);
361-
let mut actual = original.clone();
362-
deduplicate_arguments::<MockedApi>(&mut actual);
363-
let expected = original;
364-
assert_eq!(actual, expected);
365-
366-
let original = dbg!(vec![
367-
"foo/child",
368-
"bar",
369-
"abc/def",
370-
"link-to-foo",
371-
"link-to-bar",
372-
"0/1/2",
373-
]);
374-
let mut actual = original.clone();
375-
deduplicate_arguments::<MockedApi>(&mut actual);
376-
let expected = original;
377-
assert_eq!(actual, expected);
378-
}
379-
380-
#[test]
381-
fn remove_nothing() {
382-
let original = vec![31, 54, 22, 81, 67, 45, 52, 20, 85, 66, 27, 84];
383-
let mut modified = original.clone();
384-
remove_items_from_vec_by_indices(&mut modified, &HashSet::new());
385-
assert_eq!(modified, original);
386-
}
387-
388-
#[test]
389-
fn remove_single() {
390-
let original = vec![31, 54, 22, 81, 67, 45, 52, 20, 85, 66, 27, 84];
391-
let mut modified = original.clone();
392-
remove_items_from_vec_by_indices(&mut modified, &hashset! { 3 });
393-
assert_eq!(&modified[..3], &original[..3]);
394-
assert_eq!(&modified[3..], &original[4..]);
395-
}
396-
397-
#[test]
398-
fn remove_multiple() {
399-
let original = vec![31, 54, 22, 81, 67, 45, 52, 20, 85, 66, 27, 84];
400-
let mut modified = original.clone();
401-
remove_items_from_vec_by_indices(&mut modified, &hashset! { 3, 4, 5, 7 });
402-
assert_eq!(&modified[..3], &original[..3]);
403-
assert_eq!(&modified[3..4], &original[6..7]);
404-
assert_eq!(&modified[4..], &original[8..]);
405-
}
406-
}
121+
mod test_deduplicate_arguments;
122+
#[cfg(test)]
123+
mod test_remove_items_from_vec_by_indices;

0 commit comments

Comments
 (0)