Skip to content

Commit 4586366

Browse files
authored
[lldb] Do some gardening in ProgressReportTest (NFC) (llvm#84278)
- Factor our common setup code. - Split the ProgressManager test into separate tests as they test separate things. - Fix usage of EXPECT (which continues on failure) and ASSERT (which halts on failure). We must use the latter when calling GetEvent as otherwise we'll try to dereference a null EventSP.
1 parent a41226b commit 4586366

File tree

1 file changed

+96
-103
lines changed

1 file changed

+96
-103
lines changed

lldb/unittests/Core/ProgressReportTest.cpp

+96-103
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,29 @@
2222
using namespace lldb;
2323
using namespace lldb_private;
2424

25+
static std::chrono::milliseconds TIMEOUT(100);
26+
2527
class ProgressReportTest : public ::testing::Test {
26-
SubsystemRAII<FileSystem, HostInfo, PlatformMacOSX> subsystems;
28+
public:
29+
ListenerSP CreateListenerFor(uint32_t bit) {
30+
// Set up the debugger, make sure that was done properly.
31+
ArchSpec arch("x86_64-apple-macosx-");
32+
Platform::SetHostPlatform(
33+
PlatformRemoteMacOSX::CreateInstance(true, &arch));
34+
35+
m_debugger_sp = Debugger::CreateInstance();
36+
37+
// Get the debugger's broadcaster.
38+
Broadcaster &broadcaster = m_debugger_sp->GetBroadcaster();
39+
40+
// Create a listener, make sure it can receive events and that it's
41+
// listening to the correct broadcast bit.
42+
m_listener_sp = Listener::MakeListener("progress-listener");
43+
m_listener_sp->StartListeningForEvents(&broadcaster, bit);
44+
return m_listener_sp;
45+
}
2746

47+
protected:
2848
// The debugger's initialization function can't be called with no arguments
2949
// so calling it using SubsystemRAII will cause the test build to fail as
3050
// SubsystemRAII will call Initialize with no arguments. As such we set it up
@@ -33,30 +53,14 @@ class ProgressReportTest : public ::testing::Test {
3353
std::call_once(TestUtilities::g_debugger_initialize_flag,
3454
[]() { Debugger::Initialize(nullptr); });
3555
};
56+
57+
DebuggerSP m_debugger_sp;
58+
ListenerSP m_listener_sp;
59+
SubsystemRAII<FileSystem, HostInfo, PlatformMacOSX> subsystems;
3660
};
3761

3862
TEST_F(ProgressReportTest, TestReportCreation) {
39-
std::chrono::milliseconds timeout(100);
40-
41-
// Set up the debugger, make sure that was done properly.
42-
ArchSpec arch("x86_64-apple-macosx-");
43-
Platform::SetHostPlatform(PlatformRemoteMacOSX::CreateInstance(true, &arch));
44-
45-
DebuggerSP debugger_sp = Debugger::CreateInstance();
46-
ASSERT_TRUE(debugger_sp);
47-
48-
// Get the debugger's broadcaster.
49-
Broadcaster &broadcaster = debugger_sp->GetBroadcaster();
50-
51-
// Create a listener, make sure it can receive events and that it's
52-
// listening to the correct broadcast bit.
53-
ListenerSP listener_sp = Listener::MakeListener("progress-listener");
54-
55-
listener_sp->StartListeningForEvents(&broadcaster,
56-
Debugger::eBroadcastBitProgress);
57-
EXPECT_TRUE(
58-
broadcaster.EventTypeHasListeners(Debugger::eBroadcastBitProgress));
59-
63+
ListenerSP listener_sp = CreateListenerFor(Debugger::eBroadcastBitProgress);
6064
EventSP event_sp;
6165
const ProgressEventData *data;
6266

@@ -73,82 +77,64 @@ TEST_F(ProgressReportTest, TestReportCreation) {
7377
// in this order:
7478
// Starting progress: 1, 2, 3
7579
// Ending progress: 3, 2, 1
76-
EXPECT_TRUE(listener_sp->GetEvent(event_sp, timeout));
80+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
7781
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
7882

79-
ASSERT_EQ(data->GetDetails(), "Starting report 1");
80-
ASSERT_FALSE(data->IsFinite());
81-
ASSERT_FALSE(data->GetCompleted());
82-
ASSERT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
83-
ASSERT_EQ(data->GetMessage(), "Progress report 1: Starting report 1");
83+
EXPECT_EQ(data->GetDetails(), "Starting report 1");
84+
EXPECT_FALSE(data->IsFinite());
85+
EXPECT_FALSE(data->GetCompleted());
86+
EXPECT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
87+
EXPECT_EQ(data->GetMessage(), "Progress report 1: Starting report 1");
8488

85-
EXPECT_TRUE(listener_sp->GetEvent(event_sp, timeout));
89+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
8690
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
8791

88-
ASSERT_EQ(data->GetDetails(), "Starting report 2");
89-
ASSERT_FALSE(data->IsFinite());
90-
ASSERT_FALSE(data->GetCompleted());
91-
ASSERT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
92-
ASSERT_EQ(data->GetMessage(), "Progress report 2: Starting report 2");
92+
EXPECT_EQ(data->GetDetails(), "Starting report 2");
93+
EXPECT_FALSE(data->IsFinite());
94+
EXPECT_FALSE(data->GetCompleted());
95+
EXPECT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
96+
EXPECT_EQ(data->GetMessage(), "Progress report 2: Starting report 2");
9397

94-
EXPECT_TRUE(listener_sp->GetEvent(event_sp, timeout));
98+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
9599
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
96-
ASSERT_EQ(data->GetDetails(), "Starting report 3");
97-
ASSERT_FALSE(data->IsFinite());
98-
ASSERT_FALSE(data->GetCompleted());
99-
ASSERT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
100-
ASSERT_EQ(data->GetMessage(), "Progress report 3: Starting report 3");
100+
101+
EXPECT_EQ(data->GetDetails(), "Starting report 3");
102+
EXPECT_FALSE(data->IsFinite());
103+
EXPECT_FALSE(data->GetCompleted());
104+
EXPECT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
105+
EXPECT_EQ(data->GetMessage(), "Progress report 3: Starting report 3");
101106

102107
// Progress report objects should be destroyed at this point so
103108
// get each report from the queue and check that they've been
104109
// destroyed in reverse order.
105-
EXPECT_TRUE(listener_sp->GetEvent(event_sp, timeout));
110+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
106111
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
107112

108-
ASSERT_EQ(data->GetTitle(), "Progress report 3");
109-
ASSERT_TRUE(data->GetCompleted());
110-
ASSERT_FALSE(data->IsFinite());
111-
ASSERT_EQ(data->GetMessage(), "Progress report 3: Starting report 3");
113+
EXPECT_EQ(data->GetTitle(), "Progress report 3");
114+
EXPECT_TRUE(data->GetCompleted());
115+
EXPECT_FALSE(data->IsFinite());
116+
EXPECT_EQ(data->GetMessage(), "Progress report 3: Starting report 3");
112117

113-
EXPECT_TRUE(listener_sp->GetEvent(event_sp, timeout));
118+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
114119
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
115120

116-
ASSERT_EQ(data->GetTitle(), "Progress report 2");
117-
ASSERT_TRUE(data->GetCompleted());
118-
ASSERT_FALSE(data->IsFinite());
119-
ASSERT_EQ(data->GetMessage(), "Progress report 2: Starting report 2");
121+
EXPECT_EQ(data->GetTitle(), "Progress report 2");
122+
EXPECT_TRUE(data->GetCompleted());
123+
EXPECT_FALSE(data->IsFinite());
124+
EXPECT_EQ(data->GetMessage(), "Progress report 2: Starting report 2");
120125

121-
EXPECT_TRUE(listener_sp->GetEvent(event_sp, timeout));
126+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
122127
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
123128

124-
ASSERT_EQ(data->GetTitle(), "Progress report 1");
125-
ASSERT_TRUE(data->GetCompleted());
126-
ASSERT_FALSE(data->IsFinite());
127-
ASSERT_EQ(data->GetMessage(), "Progress report 1: Starting report 1");
129+
EXPECT_EQ(data->GetTitle(), "Progress report 1");
130+
EXPECT_TRUE(data->GetCompleted());
131+
EXPECT_FALSE(data->IsFinite());
132+
EXPECT_EQ(data->GetMessage(), "Progress report 1: Starting report 1");
128133
}
129134

130135
TEST_F(ProgressReportTest, TestProgressManager) {
131-
std::chrono::milliseconds timeout(100);
132-
133-
// Set up the debugger, make sure that was done properly.
134-
ArchSpec arch("x86_64-apple-macosx-");
135-
Platform::SetHostPlatform(PlatformRemoteMacOSX::CreateInstance(true, &arch));
136-
137-
DebuggerSP debugger_sp = Debugger::CreateInstance();
138-
ASSERT_TRUE(debugger_sp);
139-
140-
// Get the debugger's broadcaster.
141-
Broadcaster &broadcaster = debugger_sp->GetBroadcaster();
142-
143-
// Create a listener, make sure it can receive events and that it's
144-
// listening to the correct broadcast bit.
145-
ListenerSP listener_sp = Listener::MakeListener("progress-category-listener");
146-
147-
listener_sp->StartListeningForEvents(&broadcaster,
148-
Debugger::eBroadcastBitProgressCategory);
149-
EXPECT_TRUE(broadcaster.EventTypeHasListeners(
150-
Debugger::eBroadcastBitProgressCategory));
151-
136+
ListenerSP listener_sp =
137+
CreateListenerFor(Debugger::eBroadcastBitProgressCategory);
152138
EventSP event_sp;
153139
const ProgressEventData *data;
154140

@@ -160,28 +146,35 @@ TEST_F(ProgressReportTest, TestProgressManager) {
160146
Progress progress1("Progress report 1", "Starting report 1");
161147
Progress progress2("Progress report 1", "Starting report 2");
162148
Progress progress3("Progress report 1", "Starting report 3");
163-
EXPECT_TRUE(listener_sp->GetEvent(event_sp, timeout));
164-
EXPECT_FALSE(listener_sp->GetEvent(event_sp, timeout));
149+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
150+
ASSERT_FALSE(listener_sp->GetEvent(event_sp, TIMEOUT));
165151
}
166152

167153
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
168154

169-
ASSERT_EQ(data->GetDetails(), "");
170-
ASSERT_FALSE(data->IsFinite());
171-
ASSERT_FALSE(data->GetCompleted());
172-
ASSERT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
173-
ASSERT_EQ(data->GetMessage(), "Progress report 1");
155+
EXPECT_EQ(data->GetDetails(), "");
156+
EXPECT_FALSE(data->IsFinite());
157+
EXPECT_FALSE(data->GetCompleted());
158+
EXPECT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
159+
EXPECT_EQ(data->GetMessage(), "Progress report 1");
174160

175161
// Pop another event from the queue, this should be the event for the final
176162
// report for this category.
177-
EXPECT_TRUE(listener_sp->GetEvent(event_sp, timeout));
178-
163+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
179164
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
180-
ASSERT_EQ(data->GetDetails(), "");
181-
ASSERT_FALSE(data->IsFinite());
182-
ASSERT_TRUE(data->GetCompleted());
183-
ASSERT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
184-
ASSERT_EQ(data->GetMessage(), "Progress report 1");
165+
166+
EXPECT_EQ(data->GetDetails(), "");
167+
EXPECT_FALSE(data->IsFinite());
168+
EXPECT_TRUE(data->GetCompleted());
169+
EXPECT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
170+
EXPECT_EQ(data->GetMessage(), "Progress report 1");
171+
}
172+
173+
TEST_F(ProgressReportTest, TestOverlappingEvents) {
174+
ListenerSP listener_sp =
175+
CreateListenerFor(Debugger::eBroadcastBitProgressCategory);
176+
EventSP event_sp;
177+
const ProgressEventData *data;
185178

186179
// Create two progress reports of the same category that overlap with each
187180
// other. Here we want to ensure that the ID broadcasted for the initial and
@@ -192,28 +185,28 @@ TEST_F(ProgressReportTest, TestProgressManager) {
192185
std::make_unique<Progress>("Overlapping report 1", "Starting report 2");
193186
overlap_progress1.reset();
194187

195-
EXPECT_TRUE(listener_sp->GetEvent(event_sp, timeout));
188+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
196189
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
197190
// Get the ID used in the first report for this category.
198191
uint64_t expected_progress_id = data->GetID();
199192

200-
ASSERT_EQ(data->GetDetails(), "");
201-
ASSERT_FALSE(data->IsFinite());
202-
ASSERT_FALSE(data->GetCompleted());
203-
ASSERT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
204-
ASSERT_EQ(data->GetMessage(), "Overlapping report 1");
193+
EXPECT_EQ(data->GetDetails(), "");
194+
EXPECT_FALSE(data->IsFinite());
195+
EXPECT_FALSE(data->GetCompleted());
196+
EXPECT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
197+
EXPECT_EQ(data->GetMessage(), "Overlapping report 1");
205198

206199
overlap_progress2.reset();
207200

208-
EXPECT_TRUE(listener_sp->GetEvent(event_sp, timeout));
201+
ASSERT_TRUE(listener_sp->GetEvent(event_sp, TIMEOUT));
209202
data = ProgressEventData::GetEventDataFromEvent(event_sp.get());
210203

211-
ASSERT_EQ(data->GetDetails(), "");
212-
ASSERT_FALSE(data->IsFinite());
213-
ASSERT_TRUE(data->GetCompleted());
214-
ASSERT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
215-
ASSERT_EQ(data->GetMessage(), "Overlapping report 1");
204+
EXPECT_EQ(data->GetDetails(), "");
205+
EXPECT_FALSE(data->IsFinite());
206+
EXPECT_TRUE(data->GetCompleted());
207+
EXPECT_EQ(data->GetTotal(), Progress::kNonDeterministicTotal);
208+
EXPECT_EQ(data->GetMessage(), "Overlapping report 1");
216209
// The progress ID for the final report should be the same as that for the
217210
// initial report.
218-
ASSERT_EQ(data->GetID(), expected_progress_id);
211+
EXPECT_EQ(data->GetID(), expected_progress_id);
219212
}

0 commit comments

Comments
 (0)