View Javadoc
1   /*
2    * Copyright (c) 2002-2025 Gargoyle Software Inc.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * https://www.apache.org/licenses/LICENSE-2.0
8    *
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  package org.htmlunit.general;
16  
17  import static java.nio.charset.StandardCharsets.ISO_8859_1;
18  import static org.htmlunit.junit.SetExpectedAlertsBeforeTestExecutionCallback.firstDefinedOrGiven;
19  import static org.htmlunit.junit.SetExpectedAlertsBeforeTestExecutionCallback.isDefined;
20  
21  import java.awt.Color;
22  import java.awt.GradientPaint;
23  import java.io.File;
24  import java.io.IOException;
25  import java.lang.reflect.Method;
26  import java.util.ArrayList;
27  import java.util.Arrays;
28  import java.util.Collections;
29  import java.util.Comparator;
30  import java.util.List;
31  
32  import javax.imageio.ImageIO;
33  
34  import org.apache.commons.io.FileUtils;
35  import org.htmlunit.BrowserVersion;
36  import org.htmlunit.WebDriverTestCase;
37  import org.htmlunit.javascript.host.Location;
38  import org.htmlunit.javascript.host.Screen;
39  import org.htmlunit.javascript.host.crypto.Crypto;
40  import org.htmlunit.javascript.host.crypto.SubtleCrypto;
41  import org.htmlunit.javascript.host.css.ComputedCSSStyleDeclaration;
42  import org.htmlunit.javascript.host.dom.CDATASection;
43  import org.htmlunit.javascript.host.dom.NodeList;
44  import org.htmlunit.javascript.host.dom.XPathEvaluator;
45  import org.htmlunit.javascript.host.dom.XPathExpression;
46  import org.htmlunit.javascript.host.dom.XPathResult;
47  import org.htmlunit.javascript.host.html.HTMLCollection;
48  import org.htmlunit.javascript.host.performance.Performance;
49  import org.htmlunit.junit.annotation.Alerts;
50  import org.htmlunit.junit.annotation.HtmlUnitNYI;
51  import org.jfree.chart.ChartFactory;
52  import org.jfree.chart.JFreeChart;
53  import org.jfree.chart.axis.NumberAxis;
54  import org.jfree.chart.plot.CategoryPlot;
55  import org.jfree.chart.plot.PlotOrientation;
56  import org.jfree.chart.renderer.category.LayeredBarRenderer;
57  import org.jfree.chart.util.SortOrder;
58  import org.jfree.data.category.DefaultCategoryDataset;
59  import org.junit.jupiter.api.AfterAll;
60  import org.junit.jupiter.api.BeforeAll;
61  import org.junit.jupiter.api.Test;
62  
63  /**
64   * Tests own properties of an object.
65   *
66   * @author Ronald Brill
67   */
68  public class ElementOwnPropertySymbolsTest extends WebDriverTestCase {
69  
70      private static BrowserVersion BROWSER_VERSION_;
71  
72      private void test(final String tagName) throws Exception {
73          testString("", "document.createElement('" + tagName + "')");
74      }
75  
76  
77      private void testString(final String preparation, final String string) throws Exception {
78          testString(preparation, string, true);
79      }
80  
81      private void testInstanceString(final String preparation, final String string) throws Exception {
82          testString(preparation, string, false);
83      }
84  
85      private void testString(final String preparation,
86                      final String string, final boolean fromCtor) throws Exception {
87          final String html = DOCTYPE_HTML
88                  + "<html><head><script>\n"
89                  + LOG_TEXTAREA_FUNCTION
90                  + "  function test(event) {\n"
91                  + "    var xmlDocument = document.implementation.createDocument('', '', null);\n"
92                  + "    var element = xmlDocument.createElement('wakwak');\n"
93                  + "    var unknown = document.createElement('harhar');\n"
94                  + "    var div = document.createElement('div');\n"
95                  + "    var svg = document.getElementById('mySvg');\n"
96                  + "    try{\n"
97                  + "      " + preparation + "\n"
98                  + "      process(" + string + ");\n"
99                  + "    } catch(e) {logEx(e);return;}\n"
100                 + "  }\n"
101                 + "\n"
102                 + "  /*\n"
103                 + "   * Alerts all properties (including functions) of the specified object.\n"
104                 + "   *\n"
105                 + "   * @param object the object to write the property of\n"
106                 + "   */\n"
107                 + "  function process(object) {\n"
108                 + "    var all = [];\n"
109                 + "    var props = Object.getOwnPropertySymbols(object"
110                                             + (fromCtor ? ".constructor.prototype" : "") + ");\n"
111                 + "    for (i = 0; i < props.length; i++) {\n"
112                 + "      var str = props[i].toString();\n"
113 
114                 + "      let desc = Object.getOwnPropertyDescriptor(object"
115                                             + (fromCtor ? ".constructor.prototype" : "") + ", props[i]);\n"
116                 + "      str += ' [';\n"
117                 + "      if (desc.get != undefined) str += 'G';\n"
118                 + "      if (desc.set != undefined) str += 'S';\n"
119                 + "      if (desc.writable) str += 'W';\n"
120                 + "      if (desc.configurable) str += 'C';\n"
121                 + "      if (desc.enumerable) str += 'E';\n"
122                 + "      str += ']'\n"
123 
124                 + "      var val = object[props[i]];\n"
125                 + "      if (typeof val === 'function') {\n"
126                 + "        str = str + ' [function]';\n"
127                 + "      } else if (typeof val === 'string') {\n"
128                 + "        str = str + ' [' + val + ']';\n"
129                 + "      } else {\n"
130                 + "        str = str + ' [' + JSON.stringify(val) + ']';\n"
131                 + "      }\n"
132                 + "      all.push(str);\n"
133                 + "    }\n"
134 
135                 + "    all.sort(sortFunction);\n"
136                 + "    if (all.length == 0) { all = '-' };\n"
137                 + "    log(all);\n"
138                 + "  }\n"
139                 + "  function sortFunction(s1, s2) {\n"
140                 + "    var s1lc = s1.toLowerCase();\n"
141                 + "    var s2lc =  s2.toLowerCase();\n"
142                 + "    if (s1lc > s2lc) { return 1; }\n"
143                 + "    if (s1lc < s2lc) { return -1; }\n"
144                 + "    return s1 > s2 ? 1 : -1;\n"
145                 + "  }\n"
146                 + "</script></head>\n"
147                 + "<body onload='test(event)'>\n"
148                 + "  <svg xmlns='http://www.w3.org/2000/svg' version='1.1'>\n"
149                 + "    <invalid id='mySvg'/>\n"
150                 + "  </svg>\n"
151 
152                 + "  <style>\n"
153                 + "    @page { margin: 1cm; }\n"
154                 + "  </style>\n"
155                 + "  <style>\n"
156                 + "    @media screen { p { background-color:#FFFFFF; }};\n"
157                 + "  </style>\n"
158                 + "  <style>\n"
159                 + "    @font-face { font-family: Delicious; src: url('Delicious-Bold.otf'); };\n"
160                 + "  </style>\n"
161                 + "  <style>\n"
162                 + "    @import 'imp.css';\n"
163                 + "  </style>\n"
164                 + "  <style>\n"
165                 + "    h3 { color: blue;  }\n"
166                 + "  </style>\n"
167 
168                 + "  <form name='myForm', id='myFormId'>"
169                 + "    <input type='radio' name='first'/><input type='radio' name='first'/>"
170                 + "    <input id='fileItem' type='file' />"
171                 + "  </form>"
172 
173                 + LOG_TEXTAREA
174                 + "</body></html>";
175 
176         if (BROWSER_VERSION_ == null) {
177             BROWSER_VERSION_ = getBrowserVersion();
178         }
179 
180         loadPageVerifyTextArea2(html);
181     }
182 
183     private static List<String> stringAsArray(final String string) {
184         if (string.isEmpty()) {
185             return Collections.emptyList();
186         }
187         return Arrays.asList(string.split(","));
188     }
189 
190     /**
191      * Resets browser-specific values.
192      */
193     @BeforeAll
194     public static void beforeClass() {
195         BROWSER_VERSION_ = null;
196     }
197 
198     /**
199      * Saves HTML and PNG files.
200      *
201      * @throws IOException if an error occurs
202      */
203     @AfterAll
204     public static void saveAll() throws IOException {
205         final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
206         final int[] counts = {0, 0};
207         final StringBuilder html = new StringBuilder();
208         html.setLength(0);
209 
210         collectStatistics(BROWSER_VERSION_, dataset, html, counts);
211         saveChart(dataset);
212 
213         FileUtils.writeStringToFile(new File(getTargetDirectory()
214                 + "/ownsymbols-" + BROWSER_VERSION_.getNickname() + ".html"),
215                 htmlHeader()
216                     .append(overview(counts))
217                     .append(htmlDetailsHeader())
218                     .append(html)
219                     .append(htmlDetailsFooter())
220                     .append(htmlFooter()).toString(), ISO_8859_1);
221     }
222 
223     private static void collectStatistics(final BrowserVersion browserVersion, final DefaultCategoryDataset dataset,
224             final StringBuilder html, final int[] counts) {
225         final Method[] methods = ElementOwnPropertySymbolsTest.class.getMethods();
226         Arrays.sort(methods, Comparator.comparing(Method::getName));
227         for (final Method method : methods) {
228             if (method.isAnnotationPresent(Test.class)) {
229 
230                 final Alerts alerts = method.getAnnotation(Alerts.class);
231                 String[] expectedAlerts = {};
232                 if (isDefined(alerts.value())) {
233                     expectedAlerts = alerts.value();
234                 }
235                 else if (browserVersion == BrowserVersion.EDGE) {
236                     expectedAlerts = firstDefinedOrGiven(expectedAlerts, alerts.EDGE(), alerts.DEFAULT());
237                 }
238                 else if (browserVersion == BrowserVersion.FIREFOX_ESR) {
239                     expectedAlerts = firstDefinedOrGiven(expectedAlerts, alerts.FF_ESR(), alerts.DEFAULT());
240                 }
241                 else if (browserVersion == BrowserVersion.FIREFOX) {
242                     expectedAlerts = firstDefinedOrGiven(expectedAlerts, alerts.FF(), alerts.DEFAULT());
243                 }
244                 else if (browserVersion == BrowserVersion.CHROME) {
245                     expectedAlerts = firstDefinedOrGiven(expectedAlerts, alerts.CHROME(), alerts.DEFAULT());
246                 }
247 
248                 final List<String> realProperties = stringAsArray(String.join(",", expectedAlerts));
249                 List<String> simulatedProperties = stringAsArray(String.join(",", expectedAlerts));
250 
251                 final HtmlUnitNYI htmlUnitNYI = method.getAnnotation(HtmlUnitNYI.class);
252                 String[] nyiAlerts = {};
253                 if (htmlUnitNYI != null) {
254                     if (browserVersion == BrowserVersion.EDGE) {
255                         nyiAlerts = firstDefinedOrGiven(expectedAlerts, htmlUnitNYI.EDGE());
256                     }
257                     else if (browserVersion == BrowserVersion.FIREFOX_ESR) {
258                         nyiAlerts = firstDefinedOrGiven(expectedAlerts, htmlUnitNYI.FF_ESR());
259                     }
260                     else if (browserVersion == BrowserVersion.FIREFOX) {
261                         nyiAlerts = firstDefinedOrGiven(expectedAlerts, htmlUnitNYI.FF());
262                     }
263                     else if (browserVersion == BrowserVersion.CHROME) {
264                         nyiAlerts = firstDefinedOrGiven(expectedAlerts, htmlUnitNYI.CHROME());
265                     }
266 
267                     simulatedProperties = stringAsArray(String.join(",", nyiAlerts));
268                 }
269 
270                 final List<String> erroredProperties = new ArrayList<>(simulatedProperties);
271                 erroredProperties.removeAll(realProperties);
272 
273                 final List<String> implementedProperties = new ArrayList<>(simulatedProperties);
274                 implementedProperties.retainAll(realProperties);
275 
276                 counts[1] += implementedProperties.size();
277                 counts[0] += realProperties.size();
278 
279                 htmlDetails(method.getName(), html, realProperties, implementedProperties, erroredProperties);
280 
281                 dataset.addValue(implementedProperties.size(), "Implemented", method.getName());
282                 dataset.addValue(realProperties.size(),
283                         browserVersion.getNickname().replace("FF", "Firefox "),
284                        method.getName());
285                 dataset.addValue(erroredProperties.size(), "Should not be implemented", method.getName());
286             }
287         }
288     }
289 
290     private static void saveChart(final DefaultCategoryDataset dataset) throws IOException {
291         final JFreeChart chart = ChartFactory.createBarChart(
292             "HtmlUnit implemented properties and methods for " + BROWSER_VERSION_.getNickname(), "Objects",
293             "Count", dataset, PlotOrientation.HORIZONTAL, true, true, false);
294         final CategoryPlot plot = (CategoryPlot) chart.getPlot();
295         final NumberAxis axis = (NumberAxis) plot.getRangeAxis();
296         axis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
297         final LayeredBarRenderer renderer = new LayeredBarRenderer();
298         plot.setRenderer(renderer);
299         plot.setRowRenderingOrder(SortOrder.DESCENDING);
300         renderer.setSeriesPaint(0, new GradientPaint(0, 0, Color.green, 0, 0, new Color(0, 64, 0)));
301         renderer.setSeriesPaint(1, new GradientPaint(0, 0, Color.blue, 0, 0, new Color(0, 0, 64)));
302         renderer.setSeriesPaint(2, new GradientPaint(0, 0, Color.red, 0, 0, new Color(64, 0, 0)));
303         ImageIO.write(chart.createBufferedImage(1200, 2400), "png",
304             new File(getTargetDirectory() + "/ownsymbols-" + BROWSER_VERSION_.getNickname() + ".png"));
305     }
306 
307     /**
308      * Returns the 'target' directory.
309      * @return the 'target' directory
310      */
311     public static String getTargetDirectory() {
312         final String dirName = "./target";
313         final File dir = new File(dirName);
314         if (!dir.exists()) {
315             if (!dir.mkdir()) {
316                 throw new RuntimeException("Could not create artifacts directory");
317             }
318         }
319         return dirName;
320     }
321 
322     private static StringBuilder htmlHeader() {
323         final StringBuilder html = new StringBuilder();
324         html.append(DOCTYPE_HTML);
325         html.append("<html><head>\n");
326         html.append("<style type=\"text/css\">\n");
327         html.append("table.bottomBorder { border-collapse:collapse; }\n");
328         html.append("table.bottomBorder td, table.bottomBorder th { "
329                             + "border-bottom:1px dotted black;padding:5px; }\n");
330         html.append("table.bottomBorder td.numeric { text-align:right; }\n");
331         html.append("</style>\n");
332         html.append("</head><body>\n");
333 
334         html.append("<div align='center'>").append("<h2>")
335         .append("HtmlUnit implemented symbols for " + BROWSER_VERSION_.getNickname())
336         .append("</h2>").append("</div>\n");
337         return html;
338     }
339 
340     private static StringBuilder overview(final int[] counts) {
341         final StringBuilder html = new StringBuilder();
342         html.append("<table class='bottomBorder'>");
343         html.append("<tr>\n");
344 
345         html.append("<th>Total Implemented:</th>\n");
346         html.append("<td>" + counts[1])
347             .append(" (" + Math.round(((double) counts[1]) / counts[0] * 100))
348             .append("%)</td>\n");
349 
350         html.append("</tr>\n");
351         html.append("</table>\n");
352 
353         html.append("<p><br></p>\n");
354 
355         return html;
356     }
357 
358     private static StringBuilder htmlFooter() {
359         final StringBuilder html = new StringBuilder();
360 
361         html.append("<br>").append("Legend:").append("<br>")
362         .append("<span style='color: blue'>").append("To be implemented").append("</span>").append("<br>")
363         .append("<span style='color: green'>").append("Implemented").append("</span>").append("<br>")
364         .append("<span style='color: red'>").append("Should not be implemented").append("</span>");
365         html.append("\n");
366 
367         html.append("</body>\n");
368         html.append("</html>\n");
369         return html;
370     }
371 
372     private static StringBuilder htmlDetailsHeader() {
373         final StringBuilder html = new StringBuilder();
374 
375         html.append("<table class='bottomBorder' width='100%'>");
376         html.append("<tr>\n");
377         html.append("<th>Class</th><th>Symbols</th><th>Counts</th>\n");
378         html.append("</tr>");
379         return html;
380     }
381 
382     private static StringBuilder htmlDetails(final String name, final StringBuilder html,
383             final List<String> realProperties,
384             final List<String> implementedProperties, final List<String> erroredProperties) {
385         html.append("<tr>").append('\n').append("<td rowspan='2'>").append("<a name='" + name + "'>").append(name)
386             .append("</a>").append("</td>").append('\n').append("<td>");
387         int implementedCount = 0;
388 
389         if (realProperties.isEmpty()) {
390             html.append("&nbsp;");
391         }
392         else if (realProperties.size() == 1
393                 && realProperties.contains("exception")
394                 && implementedProperties.size() == 1
395                 && implementedProperties.contains("exception")
396                 && erroredProperties.size() == 0) {
397             html.append("&nbsp;");
398         }
399         else {
400             for (int i = 0; i < realProperties.size(); i++) {
401                 final String color;
402                 if (implementedProperties.contains(realProperties.get(i))) {
403                     color = "green";
404                     implementedCount++;
405                 }
406                 else {
407                     color = "blue";
408                 }
409                 html.append("<span style='color: " + color + "'>").append(realProperties.get(i)).append("</span>");
410                 if (i < realProperties.size() - 1) {
411                     html.append(',').append(' ');
412                 }
413             }
414         }
415 
416         html.append("</td>").append("<td>").append(implementedCount).append('/')
417             .append(realProperties.size()).append("</td>").append("</tr>").append('\n');
418         html.append("<tr>").append("<td>");
419         for (int i = 0; i < erroredProperties.size(); i++) {
420             html.append("<span style='color: red'>").append(erroredProperties.get(i)).append("</span>");
421             if (i < erroredProperties.size() - 1) {
422                 html.append(',').append(' ');
423             }
424         }
425         if (erroredProperties.isEmpty()) {
426             html.append("&nbsp;");
427         }
428         html.append("</td>")
429             .append("<td>").append(erroredProperties.size()).append("</td>").append("</tr>\n");
430 
431         return html;
432     }
433 
434     private static StringBuilder htmlDetailsFooter() {
435         final StringBuilder html = new StringBuilder();
436         html.append("</table>");
437         return html;
438     }
439 
440     /**
441      * @throws Exception if the test fails
442      */
443     @Test
444     @Alerts("Symbol(Symbol.toStringTag) [C] [Text]")
445     public void text() throws Exception {
446         testString("", "document.createTextNode('some text')");
447     }
448 
449     /**
450      * @throws Exception if the test fails
451      */
452     @Test
453     @Alerts("Symbol(Symbol.toStringTag) [C] [Attr]")
454     public void attr() throws Exception {
455         testString("", "document.createAttribute('some_attrib')");
456     }
457 
458     /**
459      * @throws Exception if the test fails
460      */
461     @Test
462     @Alerts("Symbol(Symbol.toStringTag) [C] [Comment]")
463     public void comment() throws Exception {
464         testString("", "document.createComment('come_comment')");
465     }
466 
467     /**
468      * @throws Exception if the test fails
469      */
470     @Test
471     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
472     public void unknown() throws Exception {
473         testString("", "unknown");
474     }
475 
476     /**
477      * @throws Exception if the test fails
478      */
479     @Test
480     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
481     public void htmlElement() throws Exception {
482         testString("", "unknown");
483     }
484 
485     /**
486      * Test {@link org.htmlunit.javascript.host.Element}.
487      *
488      * @throws Exception if the test fails
489      */
490     @Test
491     @Alerts(DEFAULT = "Symbol(Symbol.toStringTag) [C] [Element],"
492                 + "Symbol(Symbol.unscopables) [C] [{\"after\":true,\"append\":true,\"before\":true,"
493                     + "\"prepend\":true,\"remove\":true,\"replaceChildren\":true,"
494                     + "\"replaceWith\":true,\"slot\":true}]",
495             FF = "Symbol(Symbol.toStringTag) [C] [Element],"
496                 + "Symbol(Symbol.unscopables) [C] [{\"slot\":true,\"before\":true,\"after\":true,"
497                     + "\"replaceWith\":true,\"remove\":true,\"prepend\":true,"
498                     + "\"append\":true,\"replaceChildren\":true}]",
499             FF_ESR = "Symbol(Symbol.toStringTag) [C] [Element],"
500                 + "Symbol(Symbol.unscopables) [C] [{\"slot\":true,\"before\":true,\"after\":true,"
501                     + "\"replaceWith\":true,\"remove\":true,\"prepend\":true,"
502                     + "\"append\":true,\"replaceChildren\":true}]")
503     @HtmlUnitNYI(CHROME = "Symbol(Symbol.toStringTag) [C] [Element]",
504             EDGE = "Symbol(Symbol.toStringTag) [C] [Element]",
505             FF = "Symbol(Symbol.toStringTag) [C] [Element]",
506             FF_ESR = "Symbol(Symbol.toStringTag) [C] [Element]")
507     public void element() throws Exception {
508         testString("", "element");
509     }
510 
511     /**
512      * Test {@link org.htmlunit.javascript.host.Element}.
513      *
514      * @throws Exception if the test fails
515      */
516     @Test
517     @Alerts(DEFAULT =
518                 "Symbol(Symbol.toStringTag) [C] [Element],"
519                 + "Symbol(Symbol.unscopables) [C] [{\"after\":true,\"append\":true,"
520                     + "\"before\":true,\"prepend\":true,\"remove\":true,\"replaceChildren\":true,\"replaceWith\":true,"
521                     + "\"slot\":true}]",
522             FF = "Symbol(Symbol.toStringTag) [C] [Element],"
523                 + "Symbol(Symbol.unscopables) [C] [{\"slot\":true,\"before\":true,\"after\":true,\"replaceWith\":true,"
524                     + "\"remove\":true,\"prepend\":true,\"append\":true,\"replaceChildren\":true}]",
525             FF_ESR = "Symbol(Symbol.toStringTag) [C] [Element],"
526                 + "Symbol(Symbol.unscopables) [C] [{\"slot\":true,\"before\":true,\"after\":true,\"replaceWith\":true,"
527                     + "\"remove\":true,\"prepend\":true,\"append\":true,\"replaceChildren\":true}]")
528     @HtmlUnitNYI(CHROME = "Symbol(Symbol.toStringTag) [C] [Element]",
529             EDGE = "Symbol(Symbol.toStringTag) [C] [Element]",
530             FF_ESR = "Symbol(Symbol.toStringTag) [C] [Element]",
531             FF = "Symbol(Symbol.toStringTag) [C] [Element]")
532     public void element2() throws Exception {
533         testString("", "element, document.createDocumentFragment()");
534     }
535 
536     /**
537      * @throws Exception if the test fails
538      */
539     @Test
540     @Alerts("TypeError")
541     public void currentStyle() throws Exception {
542         testString("", "document.body.currentStyle");
543     }
544 
545     /**
546      * @throws Exception if the test fails
547      */
548     @Test
549     @Alerts("Symbol(Symbol.toStringTag) [C] [Event]")
550     public void event() throws Exception {
551         testString("", "event");
552     }
553 
554     /**
555      * @throws Exception if the test fails
556      */
557     @Test
558     @Alerts("Symbol(Symbol.toStringTag) [C] [Window]")
559     public void window() throws Exception {
560         testString("", "window");
561     }
562 
563     /**
564      * Test {@link org.htmlunit.html.HtmlAbbreviated}.
565      *
566      * @throws Exception if the test fails
567      */
568     @Test
569     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
570     public void abbr() throws Exception {
571         test("abbr");
572     }
573 
574     /**
575      * Test {@link org.htmlunit.html.HtmlAcronym}.
576      *
577      * @throws Exception if the test fails
578      */
579     @Test
580     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
581     public void acronym() throws Exception {
582         test("acronym");
583     }
584 
585     /**
586      * Test {@link org.htmlunit.html.HtmlAnchor}.
587      *
588      * @throws Exception if the test fails
589      */
590     @Test
591     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLAnchorElement]")
592     public void a() throws Exception {
593         test("a");
594     }
595 
596     /**
597      * Test {@link org.htmlunit.html.HtmlAddress}.
598      *
599      * @throws Exception if the test fails
600      */
601     @Test
602     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
603     public void address() throws Exception {
604         test("address");
605     }
606 
607     /**
608      * Test {@link org.htmlunit.html.HtmlApplet}.
609      *
610      * @throws Exception if the test fails
611      */
612     @Test
613     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
614     public void applet() throws Exception {
615         test("applet");
616     }
617 
618     /**
619      * Test {@link org.htmlunit.html.HtmlArea}.
620      *
621      * @throws Exception if the test fails
622      */
623     @Test
624     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLAreaElement]")
625     public void area() throws Exception {
626         test("area");
627     }
628 
629     /**
630      * Test {@link org.htmlunit.html.HtmlArticle}.
631      *
632      * @throws Exception if the test fails
633      */
634     @Test
635     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
636     public void article() throws Exception {
637         test("article");
638     }
639 
640     /**
641      * Test {@link org.htmlunit.html.HtmlAside}.
642      *
643      * @throws Exception if the test fails
644      */
645     @Test
646     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
647     public void aside() throws Exception {
648         test("aside");
649     }
650 
651     /**
652      * Test {@link org.htmlunit.html.HtmlAudio}.
653      *
654      * @throws Exception if the test fails
655      */
656     @Test
657     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLAudioElement]")
658     public void audio() throws Exception {
659         test("audio");
660     }
661 
662     /**
663      * Test {@link org.htmlunit.html.HtmlBackgroundSound}.
664      *
665      * @throws Exception if the test fails
666      */
667     @Test
668     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
669     public void bgsound() throws Exception {
670         test("bgsound");
671     }
672 
673     /**
674      * Test {@link org.htmlunit.html.HtmlBase}.
675      *
676      * @throws Exception if the test fails
677      */
678     @Test
679     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLBaseElement]")
680     public void base() throws Exception {
681         test("base");
682     }
683 
684     /**
685      * Test {@link org.htmlunit.html.HtmlBaseFont}.
686      *
687      * @throws Exception if the test fails
688      */
689     @Test
690     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
691     public void basefont() throws Exception {
692         test("basefont");
693     }
694 
695     /**
696      * Test {@link org.htmlunit.html.HtmlBidirectionalIsolation}.
697      *
698      * @throws Exception if the test fails
699      */
700     @Test
701     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
702     public void bdi() throws Exception {
703         test("bdi");
704     }
705 
706     /**
707      * Test {@link org.htmlunit.html.HtmlBidirectionalOverride}.
708      *
709      * @throws Exception if the test fails
710      */
711     @Test
712     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
713     public void bdo() throws Exception {
714         test("bdo");
715     }
716 
717     /**
718      * Test {@link org.htmlunit.html.HtmlBig}.
719      *
720      * @throws Exception if the test fails
721      */
722     @Test
723     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
724     public void big() throws Exception {
725         test("big");
726     }
727 
728     /**
729      * Test {@link org.htmlunit.html.HtmlBlink}.
730      *
731      * @throws Exception if the test fails
732      */
733     @Test
734     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
735     public void blink() throws Exception {
736         test("blink");
737     }
738 
739     /**
740      * Test {@link org.htmlunit.html.HtmlBlockQuote}.
741      *
742      * @throws Exception if the test fails
743      */
744     @Test
745     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLQuoteElement]")
746     public void blockquote() throws Exception {
747         test("blockquote");
748     }
749 
750     /**
751      * Test {@link org.htmlunit.html.HtmlBody}.
752      *
753      * @throws Exception if the test fails
754      */
755     @Test
756     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLBodyElement]")
757     public void body() throws Exception {
758         test("body");
759     }
760 
761     /**
762      * Test {@link org.htmlunit.html.HtmlBold}.
763      *
764      * @throws Exception if the test fails
765      */
766     @Test
767     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
768     public void b() throws Exception {
769         test("b");
770     }
771 
772     /**
773      * Test {@link org.htmlunit.html.HtmlBreak}.
774      *
775      * @throws Exception if the test fails
776      */
777     @Test
778     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLBRElement]")
779     public void br() throws Exception {
780         test("br");
781     }
782 
783     /**
784      * Test {@link org.htmlunit.html.HtmlButton}.
785      *
786      * @throws Exception if the test fails
787      */
788     @Test
789     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLButtonElement]")
790     public void button() throws Exception {
791         test("button");
792     }
793 
794     /**
795      * Test {@link org.htmlunit.html.HtmlCanvas}.
796      *
797      * @throws Exception if the test fails
798      */
799     @Test
800     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLCanvasElement]")
801     public void canvas() throws Exception {
802         test("canvas");
803     }
804 
805     /**
806      * Test {@link org.htmlunit.html.HtmlCaption}.
807      *
808      * @throws Exception if the test fails
809      */
810     @Test
811     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTableCaptionElement]")
812     public void caption() throws Exception {
813         test("caption");
814     }
815 
816     /**
817      * Test {@link org.htmlunit.html.HtmlCenter}.
818      *
819      * @throws Exception if the test fails
820      */
821     @Test
822     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
823     public void center() throws Exception {
824         test("center");
825     }
826 
827     /**
828      * Test {@link org.htmlunit.html.HtmlCitation}.
829      *
830      * @throws Exception if the test fails
831      */
832     @Test
833     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
834     public void cite() throws Exception {
835         test("cite");
836     }
837 
838     /**
839      * Test {@link org.htmlunit.html.HtmlCode}.
840      *
841      * @throws Exception if the test fails
842      */
843     @Test
844     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
845     public void code() throws Exception {
846         test("code");
847     }
848 
849     /**
850      * Test {@link org.htmlunit.html.HtmlCommand}.
851      *
852      * @throws Exception if the test fails
853      */
854     @Test
855     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
856     public void command() throws Exception {
857         test("command");
858     }
859 
860     /**
861      * Test {@link org.htmlunit.html.HtmlDataList}.
862      *
863      * @throws Exception if the test fails
864      */
865     @Test
866     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLDataListElement]")
867     public void datalist() throws Exception {
868         test("datalist");
869     }
870 
871     /**
872      * Test {@link org.htmlunit.html.HtmlDefinition}.
873      *
874      * @throws Exception if the test fails
875      */
876     @Test
877     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
878     public void dfn() throws Exception {
879         test("dfn");
880     }
881 
882     /**
883      * Test {@link org.htmlunit.html.HtmlDefinitionDescription}.
884      *
885      * @throws Exception if the test fails
886      */
887     @Test
888     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
889     public void dd() throws Exception {
890         test("dd");
891     }
892 
893     /**
894      * Test {@link org.htmlunit.html.HtmlDeletedText}.
895      *
896      * @throws Exception if the test fails
897      */
898     @Test
899     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLModElement]")
900     public void del() throws Exception {
901         test("del");
902     }
903 
904     /**
905      * Test {@link org.htmlunit.html.HtmlDetails}.
906      *
907      * @throws Exception if the test fails
908      */
909     @Test
910     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLDetailsElement]")
911     public void details() throws Exception {
912         test("details");
913     }
914 
915     /**
916      * Test {@link org.htmlunit.html.HtmlDialog}.
917      *
918      * @throws Exception if the test fails
919      */
920     @Test
921     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLDialogElement]")
922     public void dialog() throws Exception {
923         test("dialog");
924     }
925 
926     /**
927      * Test {@link org.htmlunit.html.HtmlDirectory}.
928      *
929      * @throws Exception if the test fails
930      */
931     @Test
932     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLDirectoryElement]")
933     public void dir() throws Exception {
934         test("dir");
935     }
936 
937     /**
938      * Test {@link org.htmlunit.html.HtmlDivision}.
939      *
940      * @throws Exception if the test fails
941      */
942     @Test
943     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLDivElement]")
944     public void div() throws Exception {
945         test("div");
946     }
947 
948     /**
949      * Test {@link org.htmlunit.html.HtmlDefinitionList}.
950      *
951      * @throws Exception if the test fails
952      */
953     @Test
954     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLDListElement]")
955     public void dl() throws Exception {
956         test("dl");
957     }
958 
959     /**
960      * Test {@link org.htmlunit.html.HtmlDefinitionTerm}.
961      *
962      * @throws Exception if the test fails
963      */
964     @Test
965     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
966     public void dt() throws Exception {
967         test("dt");
968     }
969 
970     /**
971      * Test {@link org.htmlunit.html.HtmlEmbed}.
972      *
973      * @throws Exception if the test fails
974      */
975     @Test
976     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLEmbedElement]")
977     public void embed() throws Exception {
978         test("embed");
979     }
980 
981     /**
982      * Test {@link org.htmlunit.html.HtmlEmphasis}.
983      *
984      * @throws Exception if the test fails
985      */
986     @Test
987     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
988     public void em() throws Exception {
989         test("em");
990     }
991 
992     /**
993      * Test {@link org.htmlunit.html.HtmlFieldSet}.
994      *
995      * @throws Exception if the test fails
996      */
997     @Test
998     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLFieldSetElement]")
999     public void fieldset() throws Exception {
1000         test("fieldset");
1001     }
1002 
1003     /**
1004      * Test {@link org.htmlunit.html.HtmlFigureCaption}.
1005      *
1006      * @throws Exception if the test fails
1007      */
1008     @Test
1009     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1010     public void figcaption() throws Exception {
1011         test("figcaption");
1012     }
1013 
1014     /**
1015      * Test {@link org.htmlunit.html.HtmlFigure}.
1016      *
1017      * @throws Exception if the test fails
1018      */
1019     @Test
1020     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1021     public void figure() throws Exception {
1022         test("figure");
1023     }
1024 
1025     /**
1026      * Test {@link org.htmlunit.html.HtmlFont}.
1027      *
1028      * @throws Exception if the test fails
1029      */
1030     @Test
1031     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLFontElement]")
1032     public void font() throws Exception {
1033         test("font");
1034     }
1035 
1036     /**
1037      * Test {@link org.htmlunit.html.HtmlForm}.
1038      *
1039      * @throws Exception if the test fails
1040      */
1041     @Test
1042     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [HTMLFormElement]")
1043     public void form() throws Exception {
1044         test("form");
1045     }
1046 
1047     /**
1048      * Test {@link org.htmlunit.javascript.host.xml.FormData}.
1049      *
1050      * @throws Exception if the test fails
1051      */
1052     @Test
1053     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [FormData]")
1054     public void formData() throws Exception {
1055         testString("", "new FormData()");
1056     }
1057 
1058     /**
1059      * Test {@link org.htmlunit.html.HtmlFooter}.
1060      *
1061      * @throws Exception if the test fails
1062      */
1063     @Test
1064     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1065     public void footer() throws Exception {
1066         test("footer");
1067     }
1068 
1069     /**
1070      * Test {@link org.htmlunit.html.HtmlFrame}.
1071      *
1072      * @throws Exception if the test fails
1073      */
1074     @Test
1075     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLFrameElement]")
1076     public void frame() throws Exception {
1077         test("frame");
1078     }
1079 
1080     /**
1081      * Test {@link org.htmlunit.html.HtmlFrameSet}.
1082      *
1083      * @throws Exception if the test fails
1084      */
1085     @Test
1086     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLFrameSetElement]")
1087     public void frameset() throws Exception {
1088         test("frameset");
1089     }
1090 
1091     /**
1092      * Test {@link org.htmlunit.html.HtmlHead}.
1093      *
1094      * @throws Exception if the test fails
1095      */
1096     @Test
1097     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLHeadElement]")
1098     public void head() throws Exception {
1099         test("head");
1100     }
1101 
1102     /**
1103      * Test {@link org.htmlunit.html.HtmlHeader}.
1104      *
1105      * @throws Exception if the test fails
1106      */
1107     @Test
1108     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1109     public void header() throws Exception {
1110         test("header");
1111     }
1112 
1113     /**
1114      * Test {@link org.htmlunit.html.HtmlHeading1}.
1115      *
1116      * @throws Exception if the test fails
1117      */
1118     @Test
1119     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLHeadingElement]")
1120     public void h1() throws Exception {
1121         test("h1");
1122     }
1123 
1124     /**
1125      * Test {@link org.htmlunit.html.HtmlHeading2}.
1126      *
1127      * @throws Exception if the test fails
1128      */
1129     @Test
1130     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLHeadingElement]")
1131     public void h2() throws Exception {
1132         test("h2");
1133     }
1134 
1135     /**
1136      * Test {@link org.htmlunit.html.HtmlHeading3}.
1137      *
1138      * @throws Exception if the test fails
1139      */
1140     @Test
1141     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLHeadingElement]")
1142     public void h3() throws Exception {
1143         test("h3");
1144     }
1145 
1146     /**
1147      * Test {@link org.htmlunit.html.HtmlHeading4}.
1148      *
1149      * @throws Exception if the test fails
1150      */
1151     @Test
1152     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLHeadingElement]")
1153     public void h4() throws Exception {
1154         test("h4");
1155     }
1156 
1157     /**
1158      * Test {@link org.htmlunit.html.HtmlHeading5}.
1159      *
1160      * @throws Exception if the test fails
1161      */
1162     @Test
1163     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLHeadingElement]")
1164     public void h5() throws Exception {
1165         test("h5");
1166     }
1167 
1168     /**
1169      * Test {@link org.htmlunit.html.HtmlHeading6}.
1170      *
1171      * @throws Exception if the test fails
1172      */
1173     @Test
1174     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLHeadingElement]")
1175     public void h6() throws Exception {
1176         test("h6");
1177     }
1178 
1179     /**
1180      * Test {@link org.htmlunit.html.HtmlHorizontalRule}.
1181      *
1182      * @throws Exception if the test fails
1183      */
1184     @Test
1185     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLHRElement]")
1186     public void hr() throws Exception {
1187         test("hr");
1188     }
1189 
1190     /**
1191      * Test {@link org.htmlunit.html.HtmlHtml}.
1192      *
1193      * @throws Exception if the test fails
1194      */
1195     @Test
1196     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLHtmlElement]")
1197     public void html() throws Exception {
1198         test("html");
1199     }
1200 
1201     /**
1202      * Test {@link org.htmlunit.html.HtmlInlineFrame}.
1203      *
1204      * @throws Exception if the test fails
1205      */
1206     @Test
1207     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLIFrameElement]")
1208     public void iframe() throws Exception {
1209         test("iframe");
1210     }
1211 
1212     /**
1213      * Test {@link org.htmlunit.html.HtmlInlineQuotation}.
1214      *
1215      * @throws Exception if the test fails
1216      */
1217     @Test
1218     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLQuoteElement]")
1219     public void q() throws Exception {
1220         test("q");
1221     }
1222 
1223     /**
1224      * Test {@link org.htmlunit.html.HtmlImage}.
1225      *
1226      * @throws Exception if the test fails
1227      */
1228     @Test
1229     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLImageElement]")
1230     public void img() throws Exception {
1231         test("img");
1232     }
1233 
1234     /**
1235      * Test {@link org.htmlunit.html.HtmlImage}.
1236      *
1237      * @throws Exception if the test fails
1238      */
1239     @Test
1240     @Alerts(DEFAULT = "Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]",
1241             FF = "Symbol(Symbol.toStringTag) [C] [HTMLElement]",
1242             FF_ESR = "Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1243     public void image() throws Exception {
1244         test("image");
1245     }
1246 
1247     /**
1248      * Test {@link org.htmlunit.html.HtmlInsertedText}.
1249      *
1250      * @throws Exception if the test fails
1251      */
1252     @Test
1253     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLModElement]")
1254     public void ins() throws Exception {
1255         test("ins");
1256     }
1257 
1258     /**
1259      * Test {@link org.htmlunit.html.HtmlIsIndex}.
1260      *
1261      * @throws Exception if the test fails
1262      */
1263     @Test
1264     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
1265     public void isindex() throws Exception {
1266         test("isindex");
1267     }
1268 
1269     /**
1270      * Test {@link org.htmlunit.html.HtmlItalic}.
1271      *
1272      * @throws Exception if the test fails
1273      */
1274     @Test
1275     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1276     public void i() throws Exception {
1277         test("i");
1278     }
1279 
1280     /**
1281      * Test {@link org.htmlunit.html.HtmlKeyboard}.
1282      *
1283      * @throws Exception if the test fails
1284      */
1285     @Test
1286     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1287     public void kbd() throws Exception {
1288         test("kbd");
1289     }
1290 
1291     /**
1292      * @throws Exception if the test fails
1293      */
1294     @Test
1295     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
1296     public void keygen() throws Exception {
1297         test("keygen");
1298     }
1299 
1300     /**
1301      * Test {@link org.htmlunit.html.HtmlLabel}.
1302      *
1303      * @throws Exception if the test fails
1304      */
1305     @Test
1306     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLLabelElement]")
1307     public void label() throws Exception {
1308         test("label");
1309     }
1310 
1311     /**
1312      * Test {@link org.htmlunit.html.HtmlLayer}.
1313      *
1314      * @throws Exception if the test fails
1315      */
1316     @Test
1317     @Alerts(DEFAULT = "Symbol(Symbol.toStringTag) [C] [HTMLElement]",
1318             FF = "Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]",
1319             FF_ESR = "Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
1320     public void layer() throws Exception {
1321         test("layer");
1322     }
1323 
1324     /**
1325      * Test {@link org.htmlunit.html.HtmlLegend}.
1326      *
1327      * @throws Exception if the test fails
1328      */
1329     @Test
1330     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLLegendElement]")
1331     public void legend() throws Exception {
1332         test("legend");
1333     }
1334 
1335     /**
1336      * Test {@link org.htmlunit.html.HtmlListing}.
1337      *
1338      * @throws Exception if the test fails
1339      */
1340     @Test
1341     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLPreElement]")
1342     public void listing() throws Exception {
1343         test("listing");
1344     }
1345 
1346     /**
1347      * Test {@link org.htmlunit.html.HtmlListItem}.
1348      *
1349      * @throws Exception if the test fails
1350      */
1351     @Test
1352     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLLIElement]")
1353     public void li() throws Exception {
1354         test("li");
1355     }
1356 
1357     /**
1358      * Test {@link org.htmlunit.html.HtmlLink}.
1359      *
1360      * @throws Exception if the test fails
1361      */
1362     @Test
1363     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLLinkElement]")
1364     public void link() throws Exception {
1365         test("link");
1366     }
1367 
1368     /**
1369      * Test {@link org.htmlunit.html.HtmlMain}.
1370      *
1371      * @throws Exception if the test fails
1372      */
1373     @Test
1374     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1375     public void main() throws Exception {
1376         test("main");
1377     }
1378 
1379     /**
1380      * Test {@link org.htmlunit.html.HtmlMap}.
1381      *
1382      * @throws Exception if the test fails
1383      */
1384     @Test
1385     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLMapElement]")
1386     public void map() throws Exception {
1387         test("map");
1388     }
1389 
1390     /**
1391      * Test {@link org.htmlunit.html.HtmlMark}.
1392      *
1393      * @throws Exception if the test fails
1394      */
1395     @Test
1396     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1397     public void mark() throws Exception {
1398         test("mark");
1399     }
1400 
1401     /**
1402      * Test {@link org.htmlunit.html.HtmlMarquee}.
1403      *
1404      * @throws Exception if the test fails
1405      */
1406     @Test
1407     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLMarqueeElement]")
1408     public void marquee() throws Exception {
1409         test("marquee");
1410     }
1411 
1412     /**
1413      * Test {@link org.htmlunit.html.HtmlMenu}.
1414      *
1415      * @throws Exception if the test fails
1416      */
1417     @Test
1418     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLMenuElement]")
1419     public void menu() throws Exception {
1420         test("menu");
1421     }
1422 
1423     /**
1424      * Test {@link org.htmlunit.html.HtmlMenuItem}.
1425      *
1426      * @throws Exception if the test fails
1427      */
1428     @Test
1429     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
1430     public void menuitem() throws Exception {
1431         test("menuitem");
1432     }
1433 
1434     /**
1435      * Test {@link org.htmlunit.html.HtmlMeta}.
1436      *
1437      * @throws Exception if the test fails
1438      */
1439     @Test
1440     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLMetaElement]")
1441     public void meta() throws Exception {
1442         test("meta");
1443     }
1444 
1445     /**
1446      * Test {@link org.htmlunit.html.HtmlMeter}.
1447      *
1448      * @throws Exception if the test fails
1449      */
1450     @Test
1451     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLMeterElement]")
1452     public void meter() throws Exception {
1453         test("meter");
1454     }
1455 
1456     /**
1457      * Test {@link org.htmlunit.html.HtmlMultiColumn}.
1458      *
1459      * @throws Exception if the test fails
1460      */
1461     @Test
1462     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
1463     public void multicol() throws Exception {
1464         test("multicol");
1465     }
1466 
1467     /**
1468      * Test {@link org.htmlunit.html.HtmlNav}.
1469      *
1470      * @throws Exception if the test fails
1471      */
1472     @Test
1473     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1474     public void nav() throws Exception {
1475         test("nav");
1476     }
1477 
1478     /**
1479      * Test {@link org.htmlunit.html.HtmlNextId}.
1480      *
1481      * @throws Exception if the test fails
1482      */
1483     @Test
1484     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
1485     public void nextid() throws Exception {
1486         test("nextid");
1487     }
1488 
1489     /**
1490      * Test {@link org.htmlunit.html.HtmlNoBreak}.
1491      *
1492      * @throws Exception if the test fails
1493      */
1494     @Test
1495     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1496     public void nobr() throws Exception {
1497         test("nobr");
1498     }
1499 
1500     /**
1501      * Test {@link org.htmlunit.html.HtmlNoEmbed}.
1502      *
1503      * @throws Exception if the test fails
1504      */
1505     @Test
1506     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1507     public void noembed() throws Exception {
1508         test("noembed");
1509     }
1510 
1511     /**
1512      * Test {@link org.htmlunit.html.HtmlNoFrames}.
1513      *
1514      * @throws Exception if the test fails
1515      */
1516     @Test
1517     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1518     public void noframes() throws Exception {
1519         test("noframes");
1520     }
1521 
1522     /**
1523      * Test {@link org.htmlunit.html.HtmlNoLayer}.
1524      *
1525      * @throws Exception if the test fails
1526      */
1527     @Test
1528     @Alerts(DEFAULT = "Symbol(Symbol.toStringTag) [C] [HTMLElement]",
1529             FF = "Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]",
1530             FF_ESR = "Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
1531     public void nolayer() throws Exception {
1532         test("nolayer");
1533     }
1534 
1535     /**
1536      * Test {@link org.htmlunit.html.HtmlNoScript}.
1537      *
1538      * @throws Exception if the test fails
1539      */
1540     @Test
1541     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1542     public void noscript() throws Exception {
1543         test("noscript");
1544     }
1545 
1546     /**
1547      * Test {@link org.htmlunit.html.HtmlObject}.
1548      *
1549      * @throws Exception if the test fails
1550      */
1551     @Test
1552     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLObjectElement]")
1553     public void object() throws Exception {
1554         test("object");
1555     }
1556 
1557     /**
1558      * Test {@link org.htmlunit.html.HtmlOrderedList}.
1559      *
1560      * @throws Exception if the test fails
1561      */
1562     @Test
1563     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLOListElement]")
1564     public void ol() throws Exception {
1565         test("ol");
1566     }
1567 
1568     /**
1569      * Test {@link org.htmlunit.html.HtmlOptionGroup}.
1570      *
1571      * @throws Exception if the test fails
1572      */
1573     @Test
1574     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLOptGroupElement]")
1575     public void optgroup() throws Exception {
1576         test("optgroup");
1577     }
1578 
1579     /**
1580      * Test {@link org.htmlunit.html.HtmlOption}.
1581      *
1582      * @throws Exception if the test fails
1583      */
1584     @Test
1585     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLOptionElement]")
1586     public void option() throws Exception {
1587         test("option");
1588     }
1589 
1590     /**
1591      * Test {@link org.htmlunit.html.HtmlOutput}.
1592      *
1593      * @throws Exception if the test fails
1594      */
1595     @Test
1596     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLOutputElement]")
1597     public void output() throws Exception {
1598         test("output");
1599     }
1600 
1601     /**
1602      * Test {@link org.htmlunit.html.HtmlParagraph}.
1603      *
1604      * @throws Exception if the test fails
1605      */
1606     @Test
1607     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLParagraphElement]")
1608     public void p() throws Exception {
1609         test("p");
1610     }
1611 
1612     /**
1613      * Test {@link org.htmlunit.html.HtmlParameter}.
1614      *
1615      * @throws Exception if the test fails
1616      */
1617     @Test
1618     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLParamElement]")
1619     public void param() throws Exception {
1620         test("param");
1621     }
1622 
1623     /**
1624      * Test {@link Performance}.
1625      *
1626      * @throws Exception if the test fails
1627      */
1628     @Test
1629     @Alerts("Symbol(Symbol.toStringTag) [C] [Performance]")
1630     public void performance() throws Exception {
1631         testString("", "performance");
1632     }
1633 
1634     /**
1635      * Test {@link org.htmlunit.html.HtmlPlainText}.
1636      *
1637      * @throws Exception if the test fails
1638      */
1639     @Test
1640     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1641     public void plaintext() throws Exception {
1642         test("plaintext");
1643     }
1644 
1645     /**
1646      * Test {@link org.htmlunit.html.HtmlPreformattedText}.
1647      *
1648      * @throws Exception if the test fails
1649      */
1650     @Test
1651     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLPreElement]")
1652     public void pre() throws Exception {
1653         test("pre");
1654     }
1655 
1656     /**
1657      * Test {@link org.htmlunit.html.HtmlProgress}.
1658      *
1659      * @throws Exception if the test fails
1660      */
1661     @Test
1662     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLProgressElement]")
1663     public void progress() throws Exception {
1664         test("progress");
1665     }
1666 
1667     /**
1668      * Test {@link org.htmlunit.html.HtmlRb}.
1669      *
1670      * @throws Exception if the test fails
1671      */
1672     @Test
1673     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1674     public void rb() throws Exception {
1675         test("rb");
1676     }
1677 
1678     /**
1679      * Test HtmlRbc.
1680      *
1681      * @throws Exception if the test fails
1682      */
1683     @Test
1684     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
1685     public void rbc() throws Exception {
1686         test("rbc");
1687     }
1688 
1689     /**
1690      * Test {@link org.htmlunit.html.HtmlRp}.
1691      *
1692      * @throws Exception if the test fails
1693      */
1694     @Test
1695     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1696     public void rp() throws Exception {
1697         test("rp");
1698     }
1699 
1700     /**
1701      * Test {@link org.htmlunit.html.HtmlRt}.
1702      *
1703      * @throws Exception if the test fails
1704      */
1705     @Test
1706     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1707     public void rt() throws Exception {
1708         test("rt");
1709     }
1710 
1711     /**
1712      * Test {@link org.htmlunit.html.HtmlRtc}.
1713      *
1714      * @throws Exception if the test fails
1715      */
1716     @Test
1717     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1718     public void rtc() throws Exception {
1719         test("rtc");
1720     }
1721 
1722     /**
1723      * Test {@link org.htmlunit.html.HtmlRuby}.
1724      *
1725      * @throws Exception if the test fails
1726      */
1727     @Test
1728     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1729     public void ruby() throws Exception {
1730         test("ruby");
1731     }
1732 
1733     /**
1734      * Test {@link org.htmlunit.html.HtmlS}.
1735      *
1736      * @throws Exception if the test fails
1737      */
1738     @Test
1739     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1740     public void s() throws Exception {
1741         test("s");
1742     }
1743 
1744     /**
1745      * Test {@link org.htmlunit.html.HtmlSample}.
1746      *
1747      * @throws Exception if the test fails
1748      */
1749     @Test
1750     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1751     public void samp() throws Exception {
1752         test("samp");
1753     }
1754 
1755     /**
1756      * Test {@link org.htmlunit.html.HtmlScript}.
1757      *
1758      * @throws Exception if the test fails
1759      */
1760     @Test
1761     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLScriptElement]")
1762     public void script() throws Exception {
1763         test("script");
1764     }
1765 
1766     /**
1767      * Test {@link org.htmlunit.html.HtmlSection}.
1768      *
1769      * @throws Exception if the test fails
1770      */
1771     @Test
1772     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1773     public void section() throws Exception {
1774         test("section");
1775     }
1776 
1777     /**
1778      * Test {@link org.htmlunit.html.HtmlSelect}.
1779      *
1780      * @throws Exception if the test fails
1781      */
1782     @Test
1783     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [HTMLSelectElement]")
1784     public void select() throws Exception {
1785         test("select");
1786     }
1787 
1788     /**
1789      * Test {@link org.htmlunit.html.HtmlSelect}.
1790      *
1791      * @throws Exception if the test fails
1792      */
1793     @Test
1794     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [HTMLOptionsCollection]")
1795     public void optionsCollection() throws Exception {
1796         testString("var sel = document.createElement('select')", "sel.options");
1797     }
1798 
1799     /**
1800      * Test {@link org.htmlunit.html.HtmlSmall}.
1801      *
1802      * @throws Exception if the test fails
1803      */
1804     @Test
1805     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1806     public void small() throws Exception {
1807         test("small");
1808     }
1809 
1810     /**
1811      * Test {@link org.htmlunit.html.HtmlSource}.
1812      *
1813      * @throws Exception if the test fails
1814      */
1815     @Test
1816     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLSourceElement]")
1817     public void source() throws Exception {
1818         test("source");
1819     }
1820 
1821     /**
1822      * Test {@link org.htmlunit.html.HtmlSpan}.
1823      *
1824      * @throws Exception if the test fails
1825      */
1826     @Test
1827     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLSpanElement]")
1828     public void span() throws Exception {
1829         test("span");
1830     }
1831 
1832     /**
1833      * Test {@link org.htmlunit.html.HtmlStrike}.
1834      *
1835      * @throws Exception if the test fails
1836      */
1837     @Test
1838     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1839     public void strike() throws Exception {
1840         test("strike");
1841     }
1842 
1843     /**
1844      * Test {@link org.htmlunit.html.HtmlStrong}.
1845      *
1846      * @throws Exception if the test fails
1847      */
1848     @Test
1849     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1850     public void strong() throws Exception {
1851         test("strong");
1852     }
1853 
1854     /**
1855      * Test {@link org.htmlunit.html.HtmlStyle}.
1856      *
1857      * @throws Exception if the test fails
1858      */
1859     @Test
1860     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLStyleElement]")
1861     public void style() throws Exception {
1862         test("style");
1863     }
1864 
1865     /**
1866      * Test {@link org.htmlunit.html.HtmlSubscript}.
1867      *
1868      * @throws Exception if the test fails
1869      */
1870     @Test
1871     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1872     public void sub() throws Exception {
1873         test("sub");
1874     }
1875 
1876     /**
1877      * Test {@link org.htmlunit.html.HtmlSummary}.
1878      *
1879      * @throws Exception if the test fails
1880      */
1881     @Test
1882     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1883     public void summary() throws Exception {
1884         test("summary");
1885     }
1886 
1887     /**
1888      * Test {@link org.htmlunit.html.HtmlSuperscript}.
1889      *
1890      * @throws Exception if the test fails
1891      */
1892     @Test
1893     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
1894     public void sup() throws Exception {
1895         test("sup");
1896     }
1897 
1898     /**
1899      * Test {@link org.htmlunit.html.HtmlSvg}.
1900      *
1901      * @throws Exception if the test fails
1902      */
1903     @Test
1904     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
1905     public void svg() throws Exception {
1906         test("svg");
1907     }
1908 
1909     /**
1910      * Test {@link org.htmlunit.html.HtmlTable}.
1911      *
1912      * @throws Exception if the test fails
1913      */
1914     @Test
1915     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTableElement]")
1916     public void table() throws Exception {
1917         test("table");
1918     }
1919 
1920     /**
1921      * Test {@link org.htmlunit.html.HtmlTableColumn}.
1922      *
1923      * @throws Exception if the test fails
1924      */
1925     @Test
1926     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTableColElement]")
1927     public void col() throws Exception {
1928         test("col");
1929     }
1930 
1931     /**
1932      * Test {@link org.htmlunit.html.HtmlTableColumnGroup}.
1933      *
1934      * @throws Exception if the test fails
1935      */
1936     @Test
1937     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTableColElement]")
1938     public void colgroup() throws Exception {
1939         test("colgroup");
1940     }
1941 
1942     /**
1943      * Test {@link org.htmlunit.html.HtmlTableBody}.
1944      *
1945      * @throws Exception if the test fails
1946      */
1947     @Test
1948     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTableSectionElement]")
1949     public void tbody() throws Exception {
1950         test("tbody");
1951     }
1952 
1953     /**
1954      * Test {@link org.htmlunit.html.HtmlTableDataCell}.
1955      *
1956      * @throws Exception if the test fails
1957      */
1958     @Test
1959     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTableCellElement]")
1960     public void td() throws Exception {
1961         test("td");
1962     }
1963 
1964     /**
1965      * Test {@link org.htmlunit.html.HtmlTableHeaderCell}.
1966      *
1967      * @throws Exception if the test fails
1968      */
1969     @Test
1970     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTableCellElement]")
1971     public void th() throws Exception {
1972         test("th");
1973     }
1974 
1975     /**
1976      * Test {@link org.htmlunit.html.HtmlTableRow}.
1977      *
1978      * @throws Exception if the test fails
1979      */
1980     @Test
1981     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTableRowElement]")
1982     public void tr() throws Exception {
1983         test("tr");
1984     }
1985 
1986     /**
1987      * Test {@link org.htmlunit.html.HtmlTextArea}.
1988      *
1989      * @throws Exception if the test fails
1990      */
1991     @Test
1992     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTextAreaElement]")
1993     public void textarea() throws Exception {
1994         test("textarea");
1995     }
1996 
1997     /**
1998      * Test {@link org.htmlunit.html.HtmlTableFooter}.
1999      *
2000      * @throws Exception if the test fails
2001      */
2002     @Test
2003     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTableSectionElement]")
2004     public void tfoot() throws Exception {
2005         test("tfoot");
2006     }
2007 
2008     /**
2009      * Test {@link org.htmlunit.html.HtmlTableHeader}.
2010      *
2011      * @throws Exception if the test fails
2012      */
2013     @Test
2014     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTableSectionElement]")
2015     public void thead() throws Exception {
2016         test("thead");
2017     }
2018 
2019     /**
2020      * Test {@link org.htmlunit.html.HtmlTeletype}.
2021      *
2022      * @throws Exception if the test fails
2023      */
2024     @Test
2025     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
2026     public void tt() throws Exception {
2027         test("tt");
2028     }
2029 
2030     /**
2031      * Test {@link org.htmlunit.html.HtmlTime}.
2032      *
2033      * @throws Exception if the test fails
2034      */
2035     @Test
2036     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTimeElement]")
2037     public void time() throws Exception {
2038         test("time");
2039     }
2040 
2041     /**
2042      * Test {@link org.htmlunit.html.HtmlTitle}.
2043      *
2044      * @throws Exception if the test fails
2045      */
2046     @Test
2047     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTitleElement]")
2048     public void title() throws Exception {
2049         test("title");
2050     }
2051 
2052     /**
2053      * Test {@link org.htmlunit.html.HtmlTrack}.
2054      *
2055      * @throws Exception if the test fails
2056      */
2057     @Test
2058     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTrackElement]")
2059     public void track() throws Exception {
2060         test("track");
2061     }
2062 
2063     /**
2064      * Test {@link org.htmlunit.html.HtmlUnderlined}.
2065      *
2066      * @throws Exception if the test fails
2067      */
2068     @Test
2069     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
2070     public void u() throws Exception {
2071         test("u");
2072     }
2073 
2074     /**
2075      * Test {@link org.htmlunit.html.HtmlUnorderedList}.
2076      *
2077      * @throws Exception if the test fails
2078      */
2079     @Test
2080     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUListElement]")
2081     public void ul() throws Exception {
2082         test("ul");
2083     }
2084 
2085     /**
2086      * Test {@link org.htmlunit.html.HtmlVariable}.
2087      *
2088      * @throws Exception if the test fails
2089      */
2090     @Test
2091     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
2092     public void var() throws Exception {
2093         test("var");
2094     }
2095 
2096     /**
2097      * Test {@link org.htmlunit.html.HtmlVideo}.
2098      *
2099      * @throws Exception if the test fails
2100      */
2101     @Test
2102     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLVideoElement]")
2103     public void video() throws Exception {
2104         test("video");
2105     }
2106 
2107     /**
2108      * Test {@link org.htmlunit.html.HtmlWordBreak}.
2109      *
2110      * @throws Exception if the test fails
2111      */
2112     @Test
2113     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLElement]")
2114     public void wbr() throws Exception {
2115         test("wbr");
2116     }
2117 
2118     /**
2119      * Test {@link org.htmlunit.html.HtmlExample}.
2120      *
2121      * @throws Exception if the test fails
2122      */
2123     @Test
2124     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLPreElement]")
2125     public void xmp() throws Exception {
2126         test("xmp");
2127     }
2128 
2129     /**
2130      * Test {@link org.htmlunit.html.HtmlInput}.
2131      *
2132      * @throws Exception if the test fails
2133      */
2134     @Test
2135     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLInputElement]")
2136     public void input() throws Exception {
2137         test("input");
2138     }
2139 
2140     /**
2141      * Test {@link org.htmlunit.html.HtmlData}.
2142      *
2143      * @throws Exception if the test fails
2144      */
2145     @Test
2146     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLDataElement]")
2147     public void data() throws Exception {
2148         test("data");
2149     }
2150 
2151     /**
2152      * Test HtmlContent.
2153      *
2154      * @throws Exception if the test fails
2155      */
2156     @Test
2157     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLUnknownElement]")
2158     public void content() throws Exception {
2159         test("content");
2160     }
2161 
2162     /**
2163      * Test {@link org.htmlunit.html.HtmlPicture}.
2164      *
2165      * @throws Exception if the test fails
2166      */
2167     @Test
2168     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLPictureElement]")
2169     public void picutre() throws Exception {
2170         test("picture");
2171     }
2172 
2173     /**
2174      * Test {@link org.htmlunit.html.HtmlTemplate}.
2175      *
2176      * @throws Exception if the test fails
2177      */
2178     @Test
2179     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLTemplateElement]")
2180     public void template() throws Exception {
2181         test("template");
2182     }
2183 
2184     /**
2185      * Test {@link org.htmlunit.javascript.host.event.KeyboardEvent}.
2186      *
2187      * @throws Exception if the test fails
2188      */
2189     @Test
2190     @Alerts("Symbol(Symbol.toStringTag) [C] [KeyboardEvent]")
2191     public void keyboardEvent() throws Exception {
2192         testString("", "document.createEvent('KeyboardEvent')");
2193     }
2194 
2195     /**
2196      * Test {@link org.htmlunit.javascript.host.event.UIEvent}.
2197      *
2198      * @throws Exception if the test fails
2199      */
2200     @Test
2201     @Alerts("Symbol(Symbol.toStringTag) [C] [Event]")
2202     public void event2() throws Exception {
2203         testString("", "document.createEvent('Event')");
2204     }
2205 
2206     /**
2207      * Test {@link org.htmlunit.javascript.host.event.UIEvent}.
2208      *
2209      * @throws Exception if the test fails
2210      */
2211     @Test
2212     @Alerts("Symbol(Symbol.toStringTag) [C] [UIEvent]")
2213     public void uiEvent() throws Exception {
2214         testString("", "document.createEvent('UIEvent')");
2215     }
2216 
2217     /**
2218      * Test {@link org.htmlunit.javascript.host.URL}.
2219      *
2220      * @throws Exception if the test fails
2221      */
2222     @Test
2223     @Alerts("Symbol(Symbol.toStringTag) [C] [URL]")
2224     public void url() throws Exception {
2225         testString("", "new URL('http://developer.mozilla.org')");
2226     }
2227 
2228     /**
2229      * Test {@link org.htmlunit.javascript.host.URL}.
2230      *
2231      * @throws Exception if the test fails
2232      */
2233     @Test
2234     @Alerts("Symbol(Symbol.toStringTag) [C] [URL]")
2235     public void webkitURL() throws Exception {
2236         testString("", "new webkitURL('http://developer.mozilla.org')");
2237     }
2238 
2239     /**
2240      * Test {@link org.htmlunit.javascript.host.event.DragEvent}.
2241      *
2242      * @throws Exception if the test fails
2243      */
2244     @Test
2245     @Alerts("Symbol(Symbol.toStringTag) [C] [DragEvent]")
2246     public void dragEvent() throws Exception {
2247         testString("", "document.createEvent('DragEvent')");
2248     }
2249 
2250     /**
2251      * Test {@link org.htmlunit.javascript.host.event.PointerEvent}.
2252      *
2253      * @throws Exception if the test fails
2254      */
2255     @Test
2256     @Alerts("Symbol(Symbol.toStringTag) [C] [PointerEvent]")
2257     public void pointerEvent() throws Exception {
2258         testString("", "new PointerEvent('click')");
2259     }
2260 
2261     /**
2262      * Test {@link org.htmlunit.javascript.host.event.PointerEvent}.
2263      *
2264      * @throws Exception if the test fails
2265      */
2266     @Test
2267     @Alerts("NotSupportedError/DOMException")
2268     public void pointerEvent2() throws Exception {
2269         testString("", " document.createEvent('PointerEvent')");
2270     }
2271 
2272     /**
2273      * Test {@link org.htmlunit.javascript.host.event.WheelEvent}.
2274      *
2275      * @throws Exception if the test fails
2276      */
2277     @Test
2278     @Alerts(DEFAULT = "Symbol(Symbol.toStringTag) [C] [WheelEvent]",
2279             FF = "NotSupportedError/DOMException",
2280             FF_ESR = "NotSupportedError/DOMException")
2281     public void wheelEvent() throws Exception {
2282         testString("", "document.createEvent('WheelEvent')");
2283     }
2284 
2285     /**
2286      * Test {@link org.htmlunit.javascript.host.event.MouseEvent}.
2287      *
2288      * @throws Exception if the test fails
2289      */
2290     @Test
2291     @Alerts("Symbol(Symbol.toStringTag) [C] [MouseEvent]")
2292     public void mouseEvent() throws Exception {
2293         testString("", "document.createEvent('MouseEvent')");
2294     }
2295 
2296 
2297 
2298     /**
2299      * Test {@link org.htmlunit.javascript.host.event.CompositionEvent}.
2300      *
2301      * @throws Exception if the test fails
2302      */
2303     @Test
2304     @Alerts("Symbol(Symbol.toStringTag) [C] [CompositionEvent]")
2305     public void compositionEvent() throws Exception {
2306         testString("", "document.createEvent('CompositionEvent')");
2307     }
2308 
2309     /**
2310      * Test {@link org.htmlunit.javascript.host.event.FocusEvent}.
2311      *
2312      * @throws Exception if the test fails
2313      */
2314     @Test
2315     @Alerts("Symbol(Symbol.toStringTag) [C] [FocusEvent]")
2316     public void focusEvent() throws Exception {
2317         testString("", "document.createEvent('FocusEvent')");
2318     }
2319 
2320     /**
2321      * Test {@link org.htmlunit.javascript.host.event.InputEvent}.
2322      *
2323      * @throws Exception if the test fails
2324      */
2325     @Test
2326     @Alerts("Symbol(Symbol.toStringTag) [C] [InputEvent]")
2327     public void inputEvent() throws Exception {
2328         testString("", "new InputEvent('input')");
2329     }
2330 
2331     /**
2332      * Test {@link org.htmlunit.javascript.host.event.MouseWheelEvent}.
2333      *
2334      * @throws Exception if the test fails
2335      */
2336     @Test
2337     @Alerts("NotSupportedError/DOMException")
2338     public void mouseWheelEvent() throws Exception {
2339         testString("", "document.createEvent('MouseWheelEvent')");
2340     }
2341 
2342     /**
2343      * Test {@link org.htmlunit.javascript.host.event.SVGZoomEvent}.
2344      *
2345      * @throws Exception if the test fails
2346      */
2347     @Test
2348     @Alerts("NotSupportedError/DOMException")
2349     public void svgZoomEvent() throws Exception {
2350         testString("", "document.createEvent('SVGZoomEvent')");
2351     }
2352 
2353     /**
2354      * Test {@link org.htmlunit.javascript.host.event.TextEvent}.
2355      *
2356      * @throws Exception if the test fails
2357      */
2358     @Test
2359     @Alerts("Symbol(Symbol.toStringTag) [C] [TextEvent]")
2360     public void textEvent() throws Exception {
2361         testString("", "document.createEvent('TextEvent')");
2362     }
2363 
2364     /**
2365      * Test {@link org.htmlunit.javascript.host.event.TouchEvent}.
2366      *
2367      * @throws Exception if the test fails
2368      */
2369     @Test
2370     @Alerts(DEFAULT = "Symbol(Symbol.toStringTag) [C] [TouchEvent]",
2371             FF = "ReferenceError",
2372             FF_ESR = "ReferenceError")
2373     public void touchEvent2() throws Exception {
2374         testString("", "new TouchEvent('touch')");
2375     }
2376 
2377     /**
2378      * Test {@link org.htmlunit.html.HtmlSlot}.
2379      *
2380      * @throws Exception if the test fails
2381      */
2382     @Test
2383     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLSlotElement]")
2384     public void slot() throws Exception {
2385         test("slot");
2386     }
2387 
2388     /**
2389      * Test {@link org.htmlunit.javascript.host.html.HTMLDocument}.
2390      *
2391      * @throws Exception if the test fails
2392      */
2393     @Test
2394     @Alerts(DEFAULT = "Symbol(Symbol.toStringTag) [C] [Document],"
2395                 + "Symbol(Symbol.unscopables) [C] [{\"append\":true,\"fullscreen\":true,"
2396                     + "\"prepend\":true,\"replaceChildren\":true}]",
2397             FF = "Symbol(Symbol.toStringTag) [C] [Document],"
2398                     + "Symbol(Symbol.unscopables) [C] [{\"fullscreen\":true,\"prepend\":true,"
2399                     + "\"append\":true,\"replaceChildren\":true}]",
2400             FF_ESR = "Symbol(Symbol.toStringTag) [C] [Document],"
2401                     + "Symbol(Symbol.unscopables) [C] [{\"fullscreen\":true,\"prepend\":true,"
2402                     + "\"append\":true,\"replaceChildren\":true}]")
2403     @HtmlUnitNYI(CHROME = "TypeError",
2404             EDGE = "TypeError",
2405             FF = "TypeError",
2406             FF_ESR = "TypeError")
2407     public void document() throws Exception {
2408         testString("", "new Document()");
2409     }
2410 
2411     /**
2412      * Test {@link org.htmlunit.javascript.host.html.HTMLDocument}.
2413      *
2414      * @throws Exception if the test fails
2415      */
2416     @Test
2417     @Alerts("Symbol(Symbol.toStringTag) [C] [HTMLDocument]")
2418     public void htmlDocument() throws Exception {
2419         testString("", "document");
2420     }
2421 
2422     /**
2423      * Test {@link org.htmlunit.javascript.host.dom.Document}.
2424      *
2425      * @throws Exception if the test fails
2426      */
2427     @Test
2428     @Alerts("Symbol(Symbol.toStringTag) [C] [XMLDocument]")
2429     public void xmlDocument() throws Exception {
2430         testString("", "xmlDocument");
2431     }
2432 
2433     /**
2434      * @throws Exception if the test fails
2435      */
2436     @Test
2437     @Alerts("Symbol(Symbol.toStringTag) [C] [SVGElement]")
2438     public void svgElement() throws Exception {
2439         testString("", "svg");
2440     }
2441 
2442     /**
2443      * @throws Exception if the test fails
2444      */
2445     @Test
2446     @Alerts("Symbol(Symbol.toStringTag) [C] [Attr]")
2447     public void nodeAndAttr() throws Exception {
2448         testString("", "document.createAttribute('some_attrib')");
2449     }
2450 
2451     /**
2452      * @throws Exception if the test fails
2453      */
2454     @Test
2455     @Alerts("Symbol(Symbol.toStringTag) [C] [Range]")
2456     public void range() throws Exception {
2457         testString("", "document.createRange()");
2458     }
2459 
2460     /**
2461      * @throws Exception if the test fails
2462      */
2463     @Test
2464     @Alerts(DEFAULT = "Symbol(Symbol.toStringTag) [C] [DocumentFragment],"
2465                 + "Symbol(Symbol.unscopables) [C] [{\"append\":true,\"prepend\":true,\"replaceChildren\":true}]",
2466             FF = "Symbol(Symbol.toStringTag) [C] [DocumentFragment],"
2467                 + "Symbol(Symbol.unscopables) [C] [{\"prepend\":true,\"append\":true,\"replaceChildren\":true}]",
2468             FF_ESR = "Symbol(Symbol.toStringTag) [C] [DocumentFragment],"
2469                 + "Symbol(Symbol.unscopables) [C] [{\"prepend\":true,\"append\":true,\"replaceChildren\":true}]")
2470     @HtmlUnitNYI(CHROME = "Symbol(Symbol.toStringTag) [C] [DocumentFragment]",
2471             EDGE = "Symbol(Symbol.toStringTag) [C] [DocumentFragment]",
2472             FF = "Symbol(Symbol.toStringTag) [C] [DocumentFragment]",
2473             FF_ESR = "Symbol(Symbol.toStringTag) [C] [DocumentFragment]")
2474     public void documentFragment() throws Exception {
2475         testString("", "document.createDocumentFragment()");
2476     }
2477 
2478     /**
2479      * @throws Exception if the test fails
2480      */
2481     @Test
2482     @Alerts("Symbol(Symbol.toStringTag) [C] [AudioContext]")
2483     public void audioContext() throws Exception {
2484         testString("", "new AudioContext()");
2485     }
2486 
2487     /**
2488      * @throws Exception if the test fails
2489      */
2490     @Test
2491     @Alerts("Symbol(Symbol.toStringTag) [C] [OfflineAudioContext]")
2492     public void offlineAudioContext() throws Exception {
2493         testString("", "new OfflineAudioContext({length: 44100 * 1, sampleRate: 44100})");
2494     }
2495 
2496     /**
2497      * @throws Exception if the test fails
2498      */
2499     @Test
2500     @Alerts("Symbol(Symbol.toStringTag) [C] [AudioParam]")
2501     public void audioParam() throws Exception {
2502         testString("var audioCtx = new AudioContext(); var gainNode = new GainNode(audioCtx);", "gainNode.gain");
2503     }
2504 
2505     /**
2506      * @throws Exception if the test fails
2507      */
2508     @Test
2509     @Alerts("Symbol(Symbol.toStringTag) [C] [GainNode]")
2510     public void gainNode() throws Exception {
2511         testString("var audioCtx = new AudioContext();", "new GainNode(audioCtx)");
2512     }
2513 
2514     /**
2515      * @throws Exception if the test fails
2516      */
2517     @Test
2518     @Alerts("Symbol(Symbol.toStringTag) [C] [BeforeUnloadEvent]")
2519     public void beforeUnloadEvent() throws Exception {
2520         testString("", "document.createEvent('BeforeUnloadEvent')");
2521     }
2522 
2523     /**
2524      * @throws Exception if the test fails
2525      */
2526     @Test
2527     @Alerts("Symbol(Symbol.toStringTag) [C] [CloseEvent]")
2528     public void closeEvent() throws Exception {
2529         testString("", "new CloseEvent('type-close')");
2530     }
2531 
2532     /**
2533      * @throws Exception if the test fails
2534      */
2535     @Test
2536     @Alerts("Symbol(Symbol.toStringTag) [C] [BlobEvent]")
2537     public void blobEvent() throws Exception {
2538         testString("var debug = {hello: 'world'};"
2539                     + "var blob = new Blob([JSON.stringify(debug, null, 2)], {type : 'application/json'});",
2540                     "new BlobEvent('blob', { 'data': blob })");
2541     }
2542 
2543     /**
2544      * Test {@link org.htmlunit.javascript.host.event.TouchEvent}.
2545      *
2546      * @throws Exception if the test fails
2547      */
2548     @Test
2549     @Alerts(DEFAULT = "Symbol(Symbol.toStringTag) [C] [TouchEvent]",
2550             FF = "ReferenceError",
2551             FF_ESR = "ReferenceError")
2552     public void touchEvent() throws Exception {
2553         testString("", "new TouchEvent('touch')");
2554     }
2555 
2556     /**
2557      * Test {@link org.htmlunit.javascript.host.event.DeviceMotionEvent}.
2558      *
2559      * @throws Exception if the test fails
2560      */
2561     @Test
2562     @Alerts("Symbol(Symbol.toStringTag) [C] [DeviceMotionEvent]")
2563     public void deviceMotionEvent() throws Exception {
2564         testString("", "new DeviceMotionEvent('motion')");
2565     }
2566 
2567     /**
2568      * Test {@link org.htmlunit.javascript.host.event.ErrorEvent}.
2569      *
2570      * @throws Exception if the test fails
2571      */
2572     @Test
2573     @Alerts("Symbol(Symbol.toStringTag) [C] [ErrorEvent]")
2574     public void errorEvent() throws Exception {
2575         testString("", "new ErrorEvent('error')");
2576     }
2577 
2578     /**
2579      * Test {@link org.htmlunit.javascript.host.event.GamepadEvent}.
2580      *
2581      * @throws Exception if the test fails
2582      */
2583     @Test
2584     @Alerts("Symbol(Symbol.toStringTag) [C] [GamepadEvent]")
2585     public void gamepadEvent() throws Exception {
2586         testString("", "new GamepadEvent('gamepad')");
2587     }
2588 
2589     /**
2590      * Test {@link org.htmlunit.javascript.host.event.MutationEvent}.
2591      *
2592      * @throws Exception if the test fails
2593      */
2594     @Test
2595     @Alerts(DEFAULT = "NotSupportedError/DOMException",
2596             FF_ESR = "Symbol(Symbol.toStringTag) [C] [MutationEvent]")
2597     public void mutationEvent() throws Exception {
2598         testString("", "document.createEvent('MutationEvent')");
2599     }
2600 
2601     /**
2602      * Test {@link org.htmlunit.javascript.host.event.OfflineAudioCompletionEvent}.
2603      *
2604      * @throws Exception if the test fails
2605      */
2606     @Test
2607     @Alerts("NotSupportedError/DOMException")
2608     public void offlineAudioCompletionEvent() throws Exception {
2609         testString("", "document.createEvent('OfflineAudioCompletionEvent')");
2610     }
2611 
2612     /**
2613      * @throws Exception if the test fails
2614      */
2615     @Test
2616     @Alerts("Symbol(Symbol.toStringTag) [C] [PageTransitionEvent]")
2617     public void pageTransitionEvent() throws Exception {
2618         testString("", "new PageTransitionEvent('transition')");
2619     }
2620 
2621     /**
2622      * Test {@link org.htmlunit.javascript.host.media.SourceBufferList}.
2623      *
2624      * @throws Exception if the test fails
2625      */
2626     @Test
2627     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [SourceBufferList]")
2628     @HtmlUnitNYI(CHROME = "TypeError",
2629             EDGE = "TypeError",
2630             FF = "TypeError",
2631             FF_ESR = "TypeError")
2632     public void sourceBufferList() throws Exception {
2633         testString("var mediaSource = new MediaSource;", "mediaSource.sourceBuffers");
2634     }
2635 
2636     /**
2637      * Test {@link HTMLCollection}.
2638      *
2639      * @throws Exception if the test fails
2640      */
2641     @Test
2642     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [HTMLCollection]")
2643     public void htmlCollection() throws Exception {
2644         testString("", "document.getElementsByTagName('div')");
2645     }
2646 
2647     /**
2648      * Test {@link HTMLCollection}.
2649      *
2650      * @throws Exception if the test fails
2651      */
2652     @Test
2653     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [HTMLCollection]")
2654     public void htmlCollectionDocumentAnchors() throws Exception {
2655         testString("", "document.anchors");
2656     }
2657 
2658     /**
2659      * Test {@link HTMLCollection}.
2660      *
2661      * @throws Exception if the test fails
2662      */
2663     @Test
2664     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [HTMLCollection]")
2665     public void htmlCollectionDocumentApplets() throws Exception {
2666         testString("", "document.applets");
2667     }
2668 
2669     /**
2670      * Test {@link HTMLCollection}.
2671      *
2672      * @throws Exception if the test fails
2673      */
2674     @Test
2675     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [HTMLCollection]")
2676     public void htmlCollectionDocumentEmbeds() throws Exception {
2677         testString("", "document.embeds");
2678     }
2679 
2680     /**
2681      * Test {@link HTMLCollection}.
2682      *
2683      * @throws Exception if the test fails
2684      */
2685     @Test
2686     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [HTMLCollection]")
2687     public void htmlCollectionDocumentForms() throws Exception {
2688         testString("", "document.forms");
2689     }
2690 
2691     /**
2692      * Test {@link HTMLCollection}.
2693      *
2694      * @throws Exception if the test fails
2695      */
2696     @Test
2697     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [HTMLCollection]")
2698     public void htmlCollectionDocumentImages() throws Exception {
2699         testString("", "document.images");
2700     }
2701 
2702     /**
2703      * Test {@link HTMLCollection}.
2704      *
2705      * @throws Exception if the test fails
2706      */
2707     @Test
2708     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [HTMLCollection]")
2709     public void htmlCollectionDocumentLinks() throws Exception {
2710         testString("", "document.links");
2711     }
2712 
2713     /**
2714      * Test {@link HTMLCollection}.
2715      *
2716      * @throws Exception if the test fails
2717      */
2718     @Test
2719     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [HTMLCollection]")
2720     public void htmlCollectionDocumentScripts() throws Exception {
2721         testString("", "document.scripts");
2722     }
2723 
2724     /**
2725      * Test {@link NodeList}.
2726      *
2727      * @throws Exception if the test fails
2728      */
2729     @Test
2730     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [NodeList]")
2731     public void nodeListElementById() throws Exception {
2732         testString("", "document.getElementById('myLog').childNodes");
2733     }
2734 
2735     /**
2736      * Test {@link NodeList}.
2737      *
2738      * @throws Exception if the test fails
2739      */
2740     @Test
2741     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [NodeList]")
2742     public void nodeListElementsByName() throws Exception {
2743         testString("", "document.getElementsByName('myLog')");
2744     }
2745 
2746     /**
2747      * Test {@link NodeList}.
2748      *
2749      * @throws Exception if the test fails
2750      */
2751     @Test
2752     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [NodeList]")
2753     public void nodeListButtonLabels() throws Exception {
2754         testString("var button = document.createElement('button');", "button.labels");
2755     }
2756 
2757     /**
2758      * Test {@link ComputedCSSStyleDeclaration}.
2759      *
2760      * @throws Exception if the test fails
2761      */
2762     @Test
2763     @Alerts(DEFAULT = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [CSSStyleDeclaration]",
2764             FF = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [CSSStyleProperties]",
2765             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [CSS2Properties]")
2766     public void computedStyle() throws Exception {
2767         testString("", "window.getComputedStyle(document.body)");
2768     }
2769 
2770     /**
2771      * Test {@link ComputedCSSStyleDeclaration}.
2772      *
2773      * @throws Exception if the test fails
2774      */
2775     @Test
2776     @Alerts(DEFAULT = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [CSSStyleDeclaration]",
2777             FF = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [CSSStyleProperties]",
2778             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [CSS2Properties]")
2779     @HtmlUnitNYI(FF = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [CSSStyleDeclaration]",
2780             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [CSSStyleDeclaration]")
2781     public void cssStyleDeclaration() throws Exception {
2782         testString("", "document.body.style");
2783     }
2784 
2785     /**
2786      * Test {@link Location}.
2787      *
2788      * @throws Exception if the test fails
2789      */
2790     @Test
2791     @Alerts("Symbol(Symbol.toStringTag) [C] [Location]")
2792     public void location() throws Exception {
2793         testString("", "window.location");
2794         testString("", "document.location");
2795     }
2796 
2797     /**
2798      * Test {@link Screen}.
2799      *
2800      * @throws Exception if the test fails
2801      */
2802     @Test
2803     @Alerts("Symbol(Symbol.toStringTag) [C] [Screen]")
2804     public void screen() throws Exception {
2805         testString("", "window.screen");
2806     }
2807 
2808     /**
2809      * Test {@link Screen}.
2810      *
2811      * @throws Exception if the test fails
2812      */
2813     @Test
2814     @Alerts("Symbol(Symbol.toStringTag) [C] [ScreenOrientation]")
2815     public void screenOrientation() throws Exception {
2816         testString("", "window.screen.orientation");
2817     }
2818 
2819     /**
2820      * Test {@link Crypto}.
2821      *
2822      * @throws Exception if the test fails
2823      */
2824     @Test
2825     @Alerts("Symbol(Symbol.toStringTag) [C] [Crypto]")
2826     public void crypto() throws Exception {
2827         testString("", "window.crypto");
2828     }
2829 
2830     /**
2831      * Test {@link SubtleCrypto}.
2832      *
2833      * @throws Exception if the test fails
2834      */
2835     @Test
2836     @Alerts("Symbol(Symbol.toStringTag) [C] [SubtleCrypto]")
2837     public void cryptoSubtle() throws Exception {
2838         testString("", "window.crypto.subtle");
2839     }
2840 
2841     /**
2842      * Test {@link XPathEvaluator}.
2843      *
2844      * @throws Exception if the test fails
2845      */
2846     @Test
2847     @Alerts("Symbol(Symbol.toStringTag) [C] [XPathEvaluator]")
2848     public void xPathEvaluator() throws Exception {
2849         testString("", "new XPathEvaluator()");
2850     }
2851 
2852     /**
2853      * Test {@link XPathExpression}.
2854      *
2855      * @throws Exception if the test fails
2856      */
2857     @Test
2858     @Alerts("Symbol(Symbol.toStringTag) [C] [XPathExpression]")
2859     public void xPathExpression() throws Exception {
2860         testString("var res = new XPathEvaluator().createExpression('//span')", "res");
2861     }
2862 
2863     /**
2864      * Test {@link XPathResult}.
2865      *
2866      * @throws Exception if the test fails
2867      */
2868     @Test
2869     @Alerts("Symbol(Symbol.toStringTag) [C] [XPathResult]")
2870     public void xPathResult() throws Exception {
2871         testString("var res = document.evaluate('/html/body', document, null, XPathResult.ANY_TYPE, null);", "res");
2872     }
2873 
2874     /**
2875      * Test {@link CDATASection}.
2876      *
2877      * @throws Exception if the test fails
2878      */
2879     @Test
2880     @Alerts("Symbol(Symbol.toStringTag) [C] [CDATASection]")
2881     public void cDATASection() throws Exception {
2882         final String setup = " var doc = document.implementation.createDocument('', '', null);\n"
2883                 + "var root = doc.appendChild(doc.createElement('root'));\n"
2884                 + "var cdata = root.appendChild(doc.createCDATASection('abcdef'));\n";
2885 
2886         testString(setup, "cdata");
2887     }
2888 
2889     /**
2890      * Test {@link CDATASection}.
2891      *
2892      * @throws Exception if the test fails
2893      */
2894     @Test
2895     @Alerts(DEFAULT = "Symbol(Symbol.toStringTag) [C] [DocumentType],"
2896                 + "Symbol(Symbol.unscopables) [C] "
2897                     + "[{\"after\":true,\"before\":true,\"remove\":true,\"replaceWith\":true}]",
2898             FF = "Symbol(Symbol.toStringTag) [C] [DocumentType],"
2899                 + "Symbol(Symbol.unscopables) [C] "
2900                     + "[{\"before\":true,\"after\":true,\"replaceWith\":true,\"remove\":true}]",
2901             FF_ESR = "Symbol(Symbol.toStringTag) [C] [DocumentType],"
2902                 + "Symbol(Symbol.unscopables) [C] "
2903                     + "[{\"before\":true,\"after\":true,\"replaceWith\":true,\"remove\":true}]")
2904     @HtmlUnitNYI(CHROME = "Symbol(Symbol.toStringTag) [C] [DocumentType]",
2905             EDGE = "Symbol(Symbol.toStringTag) [C] [DocumentType]",
2906             FF = "Symbol(Symbol.toStringTag) [C] [DocumentType]",
2907             FF_ESR = "Symbol(Symbol.toStringTag) [C] [DocumentType]")
2908     public void documentType() throws Exception {
2909         testString("", "document.firstChild");
2910     }
2911 
2912     /**
2913      * Test Blob.
2914      *
2915      * @throws Exception if the test fails
2916      */
2917     @Test
2918     @Alerts("Symbol(Symbol.toStringTag) [C] [Blob]")
2919     public void blob() throws Exception {
2920         testString("", "new Blob([1, 2], { type: \"text/html\" })");
2921     }
2922 
2923     /**
2924      * Test URLSearchParams.
2925      *
2926      * @throws Exception if the test fails
2927      */
2928     @Test
2929     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [URLSearchParams]")
2930     public void urlSearchParams() throws Exception {
2931         testString("", "new URLSearchParams('q=URLUtils.searchParams&topic=api')");
2932     }
2933 
2934     /**
2935      * Test NamedNodeMap.
2936      *
2937      * @throws Exception if the test fails
2938      */
2939     @Test
2940     @Alerts("Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [NamedNodeMap]")
2941     public void namedNodeMap() throws Exception {
2942         testString("", "element.attributes");
2943     }
2944 
2945     /**
2946      * Test MutationObserver.
2947      *
2948      * @throws Exception if the test fails
2949      */
2950     @Test
2951     @Alerts("Symbol(Symbol.toStringTag) [C] [MutationObserver]")
2952     public void mutationObserver() throws Exception {
2953         testString("", "new MutationObserver(function(m) {})");
2954     }
2955 
2956     /**
2957      * Test WebKitMutationObserver.
2958      *
2959      * @throws Exception if the test fails
2960      */
2961     @Test
2962     @Alerts(DEFAULT = "Symbol(Symbol.toStringTag) [C] [MutationObserver]",
2963             FF = "ReferenceError",
2964             FF_ESR = "ReferenceError")
2965     public void webKitMutationObserver() throws Exception {
2966         testString("", "new WebKitMutationObserver(function(m) {})");
2967     }
2968 
2969     /**
2970      * Test StyleSheet.
2971      *
2972      * @throws Exception if the test fails
2973      */
2974     @Test
2975     @Alerts("Symbol(Symbol.toStringTag) [C] [CSSStyleSheet]")
2976     public void cssStyleSheet() throws Exception {
2977         testString("", "document.styleSheets[0]");
2978     }
2979 
2980     /**
2981      * Test CSSPageRule.
2982      *
2983      * @throws Exception if the test fails
2984      */
2985     @Test
2986     @Alerts("Symbol(Symbol.toStringTag) [C] [CSSPageRule]")
2987     public void cssPageRule() throws Exception {
2988         testString("", "document.styleSheets[0].cssRules[0]");
2989     }
2990 
2991     /**
2992      * Test CSSMediaRule.
2993      *
2994      * @throws Exception if the test fails
2995      */
2996     @Test
2997     @Alerts("Symbol(Symbol.toStringTag) [C] [CSSMediaRule]")
2998     public void cssMediaRule() throws Exception {
2999         testString("", "document.styleSheets[1].cssRules[0]");
3000     }
3001 
3002     /**
3003      * Test CSSFontFaceRule.
3004      *
3005      * @throws Exception if the test fails
3006      */
3007     @Test
3008     @Alerts("Symbol(Symbol.toStringTag) [C] [CSSFontFaceRule]")
3009     public void cssFontFaceRule() throws Exception {
3010         testString("", "document.styleSheets[2].cssRules[0]");
3011     }
3012 
3013     /**
3014      * Test CSSImportRule.
3015      *
3016      * @throws Exception if the test fails
3017      */
3018     @Test
3019     @Alerts("Symbol(Symbol.toStringTag) [C] [CSSImportRule]")
3020     public void cssImportRule() throws Exception {
3021         testString("", "document.styleSheets[3].cssRules[0]");
3022     }
3023 
3024     /**
3025      * Test CSSRule.
3026      *
3027      * @throws Exception if the test fails
3028      */
3029     @Test
3030     @Alerts("Symbol(Symbol.toStringTag) [C] [CSSStyleRule]")
3031     public void cssStyleRule() throws Exception {
3032         testString("", "document.styleSheets[4].cssRules[0]");
3033     }
3034 
3035     /**
3036      * Test {@link org.htmlunit.javascript.host.geo.Geolocation}.
3037      *
3038      * @throws Exception if the test fails
3039      */
3040     @Test
3041     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [Geolocation]",
3042             EDGE = "Symbol(Symbol.toStringTag) [C] [Geolocation]",
3043             FF = "Symbol(Symbol.toStringTag) [C] [Geolocation]",
3044             FF_ESR = "Symbol(Symbol.toStringTag) [C] [Geolocation]")
3045     public void geolocation() throws Exception {
3046         testString("", " navigator.geolocation");
3047     }
3048 
3049     /**
3050      * Test {@link org.htmlunit.javascript.host.geo.Geolocation}.
3051      *
3052      * @throws Exception if the test fails
3053      */
3054     @Test
3055     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [XMLHttpRequest]",
3056             EDGE = "Symbol(Symbol.toStringTag) [C] [XMLHttpRequest]",
3057             FF = "Symbol(Symbol.toStringTag) [C] [XMLHttpRequest]",
3058             FF_ESR = "Symbol(Symbol.toStringTag) [C] [XMLHttpRequest]")
3059     public void xmlHttpRequest() throws Exception {
3060         testString("", "new XMLHttpRequest()");
3061     }
3062 
3063     /**
3064      * Test Request.
3065      *
3066      * @throws Exception if the test fails
3067      */
3068     @Test
3069     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [Request]",
3070             EDGE = "Symbol(Symbol.toStringTag) [C] [Request]",
3071             FF = "Symbol(Symbol.toStringTag) [C] [Request]",
3072             FF_ESR = "Symbol(Symbol.toStringTag) [C] [Request]")
3073     public void request() throws Exception {
3074         testString("", "new Request('https://www.htmlunit.org')");
3075     }
3076 
3077     /**
3078      * Test Response.
3079      *
3080      * @throws Exception if the test fails
3081      */
3082     @Test
3083     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [Response]",
3084             EDGE = "Symbol(Symbol.toStringTag) [C] [Response]",
3085             FF = "Symbol(Symbol.toStringTag) [C] [Response]",
3086             FF_ESR = "Symbol(Symbol.toStringTag) [C] [Response]")
3087     public void response() throws Exception {
3088         testString("", "new Response()");
3089     }
3090 
3091     /**
3092      * Test RadioNodeList.
3093      *
3094      * @throws Exception if the test fails
3095      */
3096     @Test
3097     @Alerts(CHROME = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [RadioNodeList]",
3098             EDGE = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [RadioNodeList]",
3099             FF = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [RadioNodeList]",
3100             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [RadioNodeList]")
3101     public void radioNodeList() throws Exception {
3102         testString("", "document.myForm.first");
3103     }
3104 
3105     /**
3106      * Test HTMLFormControlsCollection.
3107      *
3108      * @throws Exception if the test fails
3109      */
3110     @Test
3111     @Alerts(CHROME = "Symbol(Symbol.iterator) [WC] [function],"
3112                     + "Symbol(Symbol.toStringTag) [C] [HTMLFormControlsCollection]",
3113             EDGE = "Symbol(Symbol.iterator) [WC] [function],"
3114                     + "Symbol(Symbol.toStringTag) [C] [HTMLFormControlsCollection]",
3115             FF = "Symbol(Symbol.iterator) [WC] [function],"
3116                     + "Symbol(Symbol.toStringTag) [C] [HTMLFormControlsCollection]",
3117             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],"
3118                     + "Symbol(Symbol.toStringTag) [C] [HTMLFormControlsCollection]")
3119     public void htmlFormControlsCollection() throws Exception {
3120         testString("", "document.myForm.elements");
3121     }
3122 
3123     /**
3124      * Test {@link org.htmlunit.javascript.host.abort.AbortController}.
3125      *
3126      * @throws Exception if an error occurs
3127      */
3128     @Test
3129     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [AbortController]",
3130             EDGE = "Symbol(Symbol.toStringTag) [C] [AbortController]",
3131             FF = "Symbol(Symbol.toStringTag) [C] [AbortController]",
3132             FF_ESR = "Symbol(Symbol.toStringTag) [C] [AbortController]")
3133     public void abortController() throws Exception {
3134         testString("", "new AbortController()");
3135     }
3136 
3137     /**
3138      * Test {@link org.htmlunit.javascript.host.abort.AbortSignal}.
3139      *
3140      * @throws Exception if an error occurs
3141      */
3142     @Test
3143     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [AbortSignal]",
3144             EDGE = "Symbol(Symbol.toStringTag) [C] [AbortSignal]",
3145             FF = "Symbol(Symbol.toStringTag) [C] [AbortSignal]",
3146             FF_ESR = "Symbol(Symbol.toStringTag) [C] [AbortSignal]")
3147     public void abortSignal() throws Exception {
3148         testString("", "new AbortController().signal");
3149     }
3150 
3151     /**
3152      * Test {@link org.htmlunit.javascript.host.dom.DOMTokenList}.
3153      *
3154      * @throws Exception if an error occurs
3155      */
3156     @Test
3157     @Alerts(CHROME = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [DOMTokenList]",
3158             EDGE = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [DOMTokenList]",
3159             FF = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [DOMTokenList]",
3160             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [DOMTokenList]")
3161     public void domTokenList() throws Exception {
3162         testString("", "document.body.classList");
3163     }
3164 
3165     /**
3166      * Test {@link org.htmlunit.javascript.host.draganddrop.DataTransfer}.
3167      *
3168      * @throws Exception if an error occurs
3169      */
3170     @Test
3171     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [DataTransfer]",
3172             EDGE = "Symbol(Symbol.toStringTag) [C] [DataTransfer]",
3173             FF = "Symbol(Symbol.toStringTag) [C] [DataTransfer]",
3174             FF_ESR = "Symbol(Symbol.toStringTag) [C] [DataTransfer]")
3175     public void dataTransfer() throws Exception {
3176         testString("", "new DataTransfer()");
3177     }
3178 
3179     /**
3180      * Test {@link org.htmlunit.javascript.host.draganddrop.DataTransferItemList}.
3181      *
3182      * @throws Exception if an error occurs
3183      */
3184     @Test
3185     @Alerts(CHROME = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [DataTransferItemList]",
3186             EDGE = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [DataTransferItemList]",
3187             FF = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [DataTransferItemList]",
3188             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [DataTransferItemList]")
3189     public void dataTransferItemList() throws Exception {
3190         testString("", "new DataTransfer().items");
3191     }
3192 
3193     /**
3194      * Test {@link org.htmlunit.javascript.host.file.FileList}.
3195      *
3196      * @throws Exception if an error occurs
3197      */
3198     @Test
3199     @Alerts(CHROME = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [FileList]",
3200             EDGE = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [FileList]",
3201             FF = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [FileList]",
3202             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [FileList]")
3203     public void fileList() throws Exception {
3204         testString("", "new DataTransfer().files");
3205     }
3206 
3207     /**
3208      * Test {@link org.htmlunit.javascript.host.file.FileList}.
3209      *
3210      * @throws Exception if an error occurs
3211      */
3212     @Test
3213     @Alerts(CHROME = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [FileList]",
3214             EDGE = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [FileList]",
3215             FF = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [FileList]",
3216             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [FileList]")
3217     public void fileList2() throws Exception {
3218         testString("", "document.getElementById('fileItem').files");
3219     }
3220 
3221     /**
3222      * Test {@link org.htmlunit.javascript.host.PluginArray}.
3223      *
3224      * @throws Exception if an error occurs
3225      */
3226     @Test
3227     @Alerts(CHROME = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [PluginArray]",
3228             EDGE = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [PluginArray]",
3229             FF = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [PluginArray]",
3230             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [PluginArray]")
3231     public void pluginArray() throws Exception {
3232         testString("", "navigator.plugins");
3233     }
3234 
3235     /**
3236      * Test {@link org.htmlunit.javascript.host.Plugin}.
3237      *
3238      * @throws Exception if an error occurs
3239      */
3240     @Test
3241     @Alerts(CHROME = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [Plugin]",
3242             EDGE = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [Plugin]",
3243             FF = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [Plugin]",
3244             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [Plugin]")
3245     public void plugin() throws Exception {
3246         testString("", "navigator.plugins[0]");
3247     }
3248 
3249     /**
3250      * Test {@link org.htmlunit.javascript.host.MimeTypeArray}.
3251      *
3252      * @throws Exception if an error occurs
3253      */
3254     @Test
3255     @Alerts(CHROME = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [MimeTypeArray]",
3256             EDGE = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [MimeTypeArray]",
3257             FF = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [MimeTypeArray]",
3258             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [MimeTypeArray]")
3259     public void mimeTypeArray() throws Exception {
3260         testString("", "navigator.mimeTypes");
3261     }
3262 
3263     /**
3264      * Test {@link org.htmlunit.javascript.host.MimeType}.
3265      *
3266      * @throws Exception if an error occurs
3267      */
3268     @Test
3269     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [MimeType]",
3270             EDGE = "Symbol(Symbol.toStringTag) [C] [MimeType]",
3271             FF = "Symbol(Symbol.toStringTag) [C] [MimeType]",
3272             FF_ESR = "Symbol(Symbol.toStringTag) [C] [MimeType]")
3273     public void mimeType() throws Exception {
3274         testString("", "navigator.mimeTypes[0]");
3275     }
3276 
3277     /**
3278      * Test {@link org.htmlunit.javascript.host.Navigator}.
3279      *
3280      * @throws Exception if an error occurs
3281      */
3282     @Test
3283     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [Navigator]",
3284             EDGE = "Symbol(Symbol.toStringTag) [C] [Navigator]",
3285             FF = "Symbol(Symbol.toStringTag) [C] [Navigator]",
3286             FF_ESR = "Symbol(Symbol.toStringTag) [C] [Navigator]")
3287     public void navigator() throws Exception {
3288         testString("", "navigator");
3289     }
3290 
3291     /**
3292      * Test {@link org.htmlunit.javascript.host.dom.DOMException}.
3293      *
3294      * @throws Exception if an error occurs
3295      */
3296     @Test
3297     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [DOMException]",
3298             EDGE = "Symbol(Symbol.toStringTag) [C] [DOMException]",
3299             FF = "Symbol(Symbol.toStringTag) [C] [DOMException]",
3300             FF_ESR = "Symbol(Symbol.toStringTag) [C] [DOMException]")
3301     public void domException() throws Exception {
3302         testString("", "new DOMException('message', 'name')");
3303     }
3304 
3305     /**
3306      * Test {@link org.htmlunit.javascript.host.FontFaceSet}.
3307      *
3308      * @throws Exception if the test fails
3309      */
3310     @Test
3311     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [FontFaceSet]",
3312             EDGE = "Symbol(Symbol.toStringTag) [C] [FontFaceSet]",
3313             FF = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [FontFaceSet]",
3314             FF_ESR = "Symbol(Symbol.iterator) [WC] [function],Symbol(Symbol.toStringTag) [C] [FontFaceSet]")
3315     @HtmlUnitNYI(FF = "Symbol(Symbol.toStringTag) [C] [FontFaceSet]",
3316             FF_ESR = "Symbol(Symbol.toStringTag) [C] [FontFaceSet]")
3317     public void fontFaceSet() throws Exception {
3318         testString("", "document.fonts");
3319     }
3320 
3321     /**
3322      * Test {@link org.htmlunit.javascript.host.External}.
3323      *
3324      * @throws Exception if the test fails
3325      */
3326     @Test
3327     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [External]",
3328             EDGE = "Symbol(Symbol.toStringTag) [C] [External]",
3329             FF = "-",
3330             FF_ESR = "-")
3331     @HtmlUnitNYI(FF = "Symbol(Symbol.toStringTag) [C] [External]",
3332             FF_ESR = "Symbol(Symbol.toStringTag) [C] [External]")
3333     public void external() throws Exception {
3334         testString("", "window.external");
3335     }
3336 
3337     /**
3338      * Test {@link org.htmlunit.javascript.host.css.StyleMedia}.
3339      *
3340      * @throws Exception if the test fails
3341      */
3342     @Test
3343     @Alerts(CHROME = "-",
3344             EDGE = "-",
3345             FF = "TypeError",
3346             FF_ESR = "TypeError")
3347     @HtmlUnitNYI(CHROME = "Symbol(Symbol.toStringTag) [C] [StyleMedia]",
3348             EDGE = "Symbol(Symbol.toStringTag) [C] [StyleMedia]")
3349     public void styleMedia() throws Exception {
3350         testString("", "window.styleMedia");
3351     }
3352 
3353     /**
3354      * Test {@link org.htmlunit.javascript.host.dom.DOMMatrixReadOnly}.
3355      *
3356      * @throws Exception if the test fails
3357      */
3358     @Test
3359     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [DOMMatrixReadOnly]",
3360             EDGE = "Symbol(Symbol.toStringTag) [C] [DOMMatrixReadOnly]",
3361             FF = "Symbol(Symbol.toStringTag) [C] [DOMMatrixReadOnly]",
3362             FF_ESR = "Symbol(Symbol.toStringTag) [C] [DOMMatrixReadOnly]")
3363     public void domMatrixReadOnly() throws Exception {
3364         testString("", "new DOMMatrixReadOnly()");
3365     }
3366 
3367     /**
3368      * Test {@link org.htmlunit.javascript.host.dom.DOMMatrix}.
3369      *
3370      * @throws Exception if the test fails
3371      */
3372     @Test
3373     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [DOMMatrix]",
3374             EDGE = "Symbol(Symbol.toStringTag) [C] [DOMMatrix]",
3375             FF = "Symbol(Symbol.toStringTag) [C] [DOMMatrix]",
3376             FF_ESR = "Symbol(Symbol.toStringTag) [C] [DOMMatrix]")
3377     public void domMatrix() throws Exception {
3378         testString("", "new DOMMatrix()");
3379     }
3380 
3381     /**
3382      * Test {@link org.htmlunit.javascript.host.Notification}.
3383      *
3384      * @throws Exception if the test fails
3385      */
3386     @Test
3387     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [Notification]",
3388             EDGE = "Symbol(Symbol.toStringTag) [C] [Notification]",
3389             FF = "Symbol(Symbol.toStringTag) [C] [Notification]",
3390             FF_ESR = "Symbol(Symbol.toStringTag) [C] [Notification]")
3391     public void notification() throws Exception {
3392         testString("", "new Notification('not')");
3393     }
3394 
3395     /**
3396      * Test console.
3397      *
3398      * @throws Exception if the test fails
3399      */
3400     @Test
3401     @Alerts(CHROME = "Symbol(Symbol.toStringTag) [C] [console]",
3402             EDGE = "Symbol(Symbol.toStringTag) [C] [console]",
3403             FF = "Symbol(Symbol.toStringTag) [C] [console]",
3404             FF_ESR = "Symbol(Symbol.toStringTag) [C] [console]")
3405     @HtmlUnitNYI(CHROME = "-", EDGE = "-", FF = "-", FF_ESR = "-")
3406     public void console() throws Exception {
3407         testInstanceString("", "console");
3408     }
3409 }