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