File: htmlconstructor_autonomous_tests.js

package info (click to toggle)
firefox 143.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,617,328 kB
  • sloc: cpp: 7,478,492; javascript: 6,417,157; ansic: 3,720,058; python: 1,396,372; xml: 627,523; asm: 438,677; java: 186,156; sh: 63,477; makefile: 19,171; objc: 13,059; perl: 12,983; yacc: 4,583; cs: 3,846; pascal: 3,405; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 53; csh: 10
file content (107 lines) | stat: -rw-r--r-- 3,506 bytes parent folder | download | duplicates (31)
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
95
96
97
98
99
100
101
102
103
104
105
106
107
promises.push(
  test_with_new_window(testWindow => {
    // Test calling the HTMLElement constructor.
    (() => {
      SimpleTest.doesThrow(() => {
        testWindow.HTMLElement();
      }, "calling the HTMLElement constructor should throw a TypeError");
    })();

    // Test constructing a HTMLELement.
    (() => {
      SimpleTest.doesThrow(() => {
        new testWindow.HTMLElement();
      }, "constructing a HTMLElement should throw a TypeError");
    })();

    // Test constructing a custom element with defining HTMLElement as entry.
    (() => {
      testWindow.customElements.define(
        "x-defining-html-element",
        testWindow.HTMLElement
      );
      SimpleTest.doesThrow(() => {
        new testWindow.HTMLElement();
      }, "constructing a custom element with defining HTMLElement as registry " + "entry should throw a TypeError");
    })();

    // Test calling a custom element constructor and constructing an autonomous
    // custom element.
    (() => {
      let num_constructor_invocations = 0;
      class X extends testWindow.HTMLElement {
        constructor() {
          super();
          num_constructor_invocations++;
        }
      }
      testWindow.customElements.define("x-element", X);
      SimpleTest.doesThrow(() => {
        X();
      }, "calling an autonomous custom element constructor should throw a TypeError");

      let element = new X();
      SimpleTest.is(
        Object.getPrototypeOf(Cu.waiveXrays(element)),
        X.prototype,
        "constructing an autonomous custom element; " +
          "the element should be a registered constructor"
      );
      SimpleTest.is(
        element.localName,
        "x-element",
        "constructing an autonomous custom element; " +
          'the element tag name should be "x-element"'
      );
      SimpleTest.is(
        element.namespaceURI,
        "http://www.w3.org/1999/xhtml",
        "constructing an autonomous custom element; " +
          "the element should be in the HTML namespace"
      );
      SimpleTest.is(
        element.prefix,
        null,
        "constructing an autonomous custom element; " +
          "the element name should not have a prefix"
      );
      SimpleTest.is(
        element.ownerDocument,
        testWindow.document,
        "constructing an autonomous custom element; " +
          "the element should be owned by the registry's associated " +
          "document"
      );
      SimpleTest.is(
        num_constructor_invocations,
        1,
        "constructing an autonomous custom element; " +
          "the constructor should have been invoked once"
      );
    })();

    // Test if prototype is no an object.
    (() => {
      function ElementWithNonObjectPrototype() {
        let o = Reflect.construct(testWindow.HTMLElement, [], new.target);
        SimpleTest.is(
          Object.getPrototypeOf(Cu.waiveXrays(o)),
          window.HTMLElement.prototype,
          "constructing an autonomous custom element; " +
            "if prototype is not object, fallback from NewTarget's realm"
        );
      }

      // Prototype have to be an object during define(), otherwise define will
      // throw an TypeError exception.
      ElementWithNonObjectPrototype.prototype = {};
      testWindow.customElements.define(
        "x-non-object-prototype",
        ElementWithNonObjectPrototype
      );

      ElementWithNonObjectPrototype.prototype = "string";
      new ElementWithNonObjectPrototype();
    })();
  })
);