Yuvipanda has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/93863


Change subject: Add test cases for CommunicationsBridge
......................................................................

Add test cases for CommunicationsBridge

Test and related files need to be in the wikipedia/ project
than the wikipedia-it project, since the test cases are run
with the context of the wikipedia/ project.

Also added a 'injectScript' feature to the bridge that lets
javascript be loaded dynamically at runtime.

Change-Id: Ibe0ef8f5e6efc13f56960e10b7e0de6fa9f461db
---
A wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/BridgeTests.java
M wikipedia/assets/bridge.js
A wikipedia/assets/tests/pingback.js
3 files changed, 87 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/63/93863/1

diff --git 
a/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/BridgeTests.java 
b/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/BridgeTests.java
new file mode 100644
index 0000000..af8135d
--- /dev/null
+++ b/wikipedia-it/src/main/java/org/wikimedia/wikipedia/test/BridgeTests.java
@@ -0,0 +1,74 @@
+package org.wikimedia.wikipedia.test;
+
+import android.content.Intent;
+import android.test.ActivityUnitTestCase;
+import android.webkit.WebView;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.wikimedia.wikipedia.CommunicationBridge;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+public class BridgeTests extends ActivityUnitTestCase<TestDummyActivity> {
+    public BridgeTests() {
+        super(TestDummyActivity.class);
+    }
+
+    private CommunicationBridge bridge;
+
+    public void testDOMLoaded() throws Throwable {
+        final CountDownLatch completionLatch = new CountDownLatch(1);
+        runTestOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                startActivity(new Intent(), null, null);
+                WebView webView = new WebView(getActivity());
+                bridge = new CommunicationBridge(webView, 
"file:///android_asset/index.html");
+                bridge.addListener("DOMLoaded", new 
CommunicationBridge.JSEventListener() {
+                    @Override
+                    public void onMessage(String messageType, JSONObject 
messagePayload) {
+                        assertEquals(messageType, "DOMLoaded");
+                        completionLatch.countDown();
+                    }
+                });
+            }
+        });
+        assertTrue(completionLatch.await(2000, TimeUnit.MILLISECONDS));
+    }
+
+    public void testPingBackHandling() throws Throwable {
+        final CountDownLatch completionLatch = new CountDownLatch(1);
+        runTestOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                startActivity(new Intent(), null, null);
+                WebView webView = new WebView(getActivity());
+                bridge = new CommunicationBridge(webView, 
"file:///android_asset/index.html");
+                final JSONObject payload = new JSONObject();
+                try {
+                    payload.put("src", 
"file:///android_asset/tests/pingback.js");
+                } catch (JSONException e) {
+                    throw new RuntimeException(e); // JESUS CHRIST, JAVA!
+                }
+                bridge.sendMessage("injectScript", payload);
+                bridge.addListener("pingBackLoaded", new 
CommunicationBridge.JSEventListener() {
+                    @Override
+                    public void onMessage(String messageType, JSONObject 
messagePayload) {
+                        assertEquals(messageType, "pingBackLoaded");
+                        bridge.sendMessage("ping", payload);
+                        bridge.addListener("pong", new 
CommunicationBridge.JSEventListener() {
+                            @Override
+                            public void onMessage(String messageType, 
JSONObject messagePayload) {
+                                assertEquals(messageType, "pong");
+                                assertEquals(messagePayload.toString(), 
payload.toString());
+                                completionLatch.countDown();
+                            }
+                        });
+                    }
+                });
+            }
+        });
+        assertTrue(completionLatch.await(2000, TimeUnit.MILLISECONDS));
+    }
+}
diff --git a/wikipedia/assets/bridge.js b/wikipedia/assets/bridge.js
index 4d13b8d..85f3d0b 100644
--- a/wikipedia/assets/bridge.js
+++ b/wikipedia/assets/bridge.js
@@ -28,6 +28,13 @@
 
     window.bridge = new Bridge();
 
+    bridge.registerListener( "injectScript", function( payload ) {
+        var script = document.createElement( "script" );
+        script.type = "text/javascript";
+        script.src = payload.src;
+        document.getElementsByTagName( "head" )[0].appendChild( script );
+    });
+
     window.onload = function() {
         bridge.sendMessage( "DOMLoaded", {} );
     };
diff --git a/wikipedia/assets/tests/pingback.js 
b/wikipedia/assets/tests/pingback.js
new file mode 100644
index 0000000..07ef5d6
--- /dev/null
+++ b/wikipedia/assets/tests/pingback.js
@@ -0,0 +1,6 @@
+(function() {
+    bridge.sendMessage( "pingBackLoaded", {} );
+    bridge.registerListener( "ping", function( payload ) {
+        bridge.sendMessage( "pong", payload );
+    });
+} )();

-- 
To view, visit https://gerrit.wikimedia.org/r/93863
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibe0ef8f5e6efc13f56960e10b7e0de6fa9f461db
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to