Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/devtools/shared/heapsnapshot/tests/gtest/DeserializedNodeUbiNodes.cpp
Line
Count
Source (jump to first uncovered line)
1
/* -*-  Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
2
/* This Source Code Form is subject to the terms of the Mozilla Public
3
 * License, v. 2.0. If a copy of the MPL was not distributed with this
4
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6
// Test that the `JS::ubi::Node`s we create from
7
// `mozilla::devtools::DeserializedNode` instances look and behave as we would
8
// like.
9
10
#include "DevTools.h"
11
#include "js/TypeDecls.h"
12
#include "mozilla/devtools/DeserializedNode.h"
13
14
using testing::Field;
15
using testing::ReturnRef;
16
17
// A mock DeserializedNode for testing.
18
struct MockDeserializedNode : public DeserializedNode
19
{
20
  MockDeserializedNode(NodeId id, const char16_t* typeName, uint64_t size)
21
    : DeserializedNode(id, typeName, size)
22
0
  { }
23
24
  bool addEdge(DeserializedEdge&& edge)
25
0
  {
26
0
    return edges.append(std::move(edge));
27
0
  }
28
29
  MOCK_METHOD1(getEdgeReferent, JS::ubi::Node(const DeserializedEdge&));
30
};
31
32
0
size_t fakeMallocSizeOf(const void*) {
33
0
  EXPECT_TRUE(false);
34
0
  MOZ_ASSERT_UNREACHABLE("fakeMallocSizeOf should never be called because "
35
0
                         "DeserializedNodes report the deserialized size.");
36
0
  return 0;
37
0
}
38
39
DEF_TEST(DeserializedNodeUbiNodes, {
40
    const char16_t* typeName = u"TestTypeName";
41
    const char* className = "MyObjectClassName";
42
    const char* filename = "my-cool-filename.js";
43
44
    NodeId id = uint64_t(1) << 33;
45
    uint64_t size = uint64_t(1) << 60;
46
    MockDeserializedNode mocked(id, typeName, size);
47
    mocked.coarseType = JS::ubi::CoarseType::Script;
48
    mocked.jsObjectClassName = className;
49
    mocked.scriptFilename = filename;
50
51
    DeserializedNode& deserialized = mocked;
52
    JS::ubi::Node ubi(&deserialized);
53
54
    // Test the ubi::Node accessors.
55
56
    EXPECT_EQ(size, ubi.size(fakeMallocSizeOf));
57
    EXPECT_EQ(typeName, ubi.typeName());
58
    EXPECT_EQ(JS::ubi::CoarseType::Script, ubi.coarseType());
59
    EXPECT_EQ(id, ubi.identifier());
60
    EXPECT_FALSE(ubi.isLive());
61
    EXPECT_EQ(ubi.jsObjectClassName(), className);
62
    EXPECT_EQ(ubi.scriptFilename(), filename);
63
64
    // Test the ubi::Node's edges.
65
66
    UniquePtr<DeserializedNode> referent1(new MockDeserializedNode(1,
67
                                                                   nullptr,
68
                                                                   10));
69
    DeserializedEdge edge1(referent1->id);
70
    mocked.addEdge(std::move(edge1));
71
    EXPECT_CALL(mocked, getEdgeReferent(EdgeTo(referent1->id)))
72
      .Times(1)
73
      .WillOnce(Return(JS::ubi::Node(referent1.get())));
74
75
    UniquePtr<DeserializedNode> referent2(new MockDeserializedNode(2,
76
                                                                   nullptr,
77
                                                                   20));
78
    DeserializedEdge edge2(referent2->id);
79
    mocked.addEdge(std::move(edge2));
80
    EXPECT_CALL(mocked, getEdgeReferent(EdgeTo(referent2->id)))
81
      .Times(1)
82
      .WillOnce(Return(JS::ubi::Node(referent2.get())));
83
84
    UniquePtr<DeserializedNode> referent3(new MockDeserializedNode(3,
85
                                                                   nullptr,
86
                                                                   30));
87
    DeserializedEdge edge3(referent3->id);
88
    mocked.addEdge(std::move(edge3));
89
    EXPECT_CALL(mocked, getEdgeReferent(EdgeTo(referent3->id)))
90
      .Times(1)
91
      .WillOnce(Return(JS::ubi::Node(referent3.get())));
92
93
    auto range = ubi.edges(cx);
94
    ASSERT_TRUE(!!range);
95
96
    for ( ; !range->empty(); range->popFront()) {
97
      // Nothing to do here. This loop ensures that we get each edge referent
98
      // that we expect above.
99
    }
100
  });