From 365ce86320915e8db67275390d22d0005760e120 Mon Sep 17 00:00:00 2001 From: Alon Parker Date: Mon, 19 Apr 2021 20:39:30 +0500 Subject: [PATCH] fixed socket release logic --- .../kotlin/org/phoenixframework/Socket.kt | 11 ++++---- .../kotlin/org/phoenixframework/SocketTest.kt | 25 ++++++++++++++++++- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/org/phoenixframework/Socket.kt b/src/main/kotlin/org/phoenixframework/Socket.kt index 305c93d..6e208ad 100644 --- a/src/main/kotlin/org/phoenixframework/Socket.kt +++ b/src/main/kotlin/org/phoenixframework/Socket.kt @@ -66,11 +66,10 @@ internal class StateChangeCallbacks { /** Clears any callbacks with the matching refs */ fun release(refs: List) { - open = open.filter { refs.contains(it.first) } - close = close.filter { refs.contains(it.first) } - error = error.filter { refs.contains(it.first) } - message = message.filter { refs.contains(it.first) } - + open = open.filterNot { refs.contains(it.first) } + close = close.filterNot { refs.contains(it.first) } + error = error.filterNot { refs.contains(it.first) } + message = message.filterNot { refs.contains(it.first) } } /** Clears all stored callbacks */ @@ -556,4 +555,4 @@ class Socket( this.stateChangeCallbacks.error.forEach { it.second.invoke(t, response) } } -} \ No newline at end of file +} diff --git a/src/test/kotlin/org/phoenixframework/SocketTest.kt b/src/test/kotlin/org/phoenixframework/SocketTest.kt index bd1397a..062ad1c 100644 --- a/src/test/kotlin/org/phoenixframework/SocketTest.kt +++ b/src/test/kotlin/org/phoenixframework/SocketTest.kt @@ -423,6 +423,29 @@ class SocketTest { /* End Remove */ } + @Nested + @DisplayName("release") + inner class Release { + @Test + internal fun `Clears any callbacks with the matching refs`() { + socket.stateChangeCallbacks.onOpen("1") {} + socket.stateChangeCallbacks.onOpen("2") {} + socket.stateChangeCallbacks.onClose("1") {} + socket.stateChangeCallbacks.onClose("2") {} + socket.stateChangeCallbacks.onError("1") { _: Throwable, _: Response? -> } + socket.stateChangeCallbacks.onError("2") { _: Throwable, _: Response? -> } + socket.stateChangeCallbacks.onMessage("1") { } + socket.stateChangeCallbacks.onMessage("2") { } + + socket.stateChangeCallbacks.release(listOf("1")) + + assertThat(socket.stateChangeCallbacks.open).doesNotContain("1") + assertThat(socket.stateChangeCallbacks.close).doesNotContain("1") + assertThat(socket.stateChangeCallbacks.error).doesNotContain("1") + assertThat(socket.stateChangeCallbacks.message).doesNotContain("1") + } + } + @Nested @DisplayName("push") inner class Push { @@ -1040,4 +1063,4 @@ class SocketTest { } -} \ No newline at end of file +}