|
| 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 | +"\#new-errors", "\#document-fragment", "\#document", "\#script-off", |
| 25 | +"\#script-on", or empty, the only thing that matters is that there be |
| 26 | +the right number of parse errors. |
| 27 | + |
| 28 | +Then there \*may\* be a line that says "\#new-errors", which works like |
| 29 | +the "\#errors" section adding more errors to the expected number of |
| 30 | +errors. |
| 31 | + |
| 32 | +Then there \*may\* be a line that says "\#document-fragment", which must |
| 33 | +be followed by a newline (LF), followed by a string of characters that |
| 34 | +indicates the context element, followed by a newline (LF). If the string |
| 35 | +of characters starts with "svg ", the context element is in the SVG |
| 36 | +namespace and the substring after "svg " is the local name. If the |
| 37 | +string of characters starts with "math ", the context element is in the |
| 38 | +MathML namespace and the substring after "math " is the local name. |
| 39 | +Otherwise, the context element is in the HTML namespace and the string |
| 40 | +is the local name. If this line is present the "\#data" must be parsed |
| 41 | +using the HTML fragment parsing algorithm with the context element as |
| 42 | +context. |
| 43 | + |
| 44 | +Then there \*may\* be a line that says "\#script-off" or |
| 45 | +"\#script-on". If a line that says "\#script-off" is present, the |
| 46 | +parser must set the scripting flag to disabled. If a line that says |
| 47 | +"\#script-on" is present, it must set it to enabled. Otherwise, the |
| 48 | +test should be run in both modes. |
| 49 | + |
| 50 | +Then there must be a line that says "\#document", which must be followed |
| 51 | +by a dump of the tree of the parsed DOM. Each node must be represented |
| 52 | +by a single line. Each line must start with "| ", followed by two spaces |
| 53 | +per parent node that the node has before the root document node. |
| 54 | + |
| 55 | +- Element nodes must be represented by a "`<`" then the *tag name |
| 56 | + string* "`>`", and all the attributes must be given, sorted |
| 57 | + lexicographically by UTF-16 code unit according to their *attribute |
| 58 | + name string*, on subsequent lines, as if they were children of the |
| 59 | + element node. |
| 60 | +- Attribute nodes must have the *attribute name string*, then an "=" |
| 61 | + sign, then the attribute value in double quotes ("). |
| 62 | +- Text nodes must be the string, in double quotes. Newlines aren't |
| 63 | + escaped. |
| 64 | +- Comments must be "`<`" then "`!-- `" then the data then "` -->`". |
| 65 | +- DOCTYPEs must be "`<!DOCTYPE `" then the name then if either of the |
| 66 | + system id or public id is non-empty a space, public id in |
| 67 | + double-quotes, another space an the system id in double-quotes, and |
| 68 | + then in any case "`>`". |
| 69 | +- Processing instructions must be "`<?`", then the target, then a |
| 70 | + space, then the data and then "`>`". (The HTML parser cannot emit |
| 71 | + processing instructions, but scripts can, and the WebVTT to DOM |
| 72 | + rules can emit them.) |
| 73 | +- Template contents are represented by the string "content" with the |
| 74 | + children below it. |
| 75 | + |
| 76 | +The *tag name string* is the local name prefixed by a namespace |
| 77 | +designator. For the HTML namespace, the namespace designator is the |
| 78 | +empty string, i.e. there's no prefix. For the SVG namespace, the |
| 79 | +namespace designator is "svg ". For the MathML namespace, the namespace |
| 80 | +designator is "math ". |
| 81 | + |
| 82 | +The *attribute name string* is the local name prefixed by a namespace |
| 83 | +designator. For no namespace, the namespace designator is the empty |
| 84 | +string, i.e. there's no prefix. For the XLink namespace, the namespace |
| 85 | +designator is "xlink ". For the XML namespace, the namespace designator |
| 86 | +is "xml ". For the XMLNS namespace, the namespace designator is "xmlns |
| 87 | +". Note the difference between "xlink:href" which is an attribute in no |
| 88 | +namespace with the local name "xlink:href" and "xlink href" which is an |
| 89 | +attribute in the xlink namespace with the local name "href". |
| 90 | + |
| 91 | +If there is also a "\#document-fragment" the bit following "\#document" |
| 92 | +must be a representation of the HTML fragment serialization for the |
| 93 | +context element given by "\#document-fragment". |
| 94 | + |
| 95 | +For example: |
| 96 | + |
| 97 | + #data |
| 98 | + <p>One<p>Two |
| 99 | + #errors |
| 100 | + 3: Missing document type declaration |
| 101 | + #document |
| 102 | + | <html> |
| 103 | + | <head> |
| 104 | + | <body> |
| 105 | + | <p> |
| 106 | + | "One" |
| 107 | + | <p> |
| 108 | + | "Two" |
0 commit comments