Generalize file ensuring infrastructure
This commit is contained in:
parent
0f6f458cc1
commit
b6ba0dec0c
@ -859,12 +859,12 @@ fn manual(fields: &[(&'static str, &'static str, &[&str], &str)]) -> String {
|
||||
mod tests {
|
||||
use std::fs;
|
||||
|
||||
use test_utils::project_dir;
|
||||
use test_utils::{ensure_file_contents, project_dir};
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn schema_in_sync_with_package_json() {
|
||||
fn ensure_schema_in_package_json() {
|
||||
let s = Config::json_schema();
|
||||
let schema = format!("{:#}", s);
|
||||
let mut schema = schema
|
||||
@ -885,13 +885,12 @@ mod tests {
|
||||
|
||||
let start = package_json.find(start_marker).unwrap() + start_marker.len();
|
||||
let end = package_json.find(end_marker).unwrap();
|
||||
|
||||
let p = remove_ws(&package_json[start..end]);
|
||||
let s = remove_ws(&schema);
|
||||
|
||||
if !p.contains(&s) {
|
||||
package_json.replace_range(start..end, &schema);
|
||||
fs::write(&package_json_path, &mut package_json).unwrap();
|
||||
panic!("new config, updating package.json")
|
||||
ensure_file_contents(&package_json_path, &package_json)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@ mod fixture;
|
||||
use std::{
|
||||
convert::{TryFrom, TryInto},
|
||||
env, fs,
|
||||
path::PathBuf,
|
||||
path::{Path, PathBuf},
|
||||
};
|
||||
|
||||
use profile::StopWatch;
|
||||
@ -353,3 +353,36 @@ pub fn bench(label: &'static str) -> impl Drop {
|
||||
|
||||
Bencher { sw: StopWatch::start(), label }
|
||||
}
|
||||
|
||||
/// Checks that the `file` has the specified `contents`. If that is not the
|
||||
/// case, updates the file and then fails the test.
|
||||
pub fn ensure_file_contents(file: &Path, contents: &str) {
|
||||
if let Err(()) = try_ensure_file_contents(file, contents) {
|
||||
panic!("Some files were not up-to-date");
|
||||
}
|
||||
}
|
||||
|
||||
/// Checks that the `file` has the specified `contents`. If that is not the
|
||||
/// case, updates the file and return an Error.
|
||||
pub fn try_ensure_file_contents(file: &Path, contents: &str) -> Result<(), ()> {
|
||||
match std::fs::read_to_string(file) {
|
||||
Ok(old_contents) if normalize_newlines(&old_contents) == normalize_newlines(contents) => {
|
||||
return Ok(())
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
let display_path = file.strip_prefix(&project_dir()).unwrap_or(file);
|
||||
eprintln!(
|
||||
"\n\x1b[31;1merror\x1b[0m: {} was not up-to-date, updating\n",
|
||||
display_path.display()
|
||||
);
|
||||
if let Some(parent) = file.parent() {
|
||||
let _ = std::fs::create_dir_all(parent);
|
||||
}
|
||||
std::fs::write(file, contents).unwrap();
|
||||
Err(())
|
||||
}
|
||||
|
||||
fn normalize_newlines(s: &str) -> String {
|
||||
s.replace("\r\n", "\n")
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user