@@ -133,6 +133,81 @@ TEST_F(ProgressReportTest, TestReportCreation) {
133
133
EXPECT_EQ (data->GetMessage (), " Progress report 1: Starting report 1" );
134
134
}
135
135
136
+ TEST_F (ProgressReportTest, TestReportDestructionWithPartialProgress) {
137
+ ListenerSP listener_sp = CreateListenerFor (lldb::eBroadcastBitProgress);
138
+ EventSP event_sp;
139
+ const ProgressEventData *data;
140
+
141
+ // Create a finite progress report and only increment to a non-completed
142
+ // state before destruction.
143
+ {
144
+ Progress progress (" Finite progress" , " Report 1" , 100 );
145
+ progress.Increment (3 );
146
+ }
147
+
148
+ // Verify that the progress in the events are:
149
+ // 1. At construction: 0 out of 100
150
+ // 2. At increment: 3 out of 100
151
+ // 3. At destruction: 100 out of 100
152
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
153
+ data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
154
+ EXPECT_EQ (data->GetDetails (), " Report 1" );
155
+ EXPECT_TRUE (data->IsFinite ());
156
+ EXPECT_EQ (data->GetCompleted (), (uint64_t )0 );
157
+ EXPECT_EQ (data->GetTotal (), (uint64_t )100 );
158
+ EXPECT_EQ (data->GetMessage (), " Finite progress: Report 1" );
159
+
160
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
161
+ data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
162
+ EXPECT_EQ (data->GetDetails (), " Report 1" );
163
+ EXPECT_TRUE (data->IsFinite ());
164
+ EXPECT_EQ (data->GetCompleted (), (uint64_t )3 );
165
+ EXPECT_EQ (data->GetTotal (), (uint64_t )100 );
166
+ EXPECT_EQ (data->GetMessage (), " Finite progress: Report 1" );
167
+
168
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
169
+ data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
170
+ EXPECT_EQ (data->GetDetails (), " Report 1" );
171
+ EXPECT_TRUE (data->IsFinite ());
172
+ EXPECT_EQ (data->GetCompleted (), (uint64_t )100 );
173
+ EXPECT_EQ (data->GetTotal (), (uint64_t )100 );
174
+ EXPECT_EQ (data->GetMessage (), " Finite progress: Report 1" );
175
+
176
+ // Create an infinite progress report and increment by some amount.
177
+ {
178
+ Progress progress (" Infinite progress" , " Report 2" );
179
+ progress.Increment (3 );
180
+ }
181
+
182
+ // Verify that the progress in the events are:
183
+ // 1. At construction: 0
184
+ // 2. At increment: 3
185
+ // 3. At destruction: Progress::kNonDeterministicTotal
186
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
187
+ data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
188
+ EXPECT_EQ (data->GetDetails (), " Report 2" );
189
+ EXPECT_FALSE (data->IsFinite ());
190
+ EXPECT_EQ (data->GetCompleted (), (uint64_t )0 );
191
+ EXPECT_EQ (data->GetTotal (), Progress::kNonDeterministicTotal );
192
+ EXPECT_EQ (data->GetMessage (), " Infinite progress: Report 2" );
193
+
194
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
195
+ data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
196
+ EXPECT_EQ (data->GetDetails (), " Report 2" );
197
+ EXPECT_FALSE (data->IsFinite ());
198
+ EXPECT_EQ (data->GetCompleted (), (uint64_t )3 );
199
+ EXPECT_EQ (data->GetTotal (), Progress::kNonDeterministicTotal );
200
+ EXPECT_EQ (data->GetMessage (), " Infinite progress: Report 2" );
201
+
202
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
203
+ data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
204
+ EXPECT_EQ (data->GetDetails (), " Report 2" );
205
+ EXPECT_FALSE (data->IsFinite ());
206
+ EXPECT_EQ (data->GetCompleted (), Progress::kNonDeterministicTotal );
207
+ EXPECT_EQ (data->GetTotal (), Progress::kNonDeterministicTotal );
208
+ EXPECT_EQ (data->GetMessage (), " Infinite progress: Report 2" );
209
+ }
210
+
136
211
TEST_F (ProgressReportTest, TestProgressManager) {
137
212
ListenerSP listener_sp =
138
213
CreateListenerFor (lldb::eBroadcastBitProgressCategory);
0 commit comments