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();