Skip to content

Commit f90dc13

Browse files
tomdalekrisselden
authored andcommitted
Per DOM spec, tagName/nodeName should be canonical uppercase form in HTML document contexts
1 parent 8818b83 commit f90dc13

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

packages/@simple-dom/document/src/node.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,9 +175,12 @@ export default class SimpleNodeImpl<
175175
}
176176

177177
public createElementNS(this: SimpleDocumentImpl, namespace: ElementNamespace, qualifiedName: string): SimpleElement {
178+
// Node name is case-preserving in XML contexts, but returns canonical uppercase form in HTML contexts
179+
// https://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#ID-104682815
180+
const nodeName = namespace === Namespace.HTML ? qualifiedName.toUpperCase() : qualifiedName;
178181
// we don't care to parse the qualified name because we only support HTML documents
179182
// which don't support prefixed elements
180-
return new SimpleNodeImpl(this, NodeType.ELEMENT_NODE, qualifiedName, null, namespace);
183+
return new SimpleNodeImpl(this, NodeType.ELEMENT_NODE, nodeName, null, namespace);
181184
}
182185

183186
public createTextNode(this: SimpleDocumentImpl, text: string): SimpleText {

packages/@simple-dom/document/test/element-test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,17 @@ moduleWithDocument('Element', (helper) => {
2222
assert.strictEqual(body.firstChild!.nodeName, 'DIV', 'fragment\'s child is added as child of document');
2323
});
2424

25+
QUnit.test('create HTML-namespaced div element', (assert) => {
26+
const { document } = helper;
27+
28+
const svg = document.createElementNS(Namespace.HTML, 'div');
29+
30+
assert.strictEqual(svg.namespaceURI, Namespace.HTML, 'has HTML namespace');
31+
32+
assert.strictEqual(svg.nodeName, 'DIV', 'nodeName is uppercased');
33+
assert.strictEqual(svg.tagName, 'DIV', 'tagName is uppercased');
34+
});
35+
2536
QUnit.test('create svg element', (assert) => {
2637
const { document } = helper;
2738

0 commit comments

Comments
 (0)