use super::*;
#[test]
fn every_escaped_sink_is_covered_by_the_one_escaper() {
assert_eq!(escape("&<>\"'"), "&<>"'");
assert!(escape("\"").contains("""));
}
#[test]
fn the_streaming_escaper_appends_what_the_returning_one_returns() {
for text in [
"",
"plain",
"&<>\"'",
"&&&",
"a & b",
"trailing&",
"&leading",
"é世 & <b>naïve</b> \u{1f600}",
] {
let mut out = String::from("kept: ");
escape_into(text, &mut out);
assert_eq!(out, format!("kept: {}", escape(text)), "{text:?}");
}
}
#[test]
fn the_editor_rules_gate_on_the_attribute_and_on_a_binding() {
let css = editor_rules(&Emit::default());
for line in css.lines().filter(|line| line.contains('{')) {
assert!(line.contains("[data-format=\"markdown\"]"), "{line}");
}
assert!(
css.contains("[data-format=\"markdown\"] > .form-editor-modes {\n display: none;\n}")
);
assert!(css.contains(
"[data-format=\"markdown\"][data-ready] > .form-editor-modes {\n display: block;\n}"
));
assert!(css.contains(
"[data-ready][data-mode=\"preview\"] > .form-editor-preview {\n display: block;\n}"
));
assert!(css.contains("[data-ready][data-mode=\"preview\"] > .field {\n display: none;\n}"));
assert!(!css.contains("px"), "{css}");
assert!(!css.contains("rem"), "{css}");
}
#[test]
fn the_editor_chrome_is_prefixed_and_its_gate_is_not() {
let opts = Emit {
class_prefix: "mk-",
..Emit::default()
};
let css = editor_rules(&opts);
assert!(css.contains(".mk-form-editor-modes"), "{css}");
assert!(css.contains("[data-format=\"markdown\"]"), "{css}");
}
#[test]
fn the_editor_classes_are_in_the_vocabulary() {
let opts = Emit::default();
let names = crate::vocabulary::names(&opts);
for name in ["form-editor-modes", "form-editor-preview", "segment"] {
assert!(names.contains(name), "{name} is not in the vocabulary");
}
}
#[test]
fn every_field_class_has_a_rule() {
let css = crate::stylesheet(&Emit::default());
for name in FIELD_CLASSES {
assert!(css.contains(&format!(".{name}")), "{name} has no rule");
}
}