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