use crate::token::*;
test!(
element_01,
"",
Token::ElementStart("", "a", 0..2),
Token::ElementEnd(ElementEnd::Empty, 2..4)
);
test!(
element_02,
"",
Token::ElementStart("", "a", 0..2),
Token::ElementEnd(ElementEnd::Open, 2..3),
Token::ElementEnd(ElementEnd::Close("", "a"), 3..7)
);
test!(
element_03,
" \t \n ",
Token::ElementStart("", "a", 5..7),
Token::ElementEnd(ElementEnd::Empty, 7..9)
);
test!(
element_04,
" \t \n ",
Token::ElementStart("", "b", 5..7),
Token::ElementEnd(ElementEnd::Open, 7..8),
Token::ElementStart("", "a", 8..10),
Token::ElementEnd(ElementEnd::Empty, 10..12),
Token::ElementEnd(ElementEnd::Close("", "b"), 12..16)
);
test!(
element_06,
"<俄语 լեզու=\"ռուսերեն\">данные俄语>",
Token::ElementStart("", "俄语", 0..7),
Token::Attribute("", "լեզու", Some("ռուսերեն"), 8..37),
Token::ElementEnd(ElementEnd::Open, 37..38),
Token::Text("данные", 38..50),
Token::ElementEnd(ElementEnd::Close("", "俄语"), 50..59)
);
test!(
element_07,
"",
Token::ElementStart("svg", "circle", 0..11),
Token::ElementEnd(ElementEnd::Open, 11..12),
Token::ElementEnd(ElementEnd::Close("svg", "circle"), 12..25)
);
test!(
element_08,
"<:circle/>",
Token::ElementStart("", "circle", 0..8),
Token::ElementEnd(ElementEnd::Empty, 8..10)
);
test!(
element_09,
"
",
Token::Error("invalid element at 1:1 cause invalid name token".to_string())
);
test!(
element_err_02,
"",
Token::Error("invalid element at 1:1 cause invalid name token".to_string())
);
test!(
element_err_03,
"",
Token::ElementStart("", "a", 0..2),
Token::ElementEnd(ElementEnd::Open, 2..3),
Token::ElementEnd(ElementEnd::Close("", "a"), 3..7),
Token::Error("unknown token at 1:8".to_string())
);
test!(
element_err_10,
"
",
Token::ElementStart("", "a", 0..2),
Token::ElementEnd(ElementEnd::Empty, 2..4),
Token::Error("unknown token at 1:5".to_string())
);
test!(
element_err_11,
"
",
Token::ElementStart("", "a", 0..2),
Token::ElementEnd(ElementEnd::Open, 2..3),
Token::Error("invalid element at 1:4 cause expected '>' not '/' at 1:8".to_string())
);
test!(
element_err_12,
"
",
Token::Error("invalid element at 1:1 cause invalid name token".to_string())
);
test!(
element_err_13,
"\
",
Token::ElementStart("", "root", 0..5),
Token::ElementEnd(ElementEnd::Open, 5..6),
Token::Text("\n", 6..7),
Token::ElementEnd(ElementEnd::Close("", "root"), 7..14),
Token::Error("unknown token at 3:1".to_string())
);
test!(
element_err_14,
"<-svg/>",
Token::Error("invalid element at 1:1 cause invalid name token".to_string())
);
test!(
element_err_15,
"
",
Token::Error("invalid element at 1:1 cause invalid name token".to_string())
);
test!(
element_err_16,
"
",
Token::Error("invalid element at 1:1 cause invalid name token".to_string())
);
test!(
element_err_17,
"
",
Token::Error("invalid element at 1:1 cause invalid name token".to_string())
);
test!(
element_err_18,
"<::svg/>",
Token::Error("invalid element at 1:1 cause invalid name token".to_string())
);
test!(
element_err_19,
"
<",
Token::ElementStart("", "a", 0..2),
Token::ElementEnd(ElementEnd::Open, 2..3),
Token::Error("unknown token at 1:4".to_string())
);
test!(
attribute_01,
"",
Token::ElementStart("", "a", 0..2),
Token::Attribute("", "ax", Some("test"), 3..12),
Token::ElementEnd(ElementEnd::Empty, 12..14)
);
test!(
attribute_02,
"",
Token::ElementStart("", "a", 0..2),
Token::Attribute("", "ax", Some("test"), 3..12),
Token::ElementEnd(ElementEnd::Empty, 12..14)
);
test!(
attribute_03,
"
",
Token::ElementStart("", "a", 0..2),
Token::Attribute("", "b", Some("test1"), 3..12),
Token::Attribute("", "c", Some("test2"), 13..22),
Token::ElementEnd(ElementEnd::Empty, 22..24)
);
test!(
attribute_04,
"",
Token::ElementStart("", "a", 0..2),
Token::Attribute("", "b", Some("\"test1\""), 3..14),
Token::Attribute("", "c", Some("'test2'"), 15..26),
Token::ElementEnd(ElementEnd::Empty, 26..28)
);
test!(
attribute_05,
"",
Token::ElementStart("", "c", 0..2),
Token::Attribute("", "a", Some("test1' c='test2"), 3..22),
Token::Attribute("", "b", Some("test1\" c=\"test2"), 23..42),
Token::ElementEnd(ElementEnd::Empty, 42..44)
);
test!(
attribute_06,
"",
Token::ElementStart("", "c", 0..2),
Token::Attribute("", "a", Some("test1"), 5..21),
Token::ElementEnd(ElementEnd::Empty, 26..28)
);
test!(
attribute_07,
"",
Token::ElementStart("", "c", 0..2),
Token::Attribute("q", "a", Some("b"), 3..10),
Token::ElementEnd(ElementEnd::Empty, 10..12)
);
test!(
attribute_08,
"\" />",
Token::ElementStart("", "a", 0..2),
Token::Attribute("", "href", Some("<%asm_group_unsubscribe_raw_url%>"), 3..43),
Token::ElementEnd(ElementEnd::Empty, 44..46)
);
test!(
attribute_09,
"",
Token::ElementStart("", "c", 0..2),
Token::Attribute("", "a", None, 3..4),
Token::ElementEnd(ElementEnd::Open, 4..5)
);
test!(
attribute_10,
"",
Token::ElementStart("", "c", 0..2),
Token::Attribute("", "a", None, 3..4),
Token::ElementEnd(ElementEnd::Empty, 4..6)
);
test!(
attribute_11,
"",
Token::ElementStart("", "c", 0..2),
Token::Attribute("", "a", None, 3..4),
Token::Attribute("", "b", None, 5..6),
Token::Attribute("", "c", None, 7..8),
Token::ElementEnd(ElementEnd::Open, 8..9)
);
test!(
attribute_err_01,
"",
Token::ElementStart("", "c", 0..2),
Token::Error("invalid attribute at 1:3 cause expected quote mark not 't' at 1:7".to_string())
);
test!(
attribute_err_04,
"",
Token::ElementStart("", "c", 0..2),
Token::Attribute("", "a", Some("b"), 3..8),
Token::Attribute("", "q", None, 9..10),
Token::ElementEnd(ElementEnd::Empty, 10..12)
);
test!(
attribute_err_06,
"",
Token::ElementStart("", "c", 0..2),
Token::Error(
"invalid attribute at 1:3 cause a non-XML character '\\u{1}' found at 1:7".to_string()
)
);
test!(
attribute_err_07,
"",
Token::ElementStart("", "c", 0..2),
Token::Attribute("", "a", Some("v"), 3..8),
Token::Error("invalid attribute at 1:9 cause expected space not 'b' at 1:9".to_string())
);