- ret = bt_ctf_trace_visit(trace, visitor, &state);
- ok(!ret, "bt_ctf_trace_visit returned success");
+ ret = bt_ctf_trace_add_listener(trace, visitor, &state);
+ ok(!ret, "bt_ctf_trace_add_listener returned success");
+
+ /*
+ * Validate that listeners are notified when new objects are added to a
+ * trace.
+ */
+ sc3 = bt_ctf_stream_class_create("sc3");
+ if (!sc3) {
+ diag("Failed to create stream class, aborting.");
+ exit(-1);
+ }
+
+ ec4 = init_event_class("ec4");
+ ec5 = init_event_class("ec5");
+ if (!ec4 || !ec5) {
+ diag("Failed to create event classes, aborting.");
+ exit(-1);
+ }
+
+ ret = bt_ctf_stream_class_add_event_class(sc3, ec4);
+ if (ret) {
+ diag("Failed to add event class to stream class, aborting.");
+ }
+
+ index = state.i;
+ ret = bt_ctf_trace_add_stream_class(trace, sc3);
+ if (ret) {
+ diag("Failed to add stream class sc3 to trace, aborting.");
+ exit(-1);
+ }
+
+ /* Listener should have been invoked two times (sc3 + ec4). */
+ ok(index + 2 == state.i, "trace modification listener has been invoked twice after addition of a stream class");
+
+ index = state.i;
+ ret = bt_ctf_stream_class_add_event_class(sc3, ec5);
+ if (ret) {
+ diag("Failed to add event class to stream class, aborting.");
+ exit(-1);
+ }
+
+ ok(index + 1 == state.i, "trace modification has been invoked once after addition of an event class");