Files
galaxy/crates/editor/src/multiline_tests.rs
T

176 lines
4.6 KiB
Rust

// Allow the use of `LineEnding::from_current_platform` in this test file, since
// it's used in the implementation of `infer_line_ending`.
#![allow(clippy::disallowed_methods)]
use super::*;
use warp_core::platform::SessionPlatform;
#[test]
fn test_infer_line_ending_empty_file() {
assert_eq!(
infer_line_ending("", None),
LineEnding::from_current_platform()
);
}
#[test]
fn test_infer_line_ending_single_line() {
assert_eq!(
infer_line_ending("I have no line endings", None),
LineEnding::from_current_platform()
);
}
#[test]
fn test_infer_line_ending_unix_subsystem_for_windows() {
assert_eq!(
infer_line_ending("", Some(&SessionPlatform::WSL)),
LineEnding::LF
);
assert_eq!(
infer_line_ending("", Some(&SessionPlatform::MSYS2)),
LineEnding::LF
);
}
#[test]
fn test_infer_line_ending_native_platform() {
assert_eq!(
infer_line_ending("", Some(&SessionPlatform::Native)),
LineEnding::from_current_platform()
);
}
#[test]
fn test_infer_line_ending_windows() {
assert_eq!(
infer_line_ending("This\r\nhas\r\nlines\r\n", None),
LineEnding::CRLF
);
}
#[test]
fn test_infer_line_ending_nix() {
assert_eq!(infer_line_ending("This\nhas\nlines", None), LineEnding::LF);
}
#[test]
fn test_infer_line_ending_mixed() {
// There's no correct line ending in this case - we follow the `line-ending` crate's
// most-common-ending approach.
assert_eq!(
infer_line_ending("This\r\nhas\r\nmixed\nline endings", None),
LineEnding::CRLF
);
assert_eq!(
infer_line_ending("This\nhas\r\nmixed\nline endings", None),
LineEnding::LF
);
assert_eq!(
infer_line_ending("This\r\nhas\nmixed\r\nline\nendings", None),
LineEnding::LF
);
}
#[test]
fn test_apply_lf() {
let original = "This\r\nhas\nevery\rline ending";
assert_eq!(LF::apply_to(original), "This\nhas\nevery\nline ending");
}
#[test]
fn test_apply_cr() {
let original = "This\r\nhas\nevery\rline ending";
assert_eq!(CR::apply_to(original), "This\rhas\revery\rline ending");
}
#[test]
fn test_apply_crlf() {
let original = "This\r\nhas\nevery\rline ending";
assert_eq!(
CRLF::apply_to(original),
"This\r\nhas\r\nevery\r\nline ending"
);
}
#[test]
fn test_multiline_str_try_new_same_ending() {
let s = MultilineStr::<LF>::try_new("One\nTwo").expect("Should convert successfully");
assert_eq!(s.as_str(), "One\nTwo");
}
#[test]
fn test_multiline_str_try_new_different_ending() {
let s = MultilineStr::<LF>::try_new("One\r\nTwo");
assert!(s.is_err());
}
#[test]
fn test_multiline_str_try_new_mixed_ending() {
let s = MultilineStr::<LF>::try_new("One\r\nTwo\nThree\nFour");
assert!(s.is_err());
}
#[test]
fn test_multiline_str_new_single_line() {
let s = MultilineStr::<LF>::try_new("One").expect("Should convert successfully");
assert_eq!(s.as_str(), "One");
}
#[test]
fn test_multiline_str_apply_same_ending() {
let converted = MultilineStr::<LF>::apply("One\nTwo");
assert_eq!(
converted,
Cow::Borrowed(MultilineStr::new_unchecked("One\nTwo"))
);
}
#[test]
fn test_multiline_str_apply_different_ending() {
let converted = MultilineStr::<LF>::apply("One\r\nTwo\r\nThree");
assert_eq!(
converted,
Cow::Owned(MultilineString::new_unchecked("One\nTwo\nThree"))
)
}
#[test]
fn test_multiline_str_apply_single_line() {
let converted = MultilineStr::<LF>::apply("One");
assert_eq!(converted, Cow::Borrowed(MultilineStr::new_unchecked("One")));
}
#[test]
fn test_multiline_str_apply_mixed() {
// The most common ending is already LF, *but* there are mixed endings so normalization is needed.
let converted = MultilineStr::<LF>::apply("One\r\nTwo\nThree\nFour");
assert_eq!(
converted,
Cow::Owned(MultilineString::new_unchecked("One\nTwo\nThree\nFour"))
);
}
#[test]
fn test_any_infer_single_ending() {
let inferred = AnyMultilineString::infer("One\nTwo\nThree");
assert_eq!(inferred.as_str(), "One\nTwo\nThree");
assert_eq!(inferred.line_ending(), LineEnding::LF);
}
#[test]
fn test_any_infer_single_line() {
let inferred = AnyMultilineString::infer("One");
assert_eq!(inferred.as_str(), "One");
assert_eq!(inferred.line_ending(), LineEnding::from_current_platform());
}
#[test]
fn test_any_infer_mixed() {
let inferred = AnyMultilineString::infer("One\r\nTwo\nThree\r\nFour");
// The text should be normalized to CRLF.
assert_eq!(inferred.as_str(), "One\r\nTwo\r\nThree\r\nFour");
assert_eq!(inferred.line_ending(), LineEnding::CRLF);
}