From a3038c1643a4b8c48c5c09290ddf0247aaf12519 Mon Sep 17 00:00:00 2001 From: Didier Garcia Date: Tue, 16 May 2023 13:24:56 -0400 Subject: [PATCH 1/2] Use copies of Events in the Mediator instead of referring to the same event which has side-effect issues. --- .../com/segment/analytics/kotlin/core/platform/Mediator.kt | 5 +++-- .../kotlin/core/platform/plugins/DestinationPluginTests.kt | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/segment/analytics/kotlin/core/platform/Mediator.kt b/core/src/main/java/com/segment/analytics/kotlin/core/platform/Mediator.kt index 0fcfbf92..d9264840 100644 --- a/core/src/main/java/com/segment/analytics/kotlin/core/platform/Mediator.kt +++ b/core/src/main/java/com/segment/analytics/kotlin/core/platform/Mediator.kt @@ -30,13 +30,14 @@ internal class Mediator(internal var plugins: CopyOnWriteArrayList = Cop plugins.forEach { plugin -> result?.let { + var copy = it.copy() try { when (plugin) { is DestinationPlugin -> { - plugin.execute(it) + plugin.execute(copy) } else -> { - result = plugin.execute(it) + result = plugin.execute(copy) } } } catch (t: Throwable) { diff --git a/core/src/test/kotlin/com/segment/analytics/kotlin/core/platform/plugins/DestinationPluginTests.kt b/core/src/test/kotlin/com/segment/analytics/kotlin/core/platform/plugins/DestinationPluginTests.kt index 1db724aa..c1e8e3b2 100644 --- a/core/src/test/kotlin/com/segment/analytics/kotlin/core/platform/plugins/DestinationPluginTests.kt +++ b/core/src/test/kotlin/com/segment/analytics/kotlin/core/platform/plugins/DestinationPluginTests.kt @@ -155,7 +155,9 @@ class DestinationPluginTests { val result = timeline.process(trackEvent) - assertEquals(expected, result) + assertEquals(expected.type, result?.type) + assertEquals(expected.event, (result as TrackEvent).event) + assertEquals(expected.properties, (result as TrackEvent).properties) } @Test From 8a2fb823e73849d97051e4c764b6a9293a8170ab Mon Sep 17 00:00:00 2001 From: Didier Garcia Date: Tue, 16 May 2023 13:31:59 -0400 Subject: [PATCH 2/2] update to val. --- .../java/com/segment/analytics/kotlin/core/platform/Mediator.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/com/segment/analytics/kotlin/core/platform/Mediator.kt b/core/src/main/java/com/segment/analytics/kotlin/core/platform/Mediator.kt index d9264840..e51ed831 100644 --- a/core/src/main/java/com/segment/analytics/kotlin/core/platform/Mediator.kt +++ b/core/src/main/java/com/segment/analytics/kotlin/core/platform/Mediator.kt @@ -30,7 +30,7 @@ internal class Mediator(internal var plugins: CopyOnWriteArrayList = Cop plugins.forEach { plugin -> result?.let { - var copy = it.copy() + val copy = it.copy() try { when (plugin) { is DestinationPlugin -> {