aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTeddy Wing2016-04-24 09:39:14 -0400
committerTeddy Wing2016-04-24 09:39:14 -0400
commit79e78aaa7c0c77064264ffdad0c3172aa0f5c376 (patch)
tree67684ab4f153eb8c01fc25f2c77461d26bab3932 /src
parent2e844b5c528a39e75702d0b412b0396080fa103e (diff)
downloadmutt-alias-auto-add-79e78aaa7c0c77064264ffdad0c3172aa0f5c376.tar.bz2
test: Fix `write_to_file` race condition
Have each `write_to_file` test pass in a custom filename to the helper function. This way each test has its own file to deal with, eliminating the race condition when running tests in parallel (the default).
Diffstat (limited to 'src')
-rw-r--r--src/tests.rs37
1 files changed, 21 insertions, 16 deletions
diff --git a/src/tests.rs b/src/tests.rs
index f00d103..15b5ae8 100644
--- a/src/tests.rs
+++ b/src/tests.rs
@@ -122,23 +122,23 @@ fn update_alias_id_increments_alias() {
}
-fn alias_write_to_file_helper<F>(alias: &mut Alias, f: F) -> String
+fn alias_write_to_file_helper<F>(alias: &mut Alias, filename: &str, f: F) -> String
where F: Fn(&Alias, &str) {
// Create a new test file
- let test_file = "./testdata/write_to_file";
- fs::copy("./testdata/aliases", test_file).expect("Alias file copy failed");
+ let test_file = format!("./testdata/{}", filename);
+ fs::copy("./testdata/aliases", &test_file).expect("Alias file copy failed");
- f(alias, test_file);
+ f(alias, &test_file);
// Write our new alias to the file
- alias.write_to_file(test_file).expect("`write_to_file` failed");
+ alias.write_to_file(&test_file).expect("`write_to_file` failed");
// Get the file's contents for testing
- let mut f = File::open(test_file).expect("Failed to open test file");
+ let mut f = File::open(&test_file).expect("Failed to open test file");
let mut file_contents = String::new();
f.read_to_string(&mut file_contents).expect("Failed to read test file contents");
let file_contents: Vec<&str> = file_contents.split('\n').collect();
- fs::remove_file(test_file).expect("Failed to delete test file");
+ fs::remove_file(&test_file).expect("Failed to delete test file");
file_contents[file_contents.len() - 2].to_string()
}
@@ -146,15 +146,19 @@ fn alias_write_to_file_helper<F>(alias: &mut Alias, f: F) -> String
#[test]
fn alias_write_to_file_must_write_unique_alias_to_file_if_one_already_exists() {
let mut alias = update_alias_id_sample_alias();
- let alias_line = alias_write_to_file_helper(&mut alias, |alias: &Alias, filename: &str| {
- // Write a duplicate alias so that `write_to_file` is able to append a
- // new one
- let mut f = OpenOptions::new().append(true).open(filename)
- .expect("Failed to open test file for appending");
- writeln!(f, "{}", Alias { email: "derpy@home.pv".to_owned(), .. alias.clone() }
- .to_string())
- .expect("Failed to append matching alias");
- });
+ let alias_line = alias_write_to_file_helper(
+ &mut alias,
+ "alias_write_to_file_must_write_unique_alias_to_file_if_one_already_exists",
+ |alias: &Alias, filename: &str| {
+ // Write a duplicate alias so that `write_to_file` is able to append a
+ // new one
+ let mut f = OpenOptions::new().append(true).open(filename)
+ .expect("Failed to open test file for appending");
+ writeln!(f, "{}", Alias { email: "derpy@home.pv".to_owned(), .. alias.clone() }
+ .to_string())
+ .expect("Failed to append matching alias");
+ }
+ );
assert_eq!(alias.to_string(), alias_line);
}
@@ -165,6 +169,7 @@ fn alias_write_to_file_must_write_given_alias_to_file() {
let mut alias = update_alias_id_sample_alias();
let alias_line = alias_write_to_file_helper(
&mut alias,
+ "alias_write_to_file_must_write_given_alias_to_file",
|alias: &Alias, filename: &str| {});
assert_eq!(alias.to_string(), alias_line);