diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK b/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK index 33f55fc05f9..bf30781eb39 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/BUCK @@ -17,6 +17,7 @@ android_library( react_native_target('java/com/facebook/react/module/annotations:annotations'), react_native_target('java/com/facebook/react/modules/debug:debug'), react_native_target('java/com/facebook/react/modules/systeminfo:systeminfo'), + react_native_target('java/com/facebook/react/packagerconnection:packagerconnection'), react_native_target('res:devsupport'), ], visibility = [ diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java index 45363bb5fef..b273a4a67d4 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java @@ -27,6 +27,7 @@ import com.facebook.react.bridge.UiThreadUtil; import com.facebook.react.common.ReactConstants; import com.facebook.react.common.network.OkHttpCallUtil; import com.facebook.react.modules.systeminfo.AndroidInfoHelpers; +import com.facebook.react.packagerconnection.JSPackagerWebSocketClient; import okhttp3.Call; import okhttp3.Callback; diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java index 6097bb351cd..d71f56261e0 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerImpl.java @@ -53,6 +53,7 @@ import com.facebook.react.common.futures.SimpleSettableFuture; import com.facebook.react.devsupport.DevServerHelper.PackagerCommandListener; import com.facebook.react.devsupport.StackTraceHelper.StackFrame; import com.facebook.react.modules.debug.DeveloperSettings; +import com.facebook.react.packagerconnection.JSPackagerWebSocketClient; import okhttp3.MediaType; import okhttp3.OkHttpClient; diff --git a/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/BUCK b/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/BUCK new file mode 100644 index 00000000000..49b4293a3f9 --- /dev/null +++ b/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/BUCK @@ -0,0 +1,17 @@ +include_defs('//ReactAndroid/DEFS') + +android_library( + name = 'packagerconnection', + srcs = glob(['**/*.java']), + deps = [ + react_native_dep('libraries/fbcore/src/main/java/com/facebook/common/logging:logging'), + react_native_dep('third-party/java/infer-annotations:infer-annotations'), + react_native_dep('third-party/java/jsr-305:jsr-305'), + react_native_dep('third-party/java/okhttp:okhttp3'), + react_native_dep('third-party/java/okhttp:okhttp3-ws'), + react_native_dep('third-party/java/okio:okio'), + ], + visibility = [ + 'PUBLIC', + ], +) diff --git a/ReactAndroid/src/main/java/com/facebook/react/devsupport/JSPackagerWebSocketClient.java b/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/JSPackagerWebSocketClient.java similarity index 97% rename from ReactAndroid/src/main/java/com/facebook/react/devsupport/JSPackagerWebSocketClient.java rename to ReactAndroid/src/main/java/com/facebook/react/packagerconnection/JSPackagerWebSocketClient.java index 63764b79095..d5e905afed7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/devsupport/JSPackagerWebSocketClient.java +++ b/ReactAndroid/src/main/java/com/facebook/react/packagerconnection/JSPackagerWebSocketClient.java @@ -6,7 +6,7 @@ * file in the same directory. */ -package com.facebook.react.devsupport; +package com.facebook.react.packagerconnection; import javax.annotation.Nullable; @@ -161,7 +161,9 @@ public class JSPackagerWebSocketClient implements WebSocketListener { action = reader.nextString(); } } - if (version != 1) { + reader.close(); + + if (version == null || version != 1) { return; } if (target == null || action == null) { diff --git a/ReactAndroid/src/test/java/com/facebook/react/packagerconnection/BUCK b/ReactAndroid/src/test/java/com/facebook/react/packagerconnection/BUCK new file mode 100644 index 00000000000..1f9f4f0eb0b --- /dev/null +++ b/ReactAndroid/src/test/java/com/facebook/react/packagerconnection/BUCK @@ -0,0 +1,22 @@ +include_defs('//ReactAndroid/DEFS') + +rn_robolectric_test( + name = 'packagerconnection', + # Please change the contact to the oncall of your team + contacts = ['oncall+fbandroid_sheriff@xmail.facebook.com'], + srcs = glob(['**/*.java']), + deps = [ + react_native_dep('libraries/fbcore/src/test/java/com/facebook/powermock:powermock'), + react_native_dep('third-party/java/fest:fest'), + react_native_dep('third-party/java/jsr-305:jsr-305'), + react_native_dep('third-party/java/junit:junit'), + react_native_dep('third-party/java/mockito:mockito'), + react_native_dep('third-party/java/okhttp:okhttp3'), + react_native_dep('third-party/java/okhttp:okhttp3-ws'), + react_native_dep('third-party/java/robolectric3/robolectric:robolectric'), + react_native_target('java/com/facebook/react/packagerconnection:packagerconnection'), + ], + visibility = [ + 'PUBLIC' + ], +) diff --git a/ReactAndroid/src/test/java/com/facebook/react/devsupport/JSPackagerWebSocketClientTest.java b/ReactAndroid/src/test/java/com/facebook/react/packagerconnection/JSPackagerWebSocketClientTest.java similarity index 58% rename from ReactAndroid/src/test/java/com/facebook/react/devsupport/JSPackagerWebSocketClientTest.java rename to ReactAndroid/src/test/java/com/facebook/react/packagerconnection/JSPackagerWebSocketClientTest.java index f3d40e4a7f9..4e6c885ce2f 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/devsupport/JSPackagerWebSocketClientTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/packagerconnection/JSPackagerWebSocketClientTest.java @@ -7,17 +7,13 @@ * of patent rights can be found in the PATENTS file in the same directory. */ -package com.facebook.react.devsupport; +package com.facebook.react.packagerconnection; import org.junit.Test; import org.junit.runner.RunWith; -import org.robolectric.ParameterizedRobolectricTestRunner; import java.io.IOException; -import java.util.Arrays; -import java.util.Collection; -import okhttp3.MediaType; import okhttp3.ResponseBody; import okhttp3.ws.WebSocket; @@ -32,12 +28,10 @@ public class JSPackagerWebSocketClientTest { final JSPackagerWebSocketClient.JSPackagerCallback callback = mock(JSPackagerWebSocketClient.JSPackagerCallback.class); final JSPackagerWebSocketClient client = new JSPackagerWebSocketClient("ws://not_needed", callback); - client.onMessage(ResponseBody.create(WebSocket.TEXT, - "{\"version\": 1, \"target\": \"targetValue\", \"action\": \"actionValue\"}")); - verify(callback).onMessage( - any(JSPackagerWebSocketClient.WebSocketSender.class), - eq("targetValue"), - eq("actionValue")); + client.onMessage(ResponseBody.create( + WebSocket.TEXT, + "{\"version\": 1, \"target\": \"targetValue\", \"action\": \"actionValue\"}")); + verify(callback).onMessage(any(JSPackagerWebSocketClient.WebSocketSender.class), eq("targetValue"), eq("actionValue")); } @Test @@ -45,12 +39,10 @@ public class JSPackagerWebSocketClientTest { final JSPackagerWebSocketClient.JSPackagerCallback callback = mock(JSPackagerWebSocketClient.JSPackagerCallback.class); final JSPackagerWebSocketClient client = new JSPackagerWebSocketClient("ws://not_needed", callback); - client.onMessage(ResponseBody.create(WebSocket.BINARY, - "{\"version\": 1, \"target\": \"targetValue\", \"action\": \"actionValue\"}")); - verify(callback, never()).onMessage( - any(JSPackagerWebSocketClient.WebSocketSender.class), - anyString(), - anyString()); + client.onMessage(ResponseBody.create( + WebSocket.BINARY, + "{\"version\": 1, \"target\": \"targetValue\", \"action\": \"actionValue\"}")); + verify(callback, never()).onMessage(any(JSPackagerWebSocketClient.WebSocketSender.class), anyString(), anyString()); } @Test @@ -58,12 +50,10 @@ public class JSPackagerWebSocketClientTest { final JSPackagerWebSocketClient.JSPackagerCallback callback = mock(JSPackagerWebSocketClient.JSPackagerCallback.class); final JSPackagerWebSocketClient client = new JSPackagerWebSocketClient("ws://not_needed", callback); - client.onMessage(ResponseBody.create(WebSocket.TEXT, - "{\"version\": 1, \"action\": \"actionValue\"}")); - verify(callback, never()).onMessage( - any(JSPackagerWebSocketClient.WebSocketSender.class), - anyString(), - anyString()); + client.onMessage(ResponseBody.create( + WebSocket.TEXT, + "{\"version\": 1, \"action\": \"actionValue\"}")); + verify(callback, never()).onMessage(any(JSPackagerWebSocketClient.WebSocketSender.class), anyString(), anyString()); } @Test @@ -71,12 +61,10 @@ public class JSPackagerWebSocketClientTest { final JSPackagerWebSocketClient.JSPackagerCallback callback = mock(JSPackagerWebSocketClient.JSPackagerCallback.class); final JSPackagerWebSocketClient client = new JSPackagerWebSocketClient("ws://not_needed", callback); - client.onMessage(ResponseBody.create(WebSocket.TEXT, - "{\"version\": 1, \"target\": null, \"action\": \"actionValue\"}")); - verify(callback, never()).onMessage( - any(JSPackagerWebSocketClient.WebSocketSender.class), - anyString(), - anyString()); + client.onMessage(ResponseBody.create( + WebSocket.TEXT, + "{\"version\": 1, \"target\": null, \"action\": \"actionValue\"}")); + verify(callback, never()).onMessage(any(JSPackagerWebSocketClient.WebSocketSender.class), anyString(), anyString()); } @Test @@ -84,12 +72,10 @@ public class JSPackagerWebSocketClientTest { final JSPackagerWebSocketClient.JSPackagerCallback callback = mock(JSPackagerWebSocketClient.JSPackagerCallback.class); final JSPackagerWebSocketClient client = new JSPackagerWebSocketClient("ws://not_needed", callback); - client.onMessage(ResponseBody.create(WebSocket.TEXT, - "{\"version\": 1, \"target\": \"targetValue\"}")); - verify(callback, never()).onMessage( - any(JSPackagerWebSocketClient.WebSocketSender.class), - anyString(), - anyString()); + client.onMessage(ResponseBody.create( + WebSocket.TEXT, + "{\"version\": 1, \"target\": \"targetValue\"}")); + verify(callback, never()).onMessage(any(JSPackagerWebSocketClient.WebSocketSender.class), anyString(), anyString()); } @Test @@ -97,12 +83,10 @@ public class JSPackagerWebSocketClientTest { final JSPackagerWebSocketClient.JSPackagerCallback callback = mock(JSPackagerWebSocketClient.JSPackagerCallback.class); final JSPackagerWebSocketClient client = new JSPackagerWebSocketClient("ws://not_needed", callback); - client.onMessage(ResponseBody.create(WebSocket.TEXT, - "{\"version\": 1, \"target\": \"targetValue\", \"action\": null}")); - verify(callback, never()).onMessage( - any(JSPackagerWebSocketClient.WebSocketSender.class), - anyString(), - anyString()); + client.onMessage(ResponseBody.create( + WebSocket.TEXT, + "{\"version\": 1, \"target\": \"targetValue\", \"action\": null}")); + verify(callback, never()).onMessage(any(JSPackagerWebSocketClient.WebSocketSender.class), anyString(), anyString()); } @Test @@ -110,11 +94,9 @@ public class JSPackagerWebSocketClientTest { final JSPackagerWebSocketClient.JSPackagerCallback callback = mock(JSPackagerWebSocketClient.JSPackagerCallback.class); final JSPackagerWebSocketClient client = new JSPackagerWebSocketClient("ws://not_needed", callback); - client.onMessage(ResponseBody.create(WebSocket.TEXT, - "{\"version\": 2, \"target\": \"targetValue\", \"action\": \"actionValue\"}")); - verify(callback, never()).onMessage( - any(JSPackagerWebSocketClient.WebSocketSender.class), - anyString(), - anyString()); + client.onMessage(ResponseBody.create( + WebSocket.TEXT, + "{\"version\": 2, \"target\": \"targetValue\", \"action\": \"actionValue\"}")); + verify(callback, never()).onMessage(any(JSPackagerWebSocketClient.WebSocketSender.class), anyString(), anyString()); } }