Skip to content

Commit 0d76bb3

Browse files
authored
Merge pull request #1264 from aralroca/master
feat: [#1263] Add isEqualNode method
2 parents c2334e6 + 326241b commit 0d76bb3

File tree

3 files changed

+53
-0
lines changed

3 files changed

+53
-0
lines changed

packages/happy-dom/src/nodes/node/INode.ts

+8
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,12 @@ export default interface INode extends IEventTarget {
5757
* @returns True if the given node is equal to the current node, otherwise false.
5858
*/
5959
isSameNode(node: INode): boolean;
60+
61+
/**
62+
* Compares two nodes.
63+
*
64+
* @param node Node to compare.
65+
* @returns "true" if nodes are equal.
66+
*/
67+
isEqualNode(node: INode): boolean;
6068
}

packages/happy-dom/src/nodes/node/Node.ts

+11
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,17 @@ export default class Node extends EventTarget implements INode {
401401
return oldChild;
402402
}
403403

404+
/**
405+
* Compares two nodes.
406+
* Two nodes are equal if they have the same type, defining the same attributes, and so on.
407+
*
408+
* @param node Node to compare.
409+
* @returns boolean - `true` if two nodes are equal.
410+
*/
411+
public isEqualNode(node: INode): boolean {
412+
return NodeUtility.isEqualNode(this, node);
413+
}
414+
404415
/**
405416
* Converts the node to a string.
406417
*

packages/happy-dom/test/nodes/node/Node.test.ts

+34
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,40 @@ describe('Node', () => {
646646
});
647647
});
648648

649+
describe('toEqualNode()', () => {
650+
it('Returns "true" if the nodes are equal.', () => {
651+
const div = document.createElement('div');
652+
const span = document.createElement('span');
653+
const text = document.createTextNode('text');
654+
const comment = document.createComment('comment');
655+
656+
div.appendChild(span);
657+
span.appendChild(text);
658+
span.appendChild(comment);
659+
660+
const clone = div.cloneNode(true);
661+
662+
expect(div.isEqualNode(clone)).toBe(true);
663+
});
664+
665+
it('Returns "false" if the nodes are not equal.', () => {
666+
const div = document.createElement('div');
667+
const span = document.createElement('span');
668+
const text = document.createTextNode('text');
669+
const comment = document.createComment('comment');
670+
671+
div.appendChild(span);
672+
span.appendChild(text);
673+
span.appendChild(comment);
674+
675+
const clone = div.cloneNode(true);
676+
677+
clone.appendChild(document.createElement('span'));
678+
679+
expect(div.isEqualNode(clone)).toBe(false);
680+
});
681+
});
682+
649683
describe('dispatchEvent()', () => {
650684
it('Dispatches an event that is set to not bubble.', () => {
651685
const child = document.createElement('span');

0 commit comments

Comments
 (0)