test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/HttpServer.java in calabash-android-0.5.1 vs test-server/instrumentation-backend/src/sh/calaba/instrumentationbackend/actions/HttpServer.java in calabash-android-0.5.2.pre1
- old
+ new
@@ -7,10 +7,11 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.InterruptedException;
import java.lang.Override;
import java.lang.Runnable;
+import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Properties;
@@ -21,14 +22,18 @@
import sh.calaba.instrumentationbackend.Command;
import sh.calaba.instrumentationbackend.FranklyResult;
import sh.calaba.instrumentationbackend.InstrumentationBackend;
import sh.calaba.instrumentationbackend.Result;
import sh.calaba.instrumentationbackend.json.JSONUtils;
+import sh.calaba.instrumentationbackend.query.InvocationOperation;
+import sh.calaba.instrumentationbackend.query.Operation;
import sh.calaba.instrumentationbackend.query.Query;
import sh.calaba.instrumentationbackend.query.QueryResult;
import sh.calaba.org.codehaus.jackson.map.ObjectMapper;
+import android.app.Application;
+import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AlphaAnimation;
@@ -121,11 +126,52 @@
} catch (Exception e ) {
e.printStackTrace();
errorResult = FranklyResult.fromThrowable(e);
}
return new NanoHTTPD.Response(HTTP_INTERNALERROR, "application/json;charset=utf-8", errorResult.asJson());
- }
+ }
+ else if (uri.endsWith("/backdoor")) {
+ try {
+ String json = params.getProperty("json");
+ ObjectMapper mapper = new ObjectMapper();
+ Map backdoorMethod = mapper.readValue(json, Map.class);
+
+ String methodName = (String) backdoorMethod.get("method_name");
+ List arguments = (List) backdoorMethod.get("arguments");
+ Operation operation = new InvocationOperation(methodName, arguments);
+
+ Application application = InstrumentationBackend.solo.getCurrentActivity().getApplication();
+ Object invocationResult;
+
+ invocationResult = operation.apply(application);
+
+ if (invocationResult instanceof Map && ((Map) invocationResult).containsKey("error")) {
+ Context context = getRootView().getContext();
+ invocationResult = operation.apply(context);
+ }
+
+ Map<String, String> result = new HashMap<String, String>();
+
+ if (invocationResult instanceof Map && ((Map) invocationResult).containsKey("error")) {
+ result.put("outcome", "ERROR");
+ result.put("result", (String) ((Map) invocationResult).get("error"));
+ result.put("details", invocationResult.toString());
+ } else {
+ result.put("outcome", "SUCCESS");
+ result.put("result", String.valueOf(invocationResult));
+ }
+
+ ObjectMapper resultMapper = new ObjectMapper();
+
+ return new NanoHTTPD.Response(HTTP_OK, "application/json;charset=utf-8", resultMapper.writeValueAsString(result));
+ } catch (Exception e) {
+ e.printStackTrace();
+ Exception ex = new Exception("Could not invoke method", e);
+
+ return new NanoHTTPD.Response(HTTP_OK, "application/json;charset=utf-8", FranklyResult.fromThrowable(ex).asJson());
+ }
+ }
else if (uri.endsWith("/map")) {
FranklyResult errorResult = null;
try {
String commandString = params.getProperty("json");
ObjectMapper mapper = new ObjectMapper();
@@ -187,10 +233,29 @@
}
return new NanoHTTPD.Response(HTTP_OK, "application/json;charset=utf-8", errorResult.asJson());
} else if (uri.endsWith("/query")) {
return new Response(HTTP_BADREQUEST, MIME_PLAINTEXT,
"/query endpoint is discontinued - use /map with operation query");
- } else if (uri.endsWith("/kill")) {
+ } else if (uri.endsWith("/gesture")) {
+ FranklyResult errorResult;
+
+ try {
+ String json = params.getProperty("json");
+ ObjectMapper mapper = new ObjectMapper();
+ Map gesture = mapper.readValue(json, Map.class);
+
+ (new MultiTouchGesture(gesture)).perform();
+
+ return new NanoHTTPD.Response(HTTP_OK, "application/json;charset=utf-8",
+ FranklyResult.successResult(new QueryResult(Collections.emptyList())).asJson());
+
+ } catch (Exception e ) {
+ e.printStackTrace();
+ errorResult = FranklyResult.fromThrowable(e);
+ }
+
+ return new NanoHTTPD.Response(HTTP_OK, "application/json;charset=utf-8", errorResult.asJson());
+ } else if (uri.endsWith("/kill")) {
lock.lock();
try {
running = false;
System.out.println("Stopping test server");
stop();