File: document.rs

package info (click to toggle)
rust-xmlparser 0.13.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 252 kB
  • sloc: makefile: 4
file content (94 lines) | stat: -rw-r--r-- 2,880 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
use std::str;

use crate::token::*;

test!(document_01, "", );

test!(document_02, "    ", );

test!(document_03, " \n\t\r ", );

// BOM
test!(document_05, str::from_utf8(b"\xEF\xBB\xBF<a/>").unwrap(),
    Token::ElementStart("", "a", 3..5),
    Token::ElementEnd(ElementEnd::Empty, 5..7)
);

test!(document_06, str::from_utf8(b"\xEF\xBB\xBF<?xml version='1.0'?>").unwrap(),
    Token::Declaration("1.0", None, None, 3..24)
);

test!(document_07, "<?xml version='1.0' encoding='utf-8'?>\n<!-- comment -->\n\
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>",
    Token::Declaration("1.0", Some("utf-8"), None, 0..38),
    Token::Comment(" comment ", 39..55),
    Token::EmptyDtd("svg", Some(ExternalId::Public(
        "-//W3C//DTD SVG 1.1//EN",
        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
    )), 56..154)
);

test!(document_08, "<?xml-stylesheet?>\n\
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>",
    Token::PI("xml-stylesheet", None, 0..18),
    Token::EmptyDtd("svg", Some(ExternalId::Public(
        "-//W3C//DTD SVG 1.1//EN",
        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
    )), 19..117)
);

test!(document_09, "<?xml version='1.0' encoding='utf-8'?>\n<?xml-stylesheet?>\n\
<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>",
    Token::Declaration("1.0", Some("utf-8"), None, 0..38),
    Token::PI("xml-stylesheet", None, 39..57),
    Token::EmptyDtd("svg", Some(ExternalId::Public(
        "-//W3C//DTD SVG 1.1//EN",
        "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"
    )), 58..156)
);

test!(document_err_01, "<![CDATA[text]]>",
    Token::Error("unknown token at 1:1".to_string())
);

test!(document_err_02, " &www---------ำค+----------w-----www_",
    Token::Error("unknown token at 1:2".to_string())
);

test!(document_err_03, "q",
    Token::Error("unknown token at 1:1".to_string())
);

test!(document_err_04, "<!>",
    Token::Error("unknown token at 1:1".to_string())
);

test!(document_err_05, "<!DOCTYPE greeting1><!DOCTYPE greeting2>",
    Token::EmptyDtd("greeting1", None, 0..20),
    Token::Error("unknown token at 1:21".to_string())
);

test!(document_err_06, "&#x20;",
    Token::Error("unknown token at 1:1".to_string())
);

#[test]
fn parse_fragment_1() {
    let s = "<p/><p/>";
    let mut p = xml::Tokenizer::from_fragment(s, 0..s.len());

    match p.next().unwrap().unwrap() {
        xml::Token::ElementStart { local, .. } => assert_eq!(local.as_str(), "p"),
        _ => panic!(),
    }

    match p.next().unwrap().unwrap() {
        xml::Token::ElementEnd { .. } => {}
        _ => panic!(),
    }

    match p.next().unwrap().unwrap() {
        xml::Token::ElementStart { local, .. } => assert_eq!(local.as_str(), "p"),
        _ => panic!(),
    }
}