use super::*;
use crate::loc::language::detect;
#[test]
fn mask_python() {
let spec = detect(std::path::Path::new("test.py")).unwrap();
let lines: Vec<String> = vec![
"x = 1", "y = \"\"\"", "def foo():", " return 42", "\"\"\"", "z = 2", ]
.into_iter()
.map(String::from)
.collect();
let mask = multi_line_string_mask(&lines, spec);
assert!(!mask[0]);
assert!(!mask[1]);
assert!(mask[2]);
assert!(mask[3]);
assert!(!mask[4]);
assert!(!mask[5]);
}
#[test]
fn mask_closing_with_code() {
let spec = detect(std::path::Path::new("test.py")).unwrap();
let lines: Vec<String> = vec![
"x = \"\"\"", "docstring", "\"\"\" + y", ]
.into_iter()
.map(String::from)
.collect();
let mask = multi_line_string_mask(&lines, spec);
assert!(!mask[0]);
assert!(mask[1]);
assert!(!mask[2]);
}
#[test]
fn mask_escaped_triple_quotes() {
let spec = detect(std::path::Path::new("test.py")).unwrap();
let lines: Vec<String> = vec![r#"x = """has fake \"\"\" inside""""#, "y = 1 + 2"]
.into_iter()
.map(String::from)
.collect();
let mask = multi_line_string_mask(&lines, spec);
assert!(!mask[0]);
assert!(!mask[1]);
}
#[test]
fn mask_non_triple_language() {
let spec = detect(std::path::Path::new("test.rs")).unwrap();
let lines: Vec<String> = vec!["let x = 1;", "let y = 2;"]
.into_iter()
.map(String::from)
.collect();
let mask = multi_line_string_mask(&lines, spec);
assert!(!mask[0]);
assert!(!mask[1]);
}
#[test]
fn mask_single_quote_triple_python() {
let spec = detect(std::path::Path::new("test.py")).unwrap();
let lines: Vec<String> = vec![
"x = '''", "interior", "'''", "y = 2", ]
.into_iter()
.map(String::from)
.collect();
let mask = multi_line_string_mask(&lines, spec);
assert!(!mask[0]); assert!(mask[1]); assert!(!mask[2]); assert!(!mask[3]); }
#[test]
fn mask_single_line_single_quote_string() {
let spec = detect(std::path::Path::new("test.py")).unwrap();
let lines: Vec<String> = vec!["x = 'hello'", "y = 2"]
.into_iter()
.map(String::from)
.collect();
let mask = multi_line_string_mask(&lines, spec);
assert!(!mask[0]);
assert!(!mask[1]);
}
#[test]
fn mask_advance_inside_triple_with_escape() {
let spec = detect(std::path::Path::new("test.py")).unwrap();
let lines: Vec<String> = vec![
r#"x = """\""" not end yet""" "#, "y = 2",
]
.into_iter()
.map(String::from)
.collect();
let mask = multi_line_string_mask(&lines, spec);
assert!(!mask[0]);
assert!(!mask[1]);
}
#[test]
fn mask_triple_opens_and_closes_same_line() {
let spec = detect(std::path::Path::new("test.py")).unwrap();
let lines: Vec<String> = vec![r#"x = """hello""""#, "y = 2"]
.into_iter()
.map(String::from)
.collect();
let mask = multi_line_string_mask(&lines, spec);
assert!(!mask[0]);
assert!(!mask[1]);
}
#[test]
fn mask_empty_lines() {
let spec = detect(std::path::Path::new("test.py")).unwrap();
let mask = multi_line_string_mask(&[], spec);
assert!(mask.is_empty());
}