package triaina.test.webview;
import org.json.JSONObject;
import android.os.Handler;
import android.test.AndroidTestCase;
import triaina.commons.exception.InvocationRuntimeException;
import triaina.webview.Callback;
import triaina.webview.DeviceBridgeProxy;
import triaina.webview.DeviceBridgeProxy.DummyCallback;
import triaina.webview.DeviceBridgeProxy.WebViewBridgeCallback;
import triaina.webview.config.BridgeMethodConfig;
import triaina.webview.config.BridgeObjectConfig;
import triaina.webview.WebViewBridge;
import triaina.test.mock.MockHandler;
import triaina.test.mock.MockParams;
import triaina.test.mock.MockResult;
public class DeviceBridgeProxyTest extends AndroidTestCase {
private WebViewBridge mWebViewBridge;
private BridgeObjectConfig mConfig1;
private BridgeObjectConfig mConfig2;
private DeviceBridge1 mBridge1;
private DeviceBridge2 mBridge2;
@Override
protected void setUp() throws Exception {
super.setUp();
mWebViewBridge = new WebViewBridge(getContext());
mConfig1 = new BridgeObjectConfig();
mBridge1 = new DeviceBridge1();
mConfig1.add(new BridgeMethodConfig("aaa",
mBridge1.getClass().getMethod("aaa", new Class[]{MockParams.class})));
mConfig1.add(new BridgeMethodConfig("bbb",
mBridge1.getClass().getMethod("bbb", new Class[]{MockParams.class, Callback.class})));
mConfig1.add(new BridgeMethodConfig("ccc",
mBridge1.getClass().getMethod("ccc", new Class[]{MockParams.class, Callback.class})));
mConfig2 = new BridgeObjectConfig();
mBridge2 = new DeviceBridge2();
mConfig2.add(new BridgeMethodConfig("ddd",
mBridge2.getClass().getMethod("ddd", new Class[]{})));
}
public void testDeviceBridgeProxy() {
new DeviceBridgeProxy(mWebViewBridge, new Handler());
}
public void testNotifyToDevice() throws Exception {
DeviceBridgeProxy proxy = new DeviceBridgeProxy(mWebViewBridge, new MockHandler());
proxy.addBridgeObjectConfig(mBridge1, mConfig1);
proxy.notifyToDevice("{'bridge':'" + WebViewBridge.VERSION + "', 'dest':'aaa', 'params':{'aaa':'aaa', 'bbb': 'bbb'}}");
assertEquals("aaa", mBridge1.params.getAaa());
assertEquals("bbb", mBridge1.params.getBbb());
}
public void testNotifyToDeviceUseCallback() throws Exception {
DeviceBridgeProxy proxy = new DeviceBridgeProxy(mWebViewBridge, new MockHandler());
proxy.addBridgeObjectConfig(mBridge1, mConfig1);
proxy.notifyToDevice("{'bridge':'" + WebViewBridge.VERSION + "', 'id': '1', 'dest':'bbb', 'params':{'aaa':'aaa', 'bbb': 'bbb'}}");
assertEquals(WebViewBridgeCallback.class, mBridge1.callback.getClass());
assertEquals("aaa", mBridge1.params.getAaa());
assertEquals("bbb", mBridge1.params.getBbb());
}
public void testNotifyToDeviceUseDummyCallback() throws Exception {
DeviceBridgeProxy proxy = new DeviceBridgeProxy(mWebViewBridge, new MockHandler());
proxy.addBridgeObjectConfig(mBridge1, mConfig1);
proxy.notifyToDevice("{'bridge':'" + WebViewBridge.VERSION + "', 'dest':'ccc', 'params':{'aaa':'aaa', 'bbb': 'bbb'}}");
assertEquals(DummyCallback.class, mBridge1.callback.getClass());
assertEquals("aaa", mBridge1.params.getAaa());
assertEquals("bbb", mBridge1.params.getBbb());
}
public void testNotifyToDeviceNoArgument() {
DeviceBridgeProxy proxy = new DeviceBridgeProxy(mWebViewBridge, new MockHandler());
proxy.addBridgeObjectConfig(mBridge2, mConfig2);
proxy.notifyToDevice("{'bridge':'" + WebViewBridge.VERSION + "', 'dest':'ddd', 'params':{}}");
assertEquals(true, mBridge2.called);
}
public void testValidateParamsVersion() throws Exception {
JSONObject json = new JSONObject();
json.put("bridge", "1.1");
MockDeviceBridgeProxy proxy = new MockDeviceBridgeProxy();
proxy.validateParamsVersion(json);
}
public void testValidateParamsVersionOnException() throws Exception {
JSONObject json = new JSONObject();
json.put("bridge", "0.5");
try {
MockDeviceBridgeProxy proxy = new MockDeviceBridgeProxy();
proxy.validateParamsVersion(json);
fail();
} catch (InvocationRuntimeException exp) {
}
json.put("bridge", "2.0");
try {
MockDeviceBridgeProxy proxy = new MockDeviceBridgeProxy();
proxy.validateParamsVersion(json);
fail();
} catch (InvocationRuntimeException exp) {
}
}
static class DeviceBridge1 {
private MockParams params;
private Callback<MockResult> callback;
public void aaa(MockParams params) {
this.params = params;
}
public void bbb(MockParams params, Callback<MockResult> callback) {
this.params = params;
this.callback = callback;
}
public void ccc(MockParams params, Callback<MockResult> callback) {
this.params = params;
this.callback = callback;
callback.succeed(null, new MockResult());
}
}
static class DeviceBridge2 {
private boolean called;
public void ddd() {
called = true;
}
}
static class MockDeviceBridgeProxy extends DeviceBridgeProxy {
@Override
public void validateParamsVersion(JSONObject json) {
super.validateParamsVersion(json);
}
public MockDeviceBridgeProxy() {
super(null, null);
}
}
}