|
1 Tree Construction Tests |
|
2 ======================= |
|
3 |
|
4 Each file containing tree construction tests consists of any number of |
|
5 tests separated by two newlines (LF) and a single newline before the end |
|
6 of the file. For instance: |
|
7 |
|
8 [TEST]LF |
|
9 LF |
|
10 [TEST]LF |
|
11 LF |
|
12 [TEST]LF |
|
13 |
|
14 Where [TEST] is the following format: |
|
15 |
|
16 Each test must begin with a string "\#data" followed by a newline (LF). |
|
17 All subsequent lines until a line that says "\#errors" are the test data |
|
18 and must be passed to the system being tested unchanged, except with the |
|
19 final newline (on the last line) removed. |
|
20 |
|
21 Then there must be a line that says "\#errors". It must be followed by |
|
22 one line per parse error that a conformant checker would return. It |
|
23 doesn't matter what those lines are, although they can't be |
|
24 "\#document-fragment", "\#document", or empty, the only thing that |
|
25 matters is that there be the right number of parse errors. |
|
26 |
|
27 Then there \*may\* be a line that says "\#document-fragment", which must |
|
28 be followed by a newline (LF), followed by a string of characters that |
|
29 indicates the context element, followed by a newline (LF). If this line |
|
30 is present the "\#data" must be parsed using the HTML fragment parsing |
|
31 algorithm with the context element as context. |
|
32 |
|
33 Then there must be a line that says "\#document", which must be followed |
|
34 by a dump of the tree of the parsed DOM. Each node must be represented |
|
35 by a single line. Each line must start with "| ", followed by two spaces |
|
36 per parent node that the node has before the root document node. |
|
37 |
|
38 - Element nodes must be represented by a "`<`" then the *tag name |
|
39 string* "`>`", and all the attributes must be given, sorted |
|
40 lexicographically by UTF-16 code unit according to their *attribute |
|
41 name string*, on subsequent lines, as if they were children of the |
|
42 element node. |
|
43 - Attribute nodes must have the *attribute name string*, then an "=" |
|
44 sign, then the attribute value in double quotes ("). |
|
45 - Text nodes must be the string, in double quotes. Newlines aren't |
|
46 escaped. |
|
47 - Comments must be "`<`" then "`!-- `" then the data then "` -->`". |
|
48 - DOCTYPEs must be "`<!DOCTYPE `" then the name then if either of the |
|
49 system id or public id is non-empty a space, public id in |
|
50 double-quotes, another space an the system id in double-quotes, and |
|
51 then in any case "`>`". |
|
52 - Processing instructions must be "`<?`", then the target, then a |
|
53 space, then the data and then "`>`". (The HTML parser cannot emit |
|
54 processing instructions, but scripts can, and the WebVTT to DOM |
|
55 rules can emit them.) |
|
56 |
|
57 The *tag name string* is the local name prefixed by a namespace |
|
58 designator. For the HTML namespace, the namespace designator is the |
|
59 empty string, i.e. there's no prefix. For the SVG namespace, the |
|
60 namespace designator is "svg ". For the MathML namespace, the namespace |
|
61 designator is "math ". |
|
62 |
|
63 The *attribute name string* is the local name prefixed by a namespace |
|
64 designator. For no namespace, the namespace designator is the empty |
|
65 string, i.e. there's no prefix. For the XLink namespace, the namespace |
|
66 designator is "xlink ". For the XML namespace, the namespace designator |
|
67 is "xml ". For the XMLNS namespace, the namespace designator is "xmlns |
|
68 ". Note the difference between "xlink:href" which is an attribute in no |
|
69 namespace with the local name "xlink:href" and "xlink href" which is an |
|
70 attribute in the xlink namespace with the local name "href". |
|
71 |
|
72 If there is also a "\#document-fragment" the bit following "\#document" |
|
73 must be a representation of the HTML fragment serialization for the |
|
74 context element given by "\#document-fragment". |
|
75 |
|
76 For example: |
|
77 |
|
78 #data |
|
79 <p>One<p>Two |
|
80 #errors |
|
81 3: Missing document type declaration |
|
82 #document |
|
83 | <html> |
|
84 | <head> |
|
85 | <body> |
|
86 | <p> |
|
87 | "One" |
|
88 | <p> |
|
89 | "Two" |