22
22
using namespace lldb ;
23
23
using namespace lldb_private ;
24
24
25
+ static std::chrono::milliseconds TIMEOUT (100 );
26
+
25
27
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
+ }
27
46
47
+ protected:
28
48
// The debugger's initialization function can't be called with no arguments
29
49
// so calling it using SubsystemRAII will cause the test build to fail as
30
50
// SubsystemRAII will call Initialize with no arguments. As such we set it up
@@ -33,30 +53,14 @@ class ProgressReportTest : public ::testing::Test {
33
53
std::call_once (TestUtilities::g_debugger_initialize_flag,
34
54
[]() { Debugger ::Initialize (nullptr ); });
35
55
};
56
+
57
+ DebuggerSP m_debugger_sp;
58
+ ListenerSP m_listener_sp;
59
+ SubsystemRAII<FileSystem, HostInfo, PlatformMacOSX> subsystems;
36
60
};
37
61
38
62
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);
60
64
EventSP event_sp;
61
65
const ProgressEventData *data;
62
66
@@ -73,82 +77,64 @@ TEST_F(ProgressReportTest, TestReportCreation) {
73
77
// in this order:
74
78
// Starting progress: 1, 2, 3
75
79
// Ending progress: 3, 2, 1
76
- EXPECT_TRUE (listener_sp->GetEvent (event_sp, timeout ));
80
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT ));
77
81
data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
78
82
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" );
84
88
85
- EXPECT_TRUE (listener_sp->GetEvent (event_sp, timeout ));
89
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT ));
86
90
data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
87
91
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" );
93
97
94
- EXPECT_TRUE (listener_sp->GetEvent (event_sp, timeout ));
98
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT ));
95
99
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" );
101
106
102
107
// Progress report objects should be destroyed at this point so
103
108
// get each report from the queue and check that they've been
104
109
// destroyed in reverse order.
105
- EXPECT_TRUE (listener_sp->GetEvent (event_sp, timeout ));
110
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT ));
106
111
data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
107
112
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" );
112
117
113
- EXPECT_TRUE (listener_sp->GetEvent (event_sp, timeout ));
118
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT ));
114
119
data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
115
120
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" );
120
125
121
- EXPECT_TRUE (listener_sp->GetEvent (event_sp, timeout ));
126
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT ));
122
127
data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
123
128
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" );
128
133
}
129
134
130
135
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);
152
138
EventSP event_sp;
153
139
const ProgressEventData *data;
154
140
@@ -160,28 +146,35 @@ TEST_F(ProgressReportTest, TestProgressManager) {
160
146
Progress progress1 (" Progress report 1" , " Starting report 1" );
161
147
Progress progress2 (" Progress report 1" , " Starting report 2" );
162
148
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 ));
165
151
}
166
152
167
153
data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
168
154
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" );
174
160
175
161
// Pop another event from the queue, this should be the event for the final
176
162
// report for this category.
177
- EXPECT_TRUE (listener_sp->GetEvent (event_sp, timeout));
178
-
163
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
179
164
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;
185
178
186
179
// Create two progress reports of the same category that overlap with each
187
180
// other. Here we want to ensure that the ID broadcasted for the initial and
@@ -192,28 +185,28 @@ TEST_F(ProgressReportTest, TestProgressManager) {
192
185
std::make_unique<Progress>(" Overlapping report 1" , " Starting report 2" );
193
186
overlap_progress1.reset ();
194
187
195
- EXPECT_TRUE (listener_sp->GetEvent (event_sp, timeout ));
188
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT ));
196
189
data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
197
190
// Get the ID used in the first report for this category.
198
191
uint64_t expected_progress_id = data->GetID ();
199
192
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" );
205
198
206
199
overlap_progress2.reset ();
207
200
208
- EXPECT_TRUE (listener_sp->GetEvent (event_sp, timeout ));
201
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT ));
209
202
data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
210
203
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" );
216
209
// The progress ID for the final report should be the same as that for the
217
210
// initial report.
218
- ASSERT_EQ (data->GetID (), expected_progress_id);
211
+ EXPECT_EQ (data->GetID (), expected_progress_id);
219
212
}
0 commit comments