@@ -425,3 +425,104 @@ TEST_F(ProgressReportTest, TestProgressManagerDisjointReports) {
425
425
426
426
ASSERT_FALSE (listener_sp->GetEvent (event_sp, TIMEOUT));
427
427
}
428
+
429
+ TEST_F (ProgressReportTest, TestExternalReportCreation) {
430
+ ListenerSP listener_sp =
431
+ CreateListenerFor (lldb::eBroadcastBitExternalProgress);
432
+ EventSP event_sp;
433
+ const ProgressEventData *data;
434
+
435
+ // Scope this for RAII on the progress objects.
436
+ // Create progress reports and check that their respective events for having
437
+ // started and ended are broadcasted.
438
+ {
439
+ Progress progress1 (" Progress report 1" , " Starting report 1" ,
440
+ /* total=*/ std::nullopt, /* debugger=*/ nullptr ,
441
+ /* minimum_report_time=*/ std::chrono::seconds (0 ),
442
+ Progress::Origin::eExternal);
443
+ Progress progress2 (" Progress report 2" , " Starting report 2" ,
444
+ /* total=*/ std::nullopt, /* debugger=*/ nullptr ,
445
+ /* minimum_report_time=*/ std::chrono::seconds (0 ),
446
+ Progress::Origin::eExternal);
447
+ Progress progress3 (" Progress report 3" , " Starting report 3" ,
448
+ /* total=*/ std::nullopt, /* debugger=*/ nullptr ,
449
+ /* minimum_report_time=*/ std::chrono::seconds (0 ),
450
+ Progress::Origin::eExternal);
451
+ }
452
+
453
+ // Start popping events from the queue, they should have been recevied
454
+ // in this order:
455
+ // Starting progress: 1, 2, 3
456
+ // Ending progress: 3, 2, 1
457
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
458
+ data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
459
+
460
+ EXPECT_EQ (data->GetDetails (), " Starting report 1" );
461
+ EXPECT_FALSE (data->IsFinite ());
462
+ EXPECT_FALSE (data->GetCompleted ());
463
+ EXPECT_EQ (data->GetTotal (), Progress::kNonDeterministicTotal );
464
+ EXPECT_EQ (data->GetMessage (), " Progress report 1: Starting report 1" );
465
+
466
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
467
+ data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
468
+
469
+ EXPECT_EQ (data->GetDetails (), " Starting report 2" );
470
+ EXPECT_FALSE (data->IsFinite ());
471
+ EXPECT_FALSE (data->GetCompleted ());
472
+ EXPECT_EQ (data->GetTotal (), Progress::kNonDeterministicTotal );
473
+ EXPECT_EQ (data->GetMessage (), " Progress report 2: Starting report 2" );
474
+
475
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
476
+ data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
477
+
478
+ EXPECT_EQ (data->GetDetails (), " Starting report 3" );
479
+ EXPECT_FALSE (data->IsFinite ());
480
+ EXPECT_FALSE (data->GetCompleted ());
481
+ EXPECT_EQ (data->GetTotal (), Progress::kNonDeterministicTotal );
482
+ EXPECT_EQ (data->GetMessage (), " Progress report 3: Starting report 3" );
483
+
484
+ // Progress report objects should be destroyed at this point so
485
+ // get each report from the queue and check that they've been
486
+ // destroyed in reverse order.
487
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
488
+ data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
489
+
490
+ EXPECT_EQ (data->GetTitle (), " Progress report 3" );
491
+ EXPECT_TRUE (data->GetCompleted ());
492
+ EXPECT_FALSE (data->IsFinite ());
493
+ EXPECT_EQ (data->GetMessage (), " Progress report 3: Starting report 3" );
494
+
495
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
496
+ data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
497
+
498
+ EXPECT_EQ (data->GetTitle (), " Progress report 2" );
499
+ EXPECT_TRUE (data->GetCompleted ());
500
+ EXPECT_FALSE (data->IsFinite ());
501
+ EXPECT_EQ (data->GetMessage (), " Progress report 2: Starting report 2" );
502
+
503
+ ASSERT_TRUE (listener_sp->GetEvent (event_sp, TIMEOUT));
504
+ data = ProgressEventData::GetEventDataFromEvent (event_sp.get ());
505
+
506
+ EXPECT_EQ (data->GetTitle (), " Progress report 1" );
507
+ EXPECT_TRUE (data->GetCompleted ());
508
+ EXPECT_FALSE (data->IsFinite ());
509
+ EXPECT_EQ (data->GetMessage (), " Progress report 1: Starting report 1" );
510
+ }
511
+
512
+ TEST_F (ProgressReportTest, TestExternalReportNotReceived) {
513
+ ListenerSP listener_sp = CreateListenerFor (lldb::eBroadcastBitProgress);
514
+ EventSP event_sp;
515
+
516
+ // Scope this for RAII on the progress objects.
517
+ // Create progress reports and check that their respective events for having
518
+ // started and ended are broadcasted.
519
+ {
520
+ Progress progress1 (" External Progress report 1" ,
521
+ " Starting external report 1" ,
522
+ /* total=*/ std::nullopt, /* debugger=*/ nullptr ,
523
+ /* minimum_report_time=*/ std::chrono::seconds (0 ),
524
+ Progress::Origin::eExternal);
525
+ }
526
+
527
+ ASSERT_FALSE (listener_sp->GetEvent (event_sp, TIMEOUT));
528
+ }
0 commit comments