1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "third_party/blink/renderer/core/dom/dom_node_ids.h"
6
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "third_party/blink/renderer/core/dom/document.h"
9 #include "third_party/blink/renderer/core/dom/element.h"
10 #include "third_party/blink/renderer/core/editing/testing/editing_test_base.h"
11 #include "third_party/blink/renderer/platform/heap/heap.h"
12
13 namespace blink {
14
15 using DOMNodeIdsTest = EditingTestBase;
16
TEST_F(DOMNodeIdsTest,NonNull)17 TEST_F(DOMNodeIdsTest, NonNull) {
18 SetBodyContent("<div id='a'></div><div id='b'></div>");
19 Node* a = GetDocument().getElementById("a");
20 Node* b = GetDocument().getElementById("b");
21
22 DOMNodeId id_a = DOMNodeIds::IdForNode(a);
23 EXPECT_NE(kInvalidDOMNodeId, id_a);
24 EXPECT_EQ(id_a, DOMNodeIds::IdForNode(a));
25 EXPECT_EQ(a, DOMNodeIds::NodeForId(id_a));
26
27 DOMNodeId id_b = DOMNodeIds::IdForNode(b);
28 EXPECT_NE(kInvalidDOMNodeId, id_b);
29 EXPECT_NE(id_a, id_b);
30 EXPECT_EQ(id_b, DOMNodeIds::IdForNode(b));
31 EXPECT_EQ(b, DOMNodeIds::NodeForId(id_b));
32
33 EXPECT_EQ(id_a, DOMNodeIds::IdForNode(a));
34 EXPECT_EQ(a, DOMNodeIds::NodeForId(id_a));
35 }
36
TEST_F(DOMNodeIdsTest,DeletedNode)37 TEST_F(DOMNodeIdsTest, DeletedNode) {
38 SetBodyContent("<div id='a'></div>");
39 Node* a = GetDocument().getElementById("a");
40 DOMNodeId id_a = DOMNodeIds::IdForNode(a);
41
42 a->remove();
43 ThreadState::Current()->CollectAllGarbageForTesting(
44 BlinkGC::kNoHeapPointersOnStack);
45 EXPECT_EQ(nullptr, DOMNodeIds::NodeForId(id_a));
46 }
47
TEST_F(DOMNodeIdsTest,UnusedID)48 TEST_F(DOMNodeIdsTest, UnusedID) {
49 SetBodyContent("<div id='a'></div>");
50 Node* a = GetDocument().getElementById("a");
51 DOMNodeId id_a = DOMNodeIds::IdForNode(a);
52 EXPECT_EQ(nullptr, DOMNodeIds::NodeForId(id_a + 1));
53 }
54
TEST_F(DOMNodeIdsTest,Null)55 TEST_F(DOMNodeIdsTest, Null) {
56 EXPECT_EQ(kInvalidDOMNodeId, DOMNodeIds::IdForNode(nullptr));
57 EXPECT_EQ(nullptr, DOMNodeIds::NodeForId(kInvalidDOMNodeId));
58 }
59
60 } // namespace blink
61