use std::env;
use std::fs;
use stern4rust::settings::header_source::HeaderSource;
#[test]
fn parse_drops_several_trailing_blank_lines() {
let header = HeaderSource::parse("// one\n\n\n \n");
assert_eq!(header, ["// one"]);
}
#[test]
fn parse_drops_the_trailing_newline_every_editor_adds() {
let header = HeaderSource::parse("// one\n// two\n");
assert_eq!(header.len(), 2);
}
#[test]
fn parse_keeps_a_blank_line_between_header_lines() {
let header = HeaderSource::parse("// one\n\n// two\n");
assert_eq!(header, ["// one", "", "// two"]);
}
#[test]
fn parse_normalises_windows_line_endings() {
let header = HeaderSource::parse("// one\r\n// two\r\n");
assert_eq!(header, ["// one", "// two"]);
}
#[test]
fn parse_of_an_empty_file_returns_no_lines() {
let header = HeaderSource::parse("\n\n");
assert!(header.is_empty());
}
#[test]
fn parse_splits_the_header_into_lines() {
let header = HeaderSource::parse("// one\n// two");
assert_eq!(header, ["// one", "// two"]);
}
#[test]
fn parse_strips_a_leading_byte_order_mark() {
let header = HeaderSource::parse("\u{feff}// one\n");
assert_eq!(header, ["// one"]);
}
#[test]
fn read_of_a_file_returns_its_lines() {
let path = env::temp_dir().join("stern4rust_header_read.txt");
fs::write(
&path,
"// one
// two
",
)
.expect("write the header");
let header = HeaderSource::read(&path).expect("reads");
assert_eq!(header, ["// one", "// two"]);
}
#[test]
fn read_of_a_missing_file_is_an_error() {
let path = env::temp_dir().join("stern4rust_header_absent.txt");
let _ = fs::remove_file(&path);
let header = HeaderSource::read(&path);
assert!(header.is_err());
}