Skip to content

Commit

Permalink
Fixes bug in TraceListener implementation
Browse files Browse the repository at this point in the history
Summary: Fixes bug in TraceListener implementation

Reviewed By: fabiocarballo

Differential Revision: D55187241

fbshipit-source-id: 7698360b486b524e8678b2089136ee630d2b4adc
  • Loading branch information
adityasharat authored and facebook-github-bot committed Mar 21, 2024
1 parent 81b8388 commit 20cda45
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ object DebugEventDispatcher {
val subscribersToNotify =
subscribers.filter { subscriber ->
val matches = subscriber.events.contains(type) || subscriber.events.contains(All)
if (subscriber is TraceListener<*>) {
if (matches && subscriber is TraceListener<*>) {
traceListeners.add(subscriber as TraceListener<Any?>)
}
return@filter matches
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -422,20 +422,39 @@ class DebugEventsTest {

@Test
fun `trace event should be dispatched to trace listeners`() {
val traceListener0 = TestTraceListener("random")
DebugEventBus.subscribe(traceListener0)

val traceListener1 = TestTraceListener()
DebugEventBus.subscribe(traceListener1)

DebugEventDispatcher.trace(type = TestEvent, renderStateId = { TestRenderStateId }) {}

assertThat(traceListener0.records.size).isEqualTo(0)
assertThat(traceListener1.records.size).isEqualTo(1)

val traceListener2 = TestTraceListener()
DebugEventBus.subscribe(traceListener2)

DebugEventDispatcher.trace(type = TestEvent, renderStateId = { TestRenderStateId }) {}

assertThat(traceListener0.records.size).isEqualTo(0)
assertThat(traceListener1.records.size).isEqualTo(2)
assertThat(traceListener2.records.size).isEqualTo(1)

DebugEventBus.unsubscribe(traceListener1)

DebugEventDispatcher.trace(type = TestEvent, renderStateId = { TestRenderStateId }) {}

assertThat(traceListener0.records.size).isEqualTo(0)
assertThat(traceListener1.records.size).isEqualTo(2)
assertThat(traceListener2.records.size).isEqualTo(2)

DebugEventDispatcher.trace(type = "random", renderStateId = { TestRenderStateId }) {}

assertThat(traceListener0.records.size).isEqualTo(1)
assertThat(traceListener1.records.size).isEqualTo(2)
assertThat(traceListener2.records.size).isEqualTo(2)
}

class TestEventSubscriber(val listener: (DebugEvent) -> Unit) : DebugEventSubscriber(TestEvent) {
Expand All @@ -453,7 +472,9 @@ class DebugEventsTest {
}
}

class TestTraceListener : TraceListener<Int>, DebugEventSubscriber(TestEvent) {
class TestTraceListener(
vararg events: String = arrayOf(TestEvent),
) : TraceListener<Int>, DebugEventSubscriber(*events) {

val records = mutableListOf<Any>()

Expand Down

0 comments on commit 20cda45

Please sign in to comment.