From bd5126e4e09a4959129f57af17ad964d41ba3f03 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Mon, 27 Apr 2015 10:52:51 +0300 Subject: [PATCH 01/46] make global object read only --- src/jni/com_tns_Platform.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/jni/com_tns_Platform.cpp b/src/jni/com_tns_Platform.cpp index 9c9c88599..eaaca4360 100644 --- a/src/jni/com_tns_Platform.cpp +++ b/src/jni/com_tns_Platform.cpp @@ -113,6 +113,8 @@ void PrepareV8Runtime(Isolate *isolate, JEnv& env, jstring filesPath, jstring pa auto globalTemplate = ObjectTemplate::New(); + const auto readOnlyFlags = static_cast(PropertyAttribute::DontDelete | PropertyAttribute::ReadOnly); + globalTemplate->Set(ConvertToV8String("__startNDKProfiler"), FunctionTemplate::New(isolate, Profiler::StartNDKProfilerCallback)); globalTemplate->Set(ConvertToV8String("__stopNDKProfiler"), FunctionTemplate::New(isolate, Profiler::StopNDKProfilerCallback)); globalTemplate->Set(ConvertToV8String("__startCPUProfiler"), FunctionTemplate::New(isolate, Profiler::StartCPUProfilerCallback)); @@ -143,10 +145,10 @@ void PrepareV8Runtime(Isolate *isolate, JEnv& env, jstring filesPath, jstring pa auto appTemplate = ObjectTemplate::New(); appTemplate->Set(ConvertToV8String("init"), FunctionTemplate::New(isolate, AppInitCallback)); auto appInstance = appTemplate->NewInstance(); - global->Set(ConvertToV8String("app"), appInstance); + global->ForceSet(ConvertToV8String("app"), appInstance, readOnlyFlags); - global->Set(ConvertToV8String("global"), global); - global->Set(ConvertToV8String("__global"), global); + global->ForceSet(ConvertToV8String("global"), global, readOnlyFlags); + global->ForceSet(ConvertToV8String("__global"), global, readOnlyFlags); ArgConverter::Init(g_jvm); From a2d45b5347efc46e4274ea6d5b914635dece0382 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Mon, 27 Apr 2015 14:24:05 +0300 Subject: [PATCH 02/46] rename global functions --- src/assets/app/bootstrap.js | 4 +- src/assets/internal/prepareExtend.js | 4 +- src/jni/JsDebugger.cpp | 22 ++ src/jni/JsDebugger.h | 3 + src/jni/NativeScriptRuntime.cpp | 7 +- src/jni/NativeScriptRuntime.h | 4 +- src/jni/com_tns_Platform.cpp | 19 +- src/src/com/tns/JsDebugger.java | 70 +++-- test-app/assets/app/bootstrap.js | 4 +- test-app/assets/app/mainpage.js | 14 +- test-app/assets/app/modules/module.js | 4 +- test-app/assets/app/simplemodule.js | 6 +- .../tests/dispatchCallbacksOnUiThreadTests.js | 2 +- .../app/tests/exceptionHandlingTests.js | 22 +- .../assets/app/tests/extendClassNameTests.js | 4 +- .../assets/app/tests/finalFieldsSetTests.js | 2 +- .../tests/inheritanceChainResolutionTest.js | 4 +- .../app/tests/numericConversionTests.js | 48 ++-- .../assets/app/tests/propertyAccessTests.js | 8 +- .../assets/app/tests/stringConversionTests.js | 8 +- test-app/assets/app/tests/testGC.js | 4 +- .../app/tests/testIfAbleToRunExternalFile.js | 2 +- .../testModules/numericConversionTests.js | 48 ++-- test-app/assets/app/tests/testWeakRef.js | 12 +- test-app/assets/app/tests/tests.js | 244 +++++++++--------- .../tests/testsForRuntimeBindingGenerator.js | 4 +- .../assets/app/tests/testsForTypescript.js | 34 +-- test-app/assets/app/tests/testsWithContext.js | 16 +- test-app/assets/internal/prepareExtend.js | 4 +- 29 files changed, 318 insertions(+), 309 deletions(-) diff --git a/src/assets/app/bootstrap.js b/src/assets/app/bootstrap.js index 4d762b59f..0e23b86ae 100644 --- a/src/assets/app/bootstrap.js +++ b/src/assets/app/bootstrap.js @@ -1,7 +1,7 @@ global.__onUncaughtError = function(error){ if(error.nativeException){ - Log("err.message: " + error.message); - Log("err.stackTrace: " + error.stackTrace); + __log("err.message: " + error.message); + __log("err.stackTrace: " + error.stackTrace); // false == do not continue execution return false; } diff --git a/src/assets/internal/prepareExtend.js b/src/assets/internal/prepareExtend.js index 94ccff617..376bf9448 100644 --- a/src/assets/internal/prepareExtend.js +++ b/src/assets/internal/prepareExtend.js @@ -57,7 +57,7 @@ var __extends = function(Child, Parent) { } function extend(child, parent) { - Log("TS extend called"); + __log("TS extend called"); if (!child.__extended) { child.__extended = parent.extend(child.name, child.prototype); } @@ -66,7 +66,7 @@ var __extends = function(Child, Parent) { }; Parent.__activityExtend = function(parent, name, implementationObject) { - Log("__activityExtend called"); + __log("__activityExtend called"); return parent.extend(name, implementationObject); }; diff --git a/src/jni/JsDebugger.cpp b/src/jni/JsDebugger.cpp index 95e2b3662..7139177a2 100644 --- a/src/jni/JsDebugger.cpp +++ b/src/jni/JsDebugger.cpp @@ -21,6 +21,9 @@ void JsDebugger::Init(v8::Isolate *isolate, const string& packageName) s_EnqueueMessage = env.GetStaticMethodID(s_JsDebuggerClass, "enqueueMessage", "(Ljava/lang/String;)V"); assert(s_EnqueueMessage != nullptr); + + s_EnableAgent = env.GetStaticMethodID(s_JsDebuggerClass, "enableAgent", "(Ljava/lang/String;IZ)V"); + assert(s_EnqueueMessage != nullptr); } string JsDebugger::GetPackageName() @@ -82,8 +85,27 @@ void JsDebugger::SendCommand(uint16_t *cmd, int length) v8::Debug::SendCommand(isolate, cmd, length, nullptr); } +void JsDebugger::DebugBreakCallback(const v8::FunctionCallbackInfo& args) +{ + JEnv env; + JniLocalRef packageName(env.NewStringUTF(s_packageName.c_str())); + + jint port = 8181; + if ((args.Length() > 0) && args[0]->IsInt32()) + { + port = args[0]->Int32Value(); + } + jboolean jniFalse = JNI_FALSE; + + env.CallStaticVoidMethod(s_JsDebuggerClass, s_EnableAgent, (jstring)packageName, port, jniFalse); + + DebugBreak(); +} + + v8::Isolate* JsDebugger::s_isolate = nullptr; string JsDebugger::s_packageName = ""; jclass JsDebugger::s_JsDebuggerClass = nullptr; jmethodID JsDebugger::s_EnqueueMessage = nullptr; +jmethodID JsDebugger::s_EnableAgent = nullptr; diff --git a/src/jni/JsDebugger.h b/src/jni/JsDebugger.h index 4698b5cee..177e93343 100644 --- a/src/jni/JsDebugger.h +++ b/src/jni/JsDebugger.h @@ -25,6 +25,8 @@ namespace tns static void SendCommand(uint16_t *cmd, int length); + static void DebugBreakCallback(const v8::FunctionCallbackInfo& args); + private: JsDebugger(); @@ -33,6 +35,7 @@ namespace tns static std::string s_packageName; static jclass s_JsDebuggerClass; static jmethodID s_EnqueueMessage; + static jmethodID s_EnableAgent; static v8::Isolate *s_isolate; static const int INVALID_PORT = -1; diff --git a/src/jni/NativeScriptRuntime.cpp b/src/jni/NativeScriptRuntime.cpp index ded162eb3..f66da4548 100644 --- a/src/jni/NativeScriptRuntime.cpp +++ b/src/jni/NativeScriptRuntime.cpp @@ -688,11 +688,6 @@ void NativeScriptRuntime::DumpReferenceTablesMethodCallback(const v8::FunctionCa } } -void NativeScriptRuntime::WaitForDebuggerMethodCallback(const v8::FunctionCallbackInfo& args) -{ - // TODO: -} - void NativeScriptRuntime::EnableVerboseLoggingMethodCallback(const v8::FunctionCallbackInfo& args) { JEnv env; @@ -705,7 +700,7 @@ void NativeScriptRuntime::DisableVerboseLoggingMethodCallback(const v8::Function env.CallStaticVoidMethod(PlatformClass, DISABLE_VERBOSE_LOGGING_METHOD_ID); } -void NativeScriptRuntime::FailMethodCallback(const v8::FunctionCallbackInfo& args) +void NativeScriptRuntime::ExitMethodCallback(const v8::FunctionCallbackInfo& args) { auto msg = ConvertToString(args[0].As()); ASSERT_MESSAGE(false, "%s", msg.c_str()); diff --git a/src/jni/NativeScriptRuntime.h b/src/jni/NativeScriptRuntime.h index b9bccbd75..3e3513ad6 100644 --- a/src/jni/NativeScriptRuntime.h +++ b/src/jni/NativeScriptRuntime.h @@ -61,9 +61,7 @@ namespace tns static void DumpReferenceTablesMethodCallback(const v8::FunctionCallbackInfo& args); - static void WaitForDebuggerMethodCallback(const v8::FunctionCallbackInfo& args); - - static void FailMethodCallback(const v8::FunctionCallbackInfo& args); + static void ExitMethodCallback(const v8::FunctionCallbackInfo& args); static void OverridesWeakCallback(v8::Isolate* isolate, v8::Persistent* target, void* arg); diff --git a/src/jni/com_tns_Platform.cpp b/src/jni/com_tns_Platform.cpp index eaaca4360..874f375fa 100644 --- a/src/jni/com_tns_Platform.cpp +++ b/src/jni/com_tns_Platform.cpp @@ -99,11 +99,6 @@ void PrepareExtendFunction(Isolate *isolate, jstring filesPath) DEBUG_WRITE("Executed prepareExtend.js script"); } -void PrintHashCallback(const FunctionCallbackInfo& args) -{ - DEBUG_WRITE("%s, hashid=%d", ConvertToString(args[0]->ToString()).c_str(), args[1].As()->GetIdentityHash()); -} - void PrepareV8Runtime(Isolate *isolate, JEnv& env, jstring filesPath, jstring packageName) { const char v8flags[] = "--expose_gc"; @@ -120,16 +115,14 @@ void PrepareV8Runtime(Isolate *isolate, JEnv& env, jstring filesPath, jstring pa globalTemplate->Set(ConvertToV8String("__startCPUProfiler"), FunctionTemplate::New(isolate, Profiler::StartCPUProfilerCallback)); globalTemplate->Set(ConvertToV8String("__stopCPUProfiler"), FunctionTemplate::New(isolate, Profiler::StopCPUProfilerCallback)); globalTemplate->Set(ConvertToV8String("__heapSnapshot"), FunctionTemplate::New(isolate, Profiler::HeapSnapshotMethodCallback)); - globalTemplate->Set(ConvertToV8String("Log"), FunctionTemplate::New(isolate, NativeScriptRuntime::LogMethodCallback)); - globalTemplate->Set(ConvertToV8String("dumpReferenceTables"), FunctionTemplate::New(isolate, NativeScriptRuntime::DumpReferenceTablesMethodCallback)); - globalTemplate->Set(ConvertToV8String("waitForDebugger"), FunctionTemplate::New(isolate, NativeScriptRuntime::WaitForDebuggerMethodCallback)); - globalTemplate->Set(ConvertToV8String("enableVerboseLogging"), FunctionTemplate::New(isolate, NativeScriptRuntime::EnableVerboseLoggingMethodCallback)); - globalTemplate->Set(ConvertToV8String("disableVerboseLogging"), FunctionTemplate::New(isolate, NativeScriptRuntime::DisableVerboseLoggingMethodCallback)); - globalTemplate->Set(ConvertToV8String("fail"), FunctionTemplate::New(isolate, NativeScriptRuntime::FailMethodCallback)); + globalTemplate->Set(ConvertToV8String("__log"), FunctionTemplate::New(isolate, NativeScriptRuntime::LogMethodCallback)); + globalTemplate->Set(ConvertToV8String("__dumpReferenceTables"), FunctionTemplate::New(isolate, NativeScriptRuntime::DumpReferenceTablesMethodCallback)); + globalTemplate->Set(ConvertToV8String("__debugbreak"), FunctionTemplate::New(isolate, JsDebugger::DebugBreakCallback)); + globalTemplate->Set(ConvertToV8String("__enableVerboseLogging"), FunctionTemplate::New(isolate, NativeScriptRuntime::EnableVerboseLoggingMethodCallback)); + globalTemplate->Set(ConvertToV8String("__disableVerboseLogging"), FunctionTemplate::New(isolate, NativeScriptRuntime::DisableVerboseLoggingMethodCallback)); + globalTemplate->Set(ConvertToV8String("__exit"), FunctionTemplate::New(isolate, NativeScriptRuntime::ExitMethodCallback)); globalTemplate->Set(ConvertToV8String("require"), FunctionTemplate::New(isolate, NativeScriptRuntime::RequireCallback)); globalTemplate->Set(ConvertToV8String("WeakRef"), FunctionTemplate::New(isolate, WeakRef::ConstructorCallback)); - // - globalTemplate->Set(ConvertToV8String("printhash"), FunctionTemplate::New(isolate, PrintHashCallback)); SimpleProfiler::Init(isolate, globalTemplate); diff --git a/src/src/com/tns/JsDebugger.java b/src/src/com/tns/JsDebugger.java index 2b2cab479..d856f9b3a 100644 --- a/src/src/com/tns/JsDebugger.java +++ b/src/src/com/tns/JsDebugger.java @@ -33,11 +33,11 @@ public class JsDebugger private static native void processDebugMessages(); private static native void enable(); - + private static native void disable(); - + private static native void debugBreak(); - + private static native void sendCommand(byte[] command, int length); private final Context context; @@ -51,9 +51,9 @@ public class JsDebugger private static final String portEnvOutputFile = "envDebug.out"; private static int currentPort = INVALID_PORT; - + private static LinkedBlockingQueue dbgMessages = new LinkedBlockingQueue(); - + private static void enqueueMessage(String message) { dbgMessages.add(message); @@ -63,24 +63,24 @@ public JsDebugger(Context context) { this.context = context; } - + private static ServerSocket serverSocket; private static ServerThread serverThread = null; private static Thread javaServerThread = null; - + private static class ServerThread implements Runnable { private volatile boolean running; private final int port; private ResponseWorker responseWorker; private ListenerWorker commThread; - + public ServerThread(int port) { this.port = port; this.running = false; } - + public void stop() { this.running = false; @@ -94,7 +94,7 @@ public void stop() e.printStackTrace(); } } - + public void run() { try @@ -113,10 +113,10 @@ public void run() try { Socket socket = serverSocket.accept(); - + this.responseWorker = new ResponseWorker(socket); new Thread(this.responseWorker).start(); - + commThread = new ListenerWorker(socket.getInputStream()); new Thread(commThread).start(); } @@ -127,13 +127,12 @@ public void run() } } } - + private static class ListenerWorker implements Runnable { private enum State { - Header, - Message + Header, Message } private BufferedReader input; @@ -142,20 +141,20 @@ public ListenerWorker(InputStream inputStream) { this.input = new BufferedReader(new InputStreamReader(inputStream)); } - + private volatile boolean running = true; - + public void run() { Scanner scanner = new Scanner(this.input); scanner.useDelimiter("\r\n"); - + ArrayList headers = new ArrayList(); String line; State state = State.Header; int messageLength = -1; String leftOver = null; - + Runnable dispatchProcessDebugMessages = new Runnable() { @Override @@ -196,7 +195,7 @@ public void run() leftOver = line.substring(messageLength); state = State.Header; headers.clear(); - + try { byte[] cmdBytes = msg.getBytes("UTF-16LE"); @@ -237,32 +236,32 @@ public void run() } } } - + private static class ResponseWorker implements Runnable { private Socket socket; - + private final static String END_MSG = "#end#"; - + private OutputStream output; - + public ResponseWorker(Socket clientSocket) throws IOException { this.socket = clientSocket; this.output = this.socket.getOutputStream(); } - + public void stop() { dbgMessages.add(END_MSG); } - + @Override public void run() { byte[] LINE_END_BYTES = new byte[2]; - LINE_END_BYTES[0] = (byte)'\r'; - LINE_END_BYTES[1] = (byte)'\n'; + LINE_END_BYTES[0] = (byte) '\r'; + LINE_END_BYTES[1] = (byte) '\n'; while (true) { try @@ -271,7 +270,7 @@ public void run() if (msg.equals(END_MSG)) break; - + byte[] utf8; try { @@ -282,7 +281,7 @@ public void run() utf8 = null; e1.printStackTrace(); } - + if (utf8 != null) { try @@ -310,7 +309,6 @@ public void run() } } - int getDebuggerPortFromEnvironment() { int port = INVALID_PORT; @@ -345,7 +343,7 @@ int getDebuggerPortFromEnvironment() } w = null; } - + try { Thread.sleep(3 * 1000); @@ -354,7 +352,7 @@ int getDebuggerPortFromEnvironment() { e1.printStackTrace(); } - + File envInFile = new File(baseDir, portEnvInputFile); if (envInFile.exists()) { @@ -372,7 +370,7 @@ int getDebuggerPortFromEnvironment() { requestedPort = INVALID_PORT; } - + w = new OutputStreamWriter(new FileOutputStream(envOutFile, true)); int localPort = (requestedPort != INVALID_PORT) ? requestedPort : getAvailablePort(); String strLocalPort = "PORT=" + localPort + "\n"; @@ -449,7 +447,7 @@ private static int getAvailablePort() return port; } - static void enableAgent(String packageName, int port, boolean waitForConnection) + private static void enableAgent(String packageName, int port, boolean waitForConnection) { enable(); if (serverThread == null) @@ -460,7 +458,7 @@ static void enableAgent(String packageName, int port, boolean waitForConnection) javaServerThread.start(); } - static void disableAgent() + private static void disableAgent() { disable(); if (serverThread != null) diff --git a/test-app/assets/app/bootstrap.js b/test-app/assets/app/bootstrap.js index 4d762b59f..0e23b86ae 100644 --- a/test-app/assets/app/bootstrap.js +++ b/test-app/assets/app/bootstrap.js @@ -1,7 +1,7 @@ global.__onUncaughtError = function(error){ if(error.nativeException){ - Log("err.message: " + error.message); - Log("err.stackTrace: " + error.stackTrace); + __log("err.message: " + error.message); + __log("err.stackTrace: " + error.stackTrace); // false == do not continue execution return false; } diff --git a/test-app/assets/app/mainpage.js b/test-app/assets/app/mainpage.js index 92651a056..0efdffde5 100644 --- a/test-app/assets/app/mainpage.js +++ b/test-app/assets/app/mainpage.js @@ -1,4 +1,4 @@ -disableVerboseLogging(); +__disableVerboseLogging(); require("./tests/testWeakRef"); require("./tests/tests"); @@ -38,7 +38,7 @@ require("./tests/extendClassNameTests"); // var counter = 0; // button.setOnClickListener(new android.view.View.OnClickListener("AppClickListener", { // onClick: function() { -// Log("onClick called"); +// __log("onClick called"); // button.setText("Hit that sucker one more time " + ++counter); // }})); // }}); @@ -51,9 +51,9 @@ var MainActivity = (function (_super) { } MainActivity.prototype.onCreate = function () { - Log("onCreate from js"); + __log("onCreate from js"); var k = this.toString(); - Log("this.toString " + k); + __log("this.toString " + k); _super.prototype.onCreate.call(this, null); //this.super.onCreate(null); @@ -73,7 +73,7 @@ var MainActivity = (function (_super) { var counter = 0; button.setOnClickListener(new android.view.View.OnClickListener("AppClickListener", { onClick: function() { - Log("onClick called"); + __log("onClick called"); button.setText("Hit that sucker one more time " + ++counter); }})); }; @@ -83,7 +83,7 @@ var MainActivity = (function (_super) { app.init({ getActivity: function(intent) { - Log("intent=" + intent) + __log("intent=" + intent) if (intent.getAction() == android.content.Intent.ACTION_MAIN) { return MainActivity; } @@ -94,6 +94,6 @@ app.init({ onCreate: function() { - Log("Application on create called"); + __log("Application on create called"); } }); \ No newline at end of file diff --git a/test-app/assets/app/modules/module.js b/test-app/assets/app/modules/module.js index c12f32e6a..3b753516d 100644 --- a/test-app/assets/app/modules/module.js +++ b/test-app/assets/app/modules/module.js @@ -2,7 +2,7 @@ var tnsExtends = this.__extends; (function When_running_code_inside_a_module_it_should_have_acces_to_tns__exports_function() { - Log("TEST: When_running_code_inside_a_module_it_should_have_acces_to_tns__exports_function"); + __log("TEST: When_running_code_inside_a_module_it_should_have_acces_to_tns__exports_function"); if (!tnsExtends) { @@ -13,6 +13,6 @@ var tnsExtends = this.__extends; module.exports = { accessGlobalObject: function(s) { - Log("global is working " + global); + __log("global is working " + global); } } \ No newline at end of file diff --git a/test-app/assets/app/simplemodule.js b/test-app/assets/app/simplemodule.js index af8a855b6..5b339ad68 100644 --- a/test-app/assets/app/simplemodule.js +++ b/test-app/assets/app/simplemodule.js @@ -4,9 +4,9 @@ exports.myLog = function(s) { if (arguments.length == 1) { - Log("1+1=" + summer.add(1, 1)) + __log("1+1=" + summer.add(1, 1)) - Log("global is working" + global) + __log("global is working" + global) } - Log(s); + __log(s); } \ No newline at end of file diff --git a/test-app/assets/app/tests/dispatchCallbacksOnUiThreadTests.js b/test-app/assets/app/tests/dispatchCallbacksOnUiThreadTests.js index d91bf070e..69e855523 100644 --- a/test-app/assets/app/tests/dispatchCallbacksOnUiThreadTests.js +++ b/test-app/assets/app/tests/dispatchCallbacksOnUiThreadTests.js @@ -6,7 +6,7 @@ var Assert = function(condition, failMessage) { var TestProcessDataCallbackShouldBeExecutedOnUiThread = function() { - Log("TEST: TestProcessDataCallbackShouldBeExecutedOnUiThread"); + __log("TEST: TestProcessDataCallbackShouldBeExecutedOnUiThread"); var D = com.tns.tests.DispatchAsyncOpOnUIThreadTest.extend("DispatchAsyncOpOnUIThreadTest", { processData: function(index, data) { diff --git a/test-app/assets/app/tests/exceptionHandlingTests.js b/test-app/assets/app/tests/exceptionHandlingTests.js index e400bb308..d36f6f261 100644 --- a/test-app/assets/app/tests/exceptionHandlingTests.js +++ b/test-app/assets/app/tests/exceptionHandlingTests.js @@ -6,7 +6,7 @@ var Assert = function(condition, failMessage) { var TestThrowJSExceptionThroughJavaAndCatchInJS = function() { - Log("TEST: TestThrowJSExceptionThroughJavaAndCatchInJS"); + __log("TEST: TestThrowJSExceptionThroughJavaAndCatchInJS"); var exceptionThrown = false; var exceptionCaught = false; @@ -31,7 +31,7 @@ var TestThrowJSExceptionThroughJavaAndCatchInJS = function() { { exceptionCaught = true; sameExObject = e === ex; - Log("e=" + e); + __log("e=" + e); } Assert(exceptionThrown === true, "TestThrowJSExceptionThroughJavaAndCatchInJS FAILED: Exception should be thrown"); @@ -41,7 +41,7 @@ var TestThrowJSExceptionThroughJavaAndCatchInJS = function() { var TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS = function() { - Log("TEST: TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS"); + __log("TEST: TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS"); var exceptionThrown = false; var exceptionCaught = false; @@ -81,7 +81,7 @@ var TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS = function() { var TestThrowJSExceptionAndCatchInJava = function() { - Log("TEST: TestThrowJSExceptionAndCatchInJava"); + __log("TEST: TestThrowJSExceptionAndCatchInJava"); var exceptionThrown = false; var exceptionCaught = true; @@ -111,7 +111,7 @@ var TestThrowJSExceptionAndCatchInJava = function() { var TestThrowJavaExceptionFromJsAndCatchInJava = function() { - Log("TEST: TestThrowJavaExceptionFromJsAndCatchInJava"); + __log("TEST: TestThrowJavaExceptionFromJsAndCatchInJava"); var exceptionThrown = false; var exceptionCaught = true; @@ -143,7 +143,7 @@ var TestThrowJavaExceptionFromJsAndCatchInJava = function() { var TestMethodThatThrowsException = function() { - Log("TEST: TestMethodThatThrowsException"); + __log("TEST: TestMethodThatThrowsException"); var exceptionCaught = false; @@ -163,7 +163,7 @@ var TestMethodThatThrowsException = function() { var TestErrorObjectContainsJavaNativeException = function() { - Log("TEST: TestErrorObjectContainsJavaNativeException"); + __log("TEST: TestErrorObjectContainsJavaNativeException"); var nativeException = undefined; @@ -178,7 +178,7 @@ var TestErrorObjectContainsJavaNativeException = function() { var nativeException = e.nativeException; } - Log("nativeException=" + nativeException); + __log("nativeException=" + nativeException); Assert(nativeException != undefined, "TestErrorObjectContainsJavaNativeException FAILED: Error object does not contain Java native exception"); @@ -189,7 +189,7 @@ var TestErrorObjectContainsJavaNativeException = function() { var TestConstructorThatThrowsException = function() { - Log("TEST: TestConstructorThatThrowsException"); + __log("TEST: TestConstructorThatThrowsException"); var exceptionCaught = false; @@ -207,7 +207,7 @@ var TestConstructorThatThrowsException = function() { var TestArrayElementGetAccessThatThrowsException = function() { - Log("TEST: TestArrayElementGetAccessThatThrowsException"); + __log("TEST: TestArrayElementGetAccessThatThrowsException"); var exceptionCaught = false; @@ -235,7 +235,7 @@ var TestArrayElementGetAccessThatThrowsException = function() { var TestArrayElementSetAccessThatThrowsException = function() { - Log("TEST: TestArrayElementSetAccessThatThrowsException"); + __log("TEST: TestArrayElementSetAccessThatThrowsException"); var exceptionCaught = false; diff --git a/test-app/assets/app/tests/extendClassNameTests.js b/test-app/assets/app/tests/extendClassNameTests.js index 056aca637..a03998b19 100644 --- a/test-app/assets/app/tests/extendClassNameTests.js +++ b/test-app/assets/app/tests/extendClassNameTests.js @@ -15,7 +15,7 @@ var When_naming_extension_class_user_should_give_valid_name = function() { catch(e) { exceptionCaught = true; - Log("Validation is wrong"); + __log("Validation is wrong"); } Assert(exceptionCaught === false, "FAILED: When_naming_extension_class_user_should_give_valid_name."); @@ -30,7 +30,7 @@ var When_naming_extension_contains_invalid_symbols_should_throw_exception = func } catch(e) { - Log('message: ' + e.message); + __log('message: ' + e.message); exceptionCaught = true; } diff --git a/test-app/assets/app/tests/finalFieldsSetTests.js b/test-app/assets/app/tests/finalFieldsSetTests.js index 80fc5cec5..3cd755fc4 100644 --- a/test-app/assets/app/tests/finalFieldsSetTests.js +++ b/test-app/assets/app/tests/finalFieldsSetTests.js @@ -13,7 +13,7 @@ var When_a_java_final_field_is_set_exception_is_thrown = function() { } catch (e) { - Log("Don't try to SET a final field " + e); + __log("Don't try to SET a final field " + e); exceptionCaught = true; } diff --git a/test-app/assets/app/tests/inheritanceChainResolutionTest.js b/test-app/assets/app/tests/inheritanceChainResolutionTest.js index 179fb60f1..3a8ffbc50 100644 --- a/test-app/assets/app/tests/inheritanceChainResolutionTest.js +++ b/test-app/assets/app/tests/inheritanceChainResolutionTest.js @@ -6,7 +6,7 @@ var Assert = function(condition, failMessage) { var TestCallWithStringArgumentWhenThereIsStringOverload = function() { - Log("TEST: TestCallWithStringArgumentWhenThereIsStringOverload"); + __log("TEST: TestCallWithStringArgumentWhenThereIsStringOverload"); var i = new com.tns.tests.InheritanceChainResolutionTest(); @@ -17,7 +17,7 @@ var TestCallWithStringArgumentWhenThereIsStringOverload = function() { var TestCallWithStringArgumentWhenThereIsNoStringOverload = function() { - Log("TEST: TestCallWithStringArgumentWhenThereIsNoStringOverload"); + __log("TEST: TestCallWithStringArgumentWhenThereIsNoStringOverload"); var i = new com.tns.tests.InheritanceChainResolutionTest(); diff --git a/test-app/assets/app/tests/numericConversionTests.js b/test-app/assets/app/tests/numericConversionTests.js index 807b0cbe8..f99c0e651 100644 --- a/test-app/assets/app/tests/numericConversionTests.js +++ b/test-app/assets/app/tests/numericConversionTests.js @@ -10,7 +10,7 @@ var Assert = function(condition, failMessage) { var TestCreateInstanceWithConstructorResolutionWithNumberLiteral = function() { - Log("TEST: TestCreateInstanceWithConstructorResolutionWithNumberLiteral"); + __log("TEST: TestCreateInstanceWithConstructorResolutionWithNumberLiteral"); var n = new com.tns.tests.NumericConversionTest(123); @@ -21,7 +21,7 @@ var TestCreateInstanceWithConstructorResolutionWithNumberLiteral = function() { var TestCreateInstanceWithConstructorResolutionWithCastFunctions = function() { - Log("TEST: TestCreateInstanceWithConstructorResolutionWithCastFunctions"); + __log("TEST: TestCreateInstanceWithConstructorResolutionWithCastFunctions"); var n1 = new com.tns.tests.NumericConversionTest(byte(123)); var s1 = n1.getInit(); @@ -38,7 +38,7 @@ var TestCreateInstanceWithConstructorResolutionWithCastFunctions = function() { var TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls = function() { - Log("TEST: TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls"); + __log("TEST: TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls"); var b = java.lang.Byte.parseByte("123"); var n1 = new com.tns.tests.NumericConversionTest(b); @@ -53,7 +53,7 @@ var TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls = functio var TestCreateInstanceWithConstructorResolutionWithPromotingValueUp = function() { - Log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueUp"); + __log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueUp"); var n = new com.tns.tests.NumericConversionTest(null, short(1)); var s = n.getInit(); @@ -62,7 +62,7 @@ var TestCreateInstanceWithConstructorResolutionWithPromotingValueUp = function() var TestCreateInstanceWithConstructorResolutionWithPromotingValueDown = function() { - Log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueDown"); + __log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueDown"); var n = new com.tns.tests.NumericConversionTest(null, null, long(1)); var s = n.getInit(); @@ -71,7 +71,7 @@ var TestCreateInstanceWithConstructorResolutionWithPromotingValueDown = function var TestCallMethodWithResolutionWithPromotingValueUp = function() { - Log("TEST: TestCallMethodWithResolutionWithPromotingValueUp"); + __log("TEST: TestCallMethodWithResolutionWithPromotingValueUp"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method1(byte(1)); @@ -80,7 +80,7 @@ var TestCallMethodWithResolutionWithPromotingValueUp = function() { var TestCallMethodWithResolutionWithPromotingValueDown = function() { - Log("TEST: TestCallMethodWithResolutionWithPromotingValueDown"); + __log("TEST: TestCallMethodWithResolutionWithPromotingValueDown"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method1(1); @@ -93,7 +93,7 @@ var TestCallMethodWithResolutionWithPromotingValueDown = function() { var TestLongCastToFloatConversionWhenThereIsDoubleOverload = function() { - Log("TEST: TestLongCastToFloatConversionWhenThereIsDoubleOverload"); + __log("TEST: TestLongCastToFloatConversionWhenThereIsDoubleOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method2(long(65536 + 2)); @@ -102,7 +102,7 @@ var TestLongCastToFloatConversionWhenThereIsDoubleOverload = function() { var TestByteCastToFloatConversionWhenThereIsDoubleOverload = function() { - Log("TEST: TestByteCastToFloatConversionWhenThereIsDoubleOverload"); + __log("TEST: TestByteCastToFloatConversionWhenThereIsDoubleOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method2(byte(65536 + 2)); @@ -111,7 +111,7 @@ var TestByteCastToFloatConversionWhenThereIsDoubleOverload = function() { var TestShortCastToFloatConversionWhenThereIsDoubleOverload = function() { - Log("TEST: TestShortCastToFloatConversionWhenThereIsDoubleOverload"); + __log("TEST: TestShortCastToFloatConversionWhenThereIsDoubleOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method2(short(65536 + 2)); @@ -120,7 +120,7 @@ var TestShortCastToFloatConversionWhenThereIsDoubleOverload = function() { var TestDoubleCastWhenThereIsDoubleOverload = function() { - Log("TEST: TestDoubleCastWhenThereIsDoubleOverload"); + __log("TEST: TestDoubleCastWhenThereIsDoubleOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method2(double(65536 + 2)); @@ -129,7 +129,7 @@ var TestDoubleCastWhenThereIsDoubleOverload = function() { var TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload = function() { - Log("TEST: TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload"); + __log("TEST: TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method2(65536 + 2); @@ -138,7 +138,7 @@ var TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload = function() var TestDoubleCastToLongConversionWhenThereIsShortOverload = function() { - Log("TEST: TestDoubleCastToLongConversionWhenThereIsShortOverload"); + __log("TEST: TestDoubleCastToLongConversionWhenThereIsShortOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method3(double(65536 + 2)); @@ -147,7 +147,7 @@ var TestDoubleCastToLongConversionWhenThereIsShortOverload = function() { var TestFloatCastToLongConversionWhenThereIsShortOverload = function() { - Log("TEST: TestFloatCastToLongConversionWhenThereIsShortOverload"); + __log("TEST: TestFloatCastToLongConversionWhenThereIsShortOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method3(float(65536 + 2)); @@ -156,7 +156,7 @@ var TestFloatCastToLongConversionWhenThereIsShortOverload = function() { var TestFloatCastToShortConversionWhenThereIsObjectOverload = function() { - Log("TEST: TestFloatCastToShortConversionWhenThereIsObjectOverload"); + __log("TEST: TestFloatCastToShortConversionWhenThereIsObjectOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method4(float(65536 + 2)); @@ -165,7 +165,7 @@ var TestFloatCastToShortConversionWhenThereIsObjectOverload = function() { var TestByteCastToShortConversionWhenThereIsObjectOverload = function() { - Log("TEST: TestByteCastToShortConversionWhenThereIsObjectOverload"); + __log("TEST: TestByteCastToShortConversionWhenThereIsObjectOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method4(byte(65536 + 2)); @@ -174,7 +174,7 @@ var TestByteCastToShortConversionWhenThereIsObjectOverload = function() { var TestResolveMethodWithByteCast = function() { - Log("TEST: TestResolveMethodWithByteCast"); + __log("TEST: TestResolveMethodWithByteCast"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(byte(65536 + 123)); @@ -183,7 +183,7 @@ var TestResolveMethodWithByteCast = function() { var TestResolveMethodWithShortCast = function() { - Log("TEST: TestResolveMethodWithShortCast"); + __log("TEST: TestResolveMethodWithShortCast"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(short(65536 + 1234)); @@ -192,7 +192,7 @@ var TestResolveMethodWithShortCast = function() { var TestResolveMethodWithoutCastFunction = function() { - Log("TEST: TestResolveMethodWithoutCastFunction"); + __log("TEST: TestResolveMethodWithoutCastFunction"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(123456); @@ -201,7 +201,7 @@ var TestResolveMethodWithoutCastFunction = function() { var TestResolveMethodWithLongCast = function() { - Log("TEST: TestResolveMethodWithLongCast"); + __log("TEST: TestResolveMethodWithLongCast"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(long("123456789012")); @@ -210,7 +210,7 @@ var TestResolveMethodWithLongCast = function() { var TestResolveMethodWithFloatCast = function() { - Log("TEST: TestResolveMethodWithFloatCast"); + __log("TEST: TestResolveMethodWithFloatCast"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(float(1.23)); @@ -219,7 +219,7 @@ var TestResolveMethodWithFloatCast = function() { var TestResolveMethodWithDoubleCast = function() { - Log("TEST: TestResolveMethodWithDoubleCast"); + __log("TEST: TestResolveMethodWithDoubleCast"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(double(1)); @@ -228,7 +228,7 @@ var TestResolveMethodWithDoubleCast = function() { var TestResolveIntMethodWithNumberObjectWithIntArgument = function() { - Log("TEST: TestResolveIntMethodWithNumberObjectWithIntArgument"); + __log("TEST: TestResolveIntMethodWithNumberObjectWithIntArgument"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(new Number(1)); @@ -237,7 +237,7 @@ var TestResolveIntMethodWithNumberObjectWithIntArgument = function() { var TestResolveIntMethodWithNumberObjectWithDoubleArgument = function() { - Log("TEST: TestResolveIntMethodWithNumberObjectWithDoubleArgument"); + __log("TEST: TestResolveIntMethodWithNumberObjectWithDoubleArgument"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(new Number(1.23)); diff --git a/test-app/assets/app/tests/propertyAccessTests.js b/test-app/assets/app/tests/propertyAccessTests.js index 8bac2aa79..ed70b043b 100644 --- a/test-app/assets/app/tests/propertyAccessTests.js +++ b/test-app/assets/app/tests/propertyAccessTests.js @@ -6,7 +6,7 @@ var Assert = function(condition, failMessage) { var TestAccessPropertyGetterStartingWithLowerLetter = function() { - Log("TEST: TestAccessPropertyStartingWithLowerLetter"); + __log("TEST: TestAccessPropertyStartingWithLowerLetter"); var dummyClass = com.tns.tests.DummyClass.class; @@ -22,7 +22,7 @@ var TestAccessPropertyGetterStartingWithLowerLetter = function() { var TestAccessPropertySetterStartingWithLowerLetter = function() { - Log("TEST: TestAccessPropertySetterStartingWithLowerLetter"); + __log("TEST: TestAccessPropertySetterStartingWithLowerLetter"); var dummy = new com.tns.tests.DummyClass(); @@ -39,7 +39,7 @@ var TestAccessPropertySetterStartingWithLowerLetter = function() { var TestAccessNonCamelCasePropertyWithoutGetter = function() { - Log("TEST: TestAccessNonCamelCasePropertyWithoutGetter"); + __log("TEST: TestAccessNonCamelCasePropertyWithoutGetter"); var d = new com.tns.tests.DummyClass("test"); @@ -52,7 +52,7 @@ var TestAccessNonCamelCasePropertyWithoutGetter = function() { var TestAccessNonCamelCasePropertyWithoutSetter = function() { - Log("TEST: TestAccessNonCamelCasePropertyWithoutSetter"); + __log("TEST: TestAccessNonCamelCasePropertyWithoutSetter"); var dummy = new com.tns.tests.DummyClass(); diff --git a/test-app/assets/app/tests/stringConversionTests.js b/test-app/assets/app/tests/stringConversionTests.js index 67458f863..c87b653af 100644 --- a/test-app/assets/app/tests/stringConversionTests.js +++ b/test-app/assets/app/tests/stringConversionTests.js @@ -6,7 +6,7 @@ var Assert = function(condition, failMessage) { var TestCanConvertNonTrivalJavaString1 = function() { - Log("TEST: TestCanConvertNonTrivalJavaString1"); + __log("TEST: TestCanConvertNonTrivalJavaString1"); var strConvTest = new com.tns.tests.StringConversionTest(); @@ -25,7 +25,7 @@ var TestCanConvertNonTrivalJavaString1 = function() { var TestCanConvertNonTrivalJavaString2 = function() { - Log("TEST: TestCanConvertNonTrivalJavaString2"); + __log("TEST: TestCanConvertNonTrivalJavaString2"); var strConvTest = new com.tns.tests.StringConversionTest(); @@ -48,7 +48,7 @@ var TestCanConvertNonTrivalJavaString2 = function() { var TestCanConvertNonTrivalJavaString3 = function() { - Log("TEST: TestCanConvertNonTrivalJavaString3"); + __log("TEST: TestCanConvertNonTrivalJavaString3"); var strConvTest = new com.tns.tests.StringConversionTest(); @@ -67,7 +67,7 @@ var TestCanConvertNonTrivalJavaString3 = function() { var TestCanConvertNonTrivalJavaString4 = function() { - Log("TEST: TestCanConvertNonTrivalJavaString4"); + __log("TEST: TestCanConvertNonTrivalJavaString4"); var s = ""; var len = 0; diff --git a/test-app/assets/app/tests/testGC.js b/test-app/assets/app/tests/testGC.js index 85387738f..c613ffc77 100644 --- a/test-app/assets/app/tests/testGC.js +++ b/test-app/assets/app/tests/testGC.js @@ -149,7 +149,7 @@ function test5() { function indref4helper() { var _class1 = new com.tns.tests.Class1(); - Log("indref4helper _class1=" + _class1); + __log("indref4helper _class1=" + _class1); Object.defineProperty(this, "class1", { get: function() { @@ -183,7 +183,7 @@ function test5() { function testAccessingStringFieldWontLeak() { - Log("TEST: testAccessingStringFieldWontLeak"); + __log("TEST: testAccessingStringFieldWontLeak"); var dummy = new com.tns.tests.DummyClass(); diff --git a/test-app/assets/app/tests/testIfAbleToRunExternalFile.js b/test-app/assets/app/tests/testIfAbleToRunExternalFile.js index abf542c53..730c120a9 100644 --- a/test-app/assets/app/tests/testIfAbleToRunExternalFile.js +++ b/test-app/assets/app/tests/testIfAbleToRunExternalFile.js @@ -6,7 +6,7 @@ var Assert = function(condition, failMessage) { var When_file_outside_the_project_folder_is_required_it_should_fail = function() { - Log("When_file_outside_the_project_folder_is_required_it_should_throw_IllegalAccessException"); + __log("When_file_outside_the_project_folder_is_required_it_should_throw_IllegalAccessException"); var illegalAccesExceptionCaught = false; var fileSeparator = "/"; diff --git a/test-app/assets/app/tests/testModules/numericConversionTests.js b/test-app/assets/app/tests/testModules/numericConversionTests.js index 807b0cbe8..f99c0e651 100644 --- a/test-app/assets/app/tests/testModules/numericConversionTests.js +++ b/test-app/assets/app/tests/testModules/numericConversionTests.js @@ -10,7 +10,7 @@ var Assert = function(condition, failMessage) { var TestCreateInstanceWithConstructorResolutionWithNumberLiteral = function() { - Log("TEST: TestCreateInstanceWithConstructorResolutionWithNumberLiteral"); + __log("TEST: TestCreateInstanceWithConstructorResolutionWithNumberLiteral"); var n = new com.tns.tests.NumericConversionTest(123); @@ -21,7 +21,7 @@ var TestCreateInstanceWithConstructorResolutionWithNumberLiteral = function() { var TestCreateInstanceWithConstructorResolutionWithCastFunctions = function() { - Log("TEST: TestCreateInstanceWithConstructorResolutionWithCastFunctions"); + __log("TEST: TestCreateInstanceWithConstructorResolutionWithCastFunctions"); var n1 = new com.tns.tests.NumericConversionTest(byte(123)); var s1 = n1.getInit(); @@ -38,7 +38,7 @@ var TestCreateInstanceWithConstructorResolutionWithCastFunctions = function() { var TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls = function() { - Log("TEST: TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls"); + __log("TEST: TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls"); var b = java.lang.Byte.parseByte("123"); var n1 = new com.tns.tests.NumericConversionTest(b); @@ -53,7 +53,7 @@ var TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls = functio var TestCreateInstanceWithConstructorResolutionWithPromotingValueUp = function() { - Log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueUp"); + __log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueUp"); var n = new com.tns.tests.NumericConversionTest(null, short(1)); var s = n.getInit(); @@ -62,7 +62,7 @@ var TestCreateInstanceWithConstructorResolutionWithPromotingValueUp = function() var TestCreateInstanceWithConstructorResolutionWithPromotingValueDown = function() { - Log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueDown"); + __log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueDown"); var n = new com.tns.tests.NumericConversionTest(null, null, long(1)); var s = n.getInit(); @@ -71,7 +71,7 @@ var TestCreateInstanceWithConstructorResolutionWithPromotingValueDown = function var TestCallMethodWithResolutionWithPromotingValueUp = function() { - Log("TEST: TestCallMethodWithResolutionWithPromotingValueUp"); + __log("TEST: TestCallMethodWithResolutionWithPromotingValueUp"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method1(byte(1)); @@ -80,7 +80,7 @@ var TestCallMethodWithResolutionWithPromotingValueUp = function() { var TestCallMethodWithResolutionWithPromotingValueDown = function() { - Log("TEST: TestCallMethodWithResolutionWithPromotingValueDown"); + __log("TEST: TestCallMethodWithResolutionWithPromotingValueDown"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method1(1); @@ -93,7 +93,7 @@ var TestCallMethodWithResolutionWithPromotingValueDown = function() { var TestLongCastToFloatConversionWhenThereIsDoubleOverload = function() { - Log("TEST: TestLongCastToFloatConversionWhenThereIsDoubleOverload"); + __log("TEST: TestLongCastToFloatConversionWhenThereIsDoubleOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method2(long(65536 + 2)); @@ -102,7 +102,7 @@ var TestLongCastToFloatConversionWhenThereIsDoubleOverload = function() { var TestByteCastToFloatConversionWhenThereIsDoubleOverload = function() { - Log("TEST: TestByteCastToFloatConversionWhenThereIsDoubleOverload"); + __log("TEST: TestByteCastToFloatConversionWhenThereIsDoubleOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method2(byte(65536 + 2)); @@ -111,7 +111,7 @@ var TestByteCastToFloatConversionWhenThereIsDoubleOverload = function() { var TestShortCastToFloatConversionWhenThereIsDoubleOverload = function() { - Log("TEST: TestShortCastToFloatConversionWhenThereIsDoubleOverload"); + __log("TEST: TestShortCastToFloatConversionWhenThereIsDoubleOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method2(short(65536 + 2)); @@ -120,7 +120,7 @@ var TestShortCastToFloatConversionWhenThereIsDoubleOverload = function() { var TestDoubleCastWhenThereIsDoubleOverload = function() { - Log("TEST: TestDoubleCastWhenThereIsDoubleOverload"); + __log("TEST: TestDoubleCastWhenThereIsDoubleOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method2(double(65536 + 2)); @@ -129,7 +129,7 @@ var TestDoubleCastWhenThereIsDoubleOverload = function() { var TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload = function() { - Log("TEST: TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload"); + __log("TEST: TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method2(65536 + 2); @@ -138,7 +138,7 @@ var TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload = function() var TestDoubleCastToLongConversionWhenThereIsShortOverload = function() { - Log("TEST: TestDoubleCastToLongConversionWhenThereIsShortOverload"); + __log("TEST: TestDoubleCastToLongConversionWhenThereIsShortOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method3(double(65536 + 2)); @@ -147,7 +147,7 @@ var TestDoubleCastToLongConversionWhenThereIsShortOverload = function() { var TestFloatCastToLongConversionWhenThereIsShortOverload = function() { - Log("TEST: TestFloatCastToLongConversionWhenThereIsShortOverload"); + __log("TEST: TestFloatCastToLongConversionWhenThereIsShortOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method3(float(65536 + 2)); @@ -156,7 +156,7 @@ var TestFloatCastToLongConversionWhenThereIsShortOverload = function() { var TestFloatCastToShortConversionWhenThereIsObjectOverload = function() { - Log("TEST: TestFloatCastToShortConversionWhenThereIsObjectOverload"); + __log("TEST: TestFloatCastToShortConversionWhenThereIsObjectOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method4(float(65536 + 2)); @@ -165,7 +165,7 @@ var TestFloatCastToShortConversionWhenThereIsObjectOverload = function() { var TestByteCastToShortConversionWhenThereIsObjectOverload = function() { - Log("TEST: TestByteCastToShortConversionWhenThereIsObjectOverload"); + __log("TEST: TestByteCastToShortConversionWhenThereIsObjectOverload"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method4(byte(65536 + 2)); @@ -174,7 +174,7 @@ var TestByteCastToShortConversionWhenThereIsObjectOverload = function() { var TestResolveMethodWithByteCast = function() { - Log("TEST: TestResolveMethodWithByteCast"); + __log("TEST: TestResolveMethodWithByteCast"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(byte(65536 + 123)); @@ -183,7 +183,7 @@ var TestResolveMethodWithByteCast = function() { var TestResolveMethodWithShortCast = function() { - Log("TEST: TestResolveMethodWithShortCast"); + __log("TEST: TestResolveMethodWithShortCast"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(short(65536 + 1234)); @@ -192,7 +192,7 @@ var TestResolveMethodWithShortCast = function() { var TestResolveMethodWithoutCastFunction = function() { - Log("TEST: TestResolveMethodWithoutCastFunction"); + __log("TEST: TestResolveMethodWithoutCastFunction"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(123456); @@ -201,7 +201,7 @@ var TestResolveMethodWithoutCastFunction = function() { var TestResolveMethodWithLongCast = function() { - Log("TEST: TestResolveMethodWithLongCast"); + __log("TEST: TestResolveMethodWithLongCast"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(long("123456789012")); @@ -210,7 +210,7 @@ var TestResolveMethodWithLongCast = function() { var TestResolveMethodWithFloatCast = function() { - Log("TEST: TestResolveMethodWithFloatCast"); + __log("TEST: TestResolveMethodWithFloatCast"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(float(1.23)); @@ -219,7 +219,7 @@ var TestResolveMethodWithFloatCast = function() { var TestResolveMethodWithDoubleCast = function() { - Log("TEST: TestResolveMethodWithDoubleCast"); + __log("TEST: TestResolveMethodWithDoubleCast"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(double(1)); @@ -228,7 +228,7 @@ var TestResolveMethodWithDoubleCast = function() { var TestResolveIntMethodWithNumberObjectWithIntArgument = function() { - Log("TEST: TestResolveIntMethodWithNumberObjectWithIntArgument"); + __log("TEST: TestResolveIntMethodWithNumberObjectWithIntArgument"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(new Number(1)); @@ -237,7 +237,7 @@ var TestResolveIntMethodWithNumberObjectWithIntArgument = function() { var TestResolveIntMethodWithNumberObjectWithDoubleArgument = function() { - Log("TEST: TestResolveIntMethodWithNumberObjectWithDoubleArgument"); + __log("TEST: TestResolveIntMethodWithNumberObjectWithDoubleArgument"); var n = new com.tns.tests.NumericConversionTest(); var s = n.method5(new Number(1.23)); diff --git a/test-app/assets/app/tests/testWeakRef.js b/test-app/assets/app/tests/testWeakRef.js index 30f20570f..8ffc00ade 100644 --- a/test-app/assets/app/tests/testWeakRef.js +++ b/test-app/assets/app/tests/testWeakRef.js @@ -6,7 +6,7 @@ var Assert = function(condition, failMessage) { var TestWeakRefGetsClearedAfterGC = function() { - Log("TEST: TestWeakRefGetsClearedAfterGC"); + __log("TEST: TestWeakRefGetsClearedAfterGC"); var wr = new WeakRef({ someProp: 12345 }); @@ -21,7 +21,7 @@ var TestWeakRefGetsClearedAfterGC = function() { var TestWeakRefGetsClearedAfterClear = function() { - Log("TEST: TestWeakRefGetsClearedAfterClear"); + __log("TEST: TestWeakRefGetsClearedAfterClear"); var wr = new WeakRef({ someProp: 54321 }); @@ -36,7 +36,7 @@ var TestWeakRefGetsClearedAfterClear = function() { var TestWeakRefCanCreateMultipleInstances = function() { - Log("TEST: TestWeakRefCanCreateMultipleInstances"); + __log("TEST: TestWeakRefCanCreateMultipleInstances"); var target = { someProp: 54321 }; @@ -56,7 +56,7 @@ var TestWeakRefCanCreateMultipleInstances = function() { var TestWeakRefCanCreateMultipleInstances2 = function() { - Log("TEST: TestWeakRefCanCreateMultipleInstances2"); + __log("TEST: TestWeakRefCanCreateMultipleInstances2"); var target = { someProp: 54321 }; @@ -75,7 +75,7 @@ var TestWeakRefCanCreateMultipleInstances2 = function() { var TestWeakRefThrowsExceptionWhenConstructedWithWrongNumberOfParameters = function() { - Log("TEST: TestWeakRefThrowsExceptionWhenConstructedWithWrongNumberOfParameters"); + __log("TEST: TestWeakRefThrowsExceptionWhenConstructedWithWrongNumberOfParameters"); var exceptionCaught = false; try @@ -102,7 +102,7 @@ var TestWeakRefThrowsExceptionWhenConstructedWithWrongNumberOfParameters = funct var TestWeakRefThrowsExceptionWhenConstructedWithNonObject = function() { - Log("TEST: TestWeakRefThrowsExceptionWhenConstructedWithNonObject"); + __log("TEST: TestWeakRefThrowsExceptionWhenConstructedWithNonObject"); var exceptionCaught = false; try diff --git a/test-app/assets/app/tests/tests.js b/test-app/assets/app/tests/tests.js index 670e737ac..1034c234c 100644 --- a/test-app/assets/app/tests/tests.js +++ b/test-app/assets/app/tests/tests.js @@ -21,22 +21,22 @@ var objectToString = function(o){ var When_extending_a_class_two_times = function() { - Log("TEST: When_extending_a_class_two_times"); + __log("TEST: When_extending_a_class_two_times"); - Log("TEST: Creating MyButton"); + __log("TEST: Creating MyButton"); var MyButton = com.tns.tests.Button1.extend("MyButton", { toString : function() { return "button1"; } }); - Log("TEST: Calling MyButton ctor"); + __log("TEST: Calling MyButton ctor"); var button1 = new MyButton(); - Log("TEST: Calling button1 toString"); + __log("TEST: Calling button1 toString"); var button1Label = button1.toString(); button1.setLabel("first button"); - Log("TEST: Creating MyButton2 class"); + __log("TEST: Creating MyButton2 class"); var MyButton2 = new com.tns.tests.Button1.extend("MyButton", { toString : function() { return "button2"; @@ -46,7 +46,7 @@ var When_extending_a_class_two_times = function() { button2.setLabel("second button"); var button2Label = button2.toString(); - Log("but1=" + button1Label + ", but2=" + button2Label); + __log("but1=" + button1Label + ", but2=" + button2Label); Assert(button1 != button2 && button1Label == "button1" && button2Label == "button2", "FAILED: When_extending_a_class_two_times"); @@ -56,22 +56,22 @@ var When_extending_a_class_two_times = function() { var When_extending_a_class_two_times_with_no_extend_names = function() { - Log("TEST: When_extending_a_class_two_times_with_no_extend_names"); + __log("TEST: When_extending_a_class_two_times_with_no_extend_names"); - Log("TEST: Creating MyButton"); + __log("TEST: Creating MyButton"); var MyButton = com.tns.tests.Button1.extend({ toString : function() { return "button1"; } }); - Log("TEST: Calling MyButton ctor"); + __log("TEST: Calling MyButton ctor"); var button1 = new MyButton(); - Log("TEST: Calling button1 toString"); + __log("TEST: Calling button1 toString"); var button1Label = button1.toString(); button1.setLabel("first button"); - Log("TEST: Creating MyButton2 class"); + __log("TEST: Creating MyButton2 class"); var MyButton2 = new com.tns.tests.Button1.extend({ toString : function() { return "button2"; @@ -81,7 +81,7 @@ var When_extending_a_class_two_times_with_no_extend_names = function() { button2.setLabel("second button"); var button2Label = button2.toString(); - Log("but1=" + button1Label + ", but2=" + button2Label); + __log("but1=" + button1Label + ", but2=" + button2Label); Assert(button1 != button2 && button1Label == "button1" && button2Label == "button2", "FAILED: When_extending_a_class_two_times_with_no_extend_names"); @@ -90,7 +90,7 @@ var When_extending_a_class_two_times_with_no_extend_names = function() { } var When_implementing_an_interface_with_new_the_overrides_should_work = function() { - Log("TEST: When_implementing_an_interface_with_new__the_overrides_should_work"); + __log("TEST: When_implementing_an_interface_with_new__the_overrides_should_work"); var MyButton = new com.tns.tests.Button1.extend("MyButton60", { toString : function() { @@ -110,7 +110,7 @@ var When_implementing_an_interface_with_new_the_overrides_should_work = function Assert(buttonClicked == true, "FAILED: When_implementing_an_interface_with_new__the_overrides_should_work"); } var When_calling_instanceof_on_field_result_it_should_work = function() { - Log("TEST: When_calling_instanceof_on_field_result_it_should_work"); + __log("TEST: When_calling_instanceof_on_field_result_it_should_work"); var MyButton = new com.tns.tests.Button1.extend("MyButton81", { toString : function() { @@ -126,7 +126,7 @@ var When_calling_instanceof_on_field_result_it_should_work = function() { } var When_calling_instanceof_on_method_result_it_should_work = function() { - Log("TEST: When_calling_instanceof_on_method_result_it_should_work"); + __log("TEST: When_calling_instanceof_on_method_result_it_should_work"); var MyButton = new com.tns.tests.Button1.extend("MyButton98", { toString : function() { @@ -142,7 +142,7 @@ var When_calling_instanceof_on_method_result_it_should_work = function() { } var When_calling_instanceof_on_method_argument_it_should_work = function() { - Log("TEST: When_calling_instanceof_on_method_argument_it_should_work"); + __log("TEST: When_calling_instanceof_on_method_argument_it_should_work"); var isInstanceOf; @@ -164,10 +164,10 @@ var When_calling_instanceof_on_method_argument_it_should_work = function() { var When_calling_instanceof_on_interface_it_should_work = function() { - Log("NOT WORKING: When_calling_instanceof_on_interface_it_should_work"); + __log("NOT WORKING: When_calling_instanceof_on_interface_it_should_work"); return; - Log("TEST: When_calling_instanceof_on_interface_it_should_work"); + __log("TEST: When_calling_instanceof_on_interface_it_should_work"); var interfaceInstance = new android.view.View.OnClickListener("ClickListener", { onClick : function() { @@ -187,20 +187,20 @@ var When_calling_instanceof_on_interface_it_should_work = function() { } }); - //Log("Object get PrototypeOf" + Object.getPrototypeOf(interfaceInstance).toString()); - //Log("Object get PrototypeOf" + Object.getPrototypeOf(secondInterfaceInstance).toString()); + //__log("Object get PrototypeOf" + Object.getPrototypeOf(interfaceInstance).toString()); + //__log("Object get PrototypeOf" + Object.getPrototypeOf(secondInterfaceInstance).toString()); var isInstanceOfOnClickListener = interfaceInstance instanceof android.view.View.OnClickListener; var secondIsInstanceOfOnClickListener = secondInterfaceInstance instanceof android.view.View.OnClickListener; var thirdIsInstanceOfOnClickListener = thirdInterfaceInstance instanceof android.view.View.OnClickListener; - Log("isInstanceOfOnClickListener: " + isInstanceOfOnClickListener + " secondIsInstanceOfOnClickListener:" + secondIsInstanceOfOnClickListener + " thirdIsInstanceOfOnClickListener: " + thirdIsInstanceOfOnClickListener); + __log("isInstanceOfOnClickListener: " + isInstanceOfOnClickListener + " secondIsInstanceOfOnClickListener:" + secondIsInstanceOfOnClickListener + " thirdIsInstanceOfOnClickListener: " + thirdIsInstanceOfOnClickListener); Assert(isInstanceOfOnClickListener == true, "FAILED: When_calling_instanceof_on_interface_it_should_work. Actual isInstanceOfOnClickListener: " + isInstanceOfOnClickListener); Assert(secondIsInstanceOfOnClickListener == true, "FAILED 11: When_calling_instanceof_on_interface_it_should_work. Actual secondIsInstanceOfOnClickListener: " + secondIsInstanceOfOnClickListener); } var When_calling_instanceof_it_should_work = function() { - Log("TEST: When_calling_instanceof_it_should_work"); + __log("TEST: When_calling_instanceof_it_should_work"); var MyButton = com.tns.tests.Button1.extend("MyButton148", { toString : function() { @@ -220,7 +220,7 @@ var When_calling_instanceof_it_should_work = function() { var When_accessing_a_property_it_should_call_the_get_and_set_methods_respectivelly = function() { - Log("TEST: When_calling_instance_and_static_member_with_same_name_the_calls_should_succeed"); + __log("TEST: When_calling_instance_and_static_member_with_same_name_the_calls_should_succeed"); var MyButton = com.tns.tests.Button1.extend("MyButton167", { toString : function() { return "button1"; @@ -243,7 +243,7 @@ var When_accessing_a_property_it_should_call_the_get_and_set_methods_respectivel } var When_accessing_a_bool_property_it_should_call_the_is_and_set_methods_respectivelly = function() { - Log("TEST: When_accessing_a_bool_property_it_should_call_the_is_and_set_methods_respectivelly"); + __log("TEST: When_accessing_a_bool_property_it_should_call_the_is_and_set_methods_respectivelly"); var MyButton = com.tns.tests.Button1.extend("MyButton190", { toString : function() { return "button1"; @@ -266,7 +266,7 @@ var When_accessing_a_bool_property_it_should_call_the_is_and_set_methods_respect } var When_calling_instance_and_static_member_with_same_name_the_calls_should_succeed = function() { - Log("TEST: When_calling_instance_and_static_member_with_same_name_the_calls_should_succeed"); + __log("TEST: When_calling_instance_and_static_member_with_same_name_the_calls_should_succeed"); var MyButton = com.tns.tests.Button1.extend("MyButton213", { toString : function() { return "button1"; @@ -287,14 +287,14 @@ var When_calling_instance_and_static_member_with_same_name_the_calls_should_succ var When_calling_toString_on_an_java_object_it_should_call_the_java_method = function() { - Log("TEST: When_calling_toString_on_an_java_object_it_should_call_the_java_method"); + __log("TEST: When_calling_toString_on_an_java_object_it_should_call_the_java_method"); var instance = new com.tns.tests.DummyClass(); var s = instance.toString(); Assert(s.indexOf("com.tns.tests.DummyClass") != -1, "FAILED: When_calling_toString_on_an_java_object_it_should_call_the_java_method. Actual value: " + instance.toString()); } var When_calling_toString_on_an_java_object_that_has_overriden_toString_in_js_it_should_call_the_js_method = function() { - Log("TEST: When_calling_toString_on_an_java_object_that_has_overriden_toString_in_js_it_should_call_the_js_method"); + __log("TEST: When_calling_toString_on_an_java_object_that_has_overriden_toString_in_js_it_should_call_the_js_method"); var MyButton = com.tns.tests.Button1.extend("MyButton240", { toString : function() { return "button1"; @@ -307,7 +307,7 @@ var When_calling_toString_on_an_java_object_that_has_overriden_toString_in_js_it } var When_extending_a_class_two_times_without_second_implementation_object = function() { - Log("TEST: When_extending_a_class_two_times_without_second_implementation_object"); + __log("TEST: When_extending_a_class_two_times_without_second_implementation_object"); var MyButton = com.tns.tests.Button1.extend("MyButton257", { toString : function() { @@ -321,7 +321,7 @@ var When_extending_a_class_two_times_without_second_implementation_object = func var button2 = new com.tns.tests.Button1(); var button2Label = button2.toString(); - Log("button1Label=" + button1Label + ", button2Label=" + button2Label); + __log("button1Label=" + button1Label + ", button2Label=" + button2Label); Assert(button1 !== button2 && button1Label !== button2Label, "FAILED: When_extending_a_class_two_times_without_second_implementation_object"); @@ -330,7 +330,7 @@ var When_extending_a_class_two_times_without_second_implementation_object = func } var When__calling_super_method_using_the_prototype_property_of_a_function_it_should_call_the_super_method = function() { - Log("TEST: When__calling_super_method_using_the_prototype_property_of_a_function_it_should_call_the_super_method"); + __log("TEST: When__calling_super_method_using_the_prototype_property_of_a_function_it_should_call_the_super_method"); var button1 = new com.tns.tests.Button1(); var prop = com.tns.tests.Button1.prototype.getIMAGE_ID_PROP.call(button1); @@ -339,7 +339,7 @@ var When__calling_super_method_using_the_prototype_property_of_a_function_it_sho } var When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method = function() { - Log("TEST: When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method"); + __log("TEST: When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method"); var MyButton = com.tns.tests.Button1.extend("MyButton289", {}); var button1 = new MyButton(); @@ -348,7 +348,7 @@ var When__calling_super_method_using_the_prototype_property_of_a_extended_functi } var When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method2 = function() { - Log("TEST: When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method2"); + __log("TEST: When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method2"); var MyButton = com.tns.tests.Button1.extend("MyButton294", { getIMAGE_ID_PROP: function() { return ""; } @@ -359,10 +359,10 @@ var When__calling_super_method_using_the_prototype_property_of_a_extended_functi } var When_extending_a_class_and_calling_super_toString = function() { - //Log("//TODO: NOT WORKING: super method calls are not working correctly. Tests fails with FAILED: When_extending_a_class_and_calling_super_toString. Actual: com.tns.com.tns.tests.Button1-MyButton305@52854640 Expected: com.tns.tests.Button1@"); + //__log("//TODO: NOT WORKING: super method calls are not working correctly. Tests fails with FAILED: When_extending_a_class_and_calling_super_toString. Actual: com.tns.com.tns.tests.Button1-MyButton305@52854640 Expected: com.tns.tests.Button1@"); //return; - Log("TEST: When_extending_a_class_and_calling_super_toString"); + __log("TEST: When_extending_a_class_and_calling_super_toString"); var MyButton = com.tns.tests.Button1.extend("MyButton", { toString : function() { @@ -382,7 +382,7 @@ var When_extending_a_class_and_calling_super_toString = function() { } var When_extending_a_class_and_calling_super_method_it_should_work = function() { - Log("TEST: When_extending_a_class_and_calling_super_method_it_should_work"); + __log("TEST: When_extending_a_class_and_calling_super_method_it_should_work"); var MyButton = com.tns.tests.Button1.extend("MyButton318", { toString : function() { return "toString overriden"; @@ -404,7 +404,7 @@ var When_extending_a_class_and_calling_super_method_it_should_work = function() } var When_accessing_static_members_on_an_extended_class = function() { - Log("TEST: When_accessing_static_members_on_an_extended_class"); + __log("TEST: When_accessing_static_members_on_an_extended_class"); var MyButton = com.tns.tests.Button1.extend("MyButton341", { hashCode : function() { @@ -430,7 +430,7 @@ var When_accessing_static_members_on_an_extended_class = function() { } var When_implementing_an_interface_with_new__the_overrides_should_work = function() { - Log("TEST: When_implementing_an_interface_with_new__the_overrides_should_work"); + __log("TEST: When_implementing_an_interface_with_new__the_overrides_should_work"); var MyButton = new com.tns.tests.Button1.extends({ toString : function() { @@ -451,7 +451,7 @@ var When_implementing_an_interface_with_new__the_overrides_should_work = functio } var When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance = function() { - Log("TEST: When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance"); + __log("TEST: When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance"); var MyButton = new com.tns.tests.Button1.extend("MyButton381", { toString : function() { @@ -467,7 +467,7 @@ var When_a_java_method_returns_object_that_needs_js_instance__it_should_create_t } var When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type = function() { - Log("TEST: When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); + __log("TEST: When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); var Button = new com.tns.tests.Button1.extend("MyButton397", { toString : function() { @@ -483,7 +483,7 @@ var When_a_java_method_returns_object_that_needs_js_instance__it_should_create_t } var When_a_java_field_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type = function() { - Log("TEST: When_a_java_field_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); + __log("TEST: When_a_java_field_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); var Button = new com.tns.tests.Button1.extend("MyButton413", { toString : function() { @@ -499,7 +499,7 @@ var When_a_java_field_returns_object_that_needs_js_instance__it_should_create_th } var When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type = function() { - Log("TEST: When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); + __log("TEST: When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); var name = ""; var Button = new com.tns.tests.Button1.extend("MyButton418", { @@ -509,7 +509,7 @@ var When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_creat methodDummyClassAsObjectInArgs: function(object) { name = object.getName(); - Log("The actual name is " + name); + __log("The actual name is " + name); } }); @@ -520,7 +520,7 @@ var When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_creat } var When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type = function() { - Log("TEST: When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); + __log("TEST: When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); var Button = new com.tns.tests.Button1.extend("MyButton450", { toString : function() { @@ -537,7 +537,7 @@ var When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_shoul var When_accessing_a_static_field_on_a_javascript_instance_it_should_work = function() { - Log("TEST: When_accessing_a_static_field_on_a_javascript_instance_it_should_work"); + __log("TEST: When_accessing_a_static_field_on_a_javascript_instance_it_should_work"); var MyButton = com.tns.tests.Button1.extend("MyButton455", { hashCode : function() { @@ -563,7 +563,7 @@ var When_accessing_a_static_field_on_a_javascript_instance_it_should_work = fun var TestRequireDirName = function() { - Log("TEST: TestRequireDirName"); + __log("TEST: TestRequireDirName"); var dir = __dirname; @@ -574,7 +574,7 @@ var TestRequireDirName = function() { var TestRequireFileName = function() { - Log("TEST: TestRequireFileName"); + __log("TEST: TestRequireFileName"); var file = __filename; @@ -590,7 +590,7 @@ var TestRequireFileName = function() { var TestGarbageCollection = function() { - Log("TEST: TestGarbageCollection"); + __log("TEST: TestGarbageCollection"); var obj = new com.tns.tests.ClassX(); @@ -617,7 +617,7 @@ var TestGarbageCollection = function() { var TestWorkingWithJavaArrayDoesNotMakeMemoryLeak = function() { - Log("TEST: TestWorkingWithJavaArrayDoesNotMakeMemoryLeak"); + __log("TEST: TestWorkingWithJavaArrayDoesNotMakeMemoryLeak"); var size = 10 * 1024 * 1024; @@ -642,7 +642,7 @@ var TestWorkingWithJavaArrayDoesNotMakeMemoryLeak = function() { var TestConstructorOverride = function() { - Log("TEST: TestConstructorOverride"); + __log("TEST: TestConstructorOverride"); var ctorCalled = false; var isConstructor = false; @@ -666,7 +666,7 @@ var TestConstructorOverride = function() { var TestConstructorOverrideOnTypeWithInitMethod = function() { - Log("TEST: TestConstructorOverrideOnTypeWithInitMethod"); + __log("TEST: TestConstructorOverrideOnTypeWithInitMethod"); var isCalled = false; var isConstructor = false; @@ -678,13 +678,13 @@ var TestConstructorOverrideOnTypeWithInitMethod = function() { } }); - Log("TEST: TestConstructorOverrideOnTypeWithInitMethod: calling overriden ctor"); + __log("TEST: TestConstructorOverrideOnTypeWithInitMethod: calling overriden ctor"); var dummy = new MyDummyClassWithInit(); Assert(isCalled == true, "TestConstructorOverrideOnTypeWithInitMethod FAILED: constructor not called"); Assert(isConstructor == true, "TestConstructorOverrideOnTypeWithInitMethod FAILED: isConstructor should be 'true'"); - Log("TEST: TestConstructorOverrideOnTypeWithInitMethod: calling ctor as regular method"); + __log("TEST: TestConstructorOverrideOnTypeWithInitMethod: calling ctor as regular method"); isCalled = undefined; isConstructor = undefined; dummy.callInit(); @@ -694,14 +694,14 @@ var TestConstructorOverrideOnTypeWithInitMethod = function() { } var TestRequire = function() { - Log("TEST: TestRequire"); + __log("TEST: TestRequire"); var myModule = require("../simplemodule"); myModule.myLog("Hello world from NativeScript!"); } var TestArrays = function() { - Log("TEST: TestArrays"); + __log("TEST: TestArrays"); var MyButton = com.tns.tests.Button1.extend("MyButton639", { toString : function() { @@ -733,7 +733,7 @@ var TestArrays = function() { var TestArrayLengthPropertyIsNumber = function() { - Log("TEST: TestArrayLengthPropertyIsNumber"); + __log("TEST: TestArrayLengthPropertyIsNumber"); var expectedLength = 10; @@ -756,7 +756,7 @@ var TestArrayLengthPropertyIsNumber = function() { } var TestCreationOfLocationListener = function() { - Log("TEST: TestCreationOfLocationListener"); + __log("TEST: TestCreationOfLocationListener"); var onLocationChangedCalled = false; var onProviderDisabledCalled = false; @@ -788,7 +788,7 @@ var TestCreationOfLocationListener = function() { } var TestInnerClassCreation = function() { - Log("TEST: TestInnerClassCreation"); + __log("TEST: TestInnerClassCreation"); var MyButton = com.tns.tests.Button1.extend("MyButton726", { toString : function() { @@ -811,7 +811,7 @@ var TestInnerClassCreation = function() { } var TestNestedClassCreation = function() { - Log("TEST: TestNestedClassCreation"); + __log("TEST: TestNestedClassCreation"); var i = 123; @@ -823,7 +823,7 @@ var TestNestedClassCreation = function() { } var TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata = function() { - Log("TEST: TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata"); + __log("TEST: TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata"); var dummy = new com.tns.tests.DummyClass(); @@ -836,7 +836,7 @@ var TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata = function() { var TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata = function() { - Log("TEST: TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata"); + __log("TEST: TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata"); var dummy = new com.tns.tests.DummyClass(); @@ -851,7 +851,7 @@ var TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata = function() { var TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata = function() { - Log("TEST: TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata"); + __log("TEST: TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata"); var D = com.tns.tests.DummyClass.DummyDerivedClass.extend("D",{ dummyMethod: function(dummy) { @@ -868,7 +868,7 @@ var TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithout var TestAccessArrayElementAsObjectWithoutMetadata = function() { - Log("TEST: TestAccessArrayElementAsObjectWithoutMetadata"); + __log("TEST: TestAccessArrayElementAsObjectWithoutMetadata"); var d = new com.tns.tests.DummyClass(); @@ -887,7 +887,7 @@ var TestAccessArrayElementAsObjectWithoutMetadata = function() { var TestCallMethodThatReturnsNull = function() { - Log("TEST: TestCallMethodThatReturnsNull"); + __log("TEST: TestCallMethodThatReturnsNull"); var dummy = new com.tns.tests.DummyClass(); @@ -898,7 +898,7 @@ var TestCallMethodThatReturnsNull = function() { var TestCallMethodThatReturnsNullString = function() { - Log("TEST: TestCallMethodThatReturnsNullString"); + __log("TEST: TestCallMethodThatReturnsNullString"); var dummy = new com.tns.tests.DummyClass(); @@ -909,7 +909,7 @@ var TestCallMethodThatReturnsNullString = function() { var TestAccessNullField = function() { - Log("TEST: TestAccessNullField"); + __log("TEST: TestAccessNullField"); var dummy = new com.tns.tests.DummyClass(); @@ -920,13 +920,13 @@ var TestAccessNullField = function() { var TestAccessNullArrayElement = function() { - Log("TEST: TestAccessNullArrayElement"); + __log("TEST: TestAccessNullArrayElement"); var dummy = new com.tns.tests.DummyClass(); var arr = dummy.getArrayWithNullElement(); - Log("arr=" + arr.length) + __log("arr=" + arr.length) var x = arr[0]; @@ -935,7 +935,7 @@ var TestAccessNullArrayElement = function() { var TestCallMethodWithIntVarArg = function() { - Log("TEST: TestCallMethodWithIntVarArg"); + __log("TEST: TestCallMethodWithIntVarArg"); var dummy = new com.tns.tests.DummyClass(); @@ -946,7 +946,7 @@ var TestCallMethodWithIntVarArg = function() { var TestCallMethodWithCharVarArg = function() { - Log("TEST: TestCallMethodWithCharVarArg"); + __log("TEST: TestCallMethodWithCharVarArg"); var dummy = new com.tns.tests.DummyClass(); @@ -957,7 +957,7 @@ var TestCallMethodWithCharVarArg = function() { var TestCallMethodWithObjectVarArg = function() { - Log("TEST: TestCallMethodWithObjectVarArg"); + __log("TEST: TestCallMethodWithObjectVarArg"); var dummy = new com.tns.tests.DummyClass(); @@ -968,7 +968,7 @@ var TestCallMethodWithObjectVarArg = function() { var TestCanInheritFromClassInAndroidSupportLibrary = function() { - Log("TEST: TestCanInheritFromClassInAndroidSupportLibrary"); + __log("TEST: TestCanInheritFromClassInAndroidSupportLibrary"); var MyParcelableCompat = android.support.v4.os.ParcelableCompat.extend("MyParcelableCompat", { toString: function() { @@ -985,7 +985,7 @@ var TestCanInheritFromClassInAndroidSupportLibrary = function() { var TestCallMethodWithByteParameter = function() { - Log("TEST: TestCallMethodWithByteParameter"); + __log("TEST: TestCallMethodWithByteParameter"); var b = java.lang.Byte.valueOf(byte(123)); @@ -996,7 +996,7 @@ var TestCallMethodWithByteParameter = function() { var TestCallMethodWithFloatParameter = function() { - Log("TEST: TestCallMethodWithFloatParameter"); + __log("TEST: TestCallMethodWithFloatParameter"); var d = new com.tns.tests.DummyClass(); @@ -1007,7 +1007,7 @@ var TestCallMethodWithFloatParameter = function() { var TestCanCallStaticMethodThroughBaseClass = function() { - Log("TEST: TestCanCallStaticMethodThroughBaseClass"); + __log("TEST: TestCanCallStaticMethodThroughBaseClass"); var name = com.tns.tests.MyClassDerived.getName(); @@ -1016,7 +1016,7 @@ var TestCanCallStaticMethodThroughBaseClass = function() { var TestUseFieldThatIsArray = function() { - Log("TEST: TestUseFieldThatIsArray"); + __log("TEST: TestUseFieldThatIsArray"); var d = new com.tns.tests.DummyClass(); @@ -1043,7 +1043,7 @@ var TestUseFieldThatIsArray = function() { var TestCanAssignArrayToField = function() { - Log("TEST: TestCanAssignArrayToField"); + __log("TEST: TestCanAssignArrayToField"); var d = new com.tns.tests.DummyClass(); @@ -1060,7 +1060,7 @@ var TestCanAssignArrayToField = function() { var TestCallMethodThatReturnsLong = function() { - Log("TEST: TestCallMethodThatReturnsLong"); + __log("TEST: TestCallMethodThatReturnsLong"); var n = java.lang.Long.parseLong("9007199254740991"); // 9007199254740991 = 2^53-1 @@ -1082,7 +1082,7 @@ var TestCallMethodThatReturnsLong = function() { var TestCallMethodWithLongParameter = function() { - Log("TEST: TestCallMethodWithLongParameter"); + __log("TEST: TestCallMethodWithLongParameter"); var d = new com.tns.tests.DummyClass(); @@ -1101,7 +1101,7 @@ var TestCallMethodWithLongParameter = function() { var TestCallMethodWithLongCastArgument = function() { - Log("TEST: TestCallMethodWithLongCastArgument"); + __log("TEST: TestCallMethodWithLongCastArgument"); var d = new com.tns.tests.DummyClass(); @@ -1120,7 +1120,7 @@ var TestCallMethodWithLongCastArgument = function() { var TestCallToStringOfNativeScriptLongObject = function() { - Log("TEST: TestCallToStringOfNativeScriptLongObject"); + __log("TEST: TestCallToStringOfNativeScriptLongObject"); var n = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 @@ -1131,7 +1131,7 @@ var TestCallToStringOfNativeScriptLongObject = function() { var TestCallMethodWithLongParameterWithNumberObject = function() { - Log("TEST: TestCallMethodWithLongParameterWithNumberObject"); + __log("TEST: TestCallMethodWithLongParameterWithNumberObject"); var d = new com.tns.tests.DummyClass(); @@ -1141,7 +1141,7 @@ var TestCallMethodWithLongParameterWithNumberObject = function() { var TestCallMethodWithMinAndMaxLongValues = function() { - Log("TEST: TestCallMethodWithMinAndMaxLongValues"); + __log("TEST: TestCallMethodWithMinAndMaxLongValues"); var d = new com.tns.tests.DummyClass(); @@ -1156,7 +1156,7 @@ var TestCallMethodWithMinAndMaxLongValues = function() { var TestCallMethodWithByteParameter = function() { - Log("TEST: TestCallMethodWithByteParameter"); + __log("TEST: TestCallMethodWithByteParameter"); var d = new com.tns.tests.DummyClass(); @@ -1175,7 +1175,7 @@ var TestCallMethodWithByteParameter = function() { var TestCallMethodWithShortParameter = function() { - Log("TEST: TestCallMethodWithShortParameter"); + __log("TEST: TestCallMethodWithShortParameter"); var d = new com.tns.tests.DummyClass(); @@ -1194,7 +1194,7 @@ var TestCallMethodWithShortParameter = function() { var TestCallMethodWithBooleanParameter = function() { - Log("TEST: TestCallMethodWithBooleanParameter"); + __log("TEST: TestCallMethodWithBooleanParameter"); var d = new com.tns.tests.DummyClass(); @@ -1213,7 +1213,7 @@ var TestCallMethodWithBooleanParameter = function() { var TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod"); + __log("TEST: TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod"); var exceptionCaught = false; @@ -1233,7 +1233,7 @@ var TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod = function() { var TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor"); + __log("TEST: TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor"); var exceptionCaught = false; @@ -1251,7 +1251,7 @@ var TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor = function() { var TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject"); + __log("TEST: TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject"); var arr = java.lang.reflect.Array.newInstance(java.lang.Object.class, 10); @@ -1278,7 +1278,7 @@ var TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject var TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive"); + __log("TEST: TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive"); var arr = java.lang.reflect.Array.newInstance(java.lang.Object.class, 10); @@ -1305,7 +1305,7 @@ var TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive = var TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject"); + __log("TEST: TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject"); var exceptionCaught = false; @@ -1323,7 +1323,7 @@ var TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject = var TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject"); + __log("TEST: TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject"); var exceptionCaught = false; @@ -1343,7 +1343,7 @@ var TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject = fu var TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected"); + __log("TEST: TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected"); var exceptionCaught = false; @@ -1363,7 +1363,7 @@ var TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJav var TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted"); + __log("TEST: TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted"); var exceptionCaught = false; @@ -1382,7 +1382,7 @@ var TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted = funct try { - Log("btn=" + btn.triggerEcho("12345")); + __log("btn=" + btn.triggerEcho("12345")); } catch (e) { @@ -1395,7 +1395,7 @@ var TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted = funct try { - Log("btn=" + btn.triggerEchoAsObject("123")); + __log("btn=" + btn.triggerEchoAsObject("123")); } catch (e) { @@ -1410,7 +1410,7 @@ var TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted = funct var TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten"); + __log("TEST: TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten"); var exceptionCaught = false; @@ -1427,7 +1427,7 @@ var TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten = f try { - Log("btn=" + btn.triggerEcho("123")); + __log("btn=" + btn.triggerEcho("123")); } catch (e) { @@ -1440,7 +1440,7 @@ var TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten = f try { - Log("btn=" + btn.triggerEchoAsObject("123")); + __log("btn=" + btn.triggerEchoAsObject("123")); } catch (e) { @@ -1452,7 +1452,7 @@ var TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten = f var TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed"); + __log("TEST: TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed"); var methodCalled = false; var exceptionCaught = false; @@ -1505,7 +1505,7 @@ var TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed = functi var TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass"); + __log("TEST: TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass"); var implObj = {} @@ -1519,7 +1519,7 @@ var TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOn } catch (e) { - Log("TEST: TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass exception:" + e); + __log("TEST: TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass exception:" + e); exceptionCaught = true; } @@ -1528,7 +1528,7 @@ var TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOn var TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected"); + __log("TEST: TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected"); var d = new com.tns.tests.DummyClass(); @@ -1540,7 +1540,7 @@ var TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected = functi } catch (e) { - Log("e=" + e); + __log("e=" + e); exceptionCaught = true; } @@ -1554,7 +1554,7 @@ var TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected = functi } catch (e) { - Log("e=" + e); + __log("e=" + e); exceptionCaught = true; } @@ -1563,7 +1563,7 @@ var TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected = functi var TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected = function() { - Log("TEST: TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected"); + __log("TEST: TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected"); var d = new com.tns.tests.DummyClass(); @@ -1575,7 +1575,7 @@ var TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected = functio } catch (e) { - Log("e=" + e); + __log("e=" + e); exceptionCaught = true; } @@ -1584,7 +1584,7 @@ var TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected = functio var TestCallProctedMethodDefinedAsAbstractAndThenOverwritten = function() { - Log("TEST: TestCallProctedMethodDefinedAsAbstractAndThenOverwritten"); + __log("TEST: TestCallProctedMethodDefinedAsAbstractAndThenOverwritten"); var C = com.tns.tests.AbsClassImpl.extend("C1520", { echoString: function(s) { @@ -1601,7 +1601,7 @@ var TestCallProctedMethodDefinedAsAbstractAndThenOverwritten = function() { var TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString = function() { - Log("TEST: TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString"); + __log("TEST: TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString"); var d = new com.tns.tests.DummyClass(); @@ -1613,7 +1613,7 @@ var TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString = function() { var TestObjectReturnValueIsTreatedAsStringWhenItIsString = function() { - Log("TEST: TestObjectReturnValueIsTreatedAsStringWhenItIsString"); + __log("TEST: TestObjectReturnValueIsTreatedAsStringWhenItIsString"); var d = new com.tns.tests.DummyClass(); @@ -1624,7 +1624,7 @@ var TestObjectReturnValueIsTreatedAsStringWhenItIsString = function() { var TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava = function() { - Log("TEST: TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava"); + __log("TEST: TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava"); var O = java.lang.Object.extend("O1560", {}); @@ -1637,7 +1637,7 @@ var TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava = function() var TestCanCallMethodThatReturnsArrayOfInterfaces = function() { - Log("TEST: TestCanCallMethodThatReturnsArrayOfInterfaces"); + __log("TEST: TestCanCallMethodThatReturnsArrayOfInterfaces"); var arr = java.lang.reflect.Array.newInstance(android.view.View.OnClickListener.class, 1); @@ -1652,7 +1652,7 @@ var TestCanCallMethodThatReturnsArrayOfInterfaces = function() { var TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes = function() { - Log("TEST: TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes"); + __log("TEST: TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes"); var formats = java.lang.reflect.Array.newInstance(java.text.NumberFormat.class, 2); formats[0] = java.text.NumberFormat.getInstance(); @@ -1666,7 +1666,7 @@ var TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes = } var TestCanCallToStringOnClassProxy = function() { - Log("TEST: TestCanCallToStringOnClassProxy"); + __log("TEST: TestCanCallToStringOnClassProxy"); var view = android.view.View; var s = view.toString(); @@ -1675,7 +1675,7 @@ var TestCanCallToStringOnClassProxy = function() { } var When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class = function() { - Log("TEST: When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class"); + __log("TEST: When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class"); var MyButton = com.tns.tests.Button1.extend("MyButton1615", { toString : function() { @@ -1694,14 +1694,14 @@ var When_accessing_class_property_on_a_extended_class_it_should_return_the_exten } var When_using_global_in_a_module_global_should_be_defined = function() { - Log("TEST: When_using_global_in_a_module_global_should_be_defined"); + __log("TEST: When_using_global_in_a_module_global_should_be_defined"); var module = require("../modules/module"); module.accessGlobalObject(); } var When_using_package_json_should_load_module = function() { - Log("TEST: When_using_package_json_should_load_module"); + __log("TEST: When_using_package_json_should_load_module"); var module2 = require("../module2"); var value456 = module2.value456; @@ -1710,14 +1710,14 @@ var When_using_package_json_should_load_module = function() { } var When_require_bcl_module_it_should_be_loaded = function() { - Log("TEST: When_require_bcl_module_it_should_be_loaded"); + __log("TEST: When_require_bcl_module_it_should_be_loaded"); var module = require("bclmodule"); module.getModuleName(); } var When_require_a_module_it_should_be_loaded = function() { - Log("TEST: When_require_a_module_it_should_be_loaded"); + __log("TEST: When_require_a_module_it_should_be_loaded"); var module = require("./testModules/testmodule"); var moduleName = module.getModuleName(); @@ -1727,7 +1727,7 @@ var When_require_a_module_it_should_be_loaded = function() { var When_require_a_bcl_module_in_a_dir_it_should_be_loaded = function() { - Log("TEST: When_require_a_bcl_module_in_a_dir_it_should_be_loaded"); + __log("TEST: When_require_a_bcl_module_in_a_dir_it_should_be_loaded"); var module = require("tests/testModules/testBclModule"); var moduleName = module.getModuleName(); @@ -1736,7 +1736,7 @@ var When_require_a_bcl_module_in_a_dir_it_should_be_loaded = function() { } var When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it = function() { - Log("TEST: When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); + __log("TEST: When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); var module = require("./testModules/someDirModule"); var moduleName = module.getModuleName(); @@ -1745,7 +1745,7 @@ var When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_i } var When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it = function() { - Log("TEST: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); + __log("TEST: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); var module = require("tests/testModules/someBclDirModule"); var moduleName = module.getModuleName(); @@ -1754,7 +1754,7 @@ var When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_ } var When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it = function() { - Log("TEST: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it"); + __log("TEST: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it"); var module = require("tests/testModules/someModule"); var value123 = module.value123; diff --git a/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js b/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js index 96da9d8f1..c9cb4a7ef 100644 --- a/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js +++ b/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js @@ -5,7 +5,7 @@ var Assert = function(condition, failMessage) { } var When_generating_a_proxy_of_nested_interface_at_runtime = function() { - Log("TEST: When_generating_a_proxy_of_nested_interface_at_runtime"); + __log("TEST: When_generating_a_proxy_of_nested_interface_at_runtime"); var MyButton = new com.tns.tests.Button1.extend("MyButton10", { toString : function() { @@ -31,7 +31,7 @@ var When_generating_a_proxy_of_nested_interface_at_runtime = function() { var When_generating_a_proxy_of_android_class_at_runtime = function() { - Log("TEST: When_generating_a_proxy_of_android_class_at_runtime"); + __log("TEST: When_generating_a_proxy_of_android_class_at_runtime"); var MyButton = new com.tns.tests.Button1.extend("MyButton36", { toString : function() { diff --git a/test-app/assets/app/tests/testsForTypescript.js b/test-app/assets/app/tests/testsForTypescript.js index 650a8210f..9ce1fd1c1 100644 --- a/test-app/assets/app/tests/testsForTypescript.js +++ b/test-app/assets/app/tests/testsForTypescript.js @@ -7,7 +7,7 @@ var Assert = function(condition, failMessage) { (function When_creating_a_typescript_instance_with_constructor_property_it_should_support_this() { - Log("TEST: When_creating_a_typescript_instance_with_constructor_property_it_should_support_this"); + __log("TEST: When_creating_a_typescript_instance_with_constructor_property_it_should_support_this"); var NativeViewGroup = (function (_super) { __extends(NativeViewGroup, _super); function NativeViewGroup(view) { @@ -58,7 +58,7 @@ var Assert = function(condition, failMessage) { (function When_creating_a_typescript_instance_it_should_support_overriden_members() { - Log("TEST: When_creating_a_typescript_instance_it_should_support_overriden_members"); + __log("TEST: When_creating_a_typescript_instance_it_should_support_overriden_members"); var initCalled = false; var MyButton1 = (function (_super) { @@ -89,7 +89,7 @@ var Assert = function(condition, failMessage) { (function When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members() { - Log("TEST: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members"); + __log("TEST: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members"); var MyButton2 = (function (_super) { @@ -119,14 +119,14 @@ var Assert = function(condition, failMessage) { (function When_creating_a_pure_typescript_inheritance_chain_it_should_work() { - Log("TEST: When_creating_a_pure_typescript_inheritance_chain_it_should_work"); + __log("TEST: When_creating_a_pure_typescript_inheritance_chain_it_should_work"); var Animal = (function () { function Animal(name) { this.name = name; } Animal.prototype.move = function (meters) { - Log(this.name + " moved " + meters + "m."); + __log(this.name + " moved " + meters + "m."); }; return Animal; })(); @@ -137,7 +137,7 @@ var Assert = function(condition, failMessage) { _super.call(this, name); } Snake.prototype.move = function () { - Log("Slithering..."); + __log("Slithering..."); _super.prototype.move.call(this, 5); }; return Snake; @@ -149,7 +149,7 @@ var Assert = function(condition, failMessage) { _super.call(this, name); } Horse.prototype.move = function () { - Log("Galloping..."); + __log("Galloping..."); _super.prototype.move.call(this, 45); }; return Horse; @@ -177,7 +177,7 @@ var Assert = function(condition, failMessage) { (function When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance() { - Log("TEST: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance"); + __log("TEST: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance"); var MyButton3 = (function (_super) { __extends(MyButton3, _super); @@ -204,7 +204,7 @@ var Assert = function(condition, failMessage) { (function When_creating_a_typescript_instance_with_arguments_it_should_be_a_valid_nativescript_instance() { - Log("TEST: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance"); + __log("TEST: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance"); var MyButtonWithArgs = (function (_super) { __extends(MyButtonWithArgs, _super); @@ -217,7 +217,7 @@ var Assert = function(condition, failMessage) { }; MyButtonWithArgs.prototype.onClick = function () { - Log("MyButton onClick called"); + __log("MyButton onClick called"); }; MyButtonWithArgs.prototype.superToString = function () { @@ -239,7 +239,7 @@ var Assert = function(condition, failMessage) { (function When_creating_a_typescript_instance_it_should_support_member_access() { - Log("TEST: When_creating_a_typescript_instance_it_should_support_member_access"); + __log("TEST: When_creating_a_typescript_instance_it_should_support_member_access"); var MyButton4 = (function (_super) { __extends(MyButton4, _super); @@ -272,7 +272,7 @@ var Assert = function(condition, failMessage) { (function When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype() { - Log("TEST: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype"); + __log("TEST: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype"); var MyButton5 = (function (_super) { __extends(MyButton5, _super); @@ -300,7 +300,7 @@ var Assert = function(condition, failMessage) { (function When_extending_an_already_extended_object_it_should_throw_an_error() { - Log("TEST: When_extending_an_already_extended_object_it_should_throw_an_error"); + __log("TEST: When_extending_an_already_extended_object_it_should_throw_an_error"); var errorThrown = false; try { @@ -342,7 +342,7 @@ var Assert = function(condition, failMessage) { (function When_accessing_a_static_field_on_a_typescript_instance_it_should_work() { - Log("TEST: When_accessing_a_static_field_on_a_typescript_instance_it_should_work"); + __log("TEST: When_accessing_a_static_field_on_a_typescript_instance_it_should_work"); var MyButton7 = (function (_super) { __extends(MyButton7, _super); @@ -374,7 +374,7 @@ var Assert = function(condition, failMessage) { (function When_calling_a_static_method_on_a_typescript_instance_it_should_work() { - Log("TEST: When_calling_a_static_method_on_a_typescript_instance_it_should_work"); + __log("TEST: When_calling_a_static_method_on_a_typescript_instance_it_should_work"); var MyButton8 = (function (_super) { @@ -388,7 +388,7 @@ var Assert = function(condition, failMessage) { }; MyButton8.prototype.onClick = function () { - Log("MyButton onClick called"); + __log("MyButton onClick called"); }; MyButton8.prototype.superToString = function () { @@ -506,7 +506,7 @@ var Assert = function(condition, failMessage) { (function When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work() { - Log("TEST: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work"); + __log("TEST: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work"); var MyButton9 = (function (_super) { __extends(MyButton9, _super); diff --git a/test-app/assets/app/tests/testsWithContext.js b/test-app/assets/app/tests/testsWithContext.js index 13a1529cd..b55c4f196 100644 --- a/test-app/assets/app/tests/testsWithContext.js +++ b/test-app/assets/app/tests/testsWithContext.js @@ -6,7 +6,7 @@ var Assert = function(condition, failMessage) { var TestConstructorOverrideForBuiltinType = function(context) { - Log("TEST: TestConstructorOverrideForBuiltinType"); + __log("TEST: TestConstructorOverrideForBuiltinType"); var ctorCalled = false; var isConstructor = false; @@ -26,7 +26,7 @@ var TestConstructorOverrideForBuiltinType = function(context) { var TestConstructorOverrideForBuiltinTypeWithInitMethod = function(context) { - Log("TEST: TestConstructorOverrideForBuiltinTypeWithInitMethod"); + __log("TEST: TestConstructorOverrideForBuiltinTypeWithInitMethod"); var initInvocationCount = 0; @@ -38,7 +38,7 @@ var TestConstructorOverrideForBuiltinTypeWithInitMethod = function(context) { var datePicker = new MyDatePicker(context); - Log("datePicker=" + datePicker); + __log("datePicker=" + datePicker); var count1 = initInvocationCount; @@ -53,7 +53,7 @@ var TestConstructorOverrideForBuiltinTypeWithInitMethod = function(context) { var TestBuiltinNestedClassCreation = function(context) { - Log("TEST: TestBuiltinNestedClassCreation"); + __log("TEST: TestBuiltinNestedClassCreation"); var loader = new android.content.Loader(context); @@ -65,13 +65,13 @@ var TestBuiltinNestedClassCreation = function(context) { var TestPublicWindowManagerImplWithoutMetadata = function(context) { - Log("TEST: TestPublicWindowManagerImplWithoutMetadata"); + __log("TEST: TestPublicWindowManagerImplWithoutMetadata"); var windowManagerImpl = context.getSystemService(android.content.Context.WINDOW_SERVICE); var display = windowManagerImpl.getDefaultDisplay(); - //Log("display.isValid=" + display.isValid()); + //__log("display.isValid=" + display.isValid()); var displayInfo = display.toString(); @@ -80,7 +80,7 @@ var TestPublicWindowManagerImplWithoutMetadata = function(context) { var TestUsingClassFromAndroidSupportLibrary = function(context) { - Log("TEST: TestUsingClassFromAndroidSupportLibrary"); + __log("TEST: TestUsingClassFromAndroidSupportLibrary"); var layout = new android.support.v4.widget.DrawerLayout(context); @@ -89,7 +89,7 @@ var TestUsingClassFromAndroidSupportLibrary = function(context) { var TestCanPassCharSequenceArray = function(context) { - Log("TEST: TestCanPassCharSequenceArray"); + __log("TEST: TestCanPassCharSequenceArray"); var alert = new android.app.AlertDialog.Builder(context); diff --git a/test-app/assets/internal/prepareExtend.js b/test-app/assets/internal/prepareExtend.js index 94ccff617..376bf9448 100644 --- a/test-app/assets/internal/prepareExtend.js +++ b/test-app/assets/internal/prepareExtend.js @@ -57,7 +57,7 @@ var __extends = function(Child, Parent) { } function extend(child, parent) { - Log("TS extend called"); + __log("TS extend called"); if (!child.__extended) { child.__extended = parent.extend(child.name, child.prototype); } @@ -66,7 +66,7 @@ var __extends = function(Child, Parent) { }; Parent.__activityExtend = function(parent, name, implementationObject) { - Log("__activityExtend called"); + __log("__activityExtend called"); return parent.extend(name, implementationObject); }; From 0ac8e24836d026e015b0d4820c37511dff950502 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Mon, 27 Apr 2015 15:25:39 +0300 Subject: [PATCH 03/46] remove unused file --- src/src/com/tns/Metadata.java | 3562 --------------------------------- 1 file changed, 3562 deletions(-) delete mode 100644 src/src/com/tns/Metadata.java diff --git a/src/src/com/tns/Metadata.java b/src/src/com/tns/Metadata.java deleted file mode 100644 index 930858020..000000000 --- a/src/src/com/tns/Metadata.java +++ /dev/null @@ -1,3562 +0,0 @@ -package com.tns; - -import java.util.HashSet; - -class Metadata { - private static HashSet knownMetadata = new HashSet(); - - public static HashSet getKnownMetadata() { - if (knownMetadata.isEmpty()) { - knownMetadata.add("android.Manifest"); - knownMetadata.add("android.Manifest$permission"); - knownMetadata.add("android.Manifest$permission_group"); - knownMetadata.add("android.R"); - knownMetadata.add("android.R$anim"); - knownMetadata.add("android.R$animator"); - knownMetadata.add("android.R$array"); - knownMetadata.add("android.R$attr"); - knownMetadata.add("android.R$bool"); - knownMetadata.add("android.R$color"); - knownMetadata.add("android.R$dimen"); - knownMetadata.add("android.R$drawable"); - knownMetadata.add("android.R$fraction"); - knownMetadata.add("android.R$id"); - knownMetadata.add("android.R$integer"); - knownMetadata.add("android.R$interpolator"); - knownMetadata.add("android.R$layout"); - knownMetadata.add("android.R$menu"); - knownMetadata.add("android.R$mipmap"); - knownMetadata.add("android.R$plurals"); - knownMetadata.add("android.R$raw"); - knownMetadata.add("android.R$string"); - knownMetadata.add("android.R$style"); - knownMetadata.add("android.R$xml"); - knownMetadata.add("android.accessibilityservice.AccessibilityService"); - knownMetadata.add("android.accessibilityservice.AccessibilityServiceInfo"); - knownMetadata.add("android.accounts.AbstractAccountAuthenticator"); - knownMetadata.add("android.accounts.Account"); - knownMetadata.add("android.accounts.AccountAuthenticatorActivity"); - knownMetadata.add("android.accounts.AccountAuthenticatorResponse"); - knownMetadata.add("android.accounts.AccountManager"); - knownMetadata.add("android.accounts.AccountManagerCallback"); - knownMetadata.add("android.accounts.AccountManagerFuture"); - knownMetadata.add("android.accounts.AccountsException"); - knownMetadata.add("android.accounts.AuthenticatorDescription"); - knownMetadata.add("android.accounts.AuthenticatorException"); - knownMetadata.add("android.accounts.NetworkErrorException"); - knownMetadata.add("android.accounts.OnAccountsUpdateListener"); - knownMetadata.add("android.accounts.OperationCanceledException"); - knownMetadata.add("android.animation.Animator"); - knownMetadata.add("android.animation.Animator$AnimatorListener"); - knownMetadata.add("android.animation.AnimatorInflater"); - knownMetadata.add("android.animation.AnimatorListenerAdapter"); - knownMetadata.add("android.animation.AnimatorSet"); - knownMetadata.add("android.animation.AnimatorSet$Builder"); - knownMetadata.add("android.animation.ArgbEvaluator"); - knownMetadata.add("android.animation.FloatEvaluator"); - knownMetadata.add("android.animation.IntEvaluator"); - knownMetadata.add("android.animation.Keyframe"); - knownMetadata.add("android.animation.LayoutTransition"); - knownMetadata.add("android.animation.LayoutTransition$TransitionListener"); - knownMetadata.add("android.animation.ObjectAnimator"); - knownMetadata.add("android.animation.PropertyValuesHolder"); - knownMetadata.add("android.animation.TimeAnimator"); - knownMetadata.add("android.animation.TimeAnimator$TimeListener"); - knownMetadata.add("android.animation.TimeInterpolator"); - knownMetadata.add("android.animation.TypeEvaluator"); - knownMetadata.add("android.animation.ValueAnimator"); - knownMetadata.add("android.animation.ValueAnimator$AnimatorUpdateListener"); - knownMetadata.add("android.annotation.SuppressLint"); - knownMetadata.add("android.annotation.TargetApi"); - knownMetadata.add("android.app.ActionBar"); - knownMetadata.add("android.app.ActionBar$LayoutParams"); - knownMetadata.add("android.app.ActionBar$OnMenuVisibilityListener"); - knownMetadata.add("android.app.ActionBar$OnNavigationListener"); - knownMetadata.add("android.app.ActionBar$Tab"); - knownMetadata.add("android.app.ActionBar$TabListener"); - knownMetadata.add("android.app.Activity"); - knownMetadata.add("android.app.ActivityGroup"); - knownMetadata.add("android.app.ActivityManager"); - knownMetadata.add("android.app.ActivityManager$MemoryInfo"); - knownMetadata.add("android.app.ActivityManager$ProcessErrorStateInfo"); - knownMetadata.add("android.app.ActivityManager$RecentTaskInfo"); - knownMetadata.add("android.app.ActivityManager$RunningAppProcessInfo"); - knownMetadata.add("android.app.ActivityManager$RunningServiceInfo"); - knownMetadata.add("android.app.ActivityManager$RunningTaskInfo"); - knownMetadata.add("android.app.ActivityOptions"); - knownMetadata.add("android.app.AlarmManager"); - knownMetadata.add("android.app.AlertDialog"); - knownMetadata.add("android.app.AlertDialog$Builder"); - knownMetadata.add("android.app.AliasActivity"); - knownMetadata.add("android.app.Application"); - knownMetadata.add("android.app.Application$ActivityLifecycleCallbacks"); - knownMetadata.add("android.app.ApplicationErrorReport"); - knownMetadata.add("android.app.ApplicationErrorReport$AnrInfo"); - knownMetadata.add("android.app.ApplicationErrorReport$BatteryInfo"); - knownMetadata.add("android.app.ApplicationErrorReport$CrashInfo"); - knownMetadata.add("android.app.ApplicationErrorReport$RunningServiceInfo"); - knownMetadata.add("android.app.DatePickerDialog"); - knownMetadata.add("android.app.DatePickerDialog$OnDateSetListener"); - knownMetadata.add("android.app.Dialog"); - knownMetadata.add("android.app.DialogFragment"); - knownMetadata.add("android.app.DownloadManager"); - knownMetadata.add("android.app.DownloadManager$Query"); - knownMetadata.add("android.app.DownloadManager$Request"); - knownMetadata.add("android.app.ExpandableListActivity"); - knownMetadata.add("android.app.Fragment"); - knownMetadata.add("android.app.Fragment$InstantiationException"); - knownMetadata.add("android.app.Fragment$SavedState"); - knownMetadata.add("android.app.FragmentBreadCrumbs"); - knownMetadata.add("android.app.FragmentBreadCrumbs$OnBreadCrumbClickListener"); - knownMetadata.add("android.app.FragmentManager"); - knownMetadata.add("android.app.FragmentManager$BackStackEntry"); - knownMetadata.add("android.app.FragmentManager$OnBackStackChangedListener"); - knownMetadata.add("android.app.FragmentTransaction"); - knownMetadata.add("android.app.Instrumentation"); - knownMetadata.add("android.app.Instrumentation$ActivityMonitor"); - knownMetadata.add("android.app.Instrumentation$ActivityResult"); - knownMetadata.add("android.app.IntentService"); - knownMetadata.add("android.app.KeyguardManager"); - knownMetadata.add("android.app.KeyguardManager$KeyguardLock"); - knownMetadata.add("android.app.KeyguardManager$OnKeyguardExitResult"); - knownMetadata.add("android.app.LauncherActivity"); - knownMetadata.add("android.app.LauncherActivity$IconResizer"); - knownMetadata.add("android.app.LauncherActivity$ListItem"); - knownMetadata.add("android.app.ListActivity"); - knownMetadata.add("android.app.ListFragment"); - knownMetadata.add("android.app.LoaderManager"); - knownMetadata.add("android.app.LoaderManager$LoaderCallbacks"); - knownMetadata.add("android.app.LocalActivityManager"); - knownMetadata.add("android.app.MediaRouteActionProvider"); - knownMetadata.add("android.app.MediaRouteButton"); - knownMetadata.add("android.app.NativeActivity"); - knownMetadata.add("android.app.Notification"); - knownMetadata.add("android.app.Notification$BigPictureStyle"); - knownMetadata.add("android.app.Notification$BigTextStyle"); - knownMetadata.add("android.app.Notification$Builder"); - knownMetadata.add("android.app.Notification$InboxStyle"); - knownMetadata.add("android.app.Notification$Style"); - knownMetadata.add("android.app.NotificationManager"); - knownMetadata.add("android.app.PendingIntent"); - knownMetadata.add("android.app.PendingIntent$CanceledException"); - knownMetadata.add("android.app.PendingIntent$OnFinished"); - knownMetadata.add("android.app.Presentation"); - knownMetadata.add("android.app.ProgressDialog"); - knownMetadata.add("android.app.SearchManager"); - knownMetadata.add("android.app.SearchManager$OnCancelListener"); - knownMetadata.add("android.app.SearchManager$OnDismissListener"); - knownMetadata.add("android.app.SearchableInfo"); - knownMetadata.add("android.app.Service"); - knownMetadata.add("android.app.TabActivity"); - knownMetadata.add("android.app.TaskStackBuilder"); - knownMetadata.add("android.app.TimePickerDialog"); - knownMetadata.add("android.app.TimePickerDialog$OnTimeSetListener"); - knownMetadata.add("android.app.UiModeManager"); - knownMetadata.add("android.app.WallpaperInfo"); - knownMetadata.add("android.app.WallpaperManager"); - knownMetadata.add("android.app.admin.DeviceAdminInfo"); - knownMetadata.add("android.app.admin.DeviceAdminReceiver"); - knownMetadata.add("android.app.admin.DevicePolicyManager"); - knownMetadata.add("android.app.backup.BackupAgent"); - knownMetadata.add("android.app.backup.BackupAgentHelper"); - knownMetadata.add("android.app.backup.BackupDataInput"); - knownMetadata.add("android.app.backup.BackupDataInputStream"); - knownMetadata.add("android.app.backup.BackupDataOutput"); - knownMetadata.add("android.app.backup.BackupHelper"); - knownMetadata.add("android.app.backup.BackupManager"); - knownMetadata.add("android.app.backup.FileBackupHelper"); - knownMetadata.add("android.app.backup.FullBackupDataOutput"); - knownMetadata.add("android.app.backup.RestoreObserver"); - knownMetadata.add("android.app.backup.SharedPreferencesBackupHelper"); - knownMetadata.add("android.appwidget.AppWidgetHost"); - knownMetadata.add("android.appwidget.AppWidgetHostView"); - knownMetadata.add("android.appwidget.AppWidgetManager"); - knownMetadata.add("android.appwidget.AppWidgetProvider"); - knownMetadata.add("android.appwidget.AppWidgetProviderInfo"); - knownMetadata.add("android.bluetooth.BluetoothA2dp"); - knownMetadata.add("android.bluetooth.BluetoothAdapter"); - knownMetadata.add("android.bluetooth.BluetoothAssignedNumbers"); - knownMetadata.add("android.bluetooth.BluetoothClass"); - knownMetadata.add("android.bluetooth.BluetoothClass$Device"); - knownMetadata.add("android.bluetooth.BluetoothClass$Device$Major"); - knownMetadata.add("android.bluetooth.BluetoothClass$Service"); - knownMetadata.add("android.bluetooth.BluetoothDevice"); - knownMetadata.add("android.bluetooth.BluetoothHeadset"); - knownMetadata.add("android.bluetooth.BluetoothHealth"); - knownMetadata.add("android.bluetooth.BluetoothHealthAppConfiguration"); - knownMetadata.add("android.bluetooth.BluetoothHealthCallback"); - knownMetadata.add("android.bluetooth.BluetoothProfile"); - knownMetadata.add("android.bluetooth.BluetoothProfile$ServiceListener"); - knownMetadata.add("android.bluetooth.BluetoothServerSocket"); - knownMetadata.add("android.bluetooth.BluetoothSocket"); - knownMetadata.add("android.content.AbstractThreadedSyncAdapter"); - knownMetadata.add("android.content.ActivityNotFoundException"); - knownMetadata.add("android.content.AsyncQueryHandler"); - knownMetadata.add("android.content.AsyncTaskLoader"); - knownMetadata.add("android.content.BroadcastReceiver"); - knownMetadata.add("android.content.BroadcastReceiver$PendingResult"); - knownMetadata.add("android.content.ClipData"); - knownMetadata.add("android.content.ClipData$Item"); - knownMetadata.add("android.content.ClipDescription"); - knownMetadata.add("android.content.ClipboardManager"); - knownMetadata.add("android.content.ClipboardManager$OnPrimaryClipChangedListener"); - knownMetadata.add("android.content.ComponentCallbacks"); - knownMetadata.add("android.content.ComponentCallbacks2"); - knownMetadata.add("android.content.ComponentName"); - knownMetadata.add("android.content.ContentProvider"); - knownMetadata.add("android.content.ContentProvider$PipeDataWriter"); - knownMetadata.add("android.content.ContentProviderClient"); - knownMetadata.add("android.content.ContentProviderOperation"); - knownMetadata.add("android.content.ContentProviderOperation$Builder"); - knownMetadata.add("android.content.ContentProviderResult"); - knownMetadata.add("android.content.ContentQueryMap"); - knownMetadata.add("android.content.ContentResolver"); - knownMetadata.add("android.content.ContentUris"); - knownMetadata.add("android.content.ContentValues"); - knownMetadata.add("android.content.Context"); - knownMetadata.add("android.content.ContextWrapper"); - knownMetadata.add("android.content.CursorLoader"); - knownMetadata.add("android.content.DialogInterface"); - knownMetadata.add("android.content.DialogInterface$OnCancelListener"); - knownMetadata.add("android.content.DialogInterface$OnClickListener"); - knownMetadata.add("android.content.DialogInterface$OnDismissListener"); - knownMetadata.add("android.content.DialogInterface$OnKeyListener"); - knownMetadata.add("android.content.DialogInterface$OnMultiChoiceClickListener"); - knownMetadata.add("android.content.DialogInterface$OnShowListener"); - knownMetadata.add("android.content.Entity"); - knownMetadata.add("android.content.Entity$NamedContentValues"); - knownMetadata.add("android.content.EntityIterator"); - knownMetadata.add("android.content.Intent"); - knownMetadata.add("android.content.Intent$FilterComparison"); - knownMetadata.add("android.content.Intent$ShortcutIconResource"); - knownMetadata.add("android.content.IntentFilter"); - knownMetadata.add("android.content.IntentFilter$AuthorityEntry"); - knownMetadata.add("android.content.IntentFilter$MalformedMimeTypeException"); - knownMetadata.add("android.content.IntentSender"); - knownMetadata.add("android.content.IntentSender$OnFinished"); - knownMetadata.add("android.content.IntentSender$SendIntentException"); - knownMetadata.add("android.content.Loader"); - knownMetadata.add("android.content.Loader$ForceLoadContentObserver"); - knownMetadata.add("android.content.Loader$OnLoadCanceledListener"); - knownMetadata.add("android.content.Loader$OnLoadCompleteListener"); - knownMetadata.add("android.content.MutableContextWrapper"); - knownMetadata.add("android.content.OperationApplicationException"); - knownMetadata.add("android.content.PeriodicSync"); - knownMetadata.add("android.content.ReceiverCallNotAllowedException"); - knownMetadata.add("android.content.SearchRecentSuggestionsProvider"); - knownMetadata.add("android.content.ServiceConnection"); - knownMetadata.add("android.content.SharedPreferences"); - knownMetadata.add("android.content.SharedPreferences$Editor"); - knownMetadata.add("android.content.SharedPreferences$OnSharedPreferenceChangeListener"); - knownMetadata.add("android.content.SyncAdapterType"); - knownMetadata.add("android.content.SyncContext"); - knownMetadata.add("android.content.SyncInfo"); - knownMetadata.add("android.content.SyncResult"); - knownMetadata.add("android.content.SyncStats"); - knownMetadata.add("android.content.SyncStatusObserver"); - knownMetadata.add("android.content.UriMatcher"); - knownMetadata.add("android.content.pm.ActivityInfo"); - knownMetadata.add("android.content.pm.ApplicationInfo"); - knownMetadata.add("android.content.pm.ApplicationInfo$DisplayNameComparator"); - knownMetadata.add("android.content.pm.ComponentInfo"); - knownMetadata.add("android.content.pm.ConfigurationInfo"); - knownMetadata.add("android.content.pm.FeatureInfo"); - knownMetadata.add("android.content.pm.InstrumentationInfo"); - knownMetadata.add("android.content.pm.LabeledIntent"); - knownMetadata.add("android.content.pm.PackageInfo"); - knownMetadata.add("android.content.pm.PackageItemInfo"); - knownMetadata.add("android.content.pm.PackageItemInfo$DisplayNameComparator"); - knownMetadata.add("android.content.pm.PackageManager"); - knownMetadata.add("android.content.pm.PackageManager$NameNotFoundException"); - knownMetadata.add("android.content.pm.PackageStats"); - knownMetadata.add("android.content.pm.PathPermission"); - knownMetadata.add("android.content.pm.PermissionGroupInfo"); - knownMetadata.add("android.content.pm.PermissionInfo"); - knownMetadata.add("android.content.pm.ProviderInfo"); - knownMetadata.add("android.content.pm.ResolveInfo"); - knownMetadata.add("android.content.pm.ResolveInfo$DisplayNameComparator"); - knownMetadata.add("android.content.pm.ServiceInfo"); - knownMetadata.add("android.content.pm.Signature"); - knownMetadata.add("android.content.res.AssetFileDescriptor"); - knownMetadata.add("android.content.res.AssetFileDescriptor$AutoCloseInputStream"); - knownMetadata.add("android.content.res.AssetFileDescriptor$AutoCloseOutputStream"); - knownMetadata.add("android.content.res.AssetManager"); - knownMetadata.add("android.content.res.AssetManager$AssetInputStream"); - knownMetadata.add("android.content.res.ColorStateList"); - knownMetadata.add("android.content.res.Configuration"); - knownMetadata.add("android.content.res.ObbInfo"); - knownMetadata.add("android.content.res.ObbScanner"); - knownMetadata.add("android.content.res.Resources"); - knownMetadata.add("android.content.res.Resources$NotFoundException"); - knownMetadata.add("android.content.res.Resources$Theme"); - knownMetadata.add("android.content.res.TypedArray"); - knownMetadata.add("android.content.res.XmlResourceParser"); - knownMetadata.add("android.database.AbstractCursor"); - knownMetadata.add("android.database.AbstractWindowedCursor"); - knownMetadata.add("android.database.CharArrayBuffer"); - knownMetadata.add("android.database.ContentObservable"); - knownMetadata.add("android.database.ContentObserver"); - knownMetadata.add("android.database.CrossProcessCursor"); - knownMetadata.add("android.database.CrossProcessCursorWrapper"); - knownMetadata.add("android.database.Cursor"); - knownMetadata.add("android.database.CursorIndexOutOfBoundsException"); - knownMetadata.add("android.database.CursorJoiner"); - knownMetadata.add("android.database.CursorJoiner$Result"); - knownMetadata.add("android.database.CursorWindow"); - knownMetadata.add("android.database.CursorWrapper"); - knownMetadata.add("android.database.DataSetObservable"); - knownMetadata.add("android.database.DataSetObserver"); - knownMetadata.add("android.database.DatabaseErrorHandler"); - knownMetadata.add("android.database.DatabaseUtils"); - knownMetadata.add("android.database.DatabaseUtils$InsertHelper"); - knownMetadata.add("android.database.DefaultDatabaseErrorHandler"); - knownMetadata.add("android.database.MatrixCursor"); - knownMetadata.add("android.database.MatrixCursor$RowBuilder"); - knownMetadata.add("android.database.MergeCursor"); - knownMetadata.add("android.database.Observable"); - knownMetadata.add("android.database.SQLException"); - knownMetadata.add("android.database.StaleDataException"); - knownMetadata.add("android.database.sqlite.SQLiteAbortException"); - knownMetadata.add("android.database.sqlite.SQLiteAccessPermException"); - knownMetadata.add("android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException"); - knownMetadata.add("android.database.sqlite.SQLiteBlobTooBigException"); - knownMetadata.add("android.database.sqlite.SQLiteCantOpenDatabaseException"); - knownMetadata.add("android.database.sqlite.SQLiteClosable"); - knownMetadata.add("android.database.sqlite.SQLiteConstraintException"); - knownMetadata.add("android.database.sqlite.SQLiteCursor"); - knownMetadata.add("android.database.sqlite.SQLiteCursorDriver"); - knownMetadata.add("android.database.sqlite.SQLiteDatabase"); - knownMetadata.add("android.database.sqlite.SQLiteDatabase$CursorFactory"); - knownMetadata.add("android.database.sqlite.SQLiteDatabaseCorruptException"); - knownMetadata.add("android.database.sqlite.SQLiteDatabaseLockedException"); - knownMetadata.add("android.database.sqlite.SQLiteDatatypeMismatchException"); - knownMetadata.add("android.database.sqlite.SQLiteDiskIOException"); - knownMetadata.add("android.database.sqlite.SQLiteDoneException"); - knownMetadata.add("android.database.sqlite.SQLiteException"); - knownMetadata.add("android.database.sqlite.SQLiteFullException"); - knownMetadata.add("android.database.sqlite.SQLiteMisuseException"); - knownMetadata.add("android.database.sqlite.SQLiteOpenHelper"); - knownMetadata.add("android.database.sqlite.SQLiteOutOfMemoryException"); - knownMetadata.add("android.database.sqlite.SQLiteProgram"); - knownMetadata.add("android.database.sqlite.SQLiteQuery"); - knownMetadata.add("android.database.sqlite.SQLiteQueryBuilder"); - knownMetadata.add("android.database.sqlite.SQLiteReadOnlyDatabaseException"); - knownMetadata.add("android.database.sqlite.SQLiteStatement"); - knownMetadata.add("android.database.sqlite.SQLiteTableLockedException"); - knownMetadata.add("android.database.sqlite.SQLiteTransactionListener"); - knownMetadata.add("android.drm.DrmConvertedStatus"); - knownMetadata.add("android.drm.DrmErrorEvent"); - knownMetadata.add("android.drm.DrmEvent"); - knownMetadata.add("android.drm.DrmInfo"); - knownMetadata.add("android.drm.DrmInfoEvent"); - knownMetadata.add("android.drm.DrmInfoRequest"); - knownMetadata.add("android.drm.DrmInfoStatus"); - knownMetadata.add("android.drm.DrmManagerClient"); - knownMetadata.add("android.drm.DrmManagerClient$OnErrorListener"); - knownMetadata.add("android.drm.DrmManagerClient$OnEventListener"); - knownMetadata.add("android.drm.DrmManagerClient$OnInfoListener"); - knownMetadata.add("android.drm.DrmRights"); - knownMetadata.add("android.drm.DrmStore"); - knownMetadata.add("android.drm.DrmStore$Action"); - knownMetadata.add("android.drm.DrmStore$ConstraintsColumns"); - knownMetadata.add("android.drm.DrmStore$DrmObjectType"); - knownMetadata.add("android.drm.DrmStore$Playback"); - knownMetadata.add("android.drm.DrmStore$RightsStatus"); - knownMetadata.add("android.drm.DrmSupportInfo"); - knownMetadata.add("android.drm.DrmUtils"); - knownMetadata.add("android.drm.DrmUtils$ExtendedMetadataParser"); - knownMetadata.add("android.drm.ProcessedData"); - knownMetadata.add("android.gesture.Gesture"); - knownMetadata.add("android.gesture.GestureLibraries"); - knownMetadata.add("android.gesture.GestureLibrary"); - knownMetadata.add("android.gesture.GestureOverlayView"); - knownMetadata.add("android.gesture.GestureOverlayView$OnGestureListener"); - knownMetadata.add("android.gesture.GestureOverlayView$OnGesturePerformedListener"); - knownMetadata.add("android.gesture.GestureOverlayView$OnGesturingListener"); - knownMetadata.add("android.gesture.GesturePoint"); - knownMetadata.add("android.gesture.GestureStore"); - knownMetadata.add("android.gesture.GestureStroke"); - knownMetadata.add("android.gesture.GestureUtils"); - knownMetadata.add("android.gesture.OrientedBoundingBox"); - knownMetadata.add("android.gesture.Prediction"); - knownMetadata.add("android.graphics.AvoidXfermode"); - knownMetadata.add("android.graphics.AvoidXfermode$Mode"); - knownMetadata.add("android.graphics.Bitmap"); - knownMetadata.add("android.graphics.Bitmap$CompressFormat"); - knownMetadata.add("android.graphics.Bitmap$Config"); - knownMetadata.add("android.graphics.BitmapFactory"); - knownMetadata.add("android.graphics.BitmapFactory$Options"); - knownMetadata.add("android.graphics.BitmapRegionDecoder"); - knownMetadata.add("android.graphics.BitmapShader"); - knownMetadata.add("android.graphics.BlurMaskFilter"); - knownMetadata.add("android.graphics.BlurMaskFilter$Blur"); - knownMetadata.add("android.graphics.Camera"); - knownMetadata.add("android.graphics.Canvas"); - knownMetadata.add("android.graphics.Canvas$EdgeType"); - knownMetadata.add("android.graphics.Canvas$VertexMode"); - knownMetadata.add("android.graphics.Color"); - knownMetadata.add("android.graphics.ColorFilter"); - knownMetadata.add("android.graphics.ColorMatrix"); - knownMetadata.add("android.graphics.ColorMatrixColorFilter"); - knownMetadata.add("android.graphics.ComposePathEffect"); - knownMetadata.add("android.graphics.ComposeShader"); - knownMetadata.add("android.graphics.CornerPathEffect"); - knownMetadata.add("android.graphics.DashPathEffect"); - knownMetadata.add("android.graphics.DiscretePathEffect"); - knownMetadata.add("android.graphics.DrawFilter"); - knownMetadata.add("android.graphics.EmbossMaskFilter"); - knownMetadata.add("android.graphics.ImageFormat"); - knownMetadata.add("android.graphics.Interpolator"); - knownMetadata.add("android.graphics.Interpolator$Result"); - knownMetadata.add("android.graphics.LayerRasterizer"); - knownMetadata.add("android.graphics.LightingColorFilter"); - knownMetadata.add("android.graphics.LinearGradient"); - knownMetadata.add("android.graphics.MaskFilter"); - knownMetadata.add("android.graphics.Matrix"); - knownMetadata.add("android.graphics.Matrix$ScaleToFit"); - knownMetadata.add("android.graphics.Movie"); - knownMetadata.add("android.graphics.NinePatch"); - knownMetadata.add("android.graphics.Paint"); - knownMetadata.add("android.graphics.Paint$Align"); - knownMetadata.add("android.graphics.Paint$Cap"); - knownMetadata.add("android.graphics.Paint$FontMetrics"); - knownMetadata.add("android.graphics.Paint$FontMetricsInt"); - knownMetadata.add("android.graphics.Paint$Join"); - knownMetadata.add("android.graphics.Paint$Style"); - knownMetadata.add("android.graphics.PaintFlagsDrawFilter"); - knownMetadata.add("android.graphics.Path"); - knownMetadata.add("android.graphics.Path$Direction"); - knownMetadata.add("android.graphics.Path$FillType"); - knownMetadata.add("android.graphics.PathDashPathEffect"); - knownMetadata.add("android.graphics.PathDashPathEffect$Style"); - knownMetadata.add("android.graphics.PathEffect"); - knownMetadata.add("android.graphics.PathMeasure"); - knownMetadata.add("android.graphics.Picture"); - knownMetadata.add("android.graphics.PixelFormat"); - knownMetadata.add("android.graphics.PixelXorXfermode"); - knownMetadata.add("android.graphics.Point"); - knownMetadata.add("android.graphics.PointF"); - knownMetadata.add("android.graphics.PorterDuff"); - knownMetadata.add("android.graphics.PorterDuff$Mode"); - knownMetadata.add("android.graphics.PorterDuffColorFilter"); - knownMetadata.add("android.graphics.PorterDuffXfermode"); - knownMetadata.add("android.graphics.RadialGradient"); - knownMetadata.add("android.graphics.Rasterizer"); - knownMetadata.add("android.graphics.Rect"); - knownMetadata.add("android.graphics.RectF"); - knownMetadata.add("android.graphics.Region"); - knownMetadata.add("android.graphics.Region$Op"); - knownMetadata.add("android.graphics.RegionIterator"); - knownMetadata.add("android.graphics.Shader"); - knownMetadata.add("android.graphics.Shader$TileMode"); - knownMetadata.add("android.graphics.SumPathEffect"); - knownMetadata.add("android.graphics.SurfaceTexture"); - knownMetadata.add("android.graphics.SurfaceTexture$OnFrameAvailableListener"); - knownMetadata.add("android.graphics.SurfaceTexture$OutOfResourcesException"); - knownMetadata.add("android.graphics.SweepGradient"); - knownMetadata.add("android.graphics.Typeface"); - knownMetadata.add("android.graphics.Xfermode"); - knownMetadata.add("android.graphics.YuvImage"); - knownMetadata.add("android.graphics.drawable.Animatable"); - knownMetadata.add("android.graphics.drawable.AnimationDrawable"); - knownMetadata.add("android.graphics.drawable.BitmapDrawable"); - knownMetadata.add("android.graphics.drawable.ClipDrawable"); - knownMetadata.add("android.graphics.drawable.ColorDrawable"); - knownMetadata.add("android.graphics.drawable.Drawable"); - knownMetadata.add("android.graphics.drawable.Drawable$Callback"); - knownMetadata.add("android.graphics.drawable.Drawable$ConstantState"); - knownMetadata.add("android.graphics.drawable.DrawableContainer"); - knownMetadata.add("android.graphics.drawable.DrawableContainer$DrawableContainerState"); - knownMetadata.add("android.graphics.drawable.GradientDrawable"); - knownMetadata.add("android.graphics.drawable.GradientDrawable$Orientation"); - knownMetadata.add("android.graphics.drawable.InsetDrawable"); - knownMetadata.add("android.graphics.drawable.LayerDrawable"); - knownMetadata.add("android.graphics.drawable.LevelListDrawable"); - knownMetadata.add("android.graphics.drawable.NinePatchDrawable"); - knownMetadata.add("android.graphics.drawable.PaintDrawable"); - knownMetadata.add("android.graphics.drawable.PictureDrawable"); - knownMetadata.add("android.graphics.drawable.RotateDrawable"); - knownMetadata.add("android.graphics.drawable.ScaleDrawable"); - knownMetadata.add("android.graphics.drawable.ShapeDrawable"); - knownMetadata.add("android.graphics.drawable.ShapeDrawable$ShaderFactory"); - knownMetadata.add("android.graphics.drawable.StateListDrawable"); - knownMetadata.add("android.graphics.drawable.TransitionDrawable"); - knownMetadata.add("android.graphics.drawable.shapes.ArcShape"); - knownMetadata.add("android.graphics.drawable.shapes.OvalShape"); - knownMetadata.add("android.graphics.drawable.shapes.PathShape"); - knownMetadata.add("android.graphics.drawable.shapes.RectShape"); - knownMetadata.add("android.graphics.drawable.shapes.RoundRectShape"); - knownMetadata.add("android.graphics.drawable.shapes.Shape"); - knownMetadata.add("android.hardware.Camera"); - knownMetadata.add("android.hardware.Camera$Area"); - knownMetadata.add("android.hardware.Camera$AutoFocusCallback"); - knownMetadata.add("android.hardware.Camera$AutoFocusMoveCallback"); - knownMetadata.add("android.hardware.Camera$CameraInfo"); - knownMetadata.add("android.hardware.Camera$ErrorCallback"); - knownMetadata.add("android.hardware.Camera$Face"); - knownMetadata.add("android.hardware.Camera$FaceDetectionListener"); - knownMetadata.add("android.hardware.Camera$OnZoomChangeListener"); - knownMetadata.add("android.hardware.Camera$Parameters"); - knownMetadata.add("android.hardware.Camera$PictureCallback"); - knownMetadata.add("android.hardware.Camera$PreviewCallback"); - knownMetadata.add("android.hardware.Camera$ShutterCallback"); - knownMetadata.add("android.hardware.Camera$Size"); - knownMetadata.add("android.hardware.GeomagneticField"); - knownMetadata.add("android.hardware.Sensor"); - knownMetadata.add("android.hardware.SensorEvent"); - knownMetadata.add("android.hardware.SensorEventListener"); - knownMetadata.add("android.hardware.SensorListener"); - knownMetadata.add("android.hardware.SensorManager"); - knownMetadata.add("android.hardware.display.DisplayManager"); - knownMetadata.add("android.hardware.display.DisplayManager$DisplayListener"); - knownMetadata.add("android.hardware.input.InputManager"); - knownMetadata.add("android.hardware.input.InputManager$InputDeviceListener"); - knownMetadata.add("android.hardware.usb.UsbAccessory"); - knownMetadata.add("android.hardware.usb.UsbConstants"); - knownMetadata.add("android.hardware.usb.UsbDevice"); - knownMetadata.add("android.hardware.usb.UsbDeviceConnection"); - knownMetadata.add("android.hardware.usb.UsbEndpoint"); - knownMetadata.add("android.hardware.usb.UsbInterface"); - knownMetadata.add("android.hardware.usb.UsbManager"); - knownMetadata.add("android.hardware.usb.UsbRequest"); - knownMetadata.add("android.inputmethodservice.AbstractInputMethodService"); - knownMetadata.add("android.inputmethodservice.AbstractInputMethodService$AbstractInputMethodImpl"); - knownMetadata.add("android.inputmethodservice.AbstractInputMethodService$AbstractInputMethodSessionImpl"); - knownMetadata.add("android.inputmethodservice.ExtractEditText"); - knownMetadata.add("android.inputmethodservice.InputMethodService"); - knownMetadata.add("android.inputmethodservice.InputMethodService$InputMethodImpl"); - knownMetadata.add("android.inputmethodservice.InputMethodService$InputMethodSessionImpl"); - knownMetadata.add("android.inputmethodservice.InputMethodService$Insets"); - knownMetadata.add("android.inputmethodservice.Keyboard"); - knownMetadata.add("android.inputmethodservice.Keyboard$Key"); - knownMetadata.add("android.inputmethodservice.Keyboard$Row"); - knownMetadata.add("android.inputmethodservice.KeyboardView"); - knownMetadata.add("android.inputmethodservice.KeyboardView$OnKeyboardActionListener"); - knownMetadata.add("android.location.Address"); - knownMetadata.add("android.location.Criteria"); - knownMetadata.add("android.location.Geocoder"); - knownMetadata.add("android.location.GpsSatellite"); - knownMetadata.add("android.location.GpsStatus"); - knownMetadata.add("android.location.GpsStatus$Listener"); - knownMetadata.add("android.location.GpsStatus$NmeaListener"); - knownMetadata.add("android.location.Location"); - knownMetadata.add("android.location.LocationListener"); - knownMetadata.add("android.location.LocationManager"); - knownMetadata.add("android.location.LocationProvider"); - knownMetadata.add("android.media.AsyncPlayer"); - knownMetadata.add("android.media.AudioFormat"); - knownMetadata.add("android.media.AudioManager"); - knownMetadata.add("android.media.AudioManager$OnAudioFocusChangeListener"); - knownMetadata.add("android.media.AudioRecord"); - knownMetadata.add("android.media.AudioRecord$OnRecordPositionUpdateListener"); - knownMetadata.add("android.media.AudioTrack"); - knownMetadata.add("android.media.AudioTrack$OnPlaybackPositionUpdateListener"); - knownMetadata.add("android.media.CamcorderProfile"); - knownMetadata.add("android.media.CameraProfile"); - knownMetadata.add("android.media.ExifInterface"); - knownMetadata.add("android.media.FaceDetector"); - knownMetadata.add("android.media.FaceDetector$Face"); - knownMetadata.add("android.media.JetPlayer"); - knownMetadata.add("android.media.JetPlayer$OnJetEventListener"); - knownMetadata.add("android.media.MediaActionSound"); - knownMetadata.add("android.media.MediaCodec"); - knownMetadata.add("android.media.MediaCodec$BufferInfo"); - knownMetadata.add("android.media.MediaCodec$CryptoException"); - knownMetadata.add("android.media.MediaCodec$CryptoInfo"); - knownMetadata.add("android.media.MediaCodecInfo"); - knownMetadata.add("android.media.MediaCodecInfo$CodecCapabilities"); - knownMetadata.add("android.media.MediaCodecInfo$CodecProfileLevel"); - knownMetadata.add("android.media.MediaCodecList"); - knownMetadata.add("android.media.MediaCrypto"); - knownMetadata.add("android.media.MediaCryptoException"); - knownMetadata.add("android.media.MediaExtractor"); - knownMetadata.add("android.media.MediaFormat"); - knownMetadata.add("android.media.MediaMetadataRetriever"); - knownMetadata.add("android.media.MediaPlayer"); - knownMetadata.add("android.media.MediaPlayer$OnBufferingUpdateListener"); - knownMetadata.add("android.media.MediaPlayer$OnCompletionListener"); - knownMetadata.add("android.media.MediaPlayer$OnErrorListener"); - knownMetadata.add("android.media.MediaPlayer$OnInfoListener"); - knownMetadata.add("android.media.MediaPlayer$OnPreparedListener"); - knownMetadata.add("android.media.MediaPlayer$OnSeekCompleteListener"); - knownMetadata.add("android.media.MediaPlayer$OnTimedTextListener"); - knownMetadata.add("android.media.MediaPlayer$OnVideoSizeChangedListener"); - knownMetadata.add("android.media.MediaPlayer$TrackInfo"); - knownMetadata.add("android.media.MediaRecorder"); - knownMetadata.add("android.media.MediaRecorder$AudioEncoder"); - knownMetadata.add("android.media.MediaRecorder$AudioSource"); - knownMetadata.add("android.media.MediaRecorder$OnErrorListener"); - knownMetadata.add("android.media.MediaRecorder$OnInfoListener"); - knownMetadata.add("android.media.MediaRecorder$OutputFormat"); - knownMetadata.add("android.media.MediaRecorder$VideoEncoder"); - knownMetadata.add("android.media.MediaRecorder$VideoSource"); - knownMetadata.add("android.media.MediaRouter"); - knownMetadata.add("android.media.MediaRouter$Callback"); - knownMetadata.add("android.media.MediaRouter$RouteCategory"); - knownMetadata.add("android.media.MediaRouter$RouteGroup"); - knownMetadata.add("android.media.MediaRouter$RouteInfo"); - knownMetadata.add("android.media.MediaRouter$SimpleCallback"); - knownMetadata.add("android.media.MediaRouter$UserRouteInfo"); - knownMetadata.add("android.media.MediaRouter$VolumeCallback"); - knownMetadata.add("android.media.MediaScannerConnection"); - knownMetadata.add("android.media.MediaScannerConnection$MediaScannerConnectionClient"); - knownMetadata.add("android.media.MediaScannerConnection$OnScanCompletedListener"); - knownMetadata.add("android.media.MediaSyncEvent"); - knownMetadata.add("android.media.RemoteControlClient"); - knownMetadata.add("android.media.RemoteControlClient$MetadataEditor"); - knownMetadata.add("android.media.Ringtone"); - knownMetadata.add("android.media.RingtoneManager"); - knownMetadata.add("android.media.SoundPool"); - knownMetadata.add("android.media.SoundPool$OnLoadCompleteListener"); - knownMetadata.add("android.media.ThumbnailUtils"); - knownMetadata.add("android.media.TimedText"); - knownMetadata.add("android.media.ToneGenerator"); - knownMetadata.add("android.media.audiofx.AcousticEchoCanceler"); - knownMetadata.add("android.media.audiofx.AudioEffect"); - knownMetadata.add("android.media.audiofx.AudioEffect$Descriptor"); - knownMetadata.add("android.media.audiofx.AudioEffect$OnControlStatusChangeListener"); - knownMetadata.add("android.media.audiofx.AudioEffect$OnEnableStatusChangeListener"); - knownMetadata.add("android.media.audiofx.AutomaticGainControl"); - knownMetadata.add("android.media.audiofx.BassBoost"); - knownMetadata.add("android.media.audiofx.BassBoost$OnParameterChangeListener"); - knownMetadata.add("android.media.audiofx.BassBoost$Settings"); - knownMetadata.add("android.media.audiofx.EnvironmentalReverb"); - knownMetadata.add("android.media.audiofx.EnvironmentalReverb$OnParameterChangeListener"); - knownMetadata.add("android.media.audiofx.EnvironmentalReverb$Settings"); - knownMetadata.add("android.media.audiofx.Equalizer"); - knownMetadata.add("android.media.audiofx.Equalizer$OnParameterChangeListener"); - knownMetadata.add("android.media.audiofx.Equalizer$Settings"); - knownMetadata.add("android.media.audiofx.NoiseSuppressor"); - knownMetadata.add("android.media.audiofx.PresetReverb"); - knownMetadata.add("android.media.audiofx.PresetReverb$OnParameterChangeListener"); - knownMetadata.add("android.media.audiofx.PresetReverb$Settings"); - knownMetadata.add("android.media.audiofx.Virtualizer"); - knownMetadata.add("android.media.audiofx.Virtualizer$OnParameterChangeListener"); - knownMetadata.add("android.media.audiofx.Virtualizer$Settings"); - knownMetadata.add("android.media.audiofx.Visualizer"); - knownMetadata.add("android.media.audiofx.Visualizer$OnDataCaptureListener"); - knownMetadata.add("android.media.effect.Effect"); - knownMetadata.add("android.media.effect.EffectContext"); - knownMetadata.add("android.media.effect.EffectFactory"); - knownMetadata.add("android.media.effect.EffectUpdateListener"); - knownMetadata.add("android.mtp.MtpConstants"); - knownMetadata.add("android.mtp.MtpDevice"); - knownMetadata.add("android.mtp.MtpDeviceInfo"); - knownMetadata.add("android.mtp.MtpObjectInfo"); - knownMetadata.add("android.mtp.MtpStorageInfo"); - knownMetadata.add("android.net.ConnectivityManager"); - knownMetadata.add("android.net.Credentials"); - knownMetadata.add("android.net.DhcpInfo"); - knownMetadata.add("android.net.LocalServerSocket"); - knownMetadata.add("android.net.LocalSocket"); - knownMetadata.add("android.net.LocalSocketAddress"); - knownMetadata.add("android.net.LocalSocketAddress$Namespace"); - knownMetadata.add("android.net.MailTo"); - knownMetadata.add("android.net.NetworkInfo"); - knownMetadata.add("android.net.NetworkInfo$DetailedState"); - knownMetadata.add("android.net.NetworkInfo$State"); - knownMetadata.add("android.net.ParseException"); - knownMetadata.add("android.net.Proxy"); - knownMetadata.add("android.net.SSLCertificateSocketFactory"); - knownMetadata.add("android.net.SSLSessionCache"); - knownMetadata.add("android.net.TrafficStats"); - knownMetadata.add("android.net.Uri"); - knownMetadata.add("android.net.Uri$Builder"); - knownMetadata.add("android.net.UrlQuerySanitizer"); - knownMetadata.add("android.net.UrlQuerySanitizer$IllegalCharacterValueSanitizer"); - knownMetadata.add("android.net.UrlQuerySanitizer$ParameterValuePair"); - knownMetadata.add("android.net.UrlQuerySanitizer$ValueSanitizer"); - knownMetadata.add("android.net.VpnService"); - knownMetadata.add("android.net.VpnService$Builder"); - knownMetadata.add("android.net.http.AndroidHttpClient"); - knownMetadata.add("android.net.http.HttpResponseCache"); - knownMetadata.add("android.net.http.SslCertificate"); - knownMetadata.add("android.net.http.SslCertificate$DName"); - knownMetadata.add("android.net.http.SslError"); - knownMetadata.add("android.net.http.X509TrustManagerExtensions"); - knownMetadata.add("android.net.nsd.NsdManager"); - knownMetadata.add("android.net.nsd.NsdManager$DiscoveryListener"); - knownMetadata.add("android.net.nsd.NsdManager$RegistrationListener"); - knownMetadata.add("android.net.nsd.NsdManager$ResolveListener"); - knownMetadata.add("android.net.nsd.NsdServiceInfo"); - knownMetadata.add("android.net.rtp.AudioCodec"); - knownMetadata.add("android.net.rtp.AudioGroup"); - knownMetadata.add("android.net.rtp.AudioStream"); - knownMetadata.add("android.net.rtp.RtpStream"); - knownMetadata.add("android.net.sip.SipAudioCall"); - knownMetadata.add("android.net.sip.SipAudioCall$Listener"); - knownMetadata.add("android.net.sip.SipErrorCode"); - knownMetadata.add("android.net.sip.SipException"); - knownMetadata.add("android.net.sip.SipManager"); - knownMetadata.add("android.net.sip.SipProfile"); - knownMetadata.add("android.net.sip.SipProfile$Builder"); - knownMetadata.add("android.net.sip.SipRegistrationListener"); - knownMetadata.add("android.net.sip.SipSession"); - knownMetadata.add("android.net.sip.SipSession$Listener"); - knownMetadata.add("android.net.sip.SipSession$State"); - knownMetadata.add("android.net.wifi.ScanResult"); - knownMetadata.add("android.net.wifi.SupplicantState"); - knownMetadata.add("android.net.wifi.WifiConfiguration"); - knownMetadata.add("android.net.wifi.WifiConfiguration$AuthAlgorithm"); - knownMetadata.add("android.net.wifi.WifiConfiguration$GroupCipher"); - knownMetadata.add("android.net.wifi.WifiConfiguration$KeyMgmt"); - knownMetadata.add("android.net.wifi.WifiConfiguration$PairwiseCipher"); - knownMetadata.add("android.net.wifi.WifiConfiguration$Protocol"); - knownMetadata.add("android.net.wifi.WifiConfiguration$Status"); - knownMetadata.add("android.net.wifi.WifiInfo"); - knownMetadata.add("android.net.wifi.WifiManager"); - knownMetadata.add("android.net.wifi.WifiManager$MulticastLock"); - knownMetadata.add("android.net.wifi.WifiManager$WifiLock"); - knownMetadata.add("android.net.wifi.WpsInfo"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pConfig"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pDevice"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pDeviceList"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pGroup"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pInfo"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$ActionListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$Channel"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$ChannelListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$ConnectionInfoListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$DnsSdServiceResponseListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$DnsSdTxtRecordListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$GroupInfoListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$PeerListListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$ServiceResponseListener"); - knownMetadata.add("android.net.wifi.p2p.WifiP2pManager$UpnpServiceResponseListener"); - knownMetadata.add("android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo"); - knownMetadata.add("android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest"); - knownMetadata.add("android.net.wifi.p2p.nsd.WifiP2pServiceInfo"); - knownMetadata.add("android.net.wifi.p2p.nsd.WifiP2pServiceRequest"); - knownMetadata.add("android.net.wifi.p2p.nsd.WifiP2pUpnpServiceInfo"); - knownMetadata.add("android.net.wifi.p2p.nsd.WifiP2pUpnpServiceRequest"); - knownMetadata.add("android.nfc.FormatException"); - knownMetadata.add("android.nfc.NdefMessage"); - knownMetadata.add("android.nfc.NdefRecord"); - knownMetadata.add("android.nfc.NfcAdapter"); - knownMetadata.add("android.nfc.NfcAdapter$CreateBeamUrisCallback"); - knownMetadata.add("android.nfc.NfcAdapter$CreateNdefMessageCallback"); - knownMetadata.add("android.nfc.NfcAdapter$OnNdefPushCompleteCallback"); - knownMetadata.add("android.nfc.NfcEvent"); - knownMetadata.add("android.nfc.NfcManager"); - knownMetadata.add("android.nfc.Tag"); - knownMetadata.add("android.nfc.TagLostException"); - knownMetadata.add("android.nfc.tech.IsoDep"); - knownMetadata.add("android.nfc.tech.MifareClassic"); - knownMetadata.add("android.nfc.tech.MifareUltralight"); - knownMetadata.add("android.nfc.tech.Ndef"); - knownMetadata.add("android.nfc.tech.NdefFormatable"); - knownMetadata.add("android.nfc.tech.NfcA"); - knownMetadata.add("android.nfc.tech.NfcB"); - knownMetadata.add("android.nfc.tech.NfcBarcode"); - knownMetadata.add("android.nfc.tech.NfcF"); - knownMetadata.add("android.nfc.tech.NfcV"); - knownMetadata.add("android.nfc.tech.TagTechnology"); - knownMetadata.add("android.opengl.EGL14"); - knownMetadata.add("android.opengl.EGLConfig"); - knownMetadata.add("android.opengl.EGLContext"); - knownMetadata.add("android.opengl.EGLDisplay"); - knownMetadata.add("android.opengl.EGLObjectHandle"); - knownMetadata.add("android.opengl.EGLSurface"); - knownMetadata.add("android.opengl.ETC1"); - knownMetadata.add("android.opengl.ETC1Util"); - knownMetadata.add("android.opengl.ETC1Util$ETC1Texture"); - knownMetadata.add("android.opengl.GLDebugHelper"); - knownMetadata.add("android.opengl.GLES10"); - knownMetadata.add("android.opengl.GLES10Ext"); - knownMetadata.add("android.opengl.GLES11"); - knownMetadata.add("android.opengl.GLES11Ext"); - knownMetadata.add("android.opengl.GLES20"); - knownMetadata.add("android.opengl.GLException"); - knownMetadata.add("android.opengl.GLSurfaceView"); - knownMetadata.add("android.opengl.GLSurfaceView$EGLConfigChooser"); - knownMetadata.add("android.opengl.GLSurfaceView$EGLContextFactory"); - knownMetadata.add("android.opengl.GLSurfaceView$EGLWindowSurfaceFactory"); - knownMetadata.add("android.opengl.GLSurfaceView$GLWrapper"); - knownMetadata.add("android.opengl.GLSurfaceView$Renderer"); - knownMetadata.add("android.opengl.GLU"); - knownMetadata.add("android.opengl.GLUtils"); - knownMetadata.add("android.opengl.Matrix"); - knownMetadata.add("android.opengl.Visibility"); - knownMetadata.add("android.os.AsyncTask"); - knownMetadata.add("android.os.AsyncTask$Status"); - knownMetadata.add("android.os.BadParcelableException"); - knownMetadata.add("android.os.BatteryManager"); - knownMetadata.add("android.os.Binder"); - knownMetadata.add("android.os.Build"); - knownMetadata.add("android.os.Build$VERSION"); - knownMetadata.add("android.os.Build$VERSION_CODES"); - knownMetadata.add("android.os.Bundle"); - knownMetadata.add("android.os.CancellationSignal"); - knownMetadata.add("android.os.CancellationSignal$OnCancelListener"); - knownMetadata.add("android.os.ConditionVariable"); - knownMetadata.add("android.os.CountDownTimer"); - knownMetadata.add("android.os.DeadObjectException"); - knownMetadata.add("android.os.Debug"); - knownMetadata.add("android.os.Debug$InstructionCount"); - knownMetadata.add("android.os.Debug$MemoryInfo"); - knownMetadata.add("android.os.DropBoxManager"); - knownMetadata.add("android.os.DropBoxManager$Entry"); - knownMetadata.add("android.os.Environment"); - knownMetadata.add("android.os.FileObserver"); - knownMetadata.add("android.os.Handler"); - knownMetadata.add("android.os.Handler$Callback"); - knownMetadata.add("android.os.HandlerThread"); - knownMetadata.add("android.os.IBinder"); - knownMetadata.add("android.os.IBinder$DeathRecipient"); - knownMetadata.add("android.os.IInterface"); - knownMetadata.add("android.os.Looper"); - knownMetadata.add("android.os.MemoryFile"); - knownMetadata.add("android.os.Message"); - knownMetadata.add("android.os.MessageQueue"); - knownMetadata.add("android.os.MessageQueue$IdleHandler"); - knownMetadata.add("android.os.Messenger"); - knownMetadata.add("android.os.NetworkOnMainThreadException"); - knownMetadata.add("android.os.OperationCanceledException"); - knownMetadata.add("android.os.Parcel"); - knownMetadata.add("android.os.ParcelFileDescriptor"); - knownMetadata.add("android.os.ParcelFileDescriptor$AutoCloseInputStream"); - knownMetadata.add("android.os.ParcelFileDescriptor$AutoCloseOutputStream"); - knownMetadata.add("android.os.ParcelFormatException"); - knownMetadata.add("android.os.ParcelUuid"); - knownMetadata.add("android.os.Parcelable"); - knownMetadata.add("android.os.Parcelable$ClassLoaderCreator"); - knownMetadata.add("android.os.Parcelable$Creator"); - knownMetadata.add("android.os.PatternMatcher"); - knownMetadata.add("android.os.PowerManager"); - knownMetadata.add("android.os.PowerManager$WakeLock"); - knownMetadata.add("android.os.Process"); - knownMetadata.add("android.os.RecoverySystem"); - knownMetadata.add("android.os.RecoverySystem$ProgressListener"); - knownMetadata.add("android.os.RemoteCallbackList"); - knownMetadata.add("android.os.RemoteException"); - knownMetadata.add("android.os.ResultReceiver"); - knownMetadata.add("android.os.StatFs"); - knownMetadata.add("android.os.StrictMode"); - knownMetadata.add("android.os.StrictMode$ThreadPolicy"); - knownMetadata.add("android.os.StrictMode$ThreadPolicy$Builder"); - knownMetadata.add("android.os.StrictMode$VmPolicy"); - knownMetadata.add("android.os.StrictMode$VmPolicy$Builder"); - knownMetadata.add("android.os.SystemClock"); - knownMetadata.add("android.os.TokenWatcher"); - knownMetadata.add("android.os.TransactionTooLargeException"); - knownMetadata.add("android.os.UserHandle"); - knownMetadata.add("android.os.UserManager"); - knownMetadata.add("android.os.Vibrator"); - knownMetadata.add("android.os.WorkSource"); - knownMetadata.add("android.os.storage.OnObbStateChangeListener"); - knownMetadata.add("android.os.storage.StorageManager"); - knownMetadata.add("android.preference.CheckBoxPreference"); - knownMetadata.add("android.preference.DialogPreference"); - knownMetadata.add("android.preference.EditTextPreference"); - knownMetadata.add("android.preference.ListPreference"); - knownMetadata.add("android.preference.MultiSelectListPreference"); - knownMetadata.add("android.preference.Preference"); - knownMetadata.add("android.preference.Preference$BaseSavedState"); - knownMetadata.add("android.preference.Preference$OnPreferenceChangeListener"); - knownMetadata.add("android.preference.Preference$OnPreferenceClickListener"); - knownMetadata.add("android.preference.PreferenceActivity"); - knownMetadata.add("android.preference.PreferenceActivity$Header"); - knownMetadata.add("android.preference.PreferenceCategory"); - knownMetadata.add("android.preference.PreferenceFragment"); - knownMetadata.add("android.preference.PreferenceFragment$OnPreferenceStartFragmentCallback"); - knownMetadata.add("android.preference.PreferenceGroup"); - knownMetadata.add("android.preference.PreferenceManager"); - knownMetadata.add("android.preference.PreferenceManager$OnActivityDestroyListener"); - knownMetadata.add("android.preference.PreferenceManager$OnActivityResultListener"); - knownMetadata.add("android.preference.PreferenceManager$OnActivityStopListener"); - knownMetadata.add("android.preference.PreferenceScreen"); - knownMetadata.add("android.preference.RingtonePreference"); - knownMetadata.add("android.preference.SwitchPreference"); - knownMetadata.add("android.preference.TwoStatePreference"); - knownMetadata.add("android.provider.AlarmClock"); - knownMetadata.add("android.provider.BaseColumns"); - knownMetadata.add("android.provider.Browser"); - knownMetadata.add("android.provider.Browser$BookmarkColumns"); - knownMetadata.add("android.provider.Browser$SearchColumns"); - knownMetadata.add("android.provider.CalendarContract"); - knownMetadata.add("android.provider.CalendarContract$Attendees"); - knownMetadata.add("android.provider.CalendarContract$CalendarAlerts"); - knownMetadata.add("android.provider.CalendarContract$CalendarCache"); - knownMetadata.add("android.provider.CalendarContract$CalendarEntity"); - knownMetadata.add("android.provider.CalendarContract$Calendars"); - knownMetadata.add("android.provider.CalendarContract$Colors"); - knownMetadata.add("android.provider.CalendarContract$EventDays"); - knownMetadata.add("android.provider.CalendarContract$Events"); - knownMetadata.add("android.provider.CalendarContract$EventsEntity"); - knownMetadata.add("android.provider.CalendarContract$ExtendedProperties"); - knownMetadata.add("android.provider.CalendarContract$Instances"); - knownMetadata.add("android.provider.CalendarContract$Reminders"); - knownMetadata.add("android.provider.CalendarContract$SyncState"); - knownMetadata.add("android.provider.CallLog"); - knownMetadata.add("android.provider.CallLog$Calls"); - knownMetadata.add("android.provider.Contacts"); - knownMetadata.add("android.provider.Contacts$ContactMethods"); - knownMetadata.add("android.provider.Contacts$ContactMethodsColumns"); - knownMetadata.add("android.provider.Contacts$Extensions"); - knownMetadata.add("android.provider.Contacts$ExtensionsColumns"); - knownMetadata.add("android.provider.Contacts$GroupMembership"); - knownMetadata.add("android.provider.Contacts$Groups"); - knownMetadata.add("android.provider.Contacts$GroupsColumns"); - knownMetadata.add("android.provider.Contacts$Intents"); - knownMetadata.add("android.provider.Contacts$Intents$Insert"); - knownMetadata.add("android.provider.Contacts$Intents$UI"); - knownMetadata.add("android.provider.Contacts$OrganizationColumns"); - knownMetadata.add("android.provider.Contacts$Organizations"); - knownMetadata.add("android.provider.Contacts$People"); - knownMetadata.add("android.provider.Contacts$People$ContactMethods"); - knownMetadata.add("android.provider.Contacts$People$Extensions"); - knownMetadata.add("android.provider.Contacts$People$Phones"); - knownMetadata.add("android.provider.Contacts$PeopleColumns"); - knownMetadata.add("android.provider.Contacts$Phones"); - knownMetadata.add("android.provider.Contacts$PhonesColumns"); - knownMetadata.add("android.provider.Contacts$Photos"); - knownMetadata.add("android.provider.Contacts$PhotosColumns"); - knownMetadata.add("android.provider.Contacts$PresenceColumns"); - knownMetadata.add("android.provider.Contacts$Settings"); - knownMetadata.add("android.provider.Contacts$SettingsColumns"); - knownMetadata.add("android.provider.ContactsContract"); - knownMetadata.add("android.provider.ContactsContract$AggregationExceptions"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$BaseTypes"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Email"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Event"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$GroupMembership"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Identity"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Im"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Nickname"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Note"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Organization"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Phone"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Photo"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Relation"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$SipAddress"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$StructuredName"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$StructuredPostal"); - knownMetadata.add("android.provider.ContactsContract$CommonDataKinds$Website"); - knownMetadata.add("android.provider.ContactsContract$Contacts"); - knownMetadata.add("android.provider.ContactsContract$Contacts$AggregationSuggestions"); - knownMetadata.add("android.provider.ContactsContract$Contacts$Data"); - knownMetadata.add("android.provider.ContactsContract$Contacts$Entity"); - knownMetadata.add("android.provider.ContactsContract$Contacts$Photo"); - knownMetadata.add("android.provider.ContactsContract$Contacts$StreamItems"); - knownMetadata.add("android.provider.ContactsContract$Data"); - knownMetadata.add("android.provider.ContactsContract$DataUsageFeedback"); - knownMetadata.add("android.provider.ContactsContract$Directory"); - knownMetadata.add("android.provider.ContactsContract$DisplayNameSources"); - knownMetadata.add("android.provider.ContactsContract$DisplayPhoto"); - knownMetadata.add("android.provider.ContactsContract$FullNameStyle"); - knownMetadata.add("android.provider.ContactsContract$Groups"); - knownMetadata.add("android.provider.ContactsContract$Intents"); - knownMetadata.add("android.provider.ContactsContract$Intents$Insert"); - knownMetadata.add("android.provider.ContactsContract$PhoneLookup"); - knownMetadata.add("android.provider.ContactsContract$PhoneticNameStyle"); - knownMetadata.add("android.provider.ContactsContract$Presence"); - knownMetadata.add("android.provider.ContactsContract$Profile"); - knownMetadata.add("android.provider.ContactsContract$ProfileSyncState"); - knownMetadata.add("android.provider.ContactsContract$QuickContact"); - knownMetadata.add("android.provider.ContactsContract$RawContacts"); - knownMetadata.add("android.provider.ContactsContract$RawContacts$Data"); - knownMetadata.add("android.provider.ContactsContract$RawContacts$DisplayPhoto"); - knownMetadata.add("android.provider.ContactsContract$RawContacts$Entity"); - knownMetadata.add("android.provider.ContactsContract$RawContacts$StreamItems"); - knownMetadata.add("android.provider.ContactsContract$RawContactsEntity"); - knownMetadata.add("android.provider.ContactsContract$Settings"); - knownMetadata.add("android.provider.ContactsContract$StatusUpdates"); - knownMetadata.add("android.provider.ContactsContract$StreamItemPhotos"); - knownMetadata.add("android.provider.ContactsContract$StreamItems"); - knownMetadata.add("android.provider.ContactsContract$StreamItems$StreamItemPhotos"); - knownMetadata.add("android.provider.ContactsContract$SyncState"); - knownMetadata.add("android.provider.LiveFolders"); - knownMetadata.add("android.provider.MediaStore"); - knownMetadata.add("android.provider.MediaStore$Audio"); - knownMetadata.add("android.provider.MediaStore$Audio$AlbumColumns"); - knownMetadata.add("android.provider.MediaStore$Audio$Albums"); - knownMetadata.add("android.provider.MediaStore$Audio$ArtistColumns"); - knownMetadata.add("android.provider.MediaStore$Audio$Artists"); - knownMetadata.add("android.provider.MediaStore$Audio$Artists$Albums"); - knownMetadata.add("android.provider.MediaStore$Audio$AudioColumns"); - knownMetadata.add("android.provider.MediaStore$Audio$Genres"); - knownMetadata.add("android.provider.MediaStore$Audio$Genres$Members"); - knownMetadata.add("android.provider.MediaStore$Audio$GenresColumns"); - knownMetadata.add("android.provider.MediaStore$Audio$Media"); - knownMetadata.add("android.provider.MediaStore$Audio$Playlists"); - knownMetadata.add("android.provider.MediaStore$Audio$Playlists$Members"); - knownMetadata.add("android.provider.MediaStore$Audio$PlaylistsColumns"); - knownMetadata.add("android.provider.MediaStore$Files"); - knownMetadata.add("android.provider.MediaStore$Files$FileColumns"); - knownMetadata.add("android.provider.MediaStore$Images"); - knownMetadata.add("android.provider.MediaStore$Images$ImageColumns"); - knownMetadata.add("android.provider.MediaStore$Images$Media"); - knownMetadata.add("android.provider.MediaStore$Images$Thumbnails"); - knownMetadata.add("android.provider.MediaStore$MediaColumns"); - knownMetadata.add("android.provider.MediaStore$Video"); - knownMetadata.add("android.provider.MediaStore$Video$Media"); - knownMetadata.add("android.provider.MediaStore$Video$Thumbnails"); - knownMetadata.add("android.provider.MediaStore$Video$VideoColumns"); - knownMetadata.add("android.provider.OpenableColumns"); - knownMetadata.add("android.provider.SearchRecentSuggestions"); - knownMetadata.add("android.provider.Settings"); - knownMetadata.add("android.provider.Settings$Global"); - knownMetadata.add("android.provider.Settings$NameValueTable"); - knownMetadata.add("android.provider.Settings$Secure"); - knownMetadata.add("android.provider.Settings$SettingNotFoundException"); - knownMetadata.add("android.provider.Settings$System"); - knownMetadata.add("android.provider.SyncStateContract"); - knownMetadata.add("android.provider.SyncStateContract$Columns"); - knownMetadata.add("android.provider.SyncStateContract$Constants"); - knownMetadata.add("android.provider.SyncStateContract$Helpers"); - knownMetadata.add("android.provider.UserDictionary"); - knownMetadata.add("android.provider.UserDictionary$Words"); - knownMetadata.add("android.provider.VoicemailContract"); - knownMetadata.add("android.provider.VoicemailContract$Status"); - knownMetadata.add("android.provider.VoicemailContract$Voicemails"); - knownMetadata.add("android.renderscript.Allocation"); - knownMetadata.add("android.renderscript.Allocation$MipmapControl"); - knownMetadata.add("android.renderscript.AllocationAdapter"); - knownMetadata.add("android.renderscript.BaseObj"); - knownMetadata.add("android.renderscript.Byte2"); - knownMetadata.add("android.renderscript.Byte3"); - knownMetadata.add("android.renderscript.Byte4"); - knownMetadata.add("android.renderscript.Double2"); - knownMetadata.add("android.renderscript.Double3"); - knownMetadata.add("android.renderscript.Double4"); - knownMetadata.add("android.renderscript.Element"); - knownMetadata.add("android.renderscript.Element$Builder"); - knownMetadata.add("android.renderscript.Element$DataKind"); - knownMetadata.add("android.renderscript.Element$DataType"); - knownMetadata.add("android.renderscript.FieldPacker"); - knownMetadata.add("android.renderscript.FileA3D"); - knownMetadata.add("android.renderscript.FileA3D$EntryType"); - knownMetadata.add("android.renderscript.FileA3D$IndexEntry"); - knownMetadata.add("android.renderscript.Float2"); - knownMetadata.add("android.renderscript.Float3"); - knownMetadata.add("android.renderscript.Float4"); - knownMetadata.add("android.renderscript.Font"); - knownMetadata.add("android.renderscript.Font$Style"); - knownMetadata.add("android.renderscript.Int2"); - knownMetadata.add("android.renderscript.Int3"); - knownMetadata.add("android.renderscript.Int4"); - knownMetadata.add("android.renderscript.Long2"); - knownMetadata.add("android.renderscript.Long3"); - knownMetadata.add("android.renderscript.Long4"); - knownMetadata.add("android.renderscript.Matrix2f"); - knownMetadata.add("android.renderscript.Matrix3f"); - knownMetadata.add("android.renderscript.Matrix4f"); - knownMetadata.add("android.renderscript.Mesh"); - knownMetadata.add("android.renderscript.Mesh$AllocationBuilder"); - knownMetadata.add("android.renderscript.Mesh$Builder"); - knownMetadata.add("android.renderscript.Mesh$Primitive"); - knownMetadata.add("android.renderscript.Mesh$TriangleMeshBuilder"); - knownMetadata.add("android.renderscript.Program"); - knownMetadata.add("android.renderscript.Program$BaseProgramBuilder"); - knownMetadata.add("android.renderscript.Program$TextureType"); - knownMetadata.add("android.renderscript.ProgramFragment"); - knownMetadata.add("android.renderscript.ProgramFragment$Builder"); - knownMetadata.add("android.renderscript.ProgramFragmentFixedFunction"); - knownMetadata.add("android.renderscript.ProgramFragmentFixedFunction$Builder"); - knownMetadata.add("android.renderscript.ProgramFragmentFixedFunction$Builder$EnvMode"); - knownMetadata.add("android.renderscript.ProgramFragmentFixedFunction$Builder$Format"); - knownMetadata.add("android.renderscript.ProgramRaster"); - knownMetadata.add("android.renderscript.ProgramRaster$Builder"); - knownMetadata.add("android.renderscript.ProgramRaster$CullMode"); - knownMetadata.add("android.renderscript.ProgramStore"); - knownMetadata.add("android.renderscript.ProgramStore$BlendDstFunc"); - knownMetadata.add("android.renderscript.ProgramStore$BlendSrcFunc"); - knownMetadata.add("android.renderscript.ProgramStore$Builder"); - knownMetadata.add("android.renderscript.ProgramStore$DepthFunc"); - knownMetadata.add("android.renderscript.ProgramVertex"); - knownMetadata.add("android.renderscript.ProgramVertex$Builder"); - knownMetadata.add("android.renderscript.ProgramVertexFixedFunction"); - knownMetadata.add("android.renderscript.ProgramVertexFixedFunction$Builder"); - knownMetadata.add("android.renderscript.ProgramVertexFixedFunction$Constants"); - knownMetadata.add("android.renderscript.RSDriverException"); - knownMetadata.add("android.renderscript.RSIllegalArgumentException"); - knownMetadata.add("android.renderscript.RSInvalidStateException"); - knownMetadata.add("android.renderscript.RSRuntimeException"); - knownMetadata.add("android.renderscript.RSSurfaceView"); - knownMetadata.add("android.renderscript.RSTextureView"); - knownMetadata.add("android.renderscript.RenderScript"); - knownMetadata.add("android.renderscript.RenderScript$Priority"); - knownMetadata.add("android.renderscript.RenderScript$RSErrorHandler"); - knownMetadata.add("android.renderscript.RenderScript$RSMessageHandler"); - knownMetadata.add("android.renderscript.RenderScriptGL"); - knownMetadata.add("android.renderscript.RenderScriptGL$SurfaceConfig"); - knownMetadata.add("android.renderscript.Sampler"); - knownMetadata.add("android.renderscript.Sampler$Builder"); - knownMetadata.add("android.renderscript.Sampler$Value"); - knownMetadata.add("android.renderscript.Script"); - knownMetadata.add("android.renderscript.Script$Builder"); - knownMetadata.add("android.renderscript.Script$FieldBase"); - knownMetadata.add("android.renderscript.Script$FieldID"); - knownMetadata.add("android.renderscript.Script$KernelID"); - knownMetadata.add("android.renderscript.ScriptC"); - knownMetadata.add("android.renderscript.ScriptGroup"); - knownMetadata.add("android.renderscript.ScriptGroup$Builder"); - knownMetadata.add("android.renderscript.ScriptIntrinsic"); - knownMetadata.add("android.renderscript.ScriptIntrinsicBlend"); - knownMetadata.add("android.renderscript.ScriptIntrinsicBlur"); - knownMetadata.add("android.renderscript.ScriptIntrinsicColorMatrix"); - knownMetadata.add("android.renderscript.ScriptIntrinsicConvolve3x3"); - knownMetadata.add("android.renderscript.ScriptIntrinsicConvolve5x5"); - knownMetadata.add("android.renderscript.ScriptIntrinsicLUT"); - knownMetadata.add("android.renderscript.ScriptIntrinsicYuvToRGB"); - knownMetadata.add("android.renderscript.Short2"); - knownMetadata.add("android.renderscript.Short3"); - knownMetadata.add("android.renderscript.Short4"); - knownMetadata.add("android.renderscript.Type"); - knownMetadata.add("android.renderscript.Type$Builder"); - knownMetadata.add("android.renderscript.Type$CubemapFace"); - knownMetadata.add("android.sax.Element"); - knownMetadata.add("android.sax.ElementListener"); - knownMetadata.add("android.sax.EndElementListener"); - knownMetadata.add("android.sax.EndTextElementListener"); - knownMetadata.add("android.sax.RootElement"); - knownMetadata.add("android.sax.StartElementListener"); - knownMetadata.add("android.sax.TextElementListener"); - knownMetadata.add("android.security.KeyChain"); - knownMetadata.add("android.security.KeyChainAliasCallback"); - knownMetadata.add("android.security.KeyChainException"); - knownMetadata.add("android.service.dreams.DreamService"); - knownMetadata.add("android.service.textservice.SpellCheckerService"); - knownMetadata.add("android.service.textservice.SpellCheckerService$Session"); - knownMetadata.add("android.service.wallpaper.WallpaperService"); - knownMetadata.add("android.service.wallpaper.WallpaperService$Engine"); - knownMetadata.add("android.speech.RecognitionListener"); - knownMetadata.add("android.speech.RecognitionService"); - knownMetadata.add("android.speech.RecognitionService$Callback"); - knownMetadata.add("android.speech.RecognizerIntent"); - knownMetadata.add("android.speech.RecognizerResultsIntent"); - knownMetadata.add("android.speech.SpeechRecognizer"); - knownMetadata.add("android.speech.tts.SynthesisCallback"); - knownMetadata.add("android.speech.tts.SynthesisRequest"); - knownMetadata.add("android.speech.tts.TextToSpeech"); - knownMetadata.add("android.speech.tts.TextToSpeech$Engine"); - knownMetadata.add("android.speech.tts.TextToSpeech$EngineInfo"); - knownMetadata.add("android.speech.tts.TextToSpeech$OnInitListener"); - knownMetadata.add("android.speech.tts.TextToSpeech$OnUtteranceCompletedListener"); - knownMetadata.add("android.speech.tts.TextToSpeechService"); - knownMetadata.add("android.speech.tts.UtteranceProgressListener"); - knownMetadata.add("android.telephony.CellIdentityCdma"); - knownMetadata.add("android.telephony.CellIdentityGsm"); - knownMetadata.add("android.telephony.CellIdentityLte"); - knownMetadata.add("android.telephony.CellInfo"); - knownMetadata.add("android.telephony.CellInfoCdma"); - knownMetadata.add("android.telephony.CellInfoGsm"); - knownMetadata.add("android.telephony.CellInfoLte"); - knownMetadata.add("android.telephony.CellLocation"); - knownMetadata.add("android.telephony.CellSignalStrength"); - knownMetadata.add("android.telephony.CellSignalStrengthCdma"); - knownMetadata.add("android.telephony.CellSignalStrengthGsm"); - knownMetadata.add("android.telephony.CellSignalStrengthLte"); - knownMetadata.add("android.telephony.NeighboringCellInfo"); - knownMetadata.add("android.telephony.PhoneNumberFormattingTextWatcher"); - knownMetadata.add("android.telephony.PhoneNumberUtils"); - knownMetadata.add("android.telephony.PhoneStateListener"); - knownMetadata.add("android.telephony.ServiceState"); - knownMetadata.add("android.telephony.SignalStrength"); - knownMetadata.add("android.telephony.SmsManager"); - knownMetadata.add("android.telephony.SmsMessage"); - knownMetadata.add("android.telephony.SmsMessage$MessageClass"); - knownMetadata.add("android.telephony.SmsMessage$SubmitPdu"); - knownMetadata.add("android.telephony.TelephonyManager"); - knownMetadata.add("android.telephony.cdma.CdmaCellLocation"); - knownMetadata.add("android.telephony.gsm.GsmCellLocation"); - knownMetadata.add("android.telephony.gsm.SmsManager"); - knownMetadata.add("android.telephony.gsm.SmsMessage"); - knownMetadata.add("android.telephony.gsm.SmsMessage$MessageClass"); - knownMetadata.add("android.telephony.gsm.SmsMessage$SubmitPdu"); - knownMetadata.add("android.test.ActivityInstrumentationTestCase"); - knownMetadata.add("android.test.ActivityInstrumentationTestCase2"); - knownMetadata.add("android.test.ActivityTestCase"); - knownMetadata.add("android.test.ActivityUnitTestCase"); - knownMetadata.add("android.test.AndroidTestCase"); - knownMetadata.add("android.test.AndroidTestRunner"); - knownMetadata.add("android.test.ApplicationTestCase"); - knownMetadata.add("android.test.AssertionFailedError"); - knownMetadata.add("android.test.ComparisonFailure"); - knownMetadata.add("android.test.FlakyTest"); - knownMetadata.add("android.test.InstrumentationTestCase"); - knownMetadata.add("android.test.InstrumentationTestRunner"); - knownMetadata.add("android.test.InstrumentationTestSuite"); - knownMetadata.add("android.test.IsolatedContext"); - knownMetadata.add("android.test.LoaderTestCase"); - knownMetadata.add("android.test.MoreAsserts"); - knownMetadata.add("android.test.PerformanceTestCase"); - knownMetadata.add("android.test.PerformanceTestCase$Intermediates"); - knownMetadata.add("android.test.ProviderTestCase"); - knownMetadata.add("android.test.ProviderTestCase2"); - knownMetadata.add("android.test.RenamingDelegatingContext"); - knownMetadata.add("android.test.ServiceTestCase"); - knownMetadata.add("android.test.SingleLaunchActivityTestCase"); - knownMetadata.add("android.test.SyncBaseInstrumentation"); - knownMetadata.add("android.test.TestSuiteProvider"); - knownMetadata.add("android.test.TouchUtils"); - knownMetadata.add("android.test.UiThreadTest"); - knownMetadata.add("android.test.ViewAsserts"); - knownMetadata.add("android.test.mock.MockApplication"); - knownMetadata.add("android.test.mock.MockContentProvider"); - knownMetadata.add("android.test.mock.MockContentResolver"); - knownMetadata.add("android.test.mock.MockContext"); - knownMetadata.add("android.test.mock.MockCursor"); - knownMetadata.add("android.test.mock.MockDialogInterface"); - knownMetadata.add("android.test.mock.MockPackageManager"); - knownMetadata.add("android.test.mock.MockResources"); - knownMetadata.add("android.test.suitebuilder.TestMethod"); - knownMetadata.add("android.test.suitebuilder.TestSuiteBuilder"); - knownMetadata.add("android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests"); - knownMetadata.add("android.test.suitebuilder.annotation.LargeTest"); - knownMetadata.add("android.test.suitebuilder.annotation.MediumTest"); - knownMetadata.add("android.test.suitebuilder.annotation.SmallTest"); - knownMetadata.add("android.test.suitebuilder.annotation.Smoke"); - knownMetadata.add("android.test.suitebuilder.annotation.Suppress"); - knownMetadata.add("android.text.AlteredCharSequence"); - knownMetadata.add("android.text.AndroidCharacter"); - knownMetadata.add("android.text.Annotation"); - knownMetadata.add("android.text.AutoText"); - knownMetadata.add("android.text.BoringLayout"); - knownMetadata.add("android.text.BoringLayout$Metrics"); - knownMetadata.add("android.text.ClipboardManager"); - knownMetadata.add("android.text.DynamicLayout"); - knownMetadata.add("android.text.Editable"); - knownMetadata.add("android.text.Editable$Factory"); - knownMetadata.add("android.text.GetChars"); - knownMetadata.add("android.text.Html"); - knownMetadata.add("android.text.Html$ImageGetter"); - knownMetadata.add("android.text.Html$TagHandler"); - knownMetadata.add("android.text.InputFilter"); - knownMetadata.add("android.text.InputFilter$AllCaps"); - knownMetadata.add("android.text.InputFilter$LengthFilter"); - knownMetadata.add("android.text.InputType"); - knownMetadata.add("android.text.Layout"); - knownMetadata.add("android.text.Layout$Alignment"); - knownMetadata.add("android.text.Layout$Directions"); - knownMetadata.add("android.text.LoginFilter"); - knownMetadata.add("android.text.LoginFilter$PasswordFilterGMail"); - knownMetadata.add("android.text.LoginFilter$UsernameFilterGMail"); - knownMetadata.add("android.text.LoginFilter$UsernameFilterGeneric"); - knownMetadata.add("android.text.NoCopySpan"); - knownMetadata.add("android.text.NoCopySpan$Concrete"); - knownMetadata.add("android.text.ParcelableSpan"); - knownMetadata.add("android.text.Selection"); - knownMetadata.add("android.text.SpanWatcher"); - knownMetadata.add("android.text.Spannable"); - knownMetadata.add("android.text.Spannable$Factory"); - knownMetadata.add("android.text.SpannableString"); - knownMetadata.add("android.text.SpannableStringBuilder"); - knownMetadata.add("android.text.Spanned"); - knownMetadata.add("android.text.SpannedString"); - knownMetadata.add("android.text.StaticLayout"); - knownMetadata.add("android.text.TextPaint"); - knownMetadata.add("android.text.TextUtils"); - knownMetadata.add("android.text.TextUtils$EllipsizeCallback"); - knownMetadata.add("android.text.TextUtils$SimpleStringSplitter"); - knownMetadata.add("android.text.TextUtils$StringSplitter"); - knownMetadata.add("android.text.TextUtils$TruncateAt"); - knownMetadata.add("android.text.TextWatcher"); - knownMetadata.add("android.text.format.DateFormat"); - knownMetadata.add("android.text.format.DateUtils"); - knownMetadata.add("android.text.format.Formatter"); - knownMetadata.add("android.text.format.Time"); - knownMetadata.add("android.text.method.ArrowKeyMovementMethod"); - knownMetadata.add("android.text.method.BaseKeyListener"); - knownMetadata.add("android.text.method.BaseMovementMethod"); - knownMetadata.add("android.text.method.CharacterPickerDialog"); - knownMetadata.add("android.text.method.DateKeyListener"); - knownMetadata.add("android.text.method.DateTimeKeyListener"); - knownMetadata.add("android.text.method.DialerKeyListener"); - knownMetadata.add("android.text.method.DigitsKeyListener"); - knownMetadata.add("android.text.method.HideReturnsTransformationMethod"); - knownMetadata.add("android.text.method.KeyListener"); - knownMetadata.add("android.text.method.LinkMovementMethod"); - knownMetadata.add("android.text.method.MetaKeyKeyListener"); - knownMetadata.add("android.text.method.MovementMethod"); - knownMetadata.add("android.text.method.MultiTapKeyListener"); - knownMetadata.add("android.text.method.NumberKeyListener"); - knownMetadata.add("android.text.method.PasswordTransformationMethod"); - knownMetadata.add("android.text.method.QwertyKeyListener"); - knownMetadata.add("android.text.method.ReplacementTransformationMethod"); - knownMetadata.add("android.text.method.ScrollingMovementMethod"); - knownMetadata.add("android.text.method.SingleLineTransformationMethod"); - knownMetadata.add("android.text.method.TextKeyListener"); - knownMetadata.add("android.text.method.TextKeyListener$Capitalize"); - knownMetadata.add("android.text.method.TimeKeyListener"); - knownMetadata.add("android.text.method.Touch"); - knownMetadata.add("android.text.method.TransformationMethod"); - knownMetadata.add("android.text.style.AbsoluteSizeSpan"); - knownMetadata.add("android.text.style.AlignmentSpan"); - knownMetadata.add("android.text.style.AlignmentSpan$Standard"); - knownMetadata.add("android.text.style.BackgroundColorSpan"); - knownMetadata.add("android.text.style.BulletSpan"); - knownMetadata.add("android.text.style.CharacterStyle"); - knownMetadata.add("android.text.style.ClickableSpan"); - knownMetadata.add("android.text.style.DrawableMarginSpan"); - knownMetadata.add("android.text.style.DynamicDrawableSpan"); - knownMetadata.add("android.text.style.EasyEditSpan"); - knownMetadata.add("android.text.style.ForegroundColorSpan"); - knownMetadata.add("android.text.style.IconMarginSpan"); - knownMetadata.add("android.text.style.ImageSpan"); - knownMetadata.add("android.text.style.LeadingMarginSpan"); - knownMetadata.add("android.text.style.LeadingMarginSpan$LeadingMarginSpan2"); - knownMetadata.add("android.text.style.LeadingMarginSpan$Standard"); - knownMetadata.add("android.text.style.LineBackgroundSpan"); - knownMetadata.add("android.text.style.LineHeightSpan"); - knownMetadata.add("android.text.style.LineHeightSpan$WithDensity"); - knownMetadata.add("android.text.style.LocaleSpan"); - knownMetadata.add("android.text.style.MaskFilterSpan"); - knownMetadata.add("android.text.style.MetricAffectingSpan"); - knownMetadata.add("android.text.style.ParagraphStyle"); - knownMetadata.add("android.text.style.QuoteSpan"); - knownMetadata.add("android.text.style.RasterizerSpan"); - knownMetadata.add("android.text.style.RelativeSizeSpan"); - knownMetadata.add("android.text.style.ReplacementSpan"); - knownMetadata.add("android.text.style.ScaleXSpan"); - knownMetadata.add("android.text.style.StrikethroughSpan"); - knownMetadata.add("android.text.style.StyleSpan"); - knownMetadata.add("android.text.style.SubscriptSpan"); - knownMetadata.add("android.text.style.SuggestionSpan"); - knownMetadata.add("android.text.style.SuperscriptSpan"); - knownMetadata.add("android.text.style.TabStopSpan"); - knownMetadata.add("android.text.style.TabStopSpan$Standard"); - knownMetadata.add("android.text.style.TextAppearanceSpan"); - knownMetadata.add("android.text.style.TypefaceSpan"); - knownMetadata.add("android.text.style.URLSpan"); - knownMetadata.add("android.text.style.UnderlineSpan"); - knownMetadata.add("android.text.style.UpdateAppearance"); - knownMetadata.add("android.text.style.UpdateLayout"); - knownMetadata.add("android.text.style.WrapTogetherSpan"); - knownMetadata.add("android.text.util.Linkify"); - knownMetadata.add("android.text.util.Linkify$MatchFilter"); - knownMetadata.add("android.text.util.Linkify$TransformFilter"); - knownMetadata.add("android.text.util.Rfc822Token"); - knownMetadata.add("android.text.util.Rfc822Tokenizer"); - knownMetadata.add("android.util.AndroidException"); - knownMetadata.add("android.util.AndroidRuntimeException"); - knownMetadata.add("android.util.AtomicFile"); - knownMetadata.add("android.util.AttributeSet"); - knownMetadata.add("android.util.Base64"); - knownMetadata.add("android.util.Base64DataException"); - knownMetadata.add("android.util.Base64InputStream"); - knownMetadata.add("android.util.Base64OutputStream"); - knownMetadata.add("android.util.Config"); - knownMetadata.add("android.util.DebugUtils"); - knownMetadata.add("android.util.DisplayMetrics"); - knownMetadata.add("android.util.EventLog"); - knownMetadata.add("android.util.EventLog$Event"); - knownMetadata.add("android.util.EventLogTags"); - knownMetadata.add("android.util.EventLogTags$Description"); - knownMetadata.add("android.util.FloatMath"); - knownMetadata.add("android.util.JsonReader"); - knownMetadata.add("android.util.JsonToken"); - knownMetadata.add("android.util.JsonWriter"); - knownMetadata.add("android.util.Log"); - knownMetadata.add("android.util.LogPrinter"); - knownMetadata.add("android.util.LongSparseArray"); - knownMetadata.add("android.util.LruCache"); - knownMetadata.add("android.util.MalformedJsonException"); - knownMetadata.add("android.util.MonthDisplayHelper"); - knownMetadata.add("android.util.NoSuchPropertyException"); - knownMetadata.add("android.util.Pair"); - knownMetadata.add("android.util.Patterns"); - knownMetadata.add("android.util.PrintStreamPrinter"); - knownMetadata.add("android.util.PrintWriterPrinter"); - knownMetadata.add("android.util.Printer"); - knownMetadata.add("android.util.Property"); - knownMetadata.add("android.util.SparseArray"); - knownMetadata.add("android.util.SparseBooleanArray"); - knownMetadata.add("android.util.SparseIntArray"); - knownMetadata.add("android.util.StateSet"); - knownMetadata.add("android.util.StringBuilderPrinter"); - knownMetadata.add("android.util.TimeFormatException"); - knownMetadata.add("android.util.TimeUtils"); - knownMetadata.add("android.util.TimingLogger"); - knownMetadata.add("android.util.TypedValue"); - knownMetadata.add("android.util.Xml"); - knownMetadata.add("android.util.Xml$Encoding"); - knownMetadata.add("android.view.AbsSavedState"); - knownMetadata.add("android.view.ActionMode"); - knownMetadata.add("android.view.ActionMode$Callback"); - knownMetadata.add("android.view.ActionProvider"); - knownMetadata.add("android.view.ActionProvider$VisibilityListener"); - knownMetadata.add("android.view.Choreographer"); - knownMetadata.add("android.view.Choreographer$FrameCallback"); - knownMetadata.add("android.view.CollapsibleActionView"); - knownMetadata.add("android.view.ContextMenu"); - knownMetadata.add("android.view.ContextMenu$ContextMenuInfo"); - knownMetadata.add("android.view.ContextThemeWrapper"); - knownMetadata.add("android.view.Display"); - knownMetadata.add("android.view.DragEvent"); - knownMetadata.add("android.view.FocusFinder"); - knownMetadata.add("android.view.GestureDetector"); - knownMetadata.add("android.view.GestureDetector$OnDoubleTapListener"); - knownMetadata.add("android.view.GestureDetector$OnGestureListener"); - knownMetadata.add("android.view.GestureDetector$SimpleOnGestureListener"); - knownMetadata.add("android.view.Gravity"); - knownMetadata.add("android.view.HapticFeedbackConstants"); - knownMetadata.add("android.view.InflateException"); - knownMetadata.add("android.view.InputDevice"); - knownMetadata.add("android.view.InputDevice$MotionRange"); - knownMetadata.add("android.view.InputEvent"); - knownMetadata.add("android.view.InputQueue"); - knownMetadata.add("android.view.InputQueue$Callback"); - knownMetadata.add("android.view.KeyCharacterMap"); - knownMetadata.add("android.view.KeyCharacterMap$KeyData"); - knownMetadata.add("android.view.KeyCharacterMap$UnavailableException"); - knownMetadata.add("android.view.KeyEvent"); - knownMetadata.add("android.view.KeyEvent$Callback"); - knownMetadata.add("android.view.KeyEvent$DispatcherState"); - knownMetadata.add("android.view.LayoutInflater"); - knownMetadata.add("android.view.LayoutInflater$Factory"); - knownMetadata.add("android.view.LayoutInflater$Factory2"); - knownMetadata.add("android.view.LayoutInflater$Filter"); - knownMetadata.add("android.view.Menu"); - knownMetadata.add("android.view.MenuInflater"); - knownMetadata.add("android.view.MenuItem"); - knownMetadata.add("android.view.MenuItem$OnActionExpandListener"); - knownMetadata.add("android.view.MenuItem$OnMenuItemClickListener"); - knownMetadata.add("android.view.MotionEvent"); - knownMetadata.add("android.view.MotionEvent$PointerCoords"); - knownMetadata.add("android.view.MotionEvent$PointerProperties"); - knownMetadata.add("android.view.OrientationEventListener"); - knownMetadata.add("android.view.OrientationListener"); - knownMetadata.add("android.view.ScaleGestureDetector"); - knownMetadata.add("android.view.ScaleGestureDetector$OnScaleGestureListener"); - knownMetadata.add("android.view.ScaleGestureDetector$SimpleOnScaleGestureListener"); - knownMetadata.add("android.view.SoundEffectConstants"); - knownMetadata.add("android.view.SubMenu"); - knownMetadata.add("android.view.Surface"); - knownMetadata.add("android.view.Surface$OutOfResourcesException"); - knownMetadata.add("android.view.SurfaceHolder"); - knownMetadata.add("android.view.SurfaceHolder$BadSurfaceTypeException"); - knownMetadata.add("android.view.SurfaceHolder$Callback"); - knownMetadata.add("android.view.SurfaceHolder$Callback2"); - knownMetadata.add("android.view.SurfaceView"); - knownMetadata.add("android.view.TextureView"); - knownMetadata.add("android.view.TextureView$SurfaceTextureListener"); - knownMetadata.add("android.view.TouchDelegate"); - knownMetadata.add("android.view.VelocityTracker"); - knownMetadata.add("android.view.View"); - knownMetadata.add("android.view.View$AccessibilityDelegate"); - knownMetadata.add("android.view.View$BaseSavedState"); - knownMetadata.add("android.view.View$DragShadowBuilder"); - knownMetadata.add("android.view.View$MeasureSpec"); - knownMetadata.add("android.view.View$OnAttachStateChangeListener"); - knownMetadata.add("android.view.View$OnClickListener"); - knownMetadata.add("android.view.View$OnCreateContextMenuListener"); - knownMetadata.add("android.view.View$OnDragListener"); - knownMetadata.add("android.view.View$OnFocusChangeListener"); - knownMetadata.add("android.view.View$OnGenericMotionListener"); - knownMetadata.add("android.view.View$OnHoverListener"); - knownMetadata.add("android.view.View$OnKeyListener"); - knownMetadata.add("android.view.View$OnLayoutChangeListener"); - knownMetadata.add("android.view.View$OnLongClickListener"); - knownMetadata.add("android.view.View$OnSystemUiVisibilityChangeListener"); - knownMetadata.add("android.view.View$OnTouchListener"); - knownMetadata.add("android.view.ViewConfiguration"); - knownMetadata.add("android.view.ViewDebug"); - knownMetadata.add("android.view.ViewDebug$CapturedViewProperty"); - knownMetadata.add("android.view.ViewDebug$ExportedProperty"); - knownMetadata.add("android.view.ViewDebug$FlagToString"); - knownMetadata.add("android.view.ViewDebug$HierarchyTraceType"); - knownMetadata.add("android.view.ViewDebug$IntToString"); - knownMetadata.add("android.view.ViewDebug$RecyclerTraceType"); - knownMetadata.add("android.view.ViewGroup"); - knownMetadata.add("android.view.ViewGroup$LayoutParams"); - knownMetadata.add("android.view.ViewGroup$MarginLayoutParams"); - knownMetadata.add("android.view.ViewGroup$OnHierarchyChangeListener"); - knownMetadata.add("android.view.ViewManager"); - knownMetadata.add("android.view.ViewParent"); - knownMetadata.add("android.view.ViewPropertyAnimator"); - knownMetadata.add("android.view.ViewStub"); - knownMetadata.add("android.view.ViewStub$OnInflateListener"); - knownMetadata.add("android.view.ViewTreeObserver"); - knownMetadata.add("android.view.ViewTreeObserver$OnDrawListener"); - knownMetadata.add("android.view.ViewTreeObserver$OnGlobalFocusChangeListener"); - knownMetadata.add("android.view.ViewTreeObserver$OnGlobalLayoutListener"); - knownMetadata.add("android.view.ViewTreeObserver$OnPreDrawListener"); - knownMetadata.add("android.view.ViewTreeObserver$OnScrollChangedListener"); - knownMetadata.add("android.view.ViewTreeObserver$OnTouchModeChangeListener"); - knownMetadata.add("android.view.Window"); - knownMetadata.add("android.view.Window$Callback"); - knownMetadata.add("android.view.WindowManager"); - knownMetadata.add("android.view.WindowManager$BadTokenException"); - knownMetadata.add("android.view.WindowManager$InvalidDisplayException"); - knownMetadata.add("android.view.WindowManager$LayoutParams"); - knownMetadata.add("android.view.accessibility.AccessibilityEvent"); - knownMetadata.add("android.view.accessibility.AccessibilityEventSource"); - knownMetadata.add("android.view.accessibility.AccessibilityManager"); - knownMetadata.add("android.view.accessibility.AccessibilityManager$AccessibilityStateChangeListener"); - knownMetadata.add("android.view.accessibility.AccessibilityNodeInfo"); - knownMetadata.add("android.view.accessibility.AccessibilityNodeProvider"); - knownMetadata.add("android.view.accessibility.AccessibilityRecord"); - knownMetadata.add("android.view.animation.AccelerateDecelerateInterpolator"); - knownMetadata.add("android.view.animation.AccelerateInterpolator"); - knownMetadata.add("android.view.animation.AlphaAnimation"); - knownMetadata.add("android.view.animation.Animation"); - knownMetadata.add("android.view.animation.Animation$AnimationListener"); - knownMetadata.add("android.view.animation.AnimationSet"); - knownMetadata.add("android.view.animation.AnimationUtils"); - knownMetadata.add("android.view.animation.AnticipateInterpolator"); - knownMetadata.add("android.view.animation.AnticipateOvershootInterpolator"); - knownMetadata.add("android.view.animation.BounceInterpolator"); - knownMetadata.add("android.view.animation.CycleInterpolator"); - knownMetadata.add("android.view.animation.DecelerateInterpolator"); - knownMetadata.add("android.view.animation.GridLayoutAnimationController"); - knownMetadata.add("android.view.animation.GridLayoutAnimationController$AnimationParameters"); - knownMetadata.add("android.view.animation.Interpolator"); - knownMetadata.add("android.view.animation.LayoutAnimationController"); - knownMetadata.add("android.view.animation.LayoutAnimationController$AnimationParameters"); - knownMetadata.add("android.view.animation.LinearInterpolator"); - knownMetadata.add("android.view.animation.OvershootInterpolator"); - knownMetadata.add("android.view.animation.RotateAnimation"); - knownMetadata.add("android.view.animation.ScaleAnimation"); - knownMetadata.add("android.view.animation.Transformation"); - knownMetadata.add("android.view.animation.TranslateAnimation"); - knownMetadata.add("android.view.inputmethod.BaseInputConnection"); - knownMetadata.add("android.view.inputmethod.CompletionInfo"); - knownMetadata.add("android.view.inputmethod.CorrectionInfo"); - knownMetadata.add("android.view.inputmethod.EditorInfo"); - knownMetadata.add("android.view.inputmethod.ExtractedText"); - knownMetadata.add("android.view.inputmethod.ExtractedTextRequest"); - knownMetadata.add("android.view.inputmethod.InputBinding"); - knownMetadata.add("android.view.inputmethod.InputConnection"); - knownMetadata.add("android.view.inputmethod.InputConnectionWrapper"); - knownMetadata.add("android.view.inputmethod.InputMethod"); - knownMetadata.add("android.view.inputmethod.InputMethod$SessionCallback"); - knownMetadata.add("android.view.inputmethod.InputMethodInfo"); - knownMetadata.add("android.view.inputmethod.InputMethodManager"); - knownMetadata.add("android.view.inputmethod.InputMethodSession"); - knownMetadata.add("android.view.inputmethod.InputMethodSession$EventCallback"); - knownMetadata.add("android.view.inputmethod.InputMethodSubtype"); - knownMetadata.add("android.view.textservice.SentenceSuggestionsInfo"); - knownMetadata.add("android.view.textservice.SpellCheckerInfo"); - knownMetadata.add("android.view.textservice.SpellCheckerSession"); - knownMetadata.add("android.view.textservice.SpellCheckerSession$SpellCheckerSessionListener"); - knownMetadata.add("android.view.textservice.SpellCheckerSubtype"); - knownMetadata.add("android.view.textservice.SuggestionsInfo"); - knownMetadata.add("android.view.textservice.TextInfo"); - knownMetadata.add("android.view.textservice.TextServicesManager"); - knownMetadata.add("android.webkit.ConsoleMessage"); - knownMetadata.add("android.webkit.ConsoleMessage$MessageLevel"); - knownMetadata.add("android.webkit.CookieManager"); - knownMetadata.add("android.webkit.CookieSyncManager"); - knownMetadata.add("android.webkit.DateSorter"); - knownMetadata.add("android.webkit.DownloadListener"); - knownMetadata.add("android.webkit.GeolocationPermissions"); - knownMetadata.add("android.webkit.GeolocationPermissions$Callback"); - knownMetadata.add("android.webkit.HttpAuthHandler"); - knownMetadata.add("android.webkit.JavascriptInterface"); - knownMetadata.add("android.webkit.JsPromptResult"); - knownMetadata.add("android.webkit.JsResult"); - knownMetadata.add("android.webkit.MimeTypeMap"); - knownMetadata.add("android.webkit.PluginStub"); - knownMetadata.add("android.webkit.SslErrorHandler"); - knownMetadata.add("android.webkit.URLUtil"); - knownMetadata.add("android.webkit.ValueCallback"); - knownMetadata.add("android.webkit.WebBackForwardList"); - knownMetadata.add("android.webkit.WebChromeClient"); - knownMetadata.add("android.webkit.WebChromeClient$CustomViewCallback"); - knownMetadata.add("android.webkit.WebHistoryItem"); - knownMetadata.add("android.webkit.WebIconDatabase"); - knownMetadata.add("android.webkit.WebIconDatabase$IconListener"); - knownMetadata.add("android.webkit.WebResourceResponse"); - knownMetadata.add("android.webkit.WebSettings"); - knownMetadata.add("android.webkit.WebSettings$LayoutAlgorithm"); - knownMetadata.add("android.webkit.WebSettings$PluginState"); - knownMetadata.add("android.webkit.WebSettings$RenderPriority"); - knownMetadata.add("android.webkit.WebSettings$TextSize"); - knownMetadata.add("android.webkit.WebSettings$ZoomDensity"); - knownMetadata.add("android.webkit.WebStorage"); - knownMetadata.add("android.webkit.WebStorage$Origin"); - knownMetadata.add("android.webkit.WebStorage$QuotaUpdater"); - knownMetadata.add("android.webkit.WebView"); - knownMetadata.add("android.webkit.WebView$FindListener"); - knownMetadata.add("android.webkit.WebView$HitTestResult"); - knownMetadata.add("android.webkit.WebView$PictureListener"); - knownMetadata.add("android.webkit.WebView$WebViewTransport"); - knownMetadata.add("android.webkit.WebViewClient"); - knownMetadata.add("android.webkit.WebViewDatabase"); - knownMetadata.add("android.webkit.WebViewFragment"); - knownMetadata.add("android.widget.AbsListView"); - knownMetadata.add("android.widget.AbsListView$LayoutParams"); - knownMetadata.add("android.widget.AbsListView$MultiChoiceModeListener"); - knownMetadata.add("android.widget.AbsListView$OnScrollListener"); - knownMetadata.add("android.widget.AbsListView$RecyclerListener"); - knownMetadata.add("android.widget.AbsListView$SelectionBoundsAdjuster"); - knownMetadata.add("android.widget.AbsSeekBar"); - knownMetadata.add("android.widget.AbsSpinner"); - knownMetadata.add("android.widget.AbsoluteLayout"); - knownMetadata.add("android.widget.AbsoluteLayout$LayoutParams"); - knownMetadata.add("android.widget.Adapter"); - knownMetadata.add("android.widget.AdapterView"); - knownMetadata.add("android.widget.AdapterView$AdapterContextMenuInfo"); - knownMetadata.add("android.widget.AdapterView$OnItemClickListener"); - knownMetadata.add("android.widget.AdapterView$OnItemLongClickListener"); - knownMetadata.add("android.widget.AdapterView$OnItemSelectedListener"); - knownMetadata.add("android.widget.AdapterViewAnimator"); - knownMetadata.add("android.widget.AdapterViewFlipper"); - knownMetadata.add("android.widget.Advanceable"); - knownMetadata.add("android.widget.AlphabetIndexer"); - knownMetadata.add("android.widget.AnalogClock"); - knownMetadata.add("android.widget.ArrayAdapter"); - knownMetadata.add("android.widget.AutoCompleteTextView"); - knownMetadata.add("android.widget.AutoCompleteTextView$OnDismissListener"); - knownMetadata.add("android.widget.AutoCompleteTextView$Validator"); - knownMetadata.add("android.widget.BaseAdapter"); - knownMetadata.add("android.widget.BaseExpandableListAdapter"); - knownMetadata.add("android.widget.Button"); - knownMetadata.add("android.widget.CalendarView"); - knownMetadata.add("android.widget.CalendarView$OnDateChangeListener"); - knownMetadata.add("android.widget.CheckBox"); - knownMetadata.add("android.widget.Checkable"); - knownMetadata.add("android.widget.CheckedTextView"); - knownMetadata.add("android.widget.Chronometer"); - knownMetadata.add("android.widget.Chronometer$OnChronometerTickListener"); - knownMetadata.add("android.widget.CompoundButton"); - knownMetadata.add("android.widget.CompoundButton$OnCheckedChangeListener"); - knownMetadata.add("android.widget.CursorAdapter"); - knownMetadata.add("android.widget.CursorTreeAdapter"); - knownMetadata.add("android.widget.DatePicker"); - knownMetadata.add("android.widget.DatePicker$OnDateChangedListener"); - knownMetadata.add("android.widget.DialerFilter"); - knownMetadata.add("android.widget.DigitalClock"); - knownMetadata.add("android.widget.EdgeEffect"); - knownMetadata.add("android.widget.EditText"); - knownMetadata.add("android.widget.ExpandableListAdapter"); - knownMetadata.add("android.widget.ExpandableListView"); - knownMetadata.add("android.widget.ExpandableListView$ExpandableListContextMenuInfo"); - knownMetadata.add("android.widget.ExpandableListView$OnChildClickListener"); - knownMetadata.add("android.widget.ExpandableListView$OnGroupClickListener"); - knownMetadata.add("android.widget.ExpandableListView$OnGroupCollapseListener"); - knownMetadata.add("android.widget.ExpandableListView$OnGroupExpandListener"); - knownMetadata.add("android.widget.Filter"); - knownMetadata.add("android.widget.Filter$FilterListener"); - knownMetadata.add("android.widget.FilterQueryProvider"); - knownMetadata.add("android.widget.Filterable"); - knownMetadata.add("android.widget.FrameLayout"); - knownMetadata.add("android.widget.FrameLayout$LayoutParams"); - knownMetadata.add("android.widget.Gallery"); - knownMetadata.add("android.widget.Gallery$LayoutParams"); - knownMetadata.add("android.widget.GridLayout"); - knownMetadata.add("android.widget.GridLayout$Alignment"); - knownMetadata.add("android.widget.GridLayout$LayoutParams"); - knownMetadata.add("android.widget.GridLayout$Spec"); - knownMetadata.add("android.widget.GridView"); - knownMetadata.add("android.widget.HeaderViewListAdapter"); - knownMetadata.add("android.widget.HeterogeneousExpandableList"); - knownMetadata.add("android.widget.HorizontalScrollView"); - knownMetadata.add("android.widget.ImageButton"); - knownMetadata.add("android.widget.ImageSwitcher"); - knownMetadata.add("android.widget.ImageView"); - knownMetadata.add("android.widget.ImageView$ScaleType"); - knownMetadata.add("android.widget.LinearLayout"); - knownMetadata.add("android.widget.LinearLayout$LayoutParams"); - knownMetadata.add("android.widget.ListAdapter"); - knownMetadata.add("android.widget.ListPopupWindow"); - knownMetadata.add("android.widget.ListView"); - knownMetadata.add("android.widget.ListView$FixedViewInfo"); - knownMetadata.add("android.widget.MediaController"); - knownMetadata.add("android.widget.MediaController$MediaPlayerControl"); - knownMetadata.add("android.widget.MultiAutoCompleteTextView"); - knownMetadata.add("android.widget.MultiAutoCompleteTextView$CommaTokenizer"); - knownMetadata.add("android.widget.MultiAutoCompleteTextView$Tokenizer"); - knownMetadata.add("android.widget.NumberPicker"); - knownMetadata.add("android.widget.NumberPicker$Formatter"); - knownMetadata.add("android.widget.NumberPicker$OnScrollListener"); - knownMetadata.add("android.widget.NumberPicker$OnValueChangeListener"); - knownMetadata.add("android.widget.OverScroller"); - knownMetadata.add("android.widget.PopupMenu"); - knownMetadata.add("android.widget.PopupMenu$OnDismissListener"); - knownMetadata.add("android.widget.PopupMenu$OnMenuItemClickListener"); - knownMetadata.add("android.widget.PopupWindow"); - knownMetadata.add("android.widget.PopupWindow$OnDismissListener"); - knownMetadata.add("android.widget.ProgressBar"); - knownMetadata.add("android.widget.QuickContactBadge"); - knownMetadata.add("android.widget.RadioButton"); - knownMetadata.add("android.widget.RadioGroup"); - knownMetadata.add("android.widget.RadioGroup$LayoutParams"); - knownMetadata.add("android.widget.RadioGroup$OnCheckedChangeListener"); - knownMetadata.add("android.widget.RatingBar"); - knownMetadata.add("android.widget.RatingBar$OnRatingBarChangeListener"); - knownMetadata.add("android.widget.RelativeLayout"); - knownMetadata.add("android.widget.RelativeLayout$LayoutParams"); - knownMetadata.add("android.widget.RemoteViews"); - knownMetadata.add("android.widget.RemoteViews$ActionException"); - knownMetadata.add("android.widget.RemoteViews$RemoteView"); - knownMetadata.add("android.widget.RemoteViewsService"); - knownMetadata.add("android.widget.RemoteViewsService$RemoteViewsFactory"); - knownMetadata.add("android.widget.ResourceCursorAdapter"); - knownMetadata.add("android.widget.ResourceCursorTreeAdapter"); - knownMetadata.add("android.widget.ScrollView"); - knownMetadata.add("android.widget.Scroller"); - knownMetadata.add("android.widget.SearchView"); - knownMetadata.add("android.widget.SearchView$OnCloseListener"); - knownMetadata.add("android.widget.SearchView$OnQueryTextListener"); - knownMetadata.add("android.widget.SearchView$OnSuggestionListener"); - knownMetadata.add("android.widget.SectionIndexer"); - knownMetadata.add("android.widget.SeekBar"); - knownMetadata.add("android.widget.SeekBar$OnSeekBarChangeListener"); - knownMetadata.add("android.widget.ShareActionProvider"); - knownMetadata.add("android.widget.ShareActionProvider$OnShareTargetSelectedListener"); - knownMetadata.add("android.widget.SimpleAdapter"); - knownMetadata.add("android.widget.SimpleAdapter$ViewBinder"); - knownMetadata.add("android.widget.SimpleCursorAdapter"); - knownMetadata.add("android.widget.SimpleCursorAdapter$CursorToStringConverter"); - knownMetadata.add("android.widget.SimpleCursorAdapter$ViewBinder"); - knownMetadata.add("android.widget.SimpleCursorTreeAdapter"); - knownMetadata.add("android.widget.SimpleCursorTreeAdapter$ViewBinder"); - knownMetadata.add("android.widget.SimpleExpandableListAdapter"); - knownMetadata.add("android.widget.SlidingDrawer"); - knownMetadata.add("android.widget.SlidingDrawer$OnDrawerCloseListener"); - knownMetadata.add("android.widget.SlidingDrawer$OnDrawerOpenListener"); - knownMetadata.add("android.widget.SlidingDrawer$OnDrawerScrollListener"); - knownMetadata.add("android.widget.Space"); - knownMetadata.add("android.widget.Spinner"); - knownMetadata.add("android.widget.SpinnerAdapter"); - knownMetadata.add("android.widget.StackView"); - knownMetadata.add("android.widget.Switch"); - knownMetadata.add("android.widget.TabHost"); - knownMetadata.add("android.widget.TabHost$OnTabChangeListener"); - knownMetadata.add("android.widget.TabHost$TabContentFactory"); - knownMetadata.add("android.widget.TabHost$TabSpec"); - knownMetadata.add("android.widget.TabWidget"); - knownMetadata.add("android.widget.TableLayout"); - knownMetadata.add("android.widget.TableLayout$LayoutParams"); - knownMetadata.add("android.widget.TableRow"); - knownMetadata.add("android.widget.TableRow$LayoutParams"); - knownMetadata.add("android.widget.TextClock"); - knownMetadata.add("android.widget.TextSwitcher"); - knownMetadata.add("android.widget.TextView"); - knownMetadata.add("android.widget.TextView$BufferType"); - knownMetadata.add("android.widget.TextView$OnEditorActionListener"); - knownMetadata.add("android.widget.TextView$SavedState"); - knownMetadata.add("android.widget.TimePicker"); - knownMetadata.add("android.widget.TimePicker$OnTimeChangedListener"); - knownMetadata.add("android.widget.Toast"); - knownMetadata.add("android.widget.ToggleButton"); - knownMetadata.add("android.widget.TwoLineListItem"); - knownMetadata.add("android.widget.VideoView"); - knownMetadata.add("android.widget.ViewAnimator"); - knownMetadata.add("android.widget.ViewFlipper"); - knownMetadata.add("android.widget.ViewSwitcher"); - knownMetadata.add("android.widget.ViewSwitcher$ViewFactory"); - knownMetadata.add("android.widget.WrapperListAdapter"); - knownMetadata.add("android.widget.ZoomButton"); - knownMetadata.add("android.widget.ZoomButtonsController"); - knownMetadata.add("android.widget.ZoomButtonsController$OnZoomListener"); - knownMetadata.add("android.widget.ZoomControls"); - knownMetadata.add("com.android.internal.util.Predicate"); - knownMetadata.add("dalvik.annotation.TestTarget"); - knownMetadata.add("dalvik.annotation.TestTargetClass"); - knownMetadata.add("dalvik.bytecode.OpcodeInfo"); - knownMetadata.add("dalvik.bytecode.Opcodes"); - knownMetadata.add("dalvik.system.BaseDexClassLoader"); - knownMetadata.add("dalvik.system.DexClassLoader"); - knownMetadata.add("dalvik.system.DexFile"); - knownMetadata.add("dalvik.system.PathClassLoader"); - knownMetadata.add("java.awt.font.NumericShaper"); - knownMetadata.add("java.awt.font.TextAttribute"); - knownMetadata.add("java.beans.IndexedPropertyChangeEvent"); - knownMetadata.add("java.beans.PropertyChangeEvent"); - knownMetadata.add("java.beans.PropertyChangeListener"); - knownMetadata.add("java.beans.PropertyChangeListenerProxy"); - knownMetadata.add("java.beans.PropertyChangeSupport"); - knownMetadata.add("java.io.BufferedInputStream"); - knownMetadata.add("java.io.BufferedOutputStream"); - knownMetadata.add("java.io.BufferedReader"); - knownMetadata.add("java.io.BufferedWriter"); - knownMetadata.add("java.io.ByteArrayInputStream"); - knownMetadata.add("java.io.ByteArrayOutputStream"); - knownMetadata.add("java.io.CharArrayReader"); - knownMetadata.add("java.io.CharArrayWriter"); - knownMetadata.add("java.io.CharConversionException"); - knownMetadata.add("java.io.Closeable"); - knownMetadata.add("java.io.Console"); - knownMetadata.add("java.io.DataInput"); - knownMetadata.add("java.io.DataInputStream"); - knownMetadata.add("java.io.DataOutput"); - knownMetadata.add("java.io.DataOutputStream"); - knownMetadata.add("java.io.EOFException"); - knownMetadata.add("java.io.Externalizable"); - knownMetadata.add("java.io.File"); - knownMetadata.add("java.io.FileDescriptor"); - knownMetadata.add("java.io.FileFilter"); - knownMetadata.add("java.io.FileInputStream"); - knownMetadata.add("java.io.FileNotFoundException"); - knownMetadata.add("java.io.FileOutputStream"); - knownMetadata.add("java.io.FilePermission"); - knownMetadata.add("java.io.FileReader"); - knownMetadata.add("java.io.FileWriter"); - knownMetadata.add("java.io.FilenameFilter"); - knownMetadata.add("java.io.FilterInputStream"); - knownMetadata.add("java.io.FilterOutputStream"); - knownMetadata.add("java.io.FilterReader"); - knownMetadata.add("java.io.FilterWriter"); - knownMetadata.add("java.io.Flushable"); - knownMetadata.add("java.io.IOError"); - knownMetadata.add("java.io.IOException"); - knownMetadata.add("java.io.InputStream"); - knownMetadata.add("java.io.InputStreamReader"); - knownMetadata.add("java.io.InterruptedIOException"); - knownMetadata.add("java.io.InvalidClassException"); - knownMetadata.add("java.io.InvalidObjectException"); - knownMetadata.add("java.io.LineNumberInputStream"); - knownMetadata.add("java.io.LineNumberReader"); - knownMetadata.add("java.io.NotActiveException"); - knownMetadata.add("java.io.NotSerializableException"); - knownMetadata.add("java.io.ObjectInput"); - knownMetadata.add("java.io.ObjectInputStream"); - knownMetadata.add("java.io.ObjectInputStream$GetField"); - knownMetadata.add("java.io.ObjectInputValidation"); - knownMetadata.add("java.io.ObjectOutput"); - knownMetadata.add("java.io.ObjectOutputStream"); - knownMetadata.add("java.io.ObjectOutputStream$PutField"); - knownMetadata.add("java.io.ObjectStreamClass"); - knownMetadata.add("java.io.ObjectStreamConstants"); - knownMetadata.add("java.io.ObjectStreamException"); - knownMetadata.add("java.io.ObjectStreamField"); - knownMetadata.add("java.io.OptionalDataException"); - knownMetadata.add("java.io.OutputStream"); - knownMetadata.add("java.io.OutputStreamWriter"); - knownMetadata.add("java.io.PipedInputStream"); - knownMetadata.add("java.io.PipedOutputStream"); - knownMetadata.add("java.io.PipedReader"); - knownMetadata.add("java.io.PipedWriter"); - knownMetadata.add("java.io.PrintStream"); - knownMetadata.add("java.io.PrintWriter"); - knownMetadata.add("java.io.PushbackInputStream"); - knownMetadata.add("java.io.PushbackReader"); - knownMetadata.add("java.io.RandomAccessFile"); - knownMetadata.add("java.io.Reader"); - knownMetadata.add("java.io.SequenceInputStream"); - knownMetadata.add("java.io.Serializable"); - knownMetadata.add("java.io.SerializablePermission"); - knownMetadata.add("java.io.StreamCorruptedException"); - knownMetadata.add("java.io.StreamTokenizer"); - knownMetadata.add("java.io.StringBufferInputStream"); - knownMetadata.add("java.io.StringReader"); - knownMetadata.add("java.io.StringWriter"); - knownMetadata.add("java.io.SyncFailedException"); - knownMetadata.add("java.io.UTFDataFormatException"); - knownMetadata.add("java.io.UnsupportedEncodingException"); - knownMetadata.add("java.io.WriteAbortedException"); - knownMetadata.add("java.io.Writer"); - knownMetadata.add("java.lang.AbstractMethodError"); - knownMetadata.add("java.lang.Appendable"); - knownMetadata.add("java.lang.ArithmeticException"); - knownMetadata.add("java.lang.ArrayIndexOutOfBoundsException"); - knownMetadata.add("java.lang.ArrayStoreException"); - knownMetadata.add("java.lang.AssertionError"); - knownMetadata.add("java.lang.Boolean"); - knownMetadata.add("java.lang.Byte"); - knownMetadata.add("java.lang.CharSequence"); - knownMetadata.add("java.lang.Character"); - knownMetadata.add("java.lang.Character$Subset"); - knownMetadata.add("java.lang.Character$UnicodeBlock"); - knownMetadata.add("java.lang.Class"); - knownMetadata.add("java.lang.ClassCastException"); - knownMetadata.add("java.lang.ClassCircularityError"); - knownMetadata.add("java.lang.ClassFormatError"); - knownMetadata.add("java.lang.ClassLoader"); - knownMetadata.add("java.lang.ClassNotFoundException"); - knownMetadata.add("java.lang.CloneNotSupportedException"); - knownMetadata.add("java.lang.Cloneable"); - knownMetadata.add("java.lang.Comparable"); - knownMetadata.add("java.lang.Compiler"); - knownMetadata.add("java.lang.Deprecated"); - knownMetadata.add("java.lang.Double"); - knownMetadata.add("java.lang.Enum"); - knownMetadata.add("java.lang.EnumConstantNotPresentException"); - knownMetadata.add("java.lang.Error"); - knownMetadata.add("java.lang.Exception"); - knownMetadata.add("java.lang.ExceptionInInitializerError"); - knownMetadata.add("java.lang.Float"); - knownMetadata.add("java.lang.IllegalAccessError"); - knownMetadata.add("java.lang.IllegalAccessException"); - knownMetadata.add("java.lang.IllegalArgumentException"); - knownMetadata.add("java.lang.IllegalMonitorStateException"); - knownMetadata.add("java.lang.IllegalStateException"); - knownMetadata.add("java.lang.IllegalThreadStateException"); - knownMetadata.add("java.lang.IncompatibleClassChangeError"); - knownMetadata.add("java.lang.IndexOutOfBoundsException"); - knownMetadata.add("java.lang.InheritableThreadLocal"); - knownMetadata.add("java.lang.InstantiationError"); - knownMetadata.add("java.lang.InstantiationException"); - knownMetadata.add("java.lang.Integer"); - knownMetadata.add("java.lang.InternalError"); - knownMetadata.add("java.lang.InterruptedException"); - knownMetadata.add("java.lang.Iterable"); - knownMetadata.add("java.lang.LinkageError"); - knownMetadata.add("java.lang.Long"); - knownMetadata.add("java.lang.Math"); - knownMetadata.add("java.lang.NegativeArraySizeException"); - knownMetadata.add("java.lang.NoClassDefFoundError"); - knownMetadata.add("java.lang.NoSuchFieldError"); - knownMetadata.add("java.lang.NoSuchFieldException"); - knownMetadata.add("java.lang.NoSuchMethodError"); - knownMetadata.add("java.lang.NoSuchMethodException"); - knownMetadata.add("java.lang.NullPointerException"); - knownMetadata.add("java.lang.Number"); - knownMetadata.add("java.lang.NumberFormatException"); - knownMetadata.add("java.lang.Object"); - knownMetadata.add("java.lang.OutOfMemoryError"); - knownMetadata.add("java.lang.Override"); - knownMetadata.add("java.lang.Package"); - knownMetadata.add("java.lang.Process"); - knownMetadata.add("java.lang.ProcessBuilder"); - knownMetadata.add("java.lang.Readable"); - knownMetadata.add("java.lang.Runnable"); - knownMetadata.add("java.lang.Runtime"); - knownMetadata.add("java.lang.RuntimeException"); - knownMetadata.add("java.lang.RuntimePermission"); - knownMetadata.add("java.lang.SecurityException"); - knownMetadata.add("java.lang.SecurityManager"); - knownMetadata.add("java.lang.Short"); - knownMetadata.add("java.lang.StackOverflowError"); - knownMetadata.add("java.lang.StackTraceElement"); - knownMetadata.add("java.lang.StrictMath"); - knownMetadata.add("java.lang.String"); - knownMetadata.add("java.lang.StringBuffer"); - knownMetadata.add("java.lang.StringBuilder"); - knownMetadata.add("java.lang.StringIndexOutOfBoundsException"); - knownMetadata.add("java.lang.SuppressWarnings"); - knownMetadata.add("java.lang.System"); - knownMetadata.add("java.lang.Thread"); - knownMetadata.add("java.lang.Thread$State"); - knownMetadata.add("java.lang.Thread$UncaughtExceptionHandler"); - knownMetadata.add("java.lang.ThreadDeath"); - knownMetadata.add("java.lang.ThreadGroup"); - knownMetadata.add("java.lang.ThreadLocal"); - knownMetadata.add("java.lang.Throwable"); - knownMetadata.add("java.lang.TypeNotPresentException"); - knownMetadata.add("java.lang.UnknownError"); - knownMetadata.add("java.lang.UnsatisfiedLinkError"); - knownMetadata.add("java.lang.UnsupportedClassVersionError"); - knownMetadata.add("java.lang.UnsupportedOperationException"); - knownMetadata.add("java.lang.VerifyError"); - knownMetadata.add("java.lang.VirtualMachineError"); - knownMetadata.add("java.lang.Void"); - knownMetadata.add("java.lang.annotation.Annotation"); - knownMetadata.add("java.lang.annotation.AnnotationFormatError"); - knownMetadata.add("java.lang.annotation.AnnotationTypeMismatchException"); - knownMetadata.add("java.lang.annotation.Documented"); - knownMetadata.add("java.lang.annotation.ElementType"); - knownMetadata.add("java.lang.annotation.IncompleteAnnotationException"); - knownMetadata.add("java.lang.annotation.Inherited"); - knownMetadata.add("java.lang.annotation.Retention"); - knownMetadata.add("java.lang.annotation.RetentionPolicy"); - knownMetadata.add("java.lang.annotation.Target"); - knownMetadata.add("java.lang.ref.PhantomReference"); - knownMetadata.add("java.lang.ref.Reference"); - knownMetadata.add("java.lang.ref.ReferenceQueue"); - knownMetadata.add("java.lang.ref.SoftReference"); - knownMetadata.add("java.lang.ref.WeakReference"); - knownMetadata.add("java.lang.reflect.AccessibleObject"); - knownMetadata.add("java.lang.reflect.AnnotatedElement"); - knownMetadata.add("java.lang.reflect.Array"); - knownMetadata.add("java.lang.reflect.Constructor"); - knownMetadata.add("java.lang.reflect.Field"); - knownMetadata.add("java.lang.reflect.GenericArrayType"); - knownMetadata.add("java.lang.reflect.GenericDeclaration"); - knownMetadata.add("java.lang.reflect.GenericSignatureFormatError"); - knownMetadata.add("java.lang.reflect.InvocationHandler"); - knownMetadata.add("java.lang.reflect.InvocationTargetException"); - knownMetadata.add("java.lang.reflect.MalformedParameterizedTypeException"); - knownMetadata.add("java.lang.reflect.Member"); - knownMetadata.add("java.lang.reflect.Method"); - knownMetadata.add("java.lang.reflect.Modifier"); - knownMetadata.add("java.lang.reflect.ParameterizedType"); - knownMetadata.add("java.lang.reflect.Proxy"); - knownMetadata.add("java.lang.reflect.ReflectPermission"); - knownMetadata.add("java.lang.reflect.Type"); - knownMetadata.add("java.lang.reflect.TypeVariable"); - knownMetadata.add("java.lang.reflect.UndeclaredThrowableException"); - knownMetadata.add("java.lang.reflect.WildcardType"); - knownMetadata.add("java.math.BigDecimal"); - knownMetadata.add("java.math.BigInteger"); - knownMetadata.add("java.math.MathContext"); - knownMetadata.add("java.math.RoundingMode"); - knownMetadata.add("java.net.Authenticator"); - knownMetadata.add("java.net.Authenticator$RequestorType"); - knownMetadata.add("java.net.BindException"); - knownMetadata.add("java.net.CacheRequest"); - knownMetadata.add("java.net.CacheResponse"); - knownMetadata.add("java.net.ConnectException"); - knownMetadata.add("java.net.ContentHandler"); - knownMetadata.add("java.net.ContentHandlerFactory"); - knownMetadata.add("java.net.CookieHandler"); - knownMetadata.add("java.net.CookieManager"); - knownMetadata.add("java.net.CookiePolicy"); - knownMetadata.add("java.net.CookieStore"); - knownMetadata.add("java.net.DatagramPacket"); - knownMetadata.add("java.net.DatagramSocket"); - knownMetadata.add("java.net.DatagramSocketImpl"); - knownMetadata.add("java.net.DatagramSocketImplFactory"); - knownMetadata.add("java.net.FileNameMap"); - knownMetadata.add("java.net.HttpCookie"); - knownMetadata.add("java.net.HttpRetryException"); - knownMetadata.add("java.net.HttpURLConnection"); - knownMetadata.add("java.net.IDN"); - knownMetadata.add("java.net.Inet4Address"); - knownMetadata.add("java.net.Inet6Address"); - knownMetadata.add("java.net.InetAddress"); - knownMetadata.add("java.net.InetSocketAddress"); - knownMetadata.add("java.net.InterfaceAddress"); - knownMetadata.add("java.net.JarURLConnection"); - knownMetadata.add("java.net.MalformedURLException"); - knownMetadata.add("java.net.MulticastSocket"); - knownMetadata.add("java.net.NetPermission"); - knownMetadata.add("java.net.NetworkInterface"); - knownMetadata.add("java.net.NoRouteToHostException"); - knownMetadata.add("java.net.PasswordAuthentication"); - knownMetadata.add("java.net.PortUnreachableException"); - knownMetadata.add("java.net.ProtocolException"); - knownMetadata.add("java.net.Proxy"); - knownMetadata.add("java.net.Proxy$Type"); - knownMetadata.add("java.net.ProxySelector"); - knownMetadata.add("java.net.ResponseCache"); - knownMetadata.add("java.net.SecureCacheResponse"); - knownMetadata.add("java.net.ServerSocket"); - knownMetadata.add("java.net.Socket"); - knownMetadata.add("java.net.SocketAddress"); - knownMetadata.add("java.net.SocketException"); - knownMetadata.add("java.net.SocketImpl"); - knownMetadata.add("java.net.SocketImplFactory"); - knownMetadata.add("java.net.SocketOptions"); - knownMetadata.add("java.net.SocketPermission"); - knownMetadata.add("java.net.SocketTimeoutException"); - knownMetadata.add("java.net.URI"); - knownMetadata.add("java.net.URISyntaxException"); - knownMetadata.add("java.net.URL"); - knownMetadata.add("java.net.URLClassLoader"); - knownMetadata.add("java.net.URLConnection"); - knownMetadata.add("java.net.URLDecoder"); - knownMetadata.add("java.net.URLEncoder"); - knownMetadata.add("java.net.URLStreamHandler"); - knownMetadata.add("java.net.URLStreamHandlerFactory"); - knownMetadata.add("java.net.UnknownHostException"); - knownMetadata.add("java.net.UnknownServiceException"); - knownMetadata.add("java.nio.Buffer"); - knownMetadata.add("java.nio.BufferOverflowException"); - knownMetadata.add("java.nio.BufferUnderflowException"); - knownMetadata.add("java.nio.ByteBuffer"); - knownMetadata.add("java.nio.ByteOrder"); - knownMetadata.add("java.nio.CharBuffer"); - knownMetadata.add("java.nio.DoubleBuffer"); - knownMetadata.add("java.nio.FloatBuffer"); - knownMetadata.add("java.nio.IntBuffer"); - knownMetadata.add("java.nio.InvalidMarkException"); - knownMetadata.add("java.nio.LongBuffer"); - knownMetadata.add("java.nio.MappedByteBuffer"); - knownMetadata.add("java.nio.ReadOnlyBufferException"); - knownMetadata.add("java.nio.ShortBuffer"); - knownMetadata.add("java.nio.channels.AlreadyConnectedException"); - knownMetadata.add("java.nio.channels.AsynchronousCloseException"); - knownMetadata.add("java.nio.channels.ByteChannel"); - knownMetadata.add("java.nio.channels.CancelledKeyException"); - knownMetadata.add("java.nio.channels.Channel"); - knownMetadata.add("java.nio.channels.Channels"); - knownMetadata.add("java.nio.channels.ClosedByInterruptException"); - knownMetadata.add("java.nio.channels.ClosedChannelException"); - knownMetadata.add("java.nio.channels.ClosedSelectorException"); - knownMetadata.add("java.nio.channels.ConnectionPendingException"); - knownMetadata.add("java.nio.channels.DatagramChannel"); - knownMetadata.add("java.nio.channels.FileChannel"); - knownMetadata.add("java.nio.channels.FileChannel$MapMode"); - knownMetadata.add("java.nio.channels.FileLock"); - knownMetadata.add("java.nio.channels.FileLockInterruptionException"); - knownMetadata.add("java.nio.channels.GatheringByteChannel"); - knownMetadata.add("java.nio.channels.IllegalBlockingModeException"); - knownMetadata.add("java.nio.channels.IllegalSelectorException"); - knownMetadata.add("java.nio.channels.InterruptibleChannel"); - knownMetadata.add("java.nio.channels.NoConnectionPendingException"); - knownMetadata.add("java.nio.channels.NonReadableChannelException"); - knownMetadata.add("java.nio.channels.NonWritableChannelException"); - knownMetadata.add("java.nio.channels.NotYetBoundException"); - knownMetadata.add("java.nio.channels.NotYetConnectedException"); - knownMetadata.add("java.nio.channels.OverlappingFileLockException"); - knownMetadata.add("java.nio.channels.Pipe"); - knownMetadata.add("java.nio.channels.Pipe$SinkChannel"); - knownMetadata.add("java.nio.channels.Pipe$SourceChannel"); - knownMetadata.add("java.nio.channels.ReadableByteChannel"); - knownMetadata.add("java.nio.channels.ScatteringByteChannel"); - knownMetadata.add("java.nio.channels.SelectableChannel"); - knownMetadata.add("java.nio.channels.SelectionKey"); - knownMetadata.add("java.nio.channels.Selector"); - knownMetadata.add("java.nio.channels.ServerSocketChannel"); - knownMetadata.add("java.nio.channels.SocketChannel"); - knownMetadata.add("java.nio.channels.UnresolvedAddressException"); - knownMetadata.add("java.nio.channels.UnsupportedAddressTypeException"); - knownMetadata.add("java.nio.channels.WritableByteChannel"); - knownMetadata.add("java.nio.channels.spi.AbstractInterruptibleChannel"); - knownMetadata.add("java.nio.channels.spi.AbstractSelectableChannel"); - knownMetadata.add("java.nio.channels.spi.AbstractSelectionKey"); - knownMetadata.add("java.nio.channels.spi.AbstractSelector"); - knownMetadata.add("java.nio.channels.spi.SelectorProvider"); - knownMetadata.add("java.nio.charset.CharacterCodingException"); - knownMetadata.add("java.nio.charset.Charset"); - knownMetadata.add("java.nio.charset.CharsetDecoder"); - knownMetadata.add("java.nio.charset.CharsetEncoder"); - knownMetadata.add("java.nio.charset.CoderMalfunctionError"); - knownMetadata.add("java.nio.charset.CoderResult"); - knownMetadata.add("java.nio.charset.CodingErrorAction"); - knownMetadata.add("java.nio.charset.IllegalCharsetNameException"); - knownMetadata.add("java.nio.charset.MalformedInputException"); - knownMetadata.add("java.nio.charset.UnmappableCharacterException"); - knownMetadata.add("java.nio.charset.UnsupportedCharsetException"); - knownMetadata.add("java.nio.charset.spi.CharsetProvider"); - knownMetadata.add("java.security.AccessControlContext"); - knownMetadata.add("java.security.AccessControlException"); - knownMetadata.add("java.security.AccessController"); - knownMetadata.add("java.security.AlgorithmParameterGenerator"); - knownMetadata.add("java.security.AlgorithmParameterGeneratorSpi"); - knownMetadata.add("java.security.AlgorithmParameters"); - knownMetadata.add("java.security.AlgorithmParametersSpi"); - knownMetadata.add("java.security.AllPermission"); - knownMetadata.add("java.security.AuthProvider"); - knownMetadata.add("java.security.BasicPermission"); - knownMetadata.add("java.security.Certificate"); - knownMetadata.add("java.security.CodeSigner"); - knownMetadata.add("java.security.CodeSource"); - knownMetadata.add("java.security.DigestException"); - knownMetadata.add("java.security.DigestInputStream"); - knownMetadata.add("java.security.DigestOutputStream"); - knownMetadata.add("java.security.DomainCombiner"); - knownMetadata.add("java.security.GeneralSecurityException"); - knownMetadata.add("java.security.Guard"); - knownMetadata.add("java.security.GuardedObject"); - knownMetadata.add("java.security.Identity"); - knownMetadata.add("java.security.IdentityScope"); - knownMetadata.add("java.security.InvalidAlgorithmParameterException"); - knownMetadata.add("java.security.InvalidKeyException"); - knownMetadata.add("java.security.InvalidParameterException"); - knownMetadata.add("java.security.Key"); - knownMetadata.add("java.security.KeyException"); - knownMetadata.add("java.security.KeyFactory"); - knownMetadata.add("java.security.KeyFactorySpi"); - knownMetadata.add("java.security.KeyManagementException"); - knownMetadata.add("java.security.KeyPair"); - knownMetadata.add("java.security.KeyPairGenerator"); - knownMetadata.add("java.security.KeyPairGeneratorSpi"); - knownMetadata.add("java.security.KeyRep"); - knownMetadata.add("java.security.KeyRep$Type"); - knownMetadata.add("java.security.KeyStore"); - knownMetadata.add("java.security.KeyStore$Builder"); - knownMetadata.add("java.security.KeyStore$CallbackHandlerProtection"); - knownMetadata.add("java.security.KeyStore$Entry"); - knownMetadata.add("java.security.KeyStore$LoadStoreParameter"); - knownMetadata.add("java.security.KeyStore$PasswordProtection"); - knownMetadata.add("java.security.KeyStore$PrivateKeyEntry"); - knownMetadata.add("java.security.KeyStore$ProtectionParameter"); - knownMetadata.add("java.security.KeyStore$SecretKeyEntry"); - knownMetadata.add("java.security.KeyStore$TrustedCertificateEntry"); - knownMetadata.add("java.security.KeyStoreException"); - knownMetadata.add("java.security.KeyStoreSpi"); - knownMetadata.add("java.security.MessageDigest"); - knownMetadata.add("java.security.MessageDigestSpi"); - knownMetadata.add("java.security.NoSuchAlgorithmException"); - knownMetadata.add("java.security.NoSuchProviderException"); - knownMetadata.add("java.security.Permission"); - knownMetadata.add("java.security.PermissionCollection"); - knownMetadata.add("java.security.Permissions"); - knownMetadata.add("java.security.Policy"); - knownMetadata.add("java.security.Policy$Parameters"); - knownMetadata.add("java.security.PolicySpi"); - knownMetadata.add("java.security.Principal"); - knownMetadata.add("java.security.PrivateKey"); - knownMetadata.add("java.security.PrivilegedAction"); - knownMetadata.add("java.security.PrivilegedActionException"); - knownMetadata.add("java.security.PrivilegedExceptionAction"); - knownMetadata.add("java.security.ProtectionDomain"); - knownMetadata.add("java.security.Provider"); - knownMetadata.add("java.security.Provider$Service"); - knownMetadata.add("java.security.ProviderException"); - knownMetadata.add("java.security.PublicKey"); - knownMetadata.add("java.security.SecureClassLoader"); - knownMetadata.add("java.security.SecureRandom"); - knownMetadata.add("java.security.SecureRandomSpi"); - knownMetadata.add("java.security.Security"); - knownMetadata.add("java.security.SecurityPermission"); - knownMetadata.add("java.security.Signature"); - knownMetadata.add("java.security.SignatureException"); - knownMetadata.add("java.security.SignatureSpi"); - knownMetadata.add("java.security.SignedObject"); - knownMetadata.add("java.security.Signer"); - knownMetadata.add("java.security.Timestamp"); - knownMetadata.add("java.security.UnrecoverableEntryException"); - knownMetadata.add("java.security.UnrecoverableKeyException"); - knownMetadata.add("java.security.UnresolvedPermission"); - knownMetadata.add("java.security.acl.Acl"); - knownMetadata.add("java.security.acl.AclEntry"); - knownMetadata.add("java.security.acl.AclNotFoundException"); - knownMetadata.add("java.security.acl.Group"); - knownMetadata.add("java.security.acl.LastOwnerException"); - knownMetadata.add("java.security.acl.NotOwnerException"); - knownMetadata.add("java.security.acl.Owner"); - knownMetadata.add("java.security.acl.Permission"); - knownMetadata.add("java.security.cert.CRL"); - knownMetadata.add("java.security.cert.CRLException"); - knownMetadata.add("java.security.cert.CRLSelector"); - knownMetadata.add("java.security.cert.CertPath"); - knownMetadata.add("java.security.cert.CertPathBuilder"); - knownMetadata.add("java.security.cert.CertPathBuilderException"); - knownMetadata.add("java.security.cert.CertPathBuilderResult"); - knownMetadata.add("java.security.cert.CertPathBuilderSpi"); - knownMetadata.add("java.security.cert.CertPathParameters"); - knownMetadata.add("java.security.cert.CertPathValidator"); - knownMetadata.add("java.security.cert.CertPathValidatorException"); - knownMetadata.add("java.security.cert.CertPathValidatorResult"); - knownMetadata.add("java.security.cert.CertPathValidatorSpi"); - knownMetadata.add("java.security.cert.CertSelector"); - knownMetadata.add("java.security.cert.CertStore"); - knownMetadata.add("java.security.cert.CertStoreException"); - knownMetadata.add("java.security.cert.CertStoreParameters"); - knownMetadata.add("java.security.cert.CertStoreSpi"); - knownMetadata.add("java.security.cert.Certificate"); - knownMetadata.add("java.security.cert.CertificateEncodingException"); - knownMetadata.add("java.security.cert.CertificateException"); - knownMetadata.add("java.security.cert.CertificateExpiredException"); - knownMetadata.add("java.security.cert.CertificateFactory"); - knownMetadata.add("java.security.cert.CertificateFactorySpi"); - knownMetadata.add("java.security.cert.CertificateNotYetValidException"); - knownMetadata.add("java.security.cert.CertificateParsingException"); - knownMetadata.add("java.security.cert.CollectionCertStoreParameters"); - knownMetadata.add("java.security.cert.LDAPCertStoreParameters"); - knownMetadata.add("java.security.cert.PKIXBuilderParameters"); - knownMetadata.add("java.security.cert.PKIXCertPathBuilderResult"); - knownMetadata.add("java.security.cert.PKIXCertPathChecker"); - knownMetadata.add("java.security.cert.PKIXCertPathValidatorResult"); - knownMetadata.add("java.security.cert.PKIXParameters"); - knownMetadata.add("java.security.cert.PolicyNode"); - knownMetadata.add("java.security.cert.PolicyQualifierInfo"); - knownMetadata.add("java.security.cert.TrustAnchor"); - knownMetadata.add("java.security.cert.X509CRL"); - knownMetadata.add("java.security.cert.X509CRLEntry"); - knownMetadata.add("java.security.cert.X509CRLSelector"); - knownMetadata.add("java.security.cert.X509CertSelector"); - knownMetadata.add("java.security.cert.X509Certificate"); - knownMetadata.add("java.security.cert.X509Extension"); - knownMetadata.add("java.security.interfaces.DSAKey"); - knownMetadata.add("java.security.interfaces.DSAKeyPairGenerator"); - knownMetadata.add("java.security.interfaces.DSAParams"); - knownMetadata.add("java.security.interfaces.DSAPrivateKey"); - knownMetadata.add("java.security.interfaces.DSAPublicKey"); - knownMetadata.add("java.security.interfaces.ECKey"); - knownMetadata.add("java.security.interfaces.ECPrivateKey"); - knownMetadata.add("java.security.interfaces.ECPublicKey"); - knownMetadata.add("java.security.interfaces.RSAKey"); - knownMetadata.add("java.security.interfaces.RSAMultiPrimePrivateCrtKey"); - knownMetadata.add("java.security.interfaces.RSAPrivateCrtKey"); - knownMetadata.add("java.security.interfaces.RSAPrivateKey"); - knownMetadata.add("java.security.interfaces.RSAPublicKey"); - knownMetadata.add("java.security.spec.AlgorithmParameterSpec"); - knownMetadata.add("java.security.spec.DSAParameterSpec"); - knownMetadata.add("java.security.spec.DSAPrivateKeySpec"); - knownMetadata.add("java.security.spec.DSAPublicKeySpec"); - knownMetadata.add("java.security.spec.ECField"); - knownMetadata.add("java.security.spec.ECFieldF2m"); - knownMetadata.add("java.security.spec.ECFieldFp"); - knownMetadata.add("java.security.spec.ECGenParameterSpec"); - knownMetadata.add("java.security.spec.ECParameterSpec"); - knownMetadata.add("java.security.spec.ECPoint"); - knownMetadata.add("java.security.spec.ECPrivateKeySpec"); - knownMetadata.add("java.security.spec.ECPublicKeySpec"); - knownMetadata.add("java.security.spec.EllipticCurve"); - knownMetadata.add("java.security.spec.EncodedKeySpec"); - knownMetadata.add("java.security.spec.InvalidKeySpecException"); - knownMetadata.add("java.security.spec.InvalidParameterSpecException"); - knownMetadata.add("java.security.spec.KeySpec"); - knownMetadata.add("java.security.spec.MGF1ParameterSpec"); - knownMetadata.add("java.security.spec.PKCS8EncodedKeySpec"); - knownMetadata.add("java.security.spec.PSSParameterSpec"); - knownMetadata.add("java.security.spec.RSAKeyGenParameterSpec"); - knownMetadata.add("java.security.spec.RSAMultiPrimePrivateCrtKeySpec"); - knownMetadata.add("java.security.spec.RSAOtherPrimeInfo"); - knownMetadata.add("java.security.spec.RSAPrivateCrtKeySpec"); - knownMetadata.add("java.security.spec.RSAPrivateKeySpec"); - knownMetadata.add("java.security.spec.RSAPublicKeySpec"); - knownMetadata.add("java.security.spec.X509EncodedKeySpec"); - knownMetadata.add("java.sql.Array"); - knownMetadata.add("java.sql.BatchUpdateException"); - knownMetadata.add("java.sql.Blob"); - knownMetadata.add("java.sql.CallableStatement"); - knownMetadata.add("java.sql.ClientInfoStatus"); - knownMetadata.add("java.sql.Clob"); - knownMetadata.add("java.sql.Connection"); - knownMetadata.add("java.sql.DataTruncation"); - knownMetadata.add("java.sql.DatabaseMetaData"); - knownMetadata.add("java.sql.Date"); - knownMetadata.add("java.sql.Driver"); - knownMetadata.add("java.sql.DriverManager"); - knownMetadata.add("java.sql.DriverPropertyInfo"); - knownMetadata.add("java.sql.NClob"); - knownMetadata.add("java.sql.ParameterMetaData"); - knownMetadata.add("java.sql.PreparedStatement"); - knownMetadata.add("java.sql.Ref"); - knownMetadata.add("java.sql.ResultSet"); - knownMetadata.add("java.sql.ResultSetMetaData"); - knownMetadata.add("java.sql.RowId"); - knownMetadata.add("java.sql.RowIdLifetime"); - knownMetadata.add("java.sql.SQLClientInfoException"); - knownMetadata.add("java.sql.SQLData"); - knownMetadata.add("java.sql.SQLDataException"); - knownMetadata.add("java.sql.SQLException"); - knownMetadata.add("java.sql.SQLFeatureNotSupportedException"); - knownMetadata.add("java.sql.SQLInput"); - knownMetadata.add("java.sql.SQLIntegrityConstraintViolationException"); - knownMetadata.add("java.sql.SQLInvalidAuthorizationSpecException"); - knownMetadata.add("java.sql.SQLNonTransientConnectionException"); - knownMetadata.add("java.sql.SQLNonTransientException"); - knownMetadata.add("java.sql.SQLOutput"); - knownMetadata.add("java.sql.SQLPermission"); - knownMetadata.add("java.sql.SQLRecoverableException"); - knownMetadata.add("java.sql.SQLSyntaxErrorException"); - knownMetadata.add("java.sql.SQLTimeoutException"); - knownMetadata.add("java.sql.SQLTransactionRollbackException"); - knownMetadata.add("java.sql.SQLTransientConnectionException"); - knownMetadata.add("java.sql.SQLTransientException"); - knownMetadata.add("java.sql.SQLWarning"); - knownMetadata.add("java.sql.SQLXML"); - knownMetadata.add("java.sql.Savepoint"); - knownMetadata.add("java.sql.Statement"); - knownMetadata.add("java.sql.Struct"); - knownMetadata.add("java.sql.Time"); - knownMetadata.add("java.sql.Timestamp"); - knownMetadata.add("java.sql.Types"); - knownMetadata.add("java.sql.Wrapper"); - knownMetadata.add("java.text.Annotation"); - knownMetadata.add("java.text.AttributedCharacterIterator"); - knownMetadata.add("java.text.AttributedCharacterIterator$Attribute"); - knownMetadata.add("java.text.AttributedString"); - knownMetadata.add("java.text.Bidi"); - knownMetadata.add("java.text.BreakIterator"); - knownMetadata.add("java.text.CharacterIterator"); - knownMetadata.add("java.text.ChoiceFormat"); - knownMetadata.add("java.text.CollationElementIterator"); - knownMetadata.add("java.text.CollationKey"); - knownMetadata.add("java.text.Collator"); - knownMetadata.add("java.text.DateFormat"); - knownMetadata.add("java.text.DateFormat$Field"); - knownMetadata.add("java.text.DateFormatSymbols"); - knownMetadata.add("java.text.DecimalFormat"); - knownMetadata.add("java.text.DecimalFormatSymbols"); - knownMetadata.add("java.text.FieldPosition"); - knownMetadata.add("java.text.Format"); - knownMetadata.add("java.text.Format$Field"); - knownMetadata.add("java.text.MessageFormat"); - knownMetadata.add("java.text.MessageFormat$Field"); - knownMetadata.add("java.text.Normalizer"); - knownMetadata.add("java.text.Normalizer$Form"); - knownMetadata.add("java.text.NumberFormat"); - knownMetadata.add("java.text.NumberFormat$Field"); - knownMetadata.add("java.text.ParseException"); - knownMetadata.add("java.text.ParsePosition"); - knownMetadata.add("java.text.RuleBasedCollator"); - knownMetadata.add("java.text.SimpleDateFormat"); - knownMetadata.add("java.text.StringCharacterIterator"); - knownMetadata.add("java.util.AbstractCollection"); - knownMetadata.add("java.util.AbstractList"); - knownMetadata.add("java.util.AbstractMap"); - knownMetadata.add("java.util.AbstractMap$SimpleEntry"); - knownMetadata.add("java.util.AbstractMap$SimpleImmutableEntry"); - knownMetadata.add("java.util.AbstractQueue"); - knownMetadata.add("java.util.AbstractSequentialList"); - knownMetadata.add("java.util.AbstractSet"); - knownMetadata.add("java.util.ArrayDeque"); - knownMetadata.add("java.util.ArrayList"); - knownMetadata.add("java.util.Arrays"); - knownMetadata.add("java.util.BitSet"); - knownMetadata.add("java.util.Calendar"); - knownMetadata.add("java.util.Collection"); - knownMetadata.add("java.util.Collections"); - knownMetadata.add("java.util.Comparator"); - knownMetadata.add("java.util.ConcurrentModificationException"); - knownMetadata.add("java.util.Currency"); - knownMetadata.add("java.util.Date"); - knownMetadata.add("java.util.Deque"); - knownMetadata.add("java.util.Dictionary"); - knownMetadata.add("java.util.DuplicateFormatFlagsException"); - knownMetadata.add("java.util.EmptyStackException"); - knownMetadata.add("java.util.EnumMap"); - knownMetadata.add("java.util.EnumSet"); - knownMetadata.add("java.util.Enumeration"); - knownMetadata.add("java.util.EventListener"); - knownMetadata.add("java.util.EventListenerProxy"); - knownMetadata.add("java.util.EventObject"); - knownMetadata.add("java.util.FormatFlagsConversionMismatchException"); - knownMetadata.add("java.util.Formattable"); - knownMetadata.add("java.util.FormattableFlags"); - knownMetadata.add("java.util.Formatter"); - knownMetadata.add("java.util.Formatter$BigDecimalLayoutForm"); - knownMetadata.add("java.util.FormatterClosedException"); - knownMetadata.add("java.util.GregorianCalendar"); - knownMetadata.add("java.util.HashMap"); - knownMetadata.add("java.util.HashSet"); - knownMetadata.add("java.util.Hashtable"); - knownMetadata.add("java.util.IdentityHashMap"); - knownMetadata.add("java.util.IllegalFormatCodePointException"); - knownMetadata.add("java.util.IllegalFormatConversionException"); - knownMetadata.add("java.util.IllegalFormatException"); - knownMetadata.add("java.util.IllegalFormatFlagsException"); - knownMetadata.add("java.util.IllegalFormatPrecisionException"); - knownMetadata.add("java.util.IllegalFormatWidthException"); - knownMetadata.add("java.util.InputMismatchException"); - knownMetadata.add("java.util.InvalidPropertiesFormatException"); - knownMetadata.add("java.util.Iterator"); - knownMetadata.add("java.util.LinkedHashMap"); - knownMetadata.add("java.util.LinkedHashSet"); - knownMetadata.add("java.util.LinkedList"); - knownMetadata.add("java.util.List"); - knownMetadata.add("java.util.ListIterator"); - knownMetadata.add("java.util.ListResourceBundle"); - knownMetadata.add("java.util.Locale"); - knownMetadata.add("java.util.Map"); - knownMetadata.add("java.util.Map$Entry"); - knownMetadata.add("java.util.MissingFormatArgumentException"); - knownMetadata.add("java.util.MissingFormatWidthException"); - knownMetadata.add("java.util.MissingResourceException"); - knownMetadata.add("java.util.NavigableMap"); - knownMetadata.add("java.util.NavigableSet"); - knownMetadata.add("java.util.NoSuchElementException"); - knownMetadata.add("java.util.Observable"); - knownMetadata.add("java.util.Observer"); - knownMetadata.add("java.util.PriorityQueue"); - knownMetadata.add("java.util.Properties"); - knownMetadata.add("java.util.PropertyPermission"); - knownMetadata.add("java.util.PropertyResourceBundle"); - knownMetadata.add("java.util.Queue"); - knownMetadata.add("java.util.Random"); - knownMetadata.add("java.util.RandomAccess"); - knownMetadata.add("java.util.ResourceBundle"); - knownMetadata.add("java.util.ResourceBundle$Control"); - knownMetadata.add("java.util.Scanner"); - knownMetadata.add("java.util.ServiceConfigurationError"); - knownMetadata.add("java.util.ServiceLoader"); - knownMetadata.add("java.util.Set"); - knownMetadata.add("java.util.SimpleTimeZone"); - knownMetadata.add("java.util.SortedMap"); - knownMetadata.add("java.util.SortedSet"); - knownMetadata.add("java.util.Stack"); - knownMetadata.add("java.util.StringTokenizer"); - knownMetadata.add("java.util.TimeZone"); - knownMetadata.add("java.util.Timer"); - knownMetadata.add("java.util.TimerTask"); - knownMetadata.add("java.util.TooManyListenersException"); - knownMetadata.add("java.util.TreeMap"); - knownMetadata.add("java.util.TreeSet"); - knownMetadata.add("java.util.UUID"); - knownMetadata.add("java.util.UnknownFormatConversionException"); - knownMetadata.add("java.util.UnknownFormatFlagsException"); - knownMetadata.add("java.util.Vector"); - knownMetadata.add("java.util.WeakHashMap"); - knownMetadata.add("java.util.concurrent.AbstractExecutorService"); - knownMetadata.add("java.util.concurrent.ArrayBlockingQueue"); - knownMetadata.add("java.util.concurrent.BlockingDeque"); - knownMetadata.add("java.util.concurrent.BlockingQueue"); - knownMetadata.add("java.util.concurrent.BrokenBarrierException"); - knownMetadata.add("java.util.concurrent.Callable"); - knownMetadata.add("java.util.concurrent.CancellationException"); - knownMetadata.add("java.util.concurrent.CompletionService"); - knownMetadata.add("java.util.concurrent.ConcurrentHashMap"); - knownMetadata.add("java.util.concurrent.ConcurrentLinkedQueue"); - knownMetadata.add("java.util.concurrent.ConcurrentMap"); - knownMetadata.add("java.util.concurrent.ConcurrentNavigableMap"); - knownMetadata.add("java.util.concurrent.ConcurrentSkipListMap"); - knownMetadata.add("java.util.concurrent.ConcurrentSkipListSet"); - knownMetadata.add("java.util.concurrent.CopyOnWriteArrayList"); - knownMetadata.add("java.util.concurrent.CopyOnWriteArraySet"); - knownMetadata.add("java.util.concurrent.CountDownLatch"); - knownMetadata.add("java.util.concurrent.CyclicBarrier"); - knownMetadata.add("java.util.concurrent.DelayQueue"); - knownMetadata.add("java.util.concurrent.Delayed"); - knownMetadata.add("java.util.concurrent.Exchanger"); - knownMetadata.add("java.util.concurrent.ExecutionException"); - knownMetadata.add("java.util.concurrent.Executor"); - knownMetadata.add("java.util.concurrent.ExecutorCompletionService"); - knownMetadata.add("java.util.concurrent.ExecutorService"); - knownMetadata.add("java.util.concurrent.Executors"); - knownMetadata.add("java.util.concurrent.Future"); - knownMetadata.add("java.util.concurrent.FutureTask"); - knownMetadata.add("java.util.concurrent.LinkedBlockingDeque"); - knownMetadata.add("java.util.concurrent.LinkedBlockingQueue"); - knownMetadata.add("java.util.concurrent.PriorityBlockingQueue"); - knownMetadata.add("java.util.concurrent.RejectedExecutionException"); - knownMetadata.add("java.util.concurrent.RejectedExecutionHandler"); - knownMetadata.add("java.util.concurrent.RunnableFuture"); - knownMetadata.add("java.util.concurrent.RunnableScheduledFuture"); - knownMetadata.add("java.util.concurrent.ScheduledExecutorService"); - knownMetadata.add("java.util.concurrent.ScheduledFuture"); - knownMetadata.add("java.util.concurrent.ScheduledThreadPoolExecutor"); - knownMetadata.add("java.util.concurrent.Semaphore"); - knownMetadata.add("java.util.concurrent.SynchronousQueue"); - knownMetadata.add("java.util.concurrent.ThreadFactory"); - knownMetadata.add("java.util.concurrent.ThreadPoolExecutor"); - knownMetadata.add("java.util.concurrent.ThreadPoolExecutor$AbortPolicy"); - knownMetadata.add("java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy"); - knownMetadata.add("java.util.concurrent.ThreadPoolExecutor$DiscardOldestPolicy"); - knownMetadata.add("java.util.concurrent.ThreadPoolExecutor$DiscardPolicy"); - knownMetadata.add("java.util.concurrent.TimeUnit"); - knownMetadata.add("java.util.concurrent.TimeoutException"); - knownMetadata.add("java.util.concurrent.atomic.AtomicBoolean"); - knownMetadata.add("java.util.concurrent.atomic.AtomicInteger"); - knownMetadata.add("java.util.concurrent.atomic.AtomicIntegerArray"); - knownMetadata.add("java.util.concurrent.atomic.AtomicIntegerFieldUpdater"); - knownMetadata.add("java.util.concurrent.atomic.AtomicLong"); - knownMetadata.add("java.util.concurrent.atomic.AtomicLongArray"); - knownMetadata.add("java.util.concurrent.atomic.AtomicLongFieldUpdater"); - knownMetadata.add("java.util.concurrent.atomic.AtomicMarkableReference"); - knownMetadata.add("java.util.concurrent.atomic.AtomicReference"); - knownMetadata.add("java.util.concurrent.atomic.AtomicReferenceArray"); - knownMetadata.add("java.util.concurrent.atomic.AtomicReferenceFieldUpdater"); - knownMetadata.add("java.util.concurrent.atomic.AtomicStampedReference"); - knownMetadata.add("java.util.concurrent.locks.AbstractOwnableSynchronizer"); - knownMetadata.add("java.util.concurrent.locks.AbstractQueuedLongSynchronizer"); - knownMetadata.add("java.util.concurrent.locks.AbstractQueuedLongSynchronizer$ConditionObject"); - knownMetadata.add("java.util.concurrent.locks.AbstractQueuedSynchronizer"); - knownMetadata.add("java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject"); - knownMetadata.add("java.util.concurrent.locks.Condition"); - knownMetadata.add("java.util.concurrent.locks.Lock"); - knownMetadata.add("java.util.concurrent.locks.LockSupport"); - knownMetadata.add("java.util.concurrent.locks.ReadWriteLock"); - knownMetadata.add("java.util.concurrent.locks.ReentrantLock"); - knownMetadata.add("java.util.concurrent.locks.ReentrantReadWriteLock"); - knownMetadata.add("java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock"); - knownMetadata.add("java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock"); - knownMetadata.add("java.util.jar.Attributes"); - knownMetadata.add("java.util.jar.Attributes$Name"); - knownMetadata.add("java.util.jar.JarEntry"); - knownMetadata.add("java.util.jar.JarException"); - knownMetadata.add("java.util.jar.JarFile"); - knownMetadata.add("java.util.jar.JarInputStream"); - knownMetadata.add("java.util.jar.JarOutputStream"); - knownMetadata.add("java.util.jar.Manifest"); - knownMetadata.add("java.util.jar.Pack200"); - knownMetadata.add("java.util.jar.Pack200$Packer"); - knownMetadata.add("java.util.jar.Pack200$Unpacker"); - knownMetadata.add("java.util.logging.ConsoleHandler"); - knownMetadata.add("java.util.logging.ErrorManager"); - knownMetadata.add("java.util.logging.FileHandler"); - knownMetadata.add("java.util.logging.Filter"); - knownMetadata.add("java.util.logging.Formatter"); - knownMetadata.add("java.util.logging.Handler"); - knownMetadata.add("java.util.logging.Level"); - knownMetadata.add("java.util.logging.LogManager"); - knownMetadata.add("java.util.logging.LogRecord"); - knownMetadata.add("java.util.logging.Logger"); - knownMetadata.add("java.util.logging.LoggingMXBean"); - knownMetadata.add("java.util.logging.LoggingPermission"); - knownMetadata.add("java.util.logging.MemoryHandler"); - knownMetadata.add("java.util.logging.SimpleFormatter"); - knownMetadata.add("java.util.logging.SocketHandler"); - knownMetadata.add("java.util.logging.StreamHandler"); - knownMetadata.add("java.util.logging.XMLFormatter"); - knownMetadata.add("java.util.prefs.AbstractPreferences"); - knownMetadata.add("java.util.prefs.BackingStoreException"); - knownMetadata.add("java.util.prefs.InvalidPreferencesFormatException"); - knownMetadata.add("java.util.prefs.NodeChangeEvent"); - knownMetadata.add("java.util.prefs.NodeChangeListener"); - knownMetadata.add("java.util.prefs.PreferenceChangeEvent"); - knownMetadata.add("java.util.prefs.PreferenceChangeListener"); - knownMetadata.add("java.util.prefs.Preferences"); - knownMetadata.add("java.util.prefs.PreferencesFactory"); - knownMetadata.add("java.util.regex.MatchResult"); - knownMetadata.add("java.util.regex.Matcher"); - knownMetadata.add("java.util.regex.Pattern"); - knownMetadata.add("java.util.regex.PatternSyntaxException"); - knownMetadata.add("java.util.zip.Adler32"); - knownMetadata.add("java.util.zip.CRC32"); - knownMetadata.add("java.util.zip.CheckedInputStream"); - knownMetadata.add("java.util.zip.CheckedOutputStream"); - knownMetadata.add("java.util.zip.Checksum"); - knownMetadata.add("java.util.zip.DataFormatException"); - knownMetadata.add("java.util.zip.Deflater"); - knownMetadata.add("java.util.zip.DeflaterInputStream"); - knownMetadata.add("java.util.zip.DeflaterOutputStream"); - knownMetadata.add("java.util.zip.GZIPInputStream"); - knownMetadata.add("java.util.zip.GZIPOutputStream"); - knownMetadata.add("java.util.zip.Inflater"); - knownMetadata.add("java.util.zip.InflaterInputStream"); - knownMetadata.add("java.util.zip.InflaterOutputStream"); - knownMetadata.add("java.util.zip.ZipEntry"); - knownMetadata.add("java.util.zip.ZipError"); - knownMetadata.add("java.util.zip.ZipException"); - knownMetadata.add("java.util.zip.ZipFile"); - knownMetadata.add("java.util.zip.ZipInputStream"); - knownMetadata.add("java.util.zip.ZipOutputStream"); - knownMetadata.add("javax.crypto.BadPaddingException"); - knownMetadata.add("javax.crypto.Cipher"); - knownMetadata.add("javax.crypto.CipherInputStream"); - knownMetadata.add("javax.crypto.CipherOutputStream"); - knownMetadata.add("javax.crypto.CipherSpi"); - knownMetadata.add("javax.crypto.EncryptedPrivateKeyInfo"); - knownMetadata.add("javax.crypto.ExemptionMechanism"); - knownMetadata.add("javax.crypto.ExemptionMechanismException"); - knownMetadata.add("javax.crypto.ExemptionMechanismSpi"); - knownMetadata.add("javax.crypto.IllegalBlockSizeException"); - knownMetadata.add("javax.crypto.KeyAgreement"); - knownMetadata.add("javax.crypto.KeyAgreementSpi"); - knownMetadata.add("javax.crypto.KeyGenerator"); - knownMetadata.add("javax.crypto.KeyGeneratorSpi"); - knownMetadata.add("javax.crypto.Mac"); - knownMetadata.add("javax.crypto.MacSpi"); - knownMetadata.add("javax.crypto.NoSuchPaddingException"); - knownMetadata.add("javax.crypto.NullCipher"); - knownMetadata.add("javax.crypto.SealedObject"); - knownMetadata.add("javax.crypto.SecretKey"); - knownMetadata.add("javax.crypto.SecretKeyFactory"); - knownMetadata.add("javax.crypto.SecretKeyFactorySpi"); - knownMetadata.add("javax.crypto.ShortBufferException"); - knownMetadata.add("javax.crypto.interfaces.DHKey"); - knownMetadata.add("javax.crypto.interfaces.DHPrivateKey"); - knownMetadata.add("javax.crypto.interfaces.DHPublicKey"); - knownMetadata.add("javax.crypto.interfaces.PBEKey"); - knownMetadata.add("javax.crypto.spec.DESKeySpec"); - knownMetadata.add("javax.crypto.spec.DESedeKeySpec"); - knownMetadata.add("javax.crypto.spec.DHGenParameterSpec"); - knownMetadata.add("javax.crypto.spec.DHParameterSpec"); - knownMetadata.add("javax.crypto.spec.DHPrivateKeySpec"); - knownMetadata.add("javax.crypto.spec.DHPublicKeySpec"); - knownMetadata.add("javax.crypto.spec.IvParameterSpec"); - knownMetadata.add("javax.crypto.spec.OAEPParameterSpec"); - knownMetadata.add("javax.crypto.spec.PBEKeySpec"); - knownMetadata.add("javax.crypto.spec.PBEParameterSpec"); - knownMetadata.add("javax.crypto.spec.PSource"); - knownMetadata.add("javax.crypto.spec.PSource$PSpecified"); - knownMetadata.add("javax.crypto.spec.RC2ParameterSpec"); - knownMetadata.add("javax.crypto.spec.RC5ParameterSpec"); - knownMetadata.add("javax.crypto.spec.SecretKeySpec"); - knownMetadata.add("javax.microedition.khronos.egl.EGL"); - knownMetadata.add("javax.microedition.khronos.egl.EGL10"); - knownMetadata.add("javax.microedition.khronos.egl.EGL11"); - knownMetadata.add("javax.microedition.khronos.egl.EGLConfig"); - knownMetadata.add("javax.microedition.khronos.egl.EGLContext"); - knownMetadata.add("javax.microedition.khronos.egl.EGLDisplay"); - knownMetadata.add("javax.microedition.khronos.egl.EGLSurface"); - knownMetadata.add("javax.microedition.khronos.opengles.GL"); - knownMetadata.add("javax.microedition.khronos.opengles.GL10"); - knownMetadata.add("javax.microedition.khronos.opengles.GL10Ext"); - knownMetadata.add("javax.microedition.khronos.opengles.GL11"); - knownMetadata.add("javax.microedition.khronos.opengles.GL11Ext"); - knownMetadata.add("javax.microedition.khronos.opengles.GL11ExtensionPack"); - knownMetadata.add("javax.net.ServerSocketFactory"); - knownMetadata.add("javax.net.SocketFactory"); - knownMetadata.add("javax.net.ssl.CertPathTrustManagerParameters"); - knownMetadata.add("javax.net.ssl.HandshakeCompletedEvent"); - knownMetadata.add("javax.net.ssl.HandshakeCompletedListener"); - knownMetadata.add("javax.net.ssl.HostnameVerifier"); - knownMetadata.add("javax.net.ssl.HttpsURLConnection"); - knownMetadata.add("javax.net.ssl.KeyManager"); - knownMetadata.add("javax.net.ssl.KeyManagerFactory"); - knownMetadata.add("javax.net.ssl.KeyManagerFactorySpi"); - knownMetadata.add("javax.net.ssl.KeyStoreBuilderParameters"); - knownMetadata.add("javax.net.ssl.ManagerFactoryParameters"); - knownMetadata.add("javax.net.ssl.SSLContext"); - knownMetadata.add("javax.net.ssl.SSLContextSpi"); - knownMetadata.add("javax.net.ssl.SSLEngine"); - knownMetadata.add("javax.net.ssl.SSLEngineResult"); - knownMetadata.add("javax.net.ssl.SSLEngineResult$HandshakeStatus"); - knownMetadata.add("javax.net.ssl.SSLEngineResult$Status"); - knownMetadata.add("javax.net.ssl.SSLException"); - knownMetadata.add("javax.net.ssl.SSLHandshakeException"); - knownMetadata.add("javax.net.ssl.SSLKeyException"); - knownMetadata.add("javax.net.ssl.SSLParameters"); - knownMetadata.add("javax.net.ssl.SSLPeerUnverifiedException"); - knownMetadata.add("javax.net.ssl.SSLPermission"); - knownMetadata.add("javax.net.ssl.SSLProtocolException"); - knownMetadata.add("javax.net.ssl.SSLServerSocket"); - knownMetadata.add("javax.net.ssl.SSLServerSocketFactory"); - knownMetadata.add("javax.net.ssl.SSLSession"); - knownMetadata.add("javax.net.ssl.SSLSessionBindingEvent"); - knownMetadata.add("javax.net.ssl.SSLSessionBindingListener"); - knownMetadata.add("javax.net.ssl.SSLSessionContext"); - knownMetadata.add("javax.net.ssl.SSLSocket"); - knownMetadata.add("javax.net.ssl.SSLSocketFactory"); - knownMetadata.add("javax.net.ssl.TrustManager"); - knownMetadata.add("javax.net.ssl.TrustManagerFactory"); - knownMetadata.add("javax.net.ssl.TrustManagerFactorySpi"); - knownMetadata.add("javax.net.ssl.X509ExtendedKeyManager"); - knownMetadata.add("javax.net.ssl.X509KeyManager"); - knownMetadata.add("javax.net.ssl.X509TrustManager"); - knownMetadata.add("javax.security.auth.AuthPermission"); - knownMetadata.add("javax.security.auth.DestroyFailedException"); - knownMetadata.add("javax.security.auth.Destroyable"); - knownMetadata.add("javax.security.auth.PrivateCredentialPermission"); - knownMetadata.add("javax.security.auth.Subject"); - knownMetadata.add("javax.security.auth.SubjectDomainCombiner"); - knownMetadata.add("javax.security.auth.callback.Callback"); - knownMetadata.add("javax.security.auth.callback.CallbackHandler"); - knownMetadata.add("javax.security.auth.callback.PasswordCallback"); - knownMetadata.add("javax.security.auth.callback.UnsupportedCallbackException"); - knownMetadata.add("javax.security.auth.login.LoginException"); - knownMetadata.add("javax.security.auth.x500.X500Principal"); - knownMetadata.add("javax.security.cert.Certificate"); - knownMetadata.add("javax.security.cert.CertificateEncodingException"); - knownMetadata.add("javax.security.cert.CertificateException"); - knownMetadata.add("javax.security.cert.CertificateExpiredException"); - knownMetadata.add("javax.security.cert.CertificateNotYetValidException"); - knownMetadata.add("javax.security.cert.CertificateParsingException"); - knownMetadata.add("javax.security.cert.X509Certificate"); - knownMetadata.add("javax.sql.CommonDataSource"); - knownMetadata.add("javax.sql.ConnectionEvent"); - knownMetadata.add("javax.sql.ConnectionEventListener"); - knownMetadata.add("javax.sql.ConnectionPoolDataSource"); - knownMetadata.add("javax.sql.DataSource"); - knownMetadata.add("javax.sql.PooledConnection"); - knownMetadata.add("javax.sql.RowSet"); - knownMetadata.add("javax.sql.RowSetEvent"); - knownMetadata.add("javax.sql.RowSetInternal"); - knownMetadata.add("javax.sql.RowSetListener"); - knownMetadata.add("javax.sql.RowSetMetaData"); - knownMetadata.add("javax.sql.RowSetReader"); - knownMetadata.add("javax.sql.RowSetWriter"); - knownMetadata.add("javax.sql.StatementEvent"); - knownMetadata.add("javax.sql.StatementEventListener"); - knownMetadata.add("javax.xml.XMLConstants"); - knownMetadata.add("javax.xml.datatype.DatatypeConfigurationException"); - knownMetadata.add("javax.xml.datatype.DatatypeConstants"); - knownMetadata.add("javax.xml.datatype.DatatypeConstants$Field"); - knownMetadata.add("javax.xml.datatype.DatatypeFactory"); - knownMetadata.add("javax.xml.datatype.Duration"); - knownMetadata.add("javax.xml.datatype.XMLGregorianCalendar"); - knownMetadata.add("javax.xml.namespace.NamespaceContext"); - knownMetadata.add("javax.xml.namespace.QName"); - knownMetadata.add("javax.xml.parsers.DocumentBuilder"); - knownMetadata.add("javax.xml.parsers.DocumentBuilderFactory"); - knownMetadata.add("javax.xml.parsers.FactoryConfigurationError"); - knownMetadata.add("javax.xml.parsers.ParserConfigurationException"); - knownMetadata.add("javax.xml.parsers.SAXParser"); - knownMetadata.add("javax.xml.parsers.SAXParserFactory"); - knownMetadata.add("javax.xml.transform.ErrorListener"); - knownMetadata.add("javax.xml.transform.OutputKeys"); - knownMetadata.add("javax.xml.transform.Result"); - knownMetadata.add("javax.xml.transform.Source"); - knownMetadata.add("javax.xml.transform.SourceLocator"); - knownMetadata.add("javax.xml.transform.Templates"); - knownMetadata.add("javax.xml.transform.Transformer"); - knownMetadata.add("javax.xml.transform.TransformerConfigurationException"); - knownMetadata.add("javax.xml.transform.TransformerException"); - knownMetadata.add("javax.xml.transform.TransformerFactory"); - knownMetadata.add("javax.xml.transform.TransformerFactoryConfigurationError"); - knownMetadata.add("javax.xml.transform.URIResolver"); - knownMetadata.add("javax.xml.transform.dom.DOMLocator"); - knownMetadata.add("javax.xml.transform.dom.DOMResult"); - knownMetadata.add("javax.xml.transform.dom.DOMSource"); - knownMetadata.add("javax.xml.transform.sax.SAXResult"); - knownMetadata.add("javax.xml.transform.sax.SAXSource"); - knownMetadata.add("javax.xml.transform.sax.SAXTransformerFactory"); - knownMetadata.add("javax.xml.transform.sax.TemplatesHandler"); - knownMetadata.add("javax.xml.transform.sax.TransformerHandler"); - knownMetadata.add("javax.xml.transform.stream.StreamResult"); - knownMetadata.add("javax.xml.transform.stream.StreamSource"); - knownMetadata.add("javax.xml.validation.Schema"); - knownMetadata.add("javax.xml.validation.SchemaFactory"); - knownMetadata.add("javax.xml.validation.SchemaFactoryLoader"); - knownMetadata.add("javax.xml.validation.TypeInfoProvider"); - knownMetadata.add("javax.xml.validation.Validator"); - knownMetadata.add("javax.xml.validation.ValidatorHandler"); - knownMetadata.add("javax.xml.xpath.XPath"); - knownMetadata.add("javax.xml.xpath.XPathConstants"); - knownMetadata.add("javax.xml.xpath.XPathException"); - knownMetadata.add("javax.xml.xpath.XPathExpression"); - knownMetadata.add("javax.xml.xpath.XPathExpressionException"); - knownMetadata.add("javax.xml.xpath.XPathFactory"); - knownMetadata.add("javax.xml.xpath.XPathFactoryConfigurationException"); - knownMetadata.add("javax.xml.xpath.XPathFunction"); - knownMetadata.add("javax.xml.xpath.XPathFunctionException"); - knownMetadata.add("javax.xml.xpath.XPathFunctionResolver"); - knownMetadata.add("javax.xml.xpath.XPathVariableResolver"); - knownMetadata.add("junit.framework.Assert"); - knownMetadata.add("junit.framework.AssertionFailedError"); - knownMetadata.add("junit.framework.ComparisonFailure"); - knownMetadata.add("junit.framework.Protectable"); - knownMetadata.add("junit.framework.Test"); - knownMetadata.add("junit.framework.TestCase"); - knownMetadata.add("junit.framework.TestFailure"); - knownMetadata.add("junit.framework.TestListener"); - knownMetadata.add("junit.framework.TestResult"); - knownMetadata.add("junit.framework.TestSuite"); - knownMetadata.add("junit.runner.BaseTestRunner"); - knownMetadata.add("junit.runner.TestSuiteLoader"); - knownMetadata.add("junit.runner.Version"); - knownMetadata.add("org.apache.commons.logging.Log"); - knownMetadata.add("org.apache.http.ConnectionClosedException"); - knownMetadata.add("org.apache.http.ConnectionReuseStrategy"); - knownMetadata.add("org.apache.http.FormattedHeader"); - knownMetadata.add("org.apache.http.Header"); - knownMetadata.add("org.apache.http.HeaderElement"); - knownMetadata.add("org.apache.http.HeaderElementIterator"); - knownMetadata.add("org.apache.http.HeaderIterator"); - knownMetadata.add("org.apache.http.HttpClientConnection"); - knownMetadata.add("org.apache.http.HttpConnection"); - knownMetadata.add("org.apache.http.HttpConnectionMetrics"); - knownMetadata.add("org.apache.http.HttpEntity"); - knownMetadata.add("org.apache.http.HttpEntityEnclosingRequest"); - knownMetadata.add("org.apache.http.HttpException"); - knownMetadata.add("org.apache.http.HttpHost"); - knownMetadata.add("org.apache.http.HttpInetConnection"); - knownMetadata.add("org.apache.http.HttpMessage"); - knownMetadata.add("org.apache.http.HttpRequest"); - knownMetadata.add("org.apache.http.HttpRequestFactory"); - knownMetadata.add("org.apache.http.HttpRequestInterceptor"); - knownMetadata.add("org.apache.http.HttpResponse"); - knownMetadata.add("org.apache.http.HttpResponseFactory"); - knownMetadata.add("org.apache.http.HttpResponseInterceptor"); - knownMetadata.add("org.apache.http.HttpServerConnection"); - knownMetadata.add("org.apache.http.HttpStatus"); - knownMetadata.add("org.apache.http.HttpVersion"); - knownMetadata.add("org.apache.http.MalformedChunkCodingException"); - knownMetadata.add("org.apache.http.MethodNotSupportedException"); - knownMetadata.add("org.apache.http.NameValuePair"); - knownMetadata.add("org.apache.http.NoHttpResponseException"); - knownMetadata.add("org.apache.http.ParseException"); - knownMetadata.add("org.apache.http.ProtocolException"); - knownMetadata.add("org.apache.http.ProtocolVersion"); - knownMetadata.add("org.apache.http.ReasonPhraseCatalog"); - knownMetadata.add("org.apache.http.RequestLine"); - knownMetadata.add("org.apache.http.StatusLine"); - knownMetadata.add("org.apache.http.TokenIterator"); - knownMetadata.add("org.apache.http.UnsupportedHttpVersionException"); - knownMetadata.add("org.apache.http.auth.AUTH"); - knownMetadata.add("org.apache.http.auth.AuthScheme"); - knownMetadata.add("org.apache.http.auth.AuthSchemeFactory"); - knownMetadata.add("org.apache.http.auth.AuthSchemeRegistry"); - knownMetadata.add("org.apache.http.auth.AuthScope"); - knownMetadata.add("org.apache.http.auth.AuthState"); - knownMetadata.add("org.apache.http.auth.AuthenticationException"); - knownMetadata.add("org.apache.http.auth.BasicUserPrincipal"); - knownMetadata.add("org.apache.http.auth.Credentials"); - knownMetadata.add("org.apache.http.auth.InvalidCredentialsException"); - knownMetadata.add("org.apache.http.auth.MalformedChallengeException"); - knownMetadata.add("org.apache.http.auth.NTCredentials"); - knownMetadata.add("org.apache.http.auth.NTUserPrincipal"); - knownMetadata.add("org.apache.http.auth.UsernamePasswordCredentials"); - knownMetadata.add("org.apache.http.auth.params.AuthPNames"); - knownMetadata.add("org.apache.http.auth.params.AuthParamBean"); - knownMetadata.add("org.apache.http.auth.params.AuthParams"); - knownMetadata.add("org.apache.http.client.AuthenticationHandler"); - knownMetadata.add("org.apache.http.client.CircularRedirectException"); - knownMetadata.add("org.apache.http.client.ClientProtocolException"); - knownMetadata.add("org.apache.http.client.CookieStore"); - knownMetadata.add("org.apache.http.client.CredentialsProvider"); - knownMetadata.add("org.apache.http.client.HttpClient"); - knownMetadata.add("org.apache.http.client.HttpRequestRetryHandler"); - knownMetadata.add("org.apache.http.client.HttpResponseException"); - knownMetadata.add("org.apache.http.client.NonRepeatableRequestException"); - knownMetadata.add("org.apache.http.client.RedirectException"); - knownMetadata.add("org.apache.http.client.RedirectHandler"); - knownMetadata.add("org.apache.http.client.RequestDirector"); - knownMetadata.add("org.apache.http.client.ResponseHandler"); - knownMetadata.add("org.apache.http.client.UserTokenHandler"); - knownMetadata.add("org.apache.http.client.entity.UrlEncodedFormEntity"); - knownMetadata.add("org.apache.http.client.methods.AbortableHttpRequest"); - knownMetadata.add("org.apache.http.client.methods.HttpDelete"); - knownMetadata.add("org.apache.http.client.methods.HttpEntityEnclosingRequestBase"); - knownMetadata.add("org.apache.http.client.methods.HttpGet"); - knownMetadata.add("org.apache.http.client.methods.HttpHead"); - knownMetadata.add("org.apache.http.client.methods.HttpOptions"); - knownMetadata.add("org.apache.http.client.methods.HttpPost"); - knownMetadata.add("org.apache.http.client.methods.HttpPut"); - knownMetadata.add("org.apache.http.client.methods.HttpRequestBase"); - knownMetadata.add("org.apache.http.client.methods.HttpTrace"); - knownMetadata.add("org.apache.http.client.methods.HttpUriRequest"); - knownMetadata.add("org.apache.http.client.params.AllClientPNames"); - knownMetadata.add("org.apache.http.client.params.AuthPolicy"); - knownMetadata.add("org.apache.http.client.params.ClientPNames"); - knownMetadata.add("org.apache.http.client.params.ClientParamBean"); - knownMetadata.add("org.apache.http.client.params.CookiePolicy"); - knownMetadata.add("org.apache.http.client.params.HttpClientParams"); - knownMetadata.add("org.apache.http.client.protocol.ClientContext"); - knownMetadata.add("org.apache.http.client.protocol.ClientContextConfigurer"); - knownMetadata.add("org.apache.http.client.protocol.RequestAddCookies"); - knownMetadata.add("org.apache.http.client.protocol.RequestDefaultHeaders"); - knownMetadata.add("org.apache.http.client.protocol.RequestProxyAuthentication"); - knownMetadata.add("org.apache.http.client.protocol.RequestTargetAuthentication"); - knownMetadata.add("org.apache.http.client.protocol.ResponseProcessCookies"); - knownMetadata.add("org.apache.http.client.utils.CloneUtils"); - knownMetadata.add("org.apache.http.client.utils.URIUtils"); - knownMetadata.add("org.apache.http.client.utils.URLEncodedUtils"); - knownMetadata.add("org.apache.http.conn.BasicEofSensorWatcher"); - knownMetadata.add("org.apache.http.conn.BasicManagedEntity"); - knownMetadata.add("org.apache.http.conn.ClientConnectionManager"); - knownMetadata.add("org.apache.http.conn.ClientConnectionManagerFactory"); - knownMetadata.add("org.apache.http.conn.ClientConnectionOperator"); - knownMetadata.add("org.apache.http.conn.ClientConnectionRequest"); - knownMetadata.add("org.apache.http.conn.ConnectTimeoutException"); - knownMetadata.add("org.apache.http.conn.ConnectionKeepAliveStrategy"); - knownMetadata.add("org.apache.http.conn.ConnectionPoolTimeoutException"); - knownMetadata.add("org.apache.http.conn.ConnectionReleaseTrigger"); - knownMetadata.add("org.apache.http.conn.EofSensorInputStream"); - knownMetadata.add("org.apache.http.conn.EofSensorWatcher"); - knownMetadata.add("org.apache.http.conn.HttpHostConnectException"); - knownMetadata.add("org.apache.http.conn.ManagedClientConnection"); - knownMetadata.add("org.apache.http.conn.MultihomePlainSocketFactory"); - knownMetadata.add("org.apache.http.conn.OperatedClientConnection"); - knownMetadata.add("org.apache.http.conn.params.ConnConnectionPNames"); - knownMetadata.add("org.apache.http.conn.params.ConnConnectionParamBean"); - knownMetadata.add("org.apache.http.conn.params.ConnManagerPNames"); - knownMetadata.add("org.apache.http.conn.params.ConnManagerParamBean"); - knownMetadata.add("org.apache.http.conn.params.ConnManagerParams"); - knownMetadata.add("org.apache.http.conn.params.ConnPerRoute"); - knownMetadata.add("org.apache.http.conn.params.ConnPerRouteBean"); - knownMetadata.add("org.apache.http.conn.params.ConnRoutePNames"); - knownMetadata.add("org.apache.http.conn.params.ConnRouteParamBean"); - knownMetadata.add("org.apache.http.conn.params.ConnRouteParams"); - knownMetadata.add("org.apache.http.conn.routing.BasicRouteDirector"); - knownMetadata.add("org.apache.http.conn.routing.HttpRoute"); - knownMetadata.add("org.apache.http.conn.routing.HttpRouteDirector"); - knownMetadata.add("org.apache.http.conn.routing.HttpRoutePlanner"); - knownMetadata.add("org.apache.http.conn.routing.RouteInfo"); - knownMetadata.add("org.apache.http.conn.routing.RouteInfo$LayerType"); - knownMetadata.add("org.apache.http.conn.routing.RouteInfo$TunnelType"); - knownMetadata.add("org.apache.http.conn.routing.RouteTracker"); - knownMetadata.add("org.apache.http.conn.scheme.HostNameResolver"); - knownMetadata.add("org.apache.http.conn.scheme.LayeredSocketFactory"); - knownMetadata.add("org.apache.http.conn.scheme.PlainSocketFactory"); - knownMetadata.add("org.apache.http.conn.scheme.Scheme"); - knownMetadata.add("org.apache.http.conn.scheme.SchemeRegistry"); - knownMetadata.add("org.apache.http.conn.scheme.SocketFactory"); - knownMetadata.add("org.apache.http.conn.ssl.AbstractVerifier"); - knownMetadata.add("org.apache.http.conn.ssl.AllowAllHostnameVerifier"); - knownMetadata.add("org.apache.http.conn.ssl.BrowserCompatHostnameVerifier"); - knownMetadata.add("org.apache.http.conn.ssl.SSLSocketFactory"); - knownMetadata.add("org.apache.http.conn.ssl.StrictHostnameVerifier"); - knownMetadata.add("org.apache.http.conn.ssl.X509HostnameVerifier"); - knownMetadata.add("org.apache.http.conn.util.InetAddressUtils"); - knownMetadata.add("org.apache.http.cookie.ClientCookie"); - knownMetadata.add("org.apache.http.cookie.Cookie"); - knownMetadata.add("org.apache.http.cookie.CookieAttributeHandler"); - knownMetadata.add("org.apache.http.cookie.CookieIdentityComparator"); - knownMetadata.add("org.apache.http.cookie.CookieOrigin"); - knownMetadata.add("org.apache.http.cookie.CookiePathComparator"); - knownMetadata.add("org.apache.http.cookie.CookieSpec"); - knownMetadata.add("org.apache.http.cookie.CookieSpecFactory"); - knownMetadata.add("org.apache.http.cookie.CookieSpecRegistry"); - knownMetadata.add("org.apache.http.cookie.MalformedCookieException"); - knownMetadata.add("org.apache.http.cookie.SM"); - knownMetadata.add("org.apache.http.cookie.SetCookie"); - knownMetadata.add("org.apache.http.cookie.SetCookie2"); - knownMetadata.add("org.apache.http.cookie.params.CookieSpecPNames"); - knownMetadata.add("org.apache.http.cookie.params.CookieSpecParamBean"); - knownMetadata.add("org.apache.http.entity.AbstractHttpEntity"); - knownMetadata.add("org.apache.http.entity.BasicHttpEntity"); - knownMetadata.add("org.apache.http.entity.BufferedHttpEntity"); - knownMetadata.add("org.apache.http.entity.ByteArrayEntity"); - knownMetadata.add("org.apache.http.entity.ContentLengthStrategy"); - knownMetadata.add("org.apache.http.entity.ContentProducer"); - knownMetadata.add("org.apache.http.entity.EntityTemplate"); - knownMetadata.add("org.apache.http.entity.FileEntity"); - knownMetadata.add("org.apache.http.entity.HttpEntityWrapper"); - knownMetadata.add("org.apache.http.entity.InputStreamEntity"); - knownMetadata.add("org.apache.http.entity.SerializableEntity"); - knownMetadata.add("org.apache.http.entity.StringEntity"); - knownMetadata.add("org.apache.http.impl.AbstractHttpClientConnection"); - knownMetadata.add("org.apache.http.impl.AbstractHttpServerConnection"); - knownMetadata.add("org.apache.http.impl.DefaultConnectionReuseStrategy"); - knownMetadata.add("org.apache.http.impl.DefaultHttpClientConnection"); - knownMetadata.add("org.apache.http.impl.DefaultHttpRequestFactory"); - knownMetadata.add("org.apache.http.impl.DefaultHttpResponseFactory"); - knownMetadata.add("org.apache.http.impl.DefaultHttpServerConnection"); - knownMetadata.add("org.apache.http.impl.EnglishReasonPhraseCatalog"); - knownMetadata.add("org.apache.http.impl.HttpConnectionMetricsImpl"); - knownMetadata.add("org.apache.http.impl.NoConnectionReuseStrategy"); - knownMetadata.add("org.apache.http.impl.SocketHttpClientConnection"); - knownMetadata.add("org.apache.http.impl.SocketHttpServerConnection"); - knownMetadata.add("org.apache.http.impl.auth.AuthSchemeBase"); - knownMetadata.add("org.apache.http.impl.auth.BasicScheme"); - knownMetadata.add("org.apache.http.impl.auth.BasicSchemeFactory"); - knownMetadata.add("org.apache.http.impl.auth.DigestScheme"); - knownMetadata.add("org.apache.http.impl.auth.DigestSchemeFactory"); - knownMetadata.add("org.apache.http.impl.auth.NTLMEngine"); - knownMetadata.add("org.apache.http.impl.auth.NTLMEngineException"); - knownMetadata.add("org.apache.http.impl.auth.NTLMScheme"); - knownMetadata.add("org.apache.http.impl.auth.RFC2617Scheme"); - knownMetadata.add("org.apache.http.impl.auth.UnsupportedDigestAlgorithmException"); - knownMetadata.add("org.apache.http.impl.client.AbstractAuthenticationHandler"); - knownMetadata.add("org.apache.http.impl.client.AbstractHttpClient"); - knownMetadata.add("org.apache.http.impl.client.BasicCookieStore"); - knownMetadata.add("org.apache.http.impl.client.BasicCredentialsProvider"); - knownMetadata.add("org.apache.http.impl.client.BasicResponseHandler"); - knownMetadata.add("org.apache.http.impl.client.ClientParamsStack"); - knownMetadata.add("org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy"); - knownMetadata.add("org.apache.http.impl.client.DefaultHttpClient"); - knownMetadata.add("org.apache.http.impl.client.DefaultHttpRequestRetryHandler"); - knownMetadata.add("org.apache.http.impl.client.DefaultProxyAuthenticationHandler"); - knownMetadata.add("org.apache.http.impl.client.DefaultRedirectHandler"); - knownMetadata.add("org.apache.http.impl.client.DefaultRequestDirector"); - knownMetadata.add("org.apache.http.impl.client.DefaultTargetAuthenticationHandler"); - knownMetadata.add("org.apache.http.impl.client.DefaultUserTokenHandler"); - knownMetadata.add("org.apache.http.impl.client.EntityEnclosingRequestWrapper"); - knownMetadata.add("org.apache.http.impl.client.RedirectLocations"); - knownMetadata.add("org.apache.http.impl.client.RequestWrapper"); - knownMetadata.add("org.apache.http.impl.client.RoutedRequest"); - knownMetadata.add("org.apache.http.impl.client.TunnelRefusedException"); - knownMetadata.add("org.apache.http.impl.conn.AbstractClientConnAdapter"); - knownMetadata.add("org.apache.http.impl.conn.AbstractPoolEntry"); - knownMetadata.add("org.apache.http.impl.conn.AbstractPooledConnAdapter"); - knownMetadata.add("org.apache.http.impl.conn.DefaultClientConnection"); - knownMetadata.add("org.apache.http.impl.conn.DefaultClientConnectionOperator"); - knownMetadata.add("org.apache.http.impl.conn.DefaultHttpRoutePlanner"); - knownMetadata.add("org.apache.http.impl.conn.DefaultResponseParser"); - knownMetadata.add("org.apache.http.impl.conn.IdleConnectionHandler"); - knownMetadata.add("org.apache.http.impl.conn.LoggingSessionInputBuffer"); - knownMetadata.add("org.apache.http.impl.conn.LoggingSessionOutputBuffer"); - knownMetadata.add("org.apache.http.impl.conn.ProxySelectorRoutePlanner"); - knownMetadata.add("org.apache.http.impl.conn.SingleClientConnManager"); - knownMetadata.add("org.apache.http.impl.conn.Wire"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.AbstractConnPool"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.BasicPoolEntry"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.BasicPoolEntryRef"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.BasicPooledConnAdapter"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.ConnPoolByRoute"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.PoolEntryRequest"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.RefQueueHandler"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.RefQueueWorker"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.RouteSpecificPool"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.WaitingThread"); - knownMetadata.add("org.apache.http.impl.conn.tsccm.WaitingThreadAborter"); - knownMetadata.add("org.apache.http.impl.cookie.AbstractCookieAttributeHandler"); - knownMetadata.add("org.apache.http.impl.cookie.AbstractCookieSpec"); - knownMetadata.add("org.apache.http.impl.cookie.BasicClientCookie"); - knownMetadata.add("org.apache.http.impl.cookie.BasicClientCookie2"); - knownMetadata.add("org.apache.http.impl.cookie.BasicCommentHandler"); - knownMetadata.add("org.apache.http.impl.cookie.BasicDomainHandler"); - knownMetadata.add("org.apache.http.impl.cookie.BasicExpiresHandler"); - knownMetadata.add("org.apache.http.impl.cookie.BasicMaxAgeHandler"); - knownMetadata.add("org.apache.http.impl.cookie.BasicPathHandler"); - knownMetadata.add("org.apache.http.impl.cookie.BasicSecureHandler"); - knownMetadata.add("org.apache.http.impl.cookie.BestMatchSpec"); - knownMetadata.add("org.apache.http.impl.cookie.BestMatchSpecFactory"); - knownMetadata.add("org.apache.http.impl.cookie.BrowserCompatSpec"); - knownMetadata.add("org.apache.http.impl.cookie.BrowserCompatSpecFactory"); - knownMetadata.add("org.apache.http.impl.cookie.CookieSpecBase"); - knownMetadata.add("org.apache.http.impl.cookie.DateParseException"); - knownMetadata.add("org.apache.http.impl.cookie.DateUtils"); - knownMetadata.add("org.apache.http.impl.cookie.NetscapeDomainHandler"); - knownMetadata.add("org.apache.http.impl.cookie.NetscapeDraftHeaderParser"); - knownMetadata.add("org.apache.http.impl.cookie.NetscapeDraftSpec"); - knownMetadata.add("org.apache.http.impl.cookie.NetscapeDraftSpecFactory"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2109DomainHandler"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2109Spec"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2109SpecFactory"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2109VersionHandler"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965CommentUrlAttributeHandler"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965DiscardAttributeHandler"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965DomainAttributeHandler"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965PortAttributeHandler"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965Spec"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965SpecFactory"); - knownMetadata.add("org.apache.http.impl.cookie.RFC2965VersionAttributeHandler"); - knownMetadata.add("org.apache.http.impl.entity.EntityDeserializer"); - knownMetadata.add("org.apache.http.impl.entity.EntitySerializer"); - knownMetadata.add("org.apache.http.impl.entity.LaxContentLengthStrategy"); - knownMetadata.add("org.apache.http.impl.entity.StrictContentLengthStrategy"); - knownMetadata.add("org.apache.http.impl.io.AbstractMessageParser"); - knownMetadata.add("org.apache.http.impl.io.AbstractMessageWriter"); - knownMetadata.add("org.apache.http.impl.io.AbstractSessionInputBuffer"); - knownMetadata.add("org.apache.http.impl.io.AbstractSessionOutputBuffer"); - knownMetadata.add("org.apache.http.impl.io.ChunkedInputStream"); - knownMetadata.add("org.apache.http.impl.io.ChunkedOutputStream"); - knownMetadata.add("org.apache.http.impl.io.ContentLengthInputStream"); - knownMetadata.add("org.apache.http.impl.io.ContentLengthOutputStream"); - knownMetadata.add("org.apache.http.impl.io.HttpRequestParser"); - knownMetadata.add("org.apache.http.impl.io.HttpRequestWriter"); - knownMetadata.add("org.apache.http.impl.io.HttpResponseParser"); - knownMetadata.add("org.apache.http.impl.io.HttpResponseWriter"); - knownMetadata.add("org.apache.http.impl.io.HttpTransportMetricsImpl"); - knownMetadata.add("org.apache.http.impl.io.IdentityInputStream"); - knownMetadata.add("org.apache.http.impl.io.IdentityOutputStream"); - knownMetadata.add("org.apache.http.impl.io.SocketInputBuffer"); - knownMetadata.add("org.apache.http.impl.io.SocketOutputBuffer"); - knownMetadata.add("org.apache.http.io.HttpMessageParser"); - knownMetadata.add("org.apache.http.io.HttpMessageWriter"); - knownMetadata.add("org.apache.http.io.HttpTransportMetrics"); - knownMetadata.add("org.apache.http.io.SessionInputBuffer"); - knownMetadata.add("org.apache.http.io.SessionOutputBuffer"); - knownMetadata.add("org.apache.http.message.AbstractHttpMessage"); - knownMetadata.add("org.apache.http.message.BasicHeader"); - knownMetadata.add("org.apache.http.message.BasicHeaderElement"); - knownMetadata.add("org.apache.http.message.BasicHeaderElementIterator"); - knownMetadata.add("org.apache.http.message.BasicHeaderIterator"); - knownMetadata.add("org.apache.http.message.BasicHeaderValueFormatter"); - knownMetadata.add("org.apache.http.message.BasicHeaderValueParser"); - knownMetadata.add("org.apache.http.message.BasicHttpEntityEnclosingRequest"); - knownMetadata.add("org.apache.http.message.BasicHttpRequest"); - knownMetadata.add("org.apache.http.message.BasicHttpResponse"); - knownMetadata.add("org.apache.http.message.BasicLineFormatter"); - knownMetadata.add("org.apache.http.message.BasicLineParser"); - knownMetadata.add("org.apache.http.message.BasicListHeaderIterator"); - knownMetadata.add("org.apache.http.message.BasicNameValuePair"); - knownMetadata.add("org.apache.http.message.BasicRequestLine"); - knownMetadata.add("org.apache.http.message.BasicStatusLine"); - knownMetadata.add("org.apache.http.message.BasicTokenIterator"); - knownMetadata.add("org.apache.http.message.BufferedHeader"); - knownMetadata.add("org.apache.http.message.HeaderGroup"); - knownMetadata.add("org.apache.http.message.HeaderValueFormatter"); - knownMetadata.add("org.apache.http.message.HeaderValueParser"); - knownMetadata.add("org.apache.http.message.LineFormatter"); - knownMetadata.add("org.apache.http.message.LineParser"); - knownMetadata.add("org.apache.http.message.ParserCursor"); - knownMetadata.add("org.apache.http.params.AbstractHttpParams"); - knownMetadata.add("org.apache.http.params.BasicHttpParams"); - knownMetadata.add("org.apache.http.params.CoreConnectionPNames"); - knownMetadata.add("org.apache.http.params.CoreProtocolPNames"); - knownMetadata.add("org.apache.http.params.DefaultedHttpParams"); - knownMetadata.add("org.apache.http.params.HttpAbstractParamBean"); - knownMetadata.add("org.apache.http.params.HttpConnectionParamBean"); - knownMetadata.add("org.apache.http.params.HttpConnectionParams"); - knownMetadata.add("org.apache.http.params.HttpParams"); - knownMetadata.add("org.apache.http.params.HttpProtocolParamBean"); - knownMetadata.add("org.apache.http.params.HttpProtocolParams"); - knownMetadata.add("org.apache.http.protocol.BasicHttpContext"); - knownMetadata.add("org.apache.http.protocol.BasicHttpProcessor"); - knownMetadata.add("org.apache.http.protocol.DefaultedHttpContext"); - knownMetadata.add("org.apache.http.protocol.ExecutionContext"); - knownMetadata.add("org.apache.http.protocol.HTTP"); - knownMetadata.add("org.apache.http.protocol.HttpContext"); - knownMetadata.add("org.apache.http.protocol.HttpDateGenerator"); - knownMetadata.add("org.apache.http.protocol.HttpExpectationVerifier"); - knownMetadata.add("org.apache.http.protocol.HttpProcessor"); - knownMetadata.add("org.apache.http.protocol.HttpRequestExecutor"); - knownMetadata.add("org.apache.http.protocol.HttpRequestHandler"); - knownMetadata.add("org.apache.http.protocol.HttpRequestHandlerRegistry"); - knownMetadata.add("org.apache.http.protocol.HttpRequestHandlerResolver"); - knownMetadata.add("org.apache.http.protocol.HttpRequestInterceptorList"); - knownMetadata.add("org.apache.http.protocol.HttpResponseInterceptorList"); - knownMetadata.add("org.apache.http.protocol.HttpService"); - knownMetadata.add("org.apache.http.protocol.RequestConnControl"); - knownMetadata.add("org.apache.http.protocol.RequestContent"); - knownMetadata.add("org.apache.http.protocol.RequestDate"); - knownMetadata.add("org.apache.http.protocol.RequestExpectContinue"); - knownMetadata.add("org.apache.http.protocol.RequestTargetHost"); - knownMetadata.add("org.apache.http.protocol.RequestUserAgent"); - knownMetadata.add("org.apache.http.protocol.ResponseConnControl"); - knownMetadata.add("org.apache.http.protocol.ResponseContent"); - knownMetadata.add("org.apache.http.protocol.ResponseDate"); - knownMetadata.add("org.apache.http.protocol.ResponseServer"); - knownMetadata.add("org.apache.http.protocol.SyncBasicHttpContext"); - knownMetadata.add("org.apache.http.protocol.UriPatternMatcher"); - knownMetadata.add("org.apache.http.util.ByteArrayBuffer"); - knownMetadata.add("org.apache.http.util.CharArrayBuffer"); - knownMetadata.add("org.apache.http.util.EncodingUtils"); - knownMetadata.add("org.apache.http.util.EntityUtils"); - knownMetadata.add("org.apache.http.util.ExceptionUtils"); - knownMetadata.add("org.apache.http.util.LangUtils"); - knownMetadata.add("org.apache.http.util.VersionInfo"); - knownMetadata.add("org.json.JSONArray"); - knownMetadata.add("org.json.JSONException"); - knownMetadata.add("org.json.JSONObject"); - knownMetadata.add("org.json.JSONStringer"); - knownMetadata.add("org.json.JSONTokener"); - knownMetadata.add("org.w3c.dom.Attr"); - knownMetadata.add("org.w3c.dom.CDATASection"); - knownMetadata.add("org.w3c.dom.CharacterData"); - knownMetadata.add("org.w3c.dom.Comment"); - knownMetadata.add("org.w3c.dom.DOMConfiguration"); - knownMetadata.add("org.w3c.dom.DOMError"); - knownMetadata.add("org.w3c.dom.DOMErrorHandler"); - knownMetadata.add("org.w3c.dom.DOMException"); - knownMetadata.add("org.w3c.dom.DOMImplementation"); - knownMetadata.add("org.w3c.dom.DOMImplementationList"); - knownMetadata.add("org.w3c.dom.DOMImplementationSource"); - knownMetadata.add("org.w3c.dom.DOMLocator"); - knownMetadata.add("org.w3c.dom.DOMStringList"); - knownMetadata.add("org.w3c.dom.Document"); - knownMetadata.add("org.w3c.dom.DocumentFragment"); - knownMetadata.add("org.w3c.dom.DocumentType"); - knownMetadata.add("org.w3c.dom.Element"); - knownMetadata.add("org.w3c.dom.Entity"); - knownMetadata.add("org.w3c.dom.EntityReference"); - knownMetadata.add("org.w3c.dom.NameList"); - knownMetadata.add("org.w3c.dom.NamedNodeMap"); - knownMetadata.add("org.w3c.dom.Node"); - knownMetadata.add("org.w3c.dom.NodeList"); - knownMetadata.add("org.w3c.dom.Notation"); - knownMetadata.add("org.w3c.dom.ProcessingInstruction"); - knownMetadata.add("org.w3c.dom.Text"); - knownMetadata.add("org.w3c.dom.TypeInfo"); - knownMetadata.add("org.w3c.dom.UserDataHandler"); - knownMetadata.add("org.w3c.dom.ls.DOMImplementationLS"); - knownMetadata.add("org.w3c.dom.ls.LSException"); - knownMetadata.add("org.w3c.dom.ls.LSInput"); - knownMetadata.add("org.w3c.dom.ls.LSOutput"); - knownMetadata.add("org.w3c.dom.ls.LSParser"); - knownMetadata.add("org.w3c.dom.ls.LSParserFilter"); - knownMetadata.add("org.w3c.dom.ls.LSResourceResolver"); - knownMetadata.add("org.w3c.dom.ls.LSSerializer"); - knownMetadata.add("org.xml.sax.AttributeList"); - knownMetadata.add("org.xml.sax.Attributes"); - knownMetadata.add("org.xml.sax.ContentHandler"); - knownMetadata.add("org.xml.sax.DTDHandler"); - knownMetadata.add("org.xml.sax.DocumentHandler"); - knownMetadata.add("org.xml.sax.EntityResolver"); - knownMetadata.add("org.xml.sax.ErrorHandler"); - knownMetadata.add("org.xml.sax.HandlerBase"); - knownMetadata.add("org.xml.sax.InputSource"); - knownMetadata.add("org.xml.sax.Locator"); - knownMetadata.add("org.xml.sax.Parser"); - knownMetadata.add("org.xml.sax.SAXException"); - knownMetadata.add("org.xml.sax.SAXNotRecognizedException"); - knownMetadata.add("org.xml.sax.SAXNotSupportedException"); - knownMetadata.add("org.xml.sax.SAXParseException"); - knownMetadata.add("org.xml.sax.XMLFilter"); - knownMetadata.add("org.xml.sax.XMLReader"); - knownMetadata.add("org.xml.sax.ext.Attributes2"); - knownMetadata.add("org.xml.sax.ext.Attributes2Impl"); - knownMetadata.add("org.xml.sax.ext.DeclHandler"); - knownMetadata.add("org.xml.sax.ext.DefaultHandler2"); - knownMetadata.add("org.xml.sax.ext.EntityResolver2"); - knownMetadata.add("org.xml.sax.ext.LexicalHandler"); - knownMetadata.add("org.xml.sax.ext.Locator2"); - knownMetadata.add("org.xml.sax.ext.Locator2Impl"); - knownMetadata.add("org.xml.sax.helpers.AttributeListImpl"); - knownMetadata.add("org.xml.sax.helpers.AttributesImpl"); - knownMetadata.add("org.xml.sax.helpers.DefaultHandler"); - knownMetadata.add("org.xml.sax.helpers.LocatorImpl"); - knownMetadata.add("org.xml.sax.helpers.NamespaceSupport"); - knownMetadata.add("org.xml.sax.helpers.ParserAdapter"); - knownMetadata.add("org.xml.sax.helpers.ParserFactory"); - knownMetadata.add("org.xml.sax.helpers.XMLFilterImpl"); - knownMetadata.add("org.xml.sax.helpers.XMLReaderAdapter"); - knownMetadata.add("org.xml.sax.helpers.XMLReaderFactory"); - knownMetadata.add("org.xmlpull.v1.XmlPullParser"); - knownMetadata.add("org.xmlpull.v1.XmlPullParserException"); - knownMetadata.add("org.xmlpull.v1.XmlPullParserFactory"); - knownMetadata.add("org.xmlpull.v1.XmlSerializer"); - knownMetadata.add("org.xmlpull.v1.sax2.Driver"); - knownMetadata.add("com.koushikdutta.ion.DeferredLoadBitmap"); - knownMetadata.add("com.koushikdutta.ion.DiskLruCacheStore"); - knownMetadata.add("com.koushikdutta.ion.HeadersCallback"); - knownMetadata.add("com.koushikdutta.ion.InputStreamParser"); - knownMetadata.add("com.koushikdutta.ion.Ion"); - knownMetadata.add("com.koushikdutta.ion.Ion$Config"); - knownMetadata.add("com.koushikdutta.ion.LoadBitmapBase"); - knownMetadata.add("com.koushikdutta.ion.LoadBitmapRegion"); - knownMetadata.add("com.koushikdutta.ion.LoadDeepZoom"); - knownMetadata.add("com.koushikdutta.ion.Loader"); - knownMetadata.add("com.koushikdutta.ion.Loader$LoaderEmitter"); - knownMetadata.add("com.koushikdutta.ion.NetworkImageView"); - knownMetadata.add("com.koushikdutta.ion.ProgressCallback"); - knownMetadata.add("com.koushikdutta.ion.Response"); - knownMetadata.add("com.koushikdutta.ion.bitmap.BitmapInfo"); - knownMetadata.add("com.koushikdutta.ion.bitmap.Exif"); - knownMetadata.add("com.koushikdutta.ion.bitmap.IonBitmapCache"); - knownMetadata.add("com.koushikdutta.ion.bitmap.SoftReferenceHashtable"); - knownMetadata.add("com.koushikdutta.ion.bitmap.Transform"); - knownMetadata.add("com.koushikdutta.ion.builder.BitmapBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.BitmapFutureBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any$B"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any$BF"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any$F"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any$IF"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any$M"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$Any$U"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$ImageView"); - knownMetadata.add("com.koushikdutta.ion.builder.Builders$ImageView$F"); - knownMetadata.add("com.koushikdutta.ion.builder.FutureBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.ImageViewBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.ImageViewFutureBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.LoadBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.LoadImageViewFutureBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.MultipartBodyBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.RequestBuilder"); - knownMetadata.add("com.koushikdutta.ion.builder.UrlEncodedBuilder"); - knownMetadata.add("com.koushikdutta.ion.cookie.CookieMiddleware"); - knownMetadata.add("com.koushikdutta.ion.future.ResponseFuture"); - knownMetadata.add("com.koushikdutta.ion.gif.GifAction"); - knownMetadata.add("com.koushikdutta.ion.gif.GifDecoder"); - knownMetadata.add("com.koushikdutta.ion.gif.GifFrame"); - knownMetadata.add("com.koushikdutta.ion.gson.GsonBody"); - knownMetadata.add("com.koushikdutta.ion.gson.GsonParser"); - knownMetadata.add("com.koushikdutta.ion.gson.GsonSerializer"); - knownMetadata.add("com.koushikdutta.ion.gson.PojoBody"); - knownMetadata.add("com.koushikdutta.ion.loader.AsyncHttpRequestFactory"); - knownMetadata.add("com.koushikdutta.ion.loader.ContentLoader"); - knownMetadata.add("com.koushikdutta.ion.loader.FileLoader"); - knownMetadata.add("com.koushikdutta.ion.loader.HttpLoader"); - knownMetadata.add("com.koushikdutta.ion.loader.MediaFile"); - knownMetadata.add("com.koushikdutta.ion.loader.MediaFile$MediaFileType"); - knownMetadata.add("com.koushikdutta.ion.loader.MtpConstants"); - knownMetadata.add("com.koushikdutta.ion.loader.PackageIconLoader"); - knownMetadata.add("com.koushikdutta.ion.loader.SimpleLoader"); - knownMetadata.add("com.koushikdutta.ion.loader.VideoLoader"); - knownMetadata.add("com.koushikdutta.async.ArrayDeque"); - knownMetadata.add("com.koushikdutta.async.AsyncDatagramSocket"); - knownMetadata.add("com.koushikdutta.async.AsyncNetworkSocket"); - knownMetadata.add("com.koushikdutta.async.AsyncSSLException"); - knownMetadata.add("com.koushikdutta.async.AsyncSSLSocket"); - knownMetadata.add("com.koushikdutta.async.AsyncSSLSocketWrapper"); - knownMetadata.add("com.koushikdutta.async.AsyncSemaphore"); - knownMetadata.add("com.koushikdutta.async.AsyncServer"); - knownMetadata.add("com.koushikdutta.async.AsyncServerSocket"); - knownMetadata.add("com.koushikdutta.async.AsyncSocket"); - knownMetadata.add("com.koushikdutta.async.BufferedDataEmitter"); - knownMetadata.add("com.koushikdutta.async.BufferedDataSink"); - knownMetadata.add("com.koushikdutta.async.ByteBufferList"); - knownMetadata.add("com.koushikdutta.async.DataEmitter"); - knownMetadata.add("com.koushikdutta.async.DataEmitterBase"); - knownMetadata.add("com.koushikdutta.async.DataEmitterReader"); - knownMetadata.add("com.koushikdutta.async.DataSink"); - knownMetadata.add("com.koushikdutta.async.DataTrackingEmitter"); - knownMetadata.add("com.koushikdutta.async.DataTrackingEmitter$DataTracker"); - knownMetadata.add("com.koushikdutta.async.Deque"); - knownMetadata.add("com.koushikdutta.async.FileDataEmitter"); - knownMetadata.add("com.koushikdutta.async.FilteredDataEmitter"); - knownMetadata.add("com.koushikdutta.async.FilteredDataSink"); - knownMetadata.add("com.koushikdutta.async.HostnameResolutionException"); - knownMetadata.add("com.koushikdutta.async.LineEmitter"); - knownMetadata.add("com.koushikdutta.async.LineEmitter$StringCallback"); - knownMetadata.add("com.koushikdutta.async.NullDataCallback"); - knownMetadata.add("com.koushikdutta.async.PushParser"); - knownMetadata.add("com.koushikdutta.async.SelectorWrapper"); - knownMetadata.add("com.koushikdutta.async.TapCallback"); - knownMetadata.add("com.koushikdutta.async.ThreadQueue"); - knownMetadata.add("com.koushikdutta.async.Util"); - knownMetadata.add("com.koushikdutta.async.ZipDataSink"); - knownMetadata.add("com.koushikdutta.async.callback.CompletedCallback"); - knownMetadata.add("com.koushikdutta.async.callback.ConnectCallback"); - knownMetadata.add("com.koushikdutta.async.callback.ContinuationCallback"); - knownMetadata.add("com.koushikdutta.async.callback.DataCallback"); - knownMetadata.add("com.koushikdutta.async.callback.ListenCallback"); - knownMetadata.add("com.koushikdutta.async.callback.ResultCallback"); - knownMetadata.add("com.koushikdutta.async.callback.WritableCallback"); - knownMetadata.add("com.koushikdutta.async.dns.Dns"); - knownMetadata.add("com.koushikdutta.async.dns.DnsResponse"); - knownMetadata.add("com.koushikdutta.async.future.Cancellable"); - knownMetadata.add("com.koushikdutta.async.future.Continuation"); - knownMetadata.add("com.koushikdutta.async.future.DependentCancellable"); - knownMetadata.add("com.koushikdutta.async.future.DependentFuture"); - knownMetadata.add("com.koushikdutta.async.future.Future"); - knownMetadata.add("com.koushikdutta.async.future.FutureCallback"); - knownMetadata.add("com.koushikdutta.async.future.FutureRunnable"); - knownMetadata.add("com.koushikdutta.async.future.FutureThread"); - knownMetadata.add("com.koushikdutta.async.future.HandlerFuture"); - knownMetadata.add("com.koushikdutta.async.future.SimpleCancellable"); - knownMetadata.add("com.koushikdutta.async.future.SimpleFuture"); - knownMetadata.add("com.koushikdutta.async.future.TransformFuture"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$DownloadCallback"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$FileCallback"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$JSONArrayCallback"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$JSONObjectCallback"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$RequestCallbackBase"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$StringCallback"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClient$WebSocketConnectCallback"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClientMiddleware"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClientMiddleware$GetSocketData"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClientMiddleware$OnBodyData"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClientMiddleware$OnHeadersReceivedData"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClientMiddleware$OnRequestCompleteData"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpClientMiddleware$OnSocketData"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpGet"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpHead"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpPost"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpRequest"); - knownMetadata.add("com.koushikdutta.async.http.AsyncHttpResponse"); - knownMetadata.add("com.koushikdutta.async.http.AsyncSSLSocketMiddleware"); - knownMetadata.add("com.koushikdutta.async.http.AsyncSocketMiddleware"); - knownMetadata.add("com.koushikdutta.async.http.BodyDecoderException"); - knownMetadata.add("com.koushikdutta.async.http.ConnectionClosedException"); - knownMetadata.add("com.koushikdutta.async.http.ConnectionFailedException"); - knownMetadata.add("com.koushikdutta.async.http.HttpUtil"); - knownMetadata.add("com.koushikdutta.async.http.HybiParser$ProtocolError"); - knownMetadata.add("com.koushikdutta.async.http.Multimap"); - knownMetadata.add("com.koushikdutta.async.http.RedirectLimitExceededException"); - knownMetadata.add("com.koushikdutta.async.http.ResponseCacheMiddleware"); - knownMetadata.add("com.koushikdutta.async.http.ResponseCacheMiddleware$CacheData"); - knownMetadata.add("com.koushikdutta.async.http.SimpleMiddleware"); - knownMetadata.add("com.koushikdutta.async.http.WebSocket"); - knownMetadata.add("com.koushikdutta.async.http.WebSocket$StringCallback"); - knownMetadata.add("com.koushikdutta.async.http.WebSocketHandshakeException"); - knownMetadata.add("com.koushikdutta.async.http.WebSocketImpl"); - knownMetadata.add("com.koushikdutta.async.http.body.AsyncHttpRequestBody"); - knownMetadata.add("com.koushikdutta.async.http.body.DocumentBody"); - knownMetadata.add("com.koushikdutta.async.http.body.FileBody"); - knownMetadata.add("com.koushikdutta.async.http.body.FilePart"); - knownMetadata.add("com.koushikdutta.async.http.body.JSONArrayBody"); - knownMetadata.add("com.koushikdutta.async.http.body.JSONObjectBody"); - knownMetadata.add("com.koushikdutta.async.http.body.MultipartFormDataBody"); - knownMetadata.add("com.koushikdutta.async.http.body.MultipartFormDataBody$MultipartCallback"); - knownMetadata.add("com.koushikdutta.async.http.body.Part"); - knownMetadata.add("com.koushikdutta.async.http.body.StreamBody"); - knownMetadata.add("com.koushikdutta.async.http.body.StreamPart"); - knownMetadata.add("com.koushikdutta.async.http.body.StringBody"); - knownMetadata.add("com.koushikdutta.async.http.body.StringPart"); - knownMetadata.add("com.koushikdutta.async.http.body.UrlEncodedFormBody"); - knownMetadata.add("com.koushikdutta.async.http.callback.HttpConnectCallback"); - knownMetadata.add("com.koushikdutta.async.http.callback.RequestCallback"); - knownMetadata.add("com.koushikdutta.async.http.filter.ChunkedDataException"); - knownMetadata.add("com.koushikdutta.async.http.filter.ChunkedInputFilter"); - knownMetadata.add("com.koushikdutta.async.http.filter.ChunkedOutputFilter"); - knownMetadata.add("com.koushikdutta.async.http.filter.ContentLengthFilter"); - knownMetadata.add("com.koushikdutta.async.http.filter.DataRemainingException"); - knownMetadata.add("com.koushikdutta.async.http.filter.GZIPInputFilter"); - knownMetadata.add("com.koushikdutta.async.http.filter.InflaterInputFilter"); - knownMetadata.add("com.koushikdutta.async.http.filter.PrematureDataEndException"); - knownMetadata.add("com.koushikdutta.async.http.libcore.Charsets"); - knownMetadata.add("com.koushikdutta.async.http.libcore.DiskLruCache"); - knownMetadata.add("com.koushikdutta.async.http.libcore.DiskLruCache$Editor"); - knownMetadata.add("com.koushikdutta.async.http.libcore.DiskLruCache$Snapshot"); - knownMetadata.add("com.koushikdutta.async.http.libcore.HeaderParser$CacheControlHandler"); - knownMetadata.add("com.koushikdutta.async.http.libcore.HttpDate"); - knownMetadata.add("com.koushikdutta.async.http.libcore.IoUtils"); - knownMetadata.add("com.koushikdutta.async.http.libcore.Memory"); - knownMetadata.add("com.koushikdutta.async.http.libcore.Objects"); - knownMetadata.add("com.koushikdutta.async.http.libcore.RawHeaders"); - knownMetadata.add("com.koushikdutta.async.http.libcore.RequestHeaders"); - knownMetadata.add("com.koushikdutta.async.http.libcore.ResponseHeaders"); - knownMetadata.add("com.koushikdutta.async.http.libcore.ResponseSource"); - knownMetadata.add("com.koushikdutta.async.http.libcore.StrictLineReader"); - knownMetadata.add("com.koushikdutta.async.http.server.AsyncHttpServer"); - knownMetadata.add("com.koushikdutta.async.http.server.AsyncHttpServer$WebSocketRequestCallback"); - knownMetadata.add("com.koushikdutta.async.http.server.AsyncHttpServerRequest"); - knownMetadata.add("com.koushikdutta.async.http.server.AsyncHttpServerRequestImpl"); - knownMetadata.add("com.koushikdutta.async.http.server.AsyncHttpServerResponse"); - knownMetadata.add("com.koushikdutta.async.http.server.AsyncHttpServerResponseImpl"); - knownMetadata.add("com.koushikdutta.async.http.server.BoundaryEmitter"); - knownMetadata.add("com.koushikdutta.async.http.server.HttpServerRequestCallback"); - knownMetadata.add("com.koushikdutta.async.http.server.MalformedRangeException"); - knownMetadata.add("com.koushikdutta.async.http.server.MimeEncodingException"); - knownMetadata.add("com.koushikdutta.async.http.server.StreamSkipException"); - knownMetadata.add("com.koushikdutta.async.http.server.UnknownRequestBody"); - knownMetadata.add("com.koushikdutta.async.http.socketio.Acknowledge"); - knownMetadata.add("com.koushikdutta.async.http.socketio.ConnectCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.DisconnectCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.ErrorCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.EventCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.EventEmitter"); - knownMetadata.add("com.koushikdutta.async.http.socketio.ExceptionCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.JSONCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.ReconnectCallback"); - knownMetadata.add("com.koushikdutta.async.http.socketio.SocketIOClient"); - knownMetadata.add("com.koushikdutta.async.http.socketio.SocketIOException"); - knownMetadata.add("com.koushikdutta.async.http.socketio.SocketIORequest"); - knownMetadata.add("com.koushikdutta.async.http.socketio.StringCallback"); - knownMetadata.add("com.koushikdutta.async.parser.AsyncParser"); - knownMetadata.add("com.koushikdutta.async.parser.ByteBufferListParser"); - knownMetadata.add("com.koushikdutta.async.parser.DocumentParser"); - knownMetadata.add("com.koushikdutta.async.parser.JSONArrayParser"); - knownMetadata.add("com.koushikdutta.async.parser.JSONObjectParser"); - knownMetadata.add("com.koushikdutta.async.parser.StringParser"); - knownMetadata.add("com.koushikdutta.async.stream.ByteBufferListInputStream"); - knownMetadata.add("com.koushikdutta.async.stream.FileDataSink"); - knownMetadata.add("com.koushikdutta.async.stream.InputStreamDataEmitter"); - knownMetadata.add("com.koushikdutta.async.stream.OutputStreamDataCallback"); - knownMetadata.add("com.koushikdutta.async.stream.OutputStreamDataSink"); - knownMetadata.add("com.koushikdutta.async.util.HashList"); - knownMetadata.add("com.koushikdutta.async.util.StreamUtility"); - knownMetadata.add("com.koushikdutta.async.wrapper.AsyncSocketWrapper"); - knownMetadata.add("com.koushikdutta.async.wrapper.DataEmitterWrapper"); - knownMetadata.add("android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat"); - knownMetadata.add("android.support.v4.app.ActionBarDrawerToggle"); - knownMetadata.add("android.support.v4.app.ActivityCompat"); - knownMetadata.add("android.support.v4.app.ActivityOptionsCompat"); - knownMetadata.add("android.support.v4.app.DialogFragment"); - knownMetadata.add("android.support.v4.app.Fragment"); - knownMetadata.add("android.support.v4.app.Fragment$InstantiationException"); - knownMetadata.add("android.support.v4.app.Fragment$SavedState"); - knownMetadata.add("android.support.v4.app.FragmentActivity"); - knownMetadata.add("android.support.v4.app.FragmentManager"); - knownMetadata.add("android.support.v4.app.FragmentManager$BackStackEntry"); - knownMetadata.add("android.support.v4.app.FragmentManager$OnBackStackChangedListener"); - knownMetadata.add("android.support.v4.app.FragmentPagerAdapter"); - knownMetadata.add("android.support.v4.app.FragmentStatePagerAdapter"); - knownMetadata.add("android.support.v4.app.FragmentTabHost"); - knownMetadata.add("android.support.v4.app.FragmentTransaction"); - knownMetadata.add("android.support.v4.app.ListFragment"); - knownMetadata.add("android.support.v4.app.LoaderManager"); - knownMetadata.add("android.support.v4.app.LoaderManager$LoaderCallbacks"); - knownMetadata.add("android.support.v4.app.NavUtils"); - knownMetadata.add("android.support.v4.app.NotificationCompat"); - knownMetadata.add("android.support.v4.app.NotificationCompat$Action"); - knownMetadata.add("android.support.v4.app.NotificationCompat$BigPictureStyle"); - knownMetadata.add("android.support.v4.app.NotificationCompat$BigTextStyle"); - knownMetadata.add("android.support.v4.app.NotificationCompat$Builder"); - knownMetadata.add("android.support.v4.app.NotificationCompat$InboxStyle"); - knownMetadata.add("android.support.v4.app.NotificationCompat$Style"); - knownMetadata.add("android.support.v4.app.ServiceCompat"); - knownMetadata.add("android.support.v4.app.ShareCompat"); - knownMetadata.add("android.support.v4.app.ShareCompat$IntentBuilder"); - knownMetadata.add("android.support.v4.app.ShareCompat$IntentReader"); - knownMetadata.add("android.support.v4.app.TaskStackBuilder"); - knownMetadata.add("android.support.v4.app.TaskStackBuilderHoneycomb"); - knownMetadata.add("android.support.v4.content.AsyncTaskLoader"); - knownMetadata.add("android.support.v4.content.ContextCompat"); - knownMetadata.add("android.support.v4.content.CursorLoader"); - knownMetadata.add("android.support.v4.content.FileProvider"); - knownMetadata.add("android.support.v4.content.IntentCompat"); - knownMetadata.add("android.support.v4.content.Loader"); - knownMetadata.add("android.support.v4.content.Loader$ForceLoadContentObserver"); - knownMetadata.add("android.support.v4.content.Loader$OnLoadCompleteListener"); - knownMetadata.add("android.support.v4.content.LocalBroadcastManager"); - knownMetadata.add("android.support.v4.content.ModernAsyncTask$Status"); - knownMetadata.add("android.support.v4.content.pm.ActivityInfoCompat"); - knownMetadata.add("android.support.v4.database.DatabaseUtilsCompat"); - knownMetadata.add("android.support.v4.net.ConnectivityManagerCompat"); - knownMetadata.add("android.support.v4.net.TrafficStatsCompat"); - knownMetadata.add("android.support.v4.net.TrafficStatsCompatIcs"); - knownMetadata.add("android.support.v4.os.ParcelableCompat"); - knownMetadata.add("android.support.v4.os.ParcelableCompatCreatorCallbacks"); - knownMetadata.add("android.support.v4.util.AtomicFile"); - knownMetadata.add("android.support.v4.util.DebugUtils"); - knownMetadata.add("android.support.v4.util.LogWriter"); - knownMetadata.add("android.support.v4.util.LongSparseArray"); - knownMetadata.add("android.support.v4.util.LruCache"); - knownMetadata.add("android.support.v4.util.SparseArrayCompat"); - knownMetadata.add("android.support.v4.util.TimeUtils"); - knownMetadata.add("android.support.v4.view.AccessibilityDelegateCompat"); - knownMetadata.add("android.support.v4.view.AccessibilityDelegateCompatIcs$AccessibilityDelegateBridge"); - knownMetadata.add("android.support.v4.view.AccessibilityDelegateCompatJellyBean$AccessibilityDelegateBridgeJellyBean"); - knownMetadata.add("android.support.v4.view.GestureDetectorCompat"); - knownMetadata.add("android.support.v4.view.GravityCompat"); - knownMetadata.add("android.support.v4.view.KeyEventCompat"); - knownMetadata.add("android.support.v4.view.MenuCompat"); - knownMetadata.add("android.support.v4.view.MenuItemCompat"); - knownMetadata.add("android.support.v4.view.MotionEventCompat"); - knownMetadata.add("android.support.v4.view.PagerAdapter"); - knownMetadata.add("android.support.v4.view.PagerTabStrip"); - knownMetadata.add("android.support.v4.view.PagerTitleStrip"); - knownMetadata.add("android.support.v4.view.VelocityTrackerCompat"); - knownMetadata.add("android.support.v4.view.ViewCompat"); - knownMetadata.add("android.support.v4.view.ViewCompatJB"); - knownMetadata.add("android.support.v4.view.ViewConfigurationCompat"); - knownMetadata.add("android.support.v4.view.ViewGroupCompat"); - knownMetadata.add("android.support.v4.view.ViewPager"); - knownMetadata.add("android.support.v4.view.ViewPager$LayoutParams"); - knownMetadata.add("android.support.v4.view.ViewPager$OnPageChangeListener"); - knownMetadata.add("android.support.v4.view.ViewPager$PageTransformer"); - knownMetadata.add("android.support.v4.view.ViewPager$SavedState"); - knownMetadata.add("android.support.v4.view.ViewPager$SimpleOnPageChangeListener"); - knownMetadata.add("android.support.v4.view.accessibility.AccessibilityEventCompat"); - knownMetadata.add("android.support.v4.view.accessibility.AccessibilityManagerCompat"); - knownMetadata.add("android.support.v4.view.accessibility.AccessibilityManagerCompat$AccessibilityStateChangeListenerCompat"); - knownMetadata.add("android.support.v4.view.accessibility.AccessibilityNodeInfoCompat"); - knownMetadata.add("android.support.v4.view.accessibility.AccessibilityNodeProviderCompat"); - knownMetadata.add("android.support.v4.view.accessibility.AccessibilityRecordCompat"); - knownMetadata.add("android.support.v4.widget.CursorAdapter"); - knownMetadata.add("android.support.v4.widget.DrawerLayout"); - knownMetadata.add("android.support.v4.widget.DrawerLayout$DrawerListener"); - knownMetadata.add("android.support.v4.widget.DrawerLayout$LayoutParams"); - knownMetadata.add("android.support.v4.widget.DrawerLayout$SimpleDrawerListener"); - knownMetadata.add("android.support.v4.widget.EdgeEffectCompat"); - knownMetadata.add("android.support.v4.widget.ResourceCursorAdapter"); - knownMetadata.add("android.support.v4.widget.ScrollerCompat"); - knownMetadata.add("android.support.v4.widget.SearchViewCompat"); - knownMetadata.add("android.support.v4.widget.SearchViewCompat$OnCloseListenerCompat"); - knownMetadata.add("android.support.v4.widget.SearchViewCompat$OnQueryTextListenerCompat"); - knownMetadata.add("android.support.v4.widget.SearchViewCompatIcs$MySearchView"); - knownMetadata.add("android.support.v4.widget.SimpleCursorAdapter"); - knownMetadata.add("android.support.v4.widget.SimpleCursorAdapter$CursorToStringConverter"); - knownMetadata.add("android.support.v4.widget.SimpleCursorAdapter$ViewBinder"); - knownMetadata.add("android.support.v4.widget.SlidingPaneLayout"); - knownMetadata.add("android.support.v4.widget.SlidingPaneLayout$LayoutParams"); - knownMetadata.add("android.support.v4.widget.SlidingPaneLayout$PanelSlideListener"); - knownMetadata.add("android.support.v4.widget.SlidingPaneLayout$SimplePanelSlideListener"); - knownMetadata.add("android.support.v4.widget.ViewDragHelper"); - knownMetadata.add("android.support.v4.widget.ViewDragHelper$Callback"); - } - return knownMetadata; - } -} \ No newline at end of file From 4bf44bdb1bc3dce03b1f5707a197a6350da4f6b2 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Tue, 28 Apr 2015 11:34:26 +0300 Subject: [PATCH 04/46] replace JS symbols with V8 hidden values in order to be compliant with node-inspector --- src/jni/MetadataNode.cpp | 14 +++++++------- src/jni/MetadataNode.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/jni/MetadataNode.cpp b/src/jni/MetadataNode.cpp index 516662381..37dcdb234 100644 --- a/src/jni/MetadataNode.cpp +++ b/src/jni/MetadataNode.cpp @@ -37,8 +37,8 @@ void MetadataNode::SubscribeCallbacks(ObjectManager *objectManager, s_getArrayLength = getArrayLengthCallback; auto isolate = Isolate::GetCurrent(); - auto key = Symbol::New(isolate, ConvertToV8String("tns::MetadataKey")); - s_metadataKey = new Persistent(isolate, key); + auto key = ConvertToV8String("tns::MetadataKey"); + s_metadataKey = new Persistent(isolate, key); } @@ -635,8 +635,8 @@ void MetadataNode::SetTypeMetadata(Isolate *isolate, Handle value, Typ MetadataNode* MetadataNode::GetInstanceMetadata(Isolate *isolate, const Handle& value) { MetadataNode *node = nullptr; - auto key = Local::New(isolate, *s_metadataKey); - auto ext = value->Get(key); + auto key = Local::New(isolate, *s_metadataKey); + auto ext = value->GetHiddenValue(key); if (!ext.IsEmpty()) { node = reinterpret_cast(ext.As()->Value()); @@ -646,8 +646,8 @@ MetadataNode* MetadataNode::GetInstanceMetadata(Isolate *isolate, const Handle value, MetadataNode *node) { - auto key = Local::New(isolate, *s_metadataKey); - value->Set(key, External::New(isolate, node)); + auto key = Local::New(isolate, *s_metadataKey); + value->SetHiddenValue(key, External::New(isolate, node)); } MetadataNode* MetadataNode::GetPackageMetadata(Isolate *isolate, const Handle& value) @@ -1280,6 +1280,6 @@ string MetadataNode::TNS_PREFIX = "com/tns/gen/"; MetadataReader MetadataNode::s_metadataReader; ObjectManager* MetadataNode::s_objectManager = nullptr; -Persistent* MetadataNode::s_metadataKey = nullptr; +Persistent* MetadataNode::s_metadataKey = nullptr; map*> MetadataNode::s_ctorFuncCache; map MetadataNode::s_extendedCtorFuncCache; diff --git a/src/jni/MetadataNode.h b/src/jni/MetadataNode.h index ff0c6e740..2a0b6d4bb 100644 --- a/src/jni/MetadataNode.h +++ b/src/jni/MetadataNode.h @@ -259,7 +259,7 @@ namespace tns static MetadataReader s_metadataReader; - static v8::Persistent *s_metadataKey; + static v8::Persistent *s_metadataKey; static ObjectManager *s_objectManager; From 1c2db5aedfbc0027b7522bd861593d8a0835e77b Mon Sep 17 00:00:00 2001 From: atanasovg Date: Wed, 29 Apr 2015 17:45:41 +0300 Subject: [PATCH 05/46] Update changelog. --- CHANGELOG.md | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c8704136e..c0e5d03f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,27 @@ -Android Runtime Changelog -============================== +# Android Runtime Changelog -0.10.0 (2015, April 17) -== +## 1.0.0 (2015, April 29) + +### New + +* Updated the V8 version to 4.1.0.27. +* Re-implemented debugger support (no more spontaneous dead locks). ### Fixed +* An issue with the error reporting routine. + +### Breaking Changes + +* Renamed global functions: + * `__log` (was `Log`) + * `__debugbreak` (was `waitForDebugger`) + * `__enableVerboseLogging` (was `enableVerboseLogging`) + * `__disableVerboseLogging` (was `disableVerboseLogging`) + * `__exit` (was `fail`) + +## 0.10.0 (2015, April 17) + ### New * Added Dynamic Generator for binding proxies. This boosts the initial loading time, especially on Android 5.0+ devices. From 60b262eb631b15fd59230a7e8eee2953ba0e5537 Mon Sep 17 00:00:00 2001 From: blagoev Date: Thu, 30 Apr 2015 11:12:30 +0300 Subject: [PATCH 06/46] Do not extract assets if app was not updated --- src/src/com/tns/AssetExtractor.java | 14 ++- .../tns/internal/DefaultExtractPolicy.java | 114 +++++++++++++++++- 2 files changed, 126 insertions(+), 2 deletions(-) diff --git a/src/src/com/tns/AssetExtractor.java b/src/src/com/tns/AssetExtractor.java index a0cdf5440..b68e089b1 100644 --- a/src/src/com/tns/AssetExtractor.java +++ b/src/src/com/tns/AssetExtractor.java @@ -1,9 +1,18 @@ package com.tns; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; + import com.tns.internal.ExtractPolicy; import com.tns.internal.FileExtractor; import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.util.Log; public class AssetExtractor @@ -16,7 +25,10 @@ public static void extractAssets(Context context, ExtractPolicy extractPolicy) if (extractor != null) { boolean success = extractor.extract(context); - if (Platform.IsLogEnabled) Log.d(Platform.DEFAULT_LOG_TAG, "extract returned " + success); + if (Platform.IsLogEnabled) + { + Log.d(Platform.DEFAULT_LOG_TAG, "extract returned " + success); + } } else if (extractPolicy.shouldExtract(context)) { diff --git a/src/src/com/tns/internal/DefaultExtractPolicy.java b/src/src/com/tns/internal/DefaultExtractPolicy.java index dbaf69cde..97f9a9559 100644 --- a/src/src/com/tns/internal/DefaultExtractPolicy.java +++ b/src/src/com/tns/internal/DefaultExtractPolicy.java @@ -1,17 +1,129 @@ package com.tns.internal; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; + +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.util.Log; + +import com.tns.Platform; + public class DefaultExtractPolicy implements ExtractPolicy { + private final static String ASSETS_THUMB_FILENAME = "assetsThumb"; + public boolean shouldExtract(android.content.Context context) { - return true; + String assetsThumb = generateAssetsThumb(context); + if (assetsThumb != null) + { + String assetsThumbFilePath = context.getFilesDir().getPath() + File.separatorChar + ASSETS_THUMB_FILENAME; + String oldAssetsThumb = getCachedAssetsThumb(assetsThumbFilePath); + if (oldAssetsThumb == null || !assetsThumb.equals(assetsThumbFilePath)) + { + saveNewAssetsThumb(assetsThumb, assetsThumbFilePath); + return true; + } + } + + return false; } + public boolean forceOverwrite() { return true; } + public FileExtractor extractor() { return null; } + + private static String generateAssetsThumb(Context context) + { + try + { + PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + int code = packageInfo.versionCode; + long updateTime = packageInfo.lastUpdateTime; + return String.valueOf(updateTime) + "-" + String.valueOf(code); + } + catch (PackageManager.NameNotFoundException e) + { + Log.e(Platform.DEFAULT_LOG_TAG, "Error while getting current assets thumb"); + e.printStackTrace(); + } + + return null; + } + + private static String getCachedAssetsThumb(String assetsThumbFilePath) + { + try + { + File cachedThumbFile = new File(assetsThumbFilePath); + if (cachedThumbFile.exists()) + { + FileInputStream in = new FileInputStream(cachedThumbFile); + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + String cachedThumb = reader.readLine(); + reader.close(); + in.close(); + return cachedThumb; + } + } + catch (FileNotFoundException e) + { + Log.e(Platform.DEFAULT_LOG_TAG, "Error while getting current assets thumb"); + e.printStackTrace(); + } + catch (IOException e) + { + Log.e(Platform.DEFAULT_LOG_TAG, "Error while getting current asstes thumb"); + e.printStackTrace(); + } + + return null; + } + + private void saveNewAssetsThumb(String newThumb, String assetsThumbFile) + { + File cachedThumbFile = new File(assetsThumbFile); + try + { + FileOutputStream out = new FileOutputStream(cachedThumbFile, false); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out)); + try + { + writer.write(newThumb); + writer.newLine(); + writer.flush(); + } + finally + { + writer.close(); + out.close(); + } + } + catch (FileNotFoundException e) + { + Log.e(Platform.DEFAULT_LOG_TAG, "Error while writting current assets thumb"); + e.printStackTrace(); + } + catch (IOException e) + { + Log.e(Platform.DEFAULT_LOG_TAG, "Error while writting current assets thumb"); + e.printStackTrace(); + } + } + } From 1bd2b8a24f7d5e051571473a054c3720fd34067b Mon Sep 17 00:00:00 2001 From: plamen5kov Date: Tue, 28 Apr 2015 14:53:47 +0300 Subject: [PATCH 07/46] refactored all tests to work with jasmine tests produce android_unit_test_results.xml file in /sdcard of device, removed old tests and unused files --- test-app/.settings/org.eclipse.jdt.core.prefs | 1 + .../Jasmine/jasmine-2.0.1/boot.js | 139 + .../Jasmine/jasmine-2.0.1/jasmine.js | 2517 +++++++++++++ .../jasmine-reporters/junit_reporter.js | 315 ++ .../jasmine-reporters/terminal_reporter.js | 222 ++ .../app/Infrastructure/Jasmine/jasmine.d.ts | 434 +++ test-app/assets/app/Infrastructure/timers.js | 51 + test-app/assets/app/bootstrap.js | 21 + test-app/assets/app/mainpage.js | 42 +- test-app/assets/app/modules/module.js | 1 + .../tests/dispatchCallbacksOnUiThreadTests.js | 50 +- .../app/tests/exceptionHandlingTests.js | 491 ++- .../assets/app/tests/extendClassNameTests.js | 74 +- .../assets/app/tests/extendedClassesTests.js | 143 +- .../assets/app/tests/finalFieldsSetTests.js | 40 +- .../tests/inheritanceChainResolutionTest.js | 54 +- .../app/tests/numericConversionTests.js | 517 ++- .../assets/app/tests/propertyAccessTests.js | 73 - .../assets/app/tests/stringConversionTests.js | 176 +- test-app/assets/app/tests/testGC.js | 365 +- .../app/tests/testIfAbleToRunExternalFile.js | 59 +- test-app/assets/app/tests/testWeakRef.js | 296 +- test-app/assets/app/tests/tests.js | 3253 ++++++++--------- .../tests/testsForRuntimeBindingGenerator.js | 89 +- .../assets/app/tests/testsForTypescript.js | 967 +++-- .../assets/app/tests/testsMemoryManagement.js | 58 +- test-app/assets/app/tests/testsWithContext.js | 216 +- 27 files changed, 7075 insertions(+), 3589 deletions(-) create mode 100644 test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/boot.js create mode 100644 test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/jasmine.js create mode 100644 test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/junit_reporter.js create mode 100644 test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/terminal_reporter.js create mode 100644 test-app/assets/app/Infrastructure/Jasmine/jasmine.d.ts create mode 100644 test-app/assets/app/Infrastructure/timers.js delete mode 100644 test-app/assets/app/tests/propertyAccessTests.js diff --git a/test-app/.settings/org.eclipse.jdt.core.prefs b/test-app/.settings/org.eclipse.jdt.core.prefs index 7341ab168..d17b6724d 100644 --- a/test-app/.settings/org.eclipse.jdt.core.prefs +++ b/test-app/.settings/org.eclipse.jdt.core.prefs @@ -1,5 +1,6 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.7 diff --git a/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/boot.js b/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/boot.js new file mode 100644 index 000000000..81b04095c --- /dev/null +++ b/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/boot.js @@ -0,0 +1,139 @@ +/** + Starting with version 2.0, this file "boots" Jasmine, performing all of the necessary initialization before executing the loaded environment and all of a project's specs. This file should be loaded after `jasmine.js`, but before any project source files or spec files are loaded. Thus this file can also be used to customize Jasmine for a project. + + If a project is using Jasmine via the standalone distribution, this file can be customized directly. If a project is using Jasmine via the [Ruby gem][jasmine-gem], this file can be copied into the support directory via `jasmine copy_boot_js`. Other environments (e.g., Python) will have different mechanisms. + + The location of `boot.js` can be specified and/or overridden in `jasmine.yml`. + + [jasmine-gem]: http://github.com/pivotal/jasmine-gem + */ + +var jasmineRequire = require('./jasmine'); +var JUnitXmlReporter = require('../jasmine-reporters/junit_reporter').JUnitXmlReporter; +var TerminalReporter = require('../jasmine-reporters/terminal_reporter').TerminalReporter; + +(function() { + /** + * ## Require & Instantiate + * + * Require Jasmine's core files. Specifically, this requires and attaches all of Jasmine's code to the `jasmine` reference. + */ + var jasmine = jasmineRequire.core(jasmineRequire); + + /** + * Create the Jasmine environment. This is used to run all specs in a project. + */ + var env = jasmine.getEnv(); + + /** + * ## The Global Interface + * + * Build up the functions that will be exposed as the Jasmine public interface. A project can customize, rename or alias any of these functions as desired, provided the implementation remains unchanged. + */ + var jasmineInterface = { + describe: function(description, specDefinitions) { + return env.describe(description, specDefinitions); + }, + + xdescribe: function(description, specDefinitions) { + return env.xdescribe(description, specDefinitions); + }, + + it: function(desc, func) { + return env.it(desc, func); + }, + + xit: function(desc, func) { + return env.xit(desc, func); + }, + + beforeEach: function(beforeEachFunction) { + return env.beforeEach(beforeEachFunction); + }, + + afterEach: function(afterEachFunction) { + return env.afterEach(afterEachFunction); + }, + + expect: function(actual) { + return env.expect(actual); + }, + + pending: function() { + return env.pending(); + }, + + spyOn: function(obj, methodName) { + return env.spyOn(obj, methodName); + }, + + jsApiReporter: new jasmine.JsApiReporter({ + timer: new jasmine.Timer() + }), + + execute: function() { + return env.execute(); + }, + + jasmine: jasmine + }; + + /** + * Add all of the Jasmine global/public interface to the proper global, so a project can use the public interface directly. For example, calling `describe` in specs instead of `jasmine.getEnv().describe`. + */ + if (typeof window == "undefined" && typeof global == "object") { + extend(global, jasmineInterface); + } else { + extend(window, jasmineInterface); + } + + /** + * Expose the interface for adding custom equality testers. + */ + jasmine.addCustomEqualityTester = function(tester) { + env.addCustomEqualityTester(tester); + }; + + /** + * Expose the interface for adding custom expectation matchers + */ + jasmine.addMatchers = function(matchers) { + return env.addMatchers(matchers); + }; + + /** + * Expose the mock interface for the JavaScript timeout functions + */ + jasmine.clock = function() { + return env.clock; + }; + + /** + * ## Runner Parameters + */ + + env.catchExceptions(true); + + /** + * The `jsApiReporter` also receives spec results, and is used by any environment that needs to extract the results from JavaScript. + */ + env.addReporter(jasmineInterface.jsApiReporter); +// + env.addReporter(new TerminalReporter({ + verbosity: 5 + })); + + env.addReporter(new JUnitXmlReporter()); + + env.specFilter = function(spec) { + return true; + }; + + /** + * Helper function for readability above. + */ + function extend(destination, source) { + for (var property in source) destination[property] = source[property]; + return destination; + } +}()); diff --git a/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/jasmine.js b/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/jasmine.js new file mode 100644 index 000000000..b590ef6ef --- /dev/null +++ b/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/jasmine.js @@ -0,0 +1,2517 @@ +/* +Copyright (c) 2008-2014 Pivotal Labs + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +function getJasmineRequireObj() { + if (typeof module !== 'undefined' && module.exports) { + return exports; + } else { + window.jasmineRequire = window.jasmineRequire || {}; + return window.jasmineRequire; + } +} + +getJasmineRequireObj().core = function(jRequire) { + var j$ = {}; + + jRequire.base(j$); + j$.util = jRequire.util(); + j$.Any = jRequire.Any(); + j$.CallTracker = jRequire.CallTracker(); + j$.MockDate = jRequire.MockDate(); + j$.Clock = jRequire.Clock(); + j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(); + j$.Env = jRequire.Env(j$); + j$.ExceptionFormatter = jRequire.ExceptionFormatter(); + j$.Expectation = jRequire.Expectation(); + j$.buildExpectationResult = jRequire.buildExpectationResult(); + j$.JsApiReporter = jRequire.JsApiReporter(); + j$.matchersUtil = jRequire.matchersUtil(j$); + j$.ObjectContaining = jRequire.ObjectContaining(j$); + j$.pp = jRequire.pp(j$); + j$.QueueRunner = jRequire.QueueRunner(j$); + j$.ReportDispatcher = jRequire.ReportDispatcher(); + j$.Spec = jRequire.Spec(j$); + j$.SpyStrategy = jRequire.SpyStrategy(); + j$.Suite = jRequire.Suite(); + j$.Timer = jRequire.Timer(); + j$.version = jRequire.version(); + + j$.matchers = jRequire.requireMatchers(jRequire, j$); + + return j$; +}; + +getJasmineRequireObj().requireMatchers = function(jRequire, j$) { + var availableMatchers = [ + 'toBe', + 'toBeCloseTo', + 'toBeDefined', + 'toBeFalsy', + 'toBeGreaterThan', + 'toBeLessThan', + 'toBeNaN', + 'toBeNull', + 'toBeTruthy', + 'toBeUndefined', + 'toContain', + 'toEqual', + 'toHaveBeenCalled', + 'toHaveBeenCalledWith', + 'toMatch', + 'toThrow', + 'toThrowError' + ], + matchers = {}; + + for (var i = 0; i < availableMatchers.length; i++) { + var name = availableMatchers[i]; + matchers[name] = jRequire[name](j$); + } + + return matchers; +}; + +getJasmineRequireObj().base = (function (jasmineGlobal) { + if (typeof module !== 'undefined' && module.exports) { + jasmineGlobal = global; + } + + return function(j$) { + j$.unimplementedMethod_ = function() { + throw new Error('unimplemented method'); + }; + + j$.MAX_PRETTY_PRINT_DEPTH = 40; + j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100; + j$.DEFAULT_TIMEOUT_INTERVAL = 5000; + + j$.getGlobal = function() { + return jasmineGlobal; + }; + + j$.getEnv = function(options) { + var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); + //jasmine. singletons in here (setTimeout blah blah). + return env; + }; + + j$.isArray_ = function(value) { + return j$.isA_('Array', value); + }; + + j$.isString_ = function(value) { + return j$.isA_('String', value); + }; + + j$.isNumber_ = function(value) { + return j$.isA_('Number', value); + }; + + j$.isA_ = function(typeName, value) { + return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; + }; + + j$.isDomNode = function(obj) { + return obj.nodeType > 0; + }; + + j$.any = function(clazz) { + return new j$.Any(clazz); + }; + + j$.objectContaining = function(sample) { + return new j$.ObjectContaining(sample); + }; + + j$.createSpy = function(name, originalFn) { + + var spyStrategy = new j$.SpyStrategy({ + name: name, + fn: originalFn, + getSpy: function() { return spy; } + }), + callTracker = new j$.CallTracker(), + spy = function() { + callTracker.track({ + object: this, + args: Array.prototype.slice.apply(arguments) + }); + return spyStrategy.exec.apply(this, arguments); + }; + + for (var prop in originalFn) { + if (prop === 'and' || prop === 'calls') { + throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon'); + } + + spy[prop] = originalFn[prop]; + } + + spy.and = spyStrategy; + spy.calls = callTracker; + + return spy; + }; + + j$.isSpy = function(putativeSpy) { + if (!putativeSpy) { + return false; + } + return putativeSpy.and instanceof j$.SpyStrategy && + putativeSpy.calls instanceof j$.CallTracker; + }; + + j$.createSpyObj = function(baseName, methodNames) { + if (!j$.isArray_(methodNames) || methodNames.length === 0) { + throw 'createSpyObj requires a non-empty array of method names to create spies for'; + } + var obj = {}; + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); + } + return obj; + }; + }; +})(this); + +getJasmineRequireObj().util = function() { + + var util = {}; + + util.inherit = function(childClass, parentClass) { + var Subclass = function() { + }; + Subclass.prototype = parentClass.prototype; + childClass.prototype = new Subclass(); + }; + + util.htmlEscape = function(str) { + if (!str) { + return str; + } + return str.replace(/&/g, '&') + .replace(//g, '>'); + }; + + util.argsToArray = function(args) { + var arrayOfArgs = []; + for (var i = 0; i < args.length; i++) { + arrayOfArgs.push(args[i]); + } + return arrayOfArgs; + }; + + util.isUndefined = function(obj) { + return obj === void 0; + }; + + util.arrayContains = function(array, search) { + var i = array.length; + while (i--) { + if (array[i] == search) { + return true; + } + } + return false; + }; + + return util; +}; + +getJasmineRequireObj().Spec = function(j$) { + function Spec(attrs) { + this.expectationFactory = attrs.expectationFactory; + this.resultCallback = attrs.resultCallback || function() {}; + this.id = attrs.id; + this.description = attrs.description || ''; + this.fn = attrs.fn; + this.beforeFns = attrs.beforeFns || function() { return []; }; + this.afterFns = attrs.afterFns || function() { return []; }; + this.onStart = attrs.onStart || function() {}; + this.exceptionFormatter = attrs.exceptionFormatter || function() {}; + this.getSpecName = attrs.getSpecName || function() { return ''; }; + this.expectationResultFactory = attrs.expectationResultFactory || function() { }; + this.queueRunnerFactory = attrs.queueRunnerFactory || function() {}; + this.catchingExceptions = attrs.catchingExceptions || function() { return true; }; + + if (!this.fn) { + this.pend(); + } + + this.result = { + id: this.id, + description: this.description, + fullName: this.getFullName(), + failedExpectations: [], + passedExpectations: [] + }; + } + + Spec.prototype.addExpectationResult = function(passed, data) { + var expectationResult = this.expectationResultFactory(data); + if (passed) { + this.result.passedExpectations.push(expectationResult); + } else { + this.result.failedExpectations.push(expectationResult); + } + }; + + Spec.prototype.expect = function(actual) { + return this.expectationFactory(actual, this); + }; + + Spec.prototype.execute = function(onComplete) { + var self = this; + + this.onStart(this); + + if (this.markedPending || this.disabled) { + complete(); + return; + } + + var allFns = this.beforeFns().concat(this.fn).concat(this.afterFns()); + + this.queueRunnerFactory({ + fns: allFns, + onException: onException, + onComplete: complete, + enforceTimeout: function() { return true; } + }); + + function onException(e) { + if (Spec.isPendingSpecException(e)) { + self.pend(); + return; + } + + self.addExpectationResult(false, { + matcherName: '', + passed: false, + expected: '', + actual: '', + error: e + }); + } + + function complete() { + self.result.status = self.status(); + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + }; + + Spec.prototype.disable = function() { + this.disabled = true; + }; + + Spec.prototype.pend = function() { + this.markedPending = true; + }; + + Spec.prototype.status = function() { + if (this.disabled) { + return 'disabled'; + } + + if (this.markedPending) { + return 'pending'; + } + + if (this.result.failedExpectations.length > 0) { + return 'failed'; + } else { + return 'passed'; + } + }; + + Spec.prototype.getFullName = function() { + return this.getSpecName(this); + }; + + Spec.pendingSpecExceptionMessage = '=> marked Pending'; + + Spec.isPendingSpecException = function(e) { + return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1); + }; + + return Spec; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Spec = jasmineRequire.Spec; +} + +getJasmineRequireObj().Env = function(j$) { + function Env(options) { + options = options || {}; + + var self = this; + var global = options.global || j$.getGlobal(); + + var totalSpecsDefined = 0; + + var catchExceptions = true; + + var realSetTimeout = j$.getGlobal().setTimeout; + var realClearTimeout = j$.getGlobal().clearTimeout; + + this.clock = new j$.Clock(global, new j$.DelayedFunctionScheduler(), new j$.MockDate(global)); + + var runnableLookupTable = {}; + + var spies = []; + + var currentSpec = null; + var currentSuite = null; + + var reporter = new j$.ReportDispatcher([ + 'jasmineStarted', + 'jasmineDone', + 'suiteStarted', + 'suiteDone', + 'specStarted', + 'specDone' + ]); + + this.specFilter = function() { + return true; + }; + + var equalityTesters = []; + + var customEqualityTesters = []; + this.addCustomEqualityTester = function(tester) { + customEqualityTesters.push(tester); + }; + + j$.Expectation.addCoreMatchers(j$.matchers); + + var nextSpecId = 0; + var getNextSpecId = function() { + return 'spec' + nextSpecId++; + }; + + var nextSuiteId = 0; + var getNextSuiteId = function() { + return 'suite' + nextSuiteId++; + }; + + var expectationFactory = function(actual, spec) { + return j$.Expectation.Factory({ + util: j$.matchersUtil, + customEqualityTesters: customEqualityTesters, + actual: actual, + addExpectationResult: addExpectationResult + }); + + function addExpectationResult(passed, result) { + return spec.addExpectationResult(passed, result); + } + }; + + var specStarted = function(spec) { + currentSpec = spec; + reporter.specStarted(spec.result); + }; + + var beforeFns = function(suite) { + return function() { + var befores = []; + while(suite) { + befores = befores.concat(suite.beforeFns); + suite = suite.parentSuite; + } + return befores.reverse(); + }; + }; + + var afterFns = function(suite) { + return function() { + var afters = []; + while(suite) { + afters = afters.concat(suite.afterFns); + suite = suite.parentSuite; + } + return afters; + }; + }; + + var getSpecName = function(spec, suite) { + return suite.getFullName() + ' ' + spec.description; + }; + + // TODO: we may just be able to pass in the fn instead of wrapping here + var buildExpectationResult = j$.buildExpectationResult, + exceptionFormatter = new j$.ExceptionFormatter(), + expectationResultFactory = function(attrs) { + attrs.messageFormatter = exceptionFormatter.message; + attrs.stackFormatter = exceptionFormatter.stack; + + return buildExpectationResult(attrs); + }; + + // TODO: fix this naming, and here's where the value comes in + this.catchExceptions = function(value) { + catchExceptions = !!value; + return catchExceptions; + }; + + this.catchingExceptions = function() { + return catchExceptions; + }; + + var maximumSpecCallbackDepth = 20; + var currentSpecCallbackDepth = 0; + + function clearStack(fn) { + currentSpecCallbackDepth++; + if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) { + currentSpecCallbackDepth = 0; + realSetTimeout(fn, 0); + } else { + fn(); + } + } + + var catchException = function(e) { + return j$.Spec.isPendingSpecException(e) || catchExceptions; + }; + + var queueRunnerFactory = function(options) { + options.catchException = catchException; + options.clearStack = options.clearStack || clearStack; + options.timer = {setTimeout: setTimeout, clearTimeout: clearTimeout}; + + new j$.QueueRunner(options).execute(); + }; + + var topSuite = new j$.Suite({ + env: this, + id: getNextSuiteId(), + description: 'Jasmine__TopLevel__Suite', + queueRunner: queueRunnerFactory, + resultCallback: function() {} // TODO - hook this up + }); + runnableLookupTable[topSuite.id] = topSuite; + currentSuite = topSuite; + + this.topSuite = function() { + return topSuite; + }; + + this.execute = function(runnablesToRun) { + runnablesToRun = runnablesToRun || [topSuite.id]; + + var allFns = []; + for(var i = 0; i < runnablesToRun.length; i++) { + var runnable = runnableLookupTable[runnablesToRun[i]]; + allFns.push((function(runnable) { return function(done) { runnable.execute(done); }; })(runnable)); + } + + reporter.jasmineStarted({ + totalSpecsDefined: totalSpecsDefined + }); + + queueRunnerFactory({fns: allFns, onComplete: reporter.jasmineDone}); + }; + + this.addReporter = function(reporterToAdd) { + reporter.addReporter(reporterToAdd); + }; + + this.addMatchers = function(matchersToAdd) { + j$.Expectation.addMatchers(matchersToAdd); + }; + + this.spyOn = function(obj, methodName) { + if (j$.util.isUndefined(obj)) { + throw new Error('spyOn could not find an object to spy upon for ' + methodName + '()'); + } + + if (j$.util.isUndefined(obj[methodName])) { + throw new Error(methodName + '() method does not exist'); + } + + if (obj[methodName] && j$.isSpy(obj[methodName])) { + //TODO?: should this return the current spy? Downside: may cause user confusion about spy state + throw new Error(methodName + ' has already been spied upon'); + } + + var spy = j$.createSpy(methodName, obj[methodName]); + + spies.push({ + spy: spy, + baseObj: obj, + methodName: methodName, + originalValue: obj[methodName] + }); + + obj[methodName] = spy; + + return spy; + }; + + var suiteFactory = function(description) { + var suite = new j$.Suite({ + env: self, + id: getNextSuiteId(), + description: description, + parentSuite: currentSuite, + queueRunner: queueRunnerFactory, + onStart: suiteStarted, + resultCallback: function(attrs) { + reporter.suiteDone(attrs); + } + }); + + runnableLookupTable[suite.id] = suite; + return suite; + }; + + this.describe = function(description, specDefinitions) { + var suite = suiteFactory(description); + + var parentSuite = currentSuite; + parentSuite.addChild(suite); + currentSuite = suite; + + var declarationError = null; + try { + specDefinitions.call(suite); + } catch (e) { + declarationError = e; + } + + if (declarationError) { + this.it('encountered a declaration exception', function() { + throw declarationError; + }); + } + + currentSuite = parentSuite; + + return suite; + }; + + this.xdescribe = function(description, specDefinitions) { + var suite = this.describe(description, specDefinitions); + suite.disable(); + return suite; + }; + + var specFactory = function(description, fn, suite) { + totalSpecsDefined++; + + var spec = new j$.Spec({ + id: getNextSpecId(), + beforeFns: beforeFns(suite), + afterFns: afterFns(suite), + expectationFactory: expectationFactory, + exceptionFormatter: exceptionFormatter, + resultCallback: specResultCallback, + getSpecName: function(spec) { + return getSpecName(spec, suite); + }, + onStart: specStarted, + description: description, + expectationResultFactory: expectationResultFactory, + queueRunnerFactory: queueRunnerFactory, + fn: fn + }); + + runnableLookupTable[spec.id] = spec; + + if (!self.specFilter(spec)) { + spec.disable(); + } + + return spec; + + function removeAllSpies() { + for (var i = 0; i < spies.length; i++) { + var spyEntry = spies[i]; + spyEntry.baseObj[spyEntry.methodName] = spyEntry.originalValue; + } + spies = []; + } + + function specResultCallback(result) { + removeAllSpies(); + j$.Expectation.resetMatchers(); + customEqualityTesters = []; + currentSpec = null; + reporter.specDone(result); + } + }; + + var suiteStarted = function(suite) { + reporter.suiteStarted(suite.result); + }; + + this.it = function(description, fn) { + var spec = specFactory(description, fn, currentSuite); + currentSuite.addChild(spec); + return spec; + }; + + this.xit = function(description, fn) { + var spec = this.it(description, fn); + spec.pend(); + return spec; + }; + + this.expect = function(actual) { + if (!currentSpec) { + throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out'); + } + + return currentSpec.expect(actual); + }; + + this.beforeEach = function(beforeEachFunction) { + currentSuite.beforeEach(beforeEachFunction); + }; + + this.afterEach = function(afterEachFunction) { + currentSuite.afterEach(afterEachFunction); + }; + + this.pending = function() { + throw j$.Spec.pendingSpecExceptionMessage; + }; + } + + return Env; +}; + +getJasmineRequireObj().JsApiReporter = function() { + + var noopTimer = { + start: function(){}, + elapsed: function(){ return 0; } + }; + + function JsApiReporter(options) { + var timer = options.timer || noopTimer, + status = 'loaded'; + + this.started = false; + this.finished = false; + + this.jasmineStarted = function() { + this.started = true; + status = 'started'; + timer.start(); + }; + + var executionTime; + + this.jasmineDone = function() { + this.finished = true; + executionTime = timer.elapsed(); + status = 'done'; + }; + + this.status = function() { + return status; + }; + + var suites = {}; + + this.suiteStarted = function(result) { + storeSuite(result); + }; + + this.suiteDone = function(result) { + storeSuite(result); + }; + + function storeSuite(result) { + suites[result.id] = result; + } + + this.suites = function() { + return suites; + }; + + var specs = []; + this.specStarted = function(result) { }; + + this.specDone = function(result) { + specs.push(result); + }; + + this.specResults = function(index, length) { + return specs.slice(index, index + length); + }; + + this.specs = function() { + return specs; + }; + + this.executionTime = function() { + return executionTime; + }; + + } + + return JsApiReporter; +}; + +getJasmineRequireObj().Any = function() { + + function Any(expectedObject) { + this.expectedObject = expectedObject; + } + + Any.prototype.jasmineMatches = function(other) { + if (this.expectedObject == String) { + return typeof other == 'string' || other instanceof String; + } + + if (this.expectedObject == Number) { + return typeof other == 'number' || other instanceof Number; + } + + if (this.expectedObject == Function) { + return typeof other == 'function' || other instanceof Function; + } + + if (this.expectedObject == Object) { + return typeof other == 'object'; + } + + if (this.expectedObject == Boolean) { + return typeof other == 'boolean'; + } + + return other instanceof this.expectedObject; + }; + + Any.prototype.jasmineToString = function() { + return ''; + }; + + return Any; +}; + +getJasmineRequireObj().CallTracker = function() { + + function CallTracker() { + var calls = []; + + this.track = function(context) { + calls.push(context); + }; + + this.any = function() { + return !!calls.length; + }; + + this.count = function() { + return calls.length; + }; + + this.argsFor = function(index) { + var call = calls[index]; + return call ? call.args : []; + }; + + this.all = function() { + return calls; + }; + + this.allArgs = function() { + var callArgs = []; + for(var i = 0; i < calls.length; i++){ + callArgs.push(calls[i].args); + } + + return callArgs; + }; + + this.first = function() { + return calls[0]; + }; + + this.mostRecent = function() { + return calls[calls.length - 1]; + }; + + this.reset = function() { + calls = []; + }; + } + + return CallTracker; +}; + +getJasmineRequireObj().Clock = function() { + function Clock(global, delayedFunctionScheduler, mockDate) { + var self = this, + realTimingFunctions = { + setTimeout: global.setTimeout, + clearTimeout: global.clearTimeout, + setInterval: global.setInterval, + clearInterval: global.clearInterval + }, + fakeTimingFunctions = { + setTimeout: setTimeout, + clearTimeout: clearTimeout, + setInterval: setInterval, + clearInterval: clearInterval + }, + installed = false, + timer; + + + self.install = function() { + replace(global, fakeTimingFunctions); + timer = fakeTimingFunctions; + installed = true; + + return self; + }; + + self.uninstall = function() { + delayedFunctionScheduler.reset(); + mockDate.uninstall(); + replace(global, realTimingFunctions); + + timer = realTimingFunctions; + installed = false; + }; + + self.mockDate = function(initialDate) { + mockDate.install(initialDate); + }; + + self.setTimeout = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill'); + } + return timer.setTimeout(fn, delay); + } + return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]); + }; + + self.setInterval = function(fn, delay, params) { + if (legacyIE()) { + if (arguments.length > 2) { + throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill'); + } + return timer.setInterval(fn, delay); + } + return Function.prototype.apply.apply(timer.setInterval, [global, arguments]); + }; + + self.clearTimeout = function(id) { + return Function.prototype.call.apply(timer.clearTimeout, [global, id]); + }; + + self.clearInterval = function(id) { + return Function.prototype.call.apply(timer.clearInterval, [global, id]); + }; + + self.tick = function(millis) { + if (installed) { + mockDate.tick(millis); + delayedFunctionScheduler.tick(millis); + } else { + throw new Error('Mock clock is not installed, use jasmine.clock().install()'); + } + }; + + return self; + + function legacyIE() { + //if these methods are polyfilled, apply will be present + return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply; + } + + function replace(dest, source) { + for (var prop in source) { + dest[prop] = source[prop]; + } + } + + function setTimeout(fn, delay) { + return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2)); + } + + function clearTimeout(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function setInterval(fn, interval) { + return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true); + } + + function clearInterval(id) { + return delayedFunctionScheduler.removeFunctionWithId(id); + } + + function argSlice(argsObj, n) { + return Array.prototype.slice.call(argsObj, n); + } + } + + return Clock; +}; + +getJasmineRequireObj().DelayedFunctionScheduler = function() { + function DelayedFunctionScheduler() { + var self = this; + var scheduledLookup = []; + var scheduledFunctions = {}; + var currentTime = 0; + var delayedFnCount = 0; + + self.tick = function(millis) { + millis = millis || 0; + var endTime = currentTime + millis; + + runScheduledFunctions(endTime); + currentTime = endTime; + }; + + self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { + var f; + if (typeof(funcToCall) === 'string') { + /* jshint evil: true */ + f = function() { return eval(funcToCall); }; + /* jshint evil: false */ + } else { + f = funcToCall; + } + + millis = millis || 0; + timeoutKey = timeoutKey || ++delayedFnCount; + runAtMillis = runAtMillis || (currentTime + millis); + + var funcToSchedule = { + runAtMillis: runAtMillis, + funcToCall: f, + recurring: recurring, + params: params, + timeoutKey: timeoutKey, + millis: millis + }; + + if (runAtMillis in scheduledFunctions) { + scheduledFunctions[runAtMillis].push(funcToSchedule); + } else { + scheduledFunctions[runAtMillis] = [funcToSchedule]; + scheduledLookup.push(runAtMillis); + scheduledLookup.sort(function (a, b) { + return a - b; + }); + } + + return timeoutKey; + }; + + self.removeFunctionWithId = function(timeoutKey) { + for (var runAtMillis in scheduledFunctions) { + var funcs = scheduledFunctions[runAtMillis]; + var i = indexOfFirstToPass(funcs, function (func) { + return func.timeoutKey === timeoutKey; + }); + + if (i > -1) { + if (funcs.length === 1) { + delete scheduledFunctions[runAtMillis]; + deleteFromLookup(runAtMillis); + } else { + funcs.splice(i, 1); + } + + // intervals get rescheduled when executed, so there's never more + // than a single scheduled function with a given timeoutKey + break; + } + } + }; + + self.reset = function() { + currentTime = 0; + scheduledLookup = []; + scheduledFunctions = {}; + delayedFnCount = 0; + }; + + return self; + + function indexOfFirstToPass(array, testFn) { + var index = -1; + + for (var i = 0; i < array.length; ++i) { + if (testFn(array[i])) { + index = i; + break; + } + } + + return index; + } + + function deleteFromLookup(key) { + var value = Number(key); + var i = indexOfFirstToPass(scheduledLookup, function (millis) { + return millis === value; + }); + + if (i > -1) { + scheduledLookup.splice(i, 1); + } + } + + function reschedule(scheduledFn) { + self.scheduleFunction(scheduledFn.funcToCall, + scheduledFn.millis, + scheduledFn.params, + true, + scheduledFn.timeoutKey, + scheduledFn.runAtMillis + scheduledFn.millis); + } + + function runScheduledFunctions(endTime) { + if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { + return; + } + + do { + currentTime = scheduledLookup.shift(); + + var funcsToRun = scheduledFunctions[currentTime]; + delete scheduledFunctions[currentTime]; + + for (var i = 0; i < funcsToRun.length; ++i) { + var funcToRun = funcsToRun[i]; + funcToRun.funcToCall.apply(null, funcToRun.params || []); + + if (funcToRun.recurring) { + reschedule(funcToRun); + } + } + } while (scheduledLookup.length > 0 && + // checking first if we're out of time prevents setTimeout(0) + // scheduled in a funcToRun from forcing an extra iteration + currentTime !== endTime && + scheduledLookup[0] <= endTime); + } + } + + return DelayedFunctionScheduler; +}; + +getJasmineRequireObj().ExceptionFormatter = function() { + function ExceptionFormatter() { + this.message = function(error) { + var message = ''; + + if (error.name && error.message) { + message += error.name + ': ' + error.message; + } else { + message += error.toString() + ' thrown'; + } + + if (error.fileName || error.sourceURL) { + message += ' in ' + (error.fileName || error.sourceURL); + } + + if (error.line || error.lineNumber) { + message += ' (line ' + (error.line || error.lineNumber) + ')'; + } + + return message; + }; + + this.stack = function(error) { + return error ? error.stack : null; + }; + } + + return ExceptionFormatter; +}; + +getJasmineRequireObj().Expectation = function() { + + var matchers = {}; + + function Expectation(options) { + this.util = options.util || { buildFailureMessage: function() {} }; + this.customEqualityTesters = options.customEqualityTesters || []; + this.actual = options.actual; + this.addExpectationResult = options.addExpectationResult || function(){}; + this.isNot = options.isNot; + + for (var matcherName in matchers) { + this[matcherName] = matchers[matcherName]; + } + } + + Expectation.prototype.wrapCompare = function(name, matcherFactory) { + return function() { + var args = Array.prototype.slice.call(arguments, 0), + expected = args.slice(0), + message = ''; + + args.unshift(this.actual); + + var matcher = matcherFactory(this.util, this.customEqualityTesters), + matcherCompare = matcher.compare; + + function defaultNegativeCompare() { + var result = matcher.compare.apply(null, args); + result.pass = !result.pass; + return result; + } + + if (this.isNot) { + matcherCompare = matcher.negativeCompare || defaultNegativeCompare; + } + + var result = matcherCompare.apply(null, args); + + if (!result.pass) { + if (!result.message) { + args.unshift(this.isNot); + args.unshift(name); + message = this.util.buildFailureMessage.apply(null, args); + } else { + if (Object.prototype.toString.apply(result.message) === '[object Function]') { + message = result.message(); + } else { + message = result.message; + } + } + } + + if (expected.length == 1) { + expected = expected[0]; + } + + // TODO: how many of these params are needed? + this.addExpectationResult( + result.pass, + { + matcherName: name, + passed: result.pass, + message: message, + actual: this.actual, + expected: expected // TODO: this may need to be arrayified/sliced + } + ); + }; + }; + + Expectation.addCoreMatchers = function(matchers) { + var prototype = Expectation.prototype; + for (var matcherName in matchers) { + var matcher = matchers[matcherName]; + prototype[matcherName] = prototype.wrapCompare(matcherName, matcher); + } + }; + + Expectation.addMatchers = function(matchersToAdd) { + for (var name in matchersToAdd) { + var matcher = matchersToAdd[name]; + matchers[name] = Expectation.prototype.wrapCompare(name, matcher); + } + }; + + Expectation.resetMatchers = function() { + for (var name in matchers) { + delete matchers[name]; + } + }; + + Expectation.Factory = function(options) { + options = options || {}; + + var expect = new Expectation(options); + + // TODO: this would be nice as its own Object - NegativeExpectation + // TODO: copy instead of mutate options + options.isNot = true; + expect.not = new Expectation(options); + + return expect; + }; + + return Expectation; +}; + +//TODO: expectation result may make more sense as a presentation of an expectation. +getJasmineRequireObj().buildExpectationResult = function() { + function buildExpectationResult(options) { + var messageFormatter = options.messageFormatter || function() {}, + stackFormatter = options.stackFormatter || function() {}; + + return { + matcherName: options.matcherName, + expected: options.expected, + actual: options.actual, + message: message(), + stack: stack(), + passed: options.passed + }; + + function message() { + if (options.passed) { + return 'Passed.'; + } else if (options.message) { + return options.message; + } else if (options.error) { + return messageFormatter(options.error); + } + return ''; + } + + function stack() { + if (options.passed) { + return ''; + } + + var error = options.error; + if (!error) { + try { + throw new Error(message()); + } catch (e) { + error = e; + } + } + return stackFormatter(error); + } + } + + return buildExpectationResult; +}; + +getJasmineRequireObj().MockDate = function() { + function MockDate(global) { + var self = this; + var currentTime = 0; + + if (!global || !global.Date) { + self.install = function() {}; + self.tick = function() {}; + self.uninstall = function() {}; + return self; + } + + var GlobalDate = global.Date; + + self.install = function(mockDate) { + if (mockDate instanceof GlobalDate) { + currentTime = mockDate.getTime(); + } else { + currentTime = new GlobalDate().getTime(); + } + + global.Date = FakeDate; + }; + + self.tick = function(millis) { + millis = millis || 0; + currentTime = currentTime + millis; + }; + + self.uninstall = function() { + currentTime = 0; + global.Date = GlobalDate; + }; + + createDateProperties(); + + return self; + + function FakeDate() { + if (arguments.length === 0) { + return new GlobalDate(currentTime); + } else { + return new GlobalDate(arguments[0], arguments[1], arguments[2], + arguments[3], arguments[4], arguments[5], arguments[6]); + } + } + + function createDateProperties() { + + FakeDate.now = function() { + if (GlobalDate.now) { + return currentTime; + } else { + throw new Error('Browser does not support Date.now()'); + } + }; + + FakeDate.toSource = GlobalDate.toSource; + FakeDate.toString = GlobalDate.toString; + FakeDate.parse = GlobalDate.parse; + FakeDate.UTC = GlobalDate.UTC; + } + } + + return MockDate; +}; + +getJasmineRequireObj().ObjectContaining = function(j$) { + + function ObjectContaining(sample) { + this.sample = sample; + } + + ObjectContaining.prototype.jasmineMatches = function(other, mismatchKeys, mismatchValues) { + if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); } + + mismatchKeys = mismatchKeys || []; + mismatchValues = mismatchValues || []; + + var hasKey = function(obj, keyName) { + return obj !== null && !j$.util.isUndefined(obj[keyName]); + }; + + for (var property in this.sample) { + if (!hasKey(other, property) && hasKey(this.sample, property)) { + mismatchKeys.push('expected has key \'' + property + '\', but missing from actual.'); + } + else if (!j$.matchersUtil.equals(other[property], this.sample[property])) { + mismatchValues.push('\'' + property + '\' was \'' + (other[property] ? j$.util.htmlEscape(other[property].toString()) : other[property]) + '\' in actual, but was \'' + (this.sample[property] ? j$.util.htmlEscape(this.sample[property].toString()) : this.sample[property]) + '\' in expected.'); + } + } + + return (mismatchKeys.length === 0 && mismatchValues.length === 0); + }; + + ObjectContaining.prototype.jasmineToString = function() { + return ''; + }; + + return ObjectContaining; +}; + +getJasmineRequireObj().pp = function(j$) { + + function PrettyPrinter() { + this.ppNestLevel_ = 0; + this.seen = []; + } + + PrettyPrinter.prototype.format = function(value) { + this.ppNestLevel_++; + try { + if (j$.util.isUndefined(value)) { + this.emitScalar('undefined'); + } else if (value === null) { + this.emitScalar('null'); + } else if (value === 0 && 1/value === -Infinity) { + this.emitScalar('-0'); + } else if (value === j$.getGlobal()) { + this.emitScalar(''); + } else if (value.jasmineToString) { + this.emitScalar(value.jasmineToString()); + } else if (typeof value === 'string') { + this.emitString(value); + } else if (j$.isSpy(value)) { + this.emitScalar('spy on ' + value.and.identity()); + } else if (value instanceof RegExp) { + this.emitScalar(value.toString()); + } else if (typeof value === 'function') { + this.emitScalar('Function'); + } else if (typeof value.nodeType === 'number') { + this.emitScalar('HTMLNode'); + } else if (value instanceof Date) { + this.emitScalar('Date(' + value + ')'); + } else if (j$.util.arrayContains(this.seen, value)) { + this.emitScalar(''); + } else if (j$.isArray_(value) || j$.isA_('Object', value)) { + this.seen.push(value); + if (j$.isArray_(value)) { + this.emitArray(value); + } else { + this.emitObject(value); + } + this.seen.pop(); + } else { + this.emitScalar(value.toString()); + } + } finally { + this.ppNestLevel_--; + } + }; + + PrettyPrinter.prototype.iterateObject = function(obj, fn) { + for (var property in obj) { + if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; } + fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) && + obj.__lookupGetter__(property) !== null) : false); + } + }; + + PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_; + PrettyPrinter.prototype.emitString = j$.unimplementedMethod_; + + function StringPrettyPrinter() { + PrettyPrinter.call(this); + + this.string = ''; + } + + j$.util.inherit(StringPrettyPrinter, PrettyPrinter); + + StringPrettyPrinter.prototype.emitScalar = function(value) { + this.append(value); + }; + + StringPrettyPrinter.prototype.emitString = function(value) { + this.append('\'' + value + '\''); + }; + + StringPrettyPrinter.prototype.emitArray = function(array) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append('Array'); + return; + } + var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); + this.append('[ '); + for (var i = 0; i < length; i++) { + if (i > 0) { + this.append(', '); + } + this.format(array[i]); + } + if(array.length > length){ + this.append(', ...'); + } + this.append(' ]'); + }; + + StringPrettyPrinter.prototype.emitObject = function(obj) { + if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { + this.append('Object'); + return; + } + + var self = this; + this.append('{ '); + var first = true; + + this.iterateObject(obj, function(property, isGetter) { + if (first) { + first = false; + } else { + self.append(', '); + } + + self.append(property); + self.append(': '); + if (isGetter) { + self.append(''); + } else { + self.format(obj[property]); + } + }); + + this.append(' }'); + }; + + StringPrettyPrinter.prototype.append = function(value) { + this.string += value; + }; + + return function(value) { + var stringPrettyPrinter = new StringPrettyPrinter(); + stringPrettyPrinter.format(value); + return stringPrettyPrinter.string; + }; +}; + +getJasmineRequireObj().QueueRunner = function(j$) { + + function once(fn) { + var called = false; + return function() { + if (!called) { + called = true; + fn(); + } + }; + } + + function QueueRunner(attrs) { + this.fns = attrs.fns || []; + this.onComplete = attrs.onComplete || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + this.onException = attrs.onException || function() {}; + this.catchException = attrs.catchException || function() { return true; }; + this.enforceTimeout = attrs.enforceTimeout || function() { return false; }; + this.userContext = {}; + this.timer = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout}; + } + + QueueRunner.prototype.execute = function() { + this.run(this.fns, 0); + }; + + QueueRunner.prototype.run = function(fns, recursiveIndex) { + var length = fns.length, + self = this, + iterativeIndex; + + for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) { + var fn = fns[iterativeIndex]; + if (fn.length > 0) { + return attemptAsync(fn); + } else { + attemptSync(fn); + } + } + + var runnerDone = iterativeIndex >= length; + + if (runnerDone) { + this.clearStack(this.onComplete); + } + + function attemptSync(fn) { + try { + fn.call(self.userContext); + } catch (e) { + handleException(e); + } + } + + function attemptAsync(fn) { + var clearTimeout = function () { + Function.prototype.apply.apply(self.timer.clearTimeout, [j$.getGlobal(), [timeoutId]]); + }, + next = once(function () { + clearTimeout(timeoutId); + self.run(fns, iterativeIndex + 1); + }), + timeoutId; + + if (self.enforceTimeout()) { + timeoutId = Function.prototype.apply.apply(self.timer.setTimeout, [j$.getGlobal(), [function() { + self.onException(new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.')); + next(); + }, j$.DEFAULT_TIMEOUT_INTERVAL]]); + } + + try { + fn.call(self.userContext, next); + } catch (e) { + handleException(e); + next(); + } + } + + function handleException(e) { + self.onException(e); + if (!self.catchException(e)) { + //TODO: set a var when we catch an exception and + //use a finally block to close the loop in a nice way.. + throw e; + } + } + }; + + return QueueRunner; +}; + +getJasmineRequireObj().ReportDispatcher = function() { + function ReportDispatcher(methods) { + + var dispatchedMethods = methods || []; + + for (var i = 0; i < dispatchedMethods.length; i++) { + var method = dispatchedMethods[i]; + this[method] = (function(m) { + return function() { + dispatch(m, arguments); + }; + }(method)); + } + + var reporters = []; + + this.addReporter = function(reporter) { + reporters.push(reporter); + }; + + return this; + + function dispatch(method, args) { + for (var i = 0; i < reporters.length; i++) { + var reporter = reporters[i]; + if (reporter[method]) { + reporter[method].apply(reporter, args); + } + } + } + } + + return ReportDispatcher; +}; + + +getJasmineRequireObj().SpyStrategy = function() { + + function SpyStrategy(options) { + options = options || {}; + + var identity = options.name || 'unknown', + originalFn = options.fn || function() {}, + getSpy = options.getSpy || function() {}, + plan = function() {}; + + this.identity = function() { + return identity; + }; + + this.exec = function() { + return plan.apply(this, arguments); + }; + + this.callThrough = function() { + plan = originalFn; + return getSpy(); + }; + + this.returnValue = function(value) { + plan = function() { + return value; + }; + return getSpy(); + }; + + this.throwError = function(something) { + var error = (something instanceof Error) ? something : new Error(something); + plan = function() { + throw error; + }; + return getSpy(); + }; + + this.callFake = function(fn) { + plan = fn; + return getSpy(); + }; + + this.stub = function(fn) { + plan = function() {}; + return getSpy(); + }; + } + + return SpyStrategy; +}; + +getJasmineRequireObj().Suite = function() { + function Suite(attrs) { + this.env = attrs.env; + this.id = attrs.id; + this.parentSuite = attrs.parentSuite; + this.description = attrs.description; + this.onStart = attrs.onStart || function() {}; + this.resultCallback = attrs.resultCallback || function() {}; + this.clearStack = attrs.clearStack || function(fn) {fn();}; + + this.beforeFns = []; + this.afterFns = []; + this.queueRunner = attrs.queueRunner || function() {}; + this.disabled = false; + + this.children = []; + + this.result = { + id: this.id, + status: this.disabled ? 'disabled' : '', + description: this.description, + fullName: this.getFullName() + }; + } + + Suite.prototype.getFullName = function() { + var fullName = this.description; + for (var parentSuite = this.parentSuite; parentSuite; parentSuite = parentSuite.parentSuite) { + if (parentSuite.parentSuite) { + fullName = parentSuite.description + ' ' + fullName; + } + } + return fullName; + }; + + Suite.prototype.disable = function() { + this.disabled = true; + }; + + Suite.prototype.beforeEach = function(fn) { + this.beforeFns.unshift(fn); + }; + + Suite.prototype.afterEach = function(fn) { + this.afterFns.unshift(fn); + }; + + Suite.prototype.addChild = function(child) { + this.children.push(child); + }; + + Suite.prototype.execute = function(onComplete) { + var self = this; + if (this.disabled) { + complete(); + return; + } + + var allFns = []; + + for (var i = 0; i < this.children.length; i++) { + allFns.push(wrapChildAsAsync(this.children[i])); + } + + this.onStart(this); + + this.queueRunner({ + fns: allFns, + onComplete: complete + }); + + function complete() { + self.resultCallback(self.result); + + if (onComplete) { + onComplete(); + } + } + + function wrapChildAsAsync(child) { + return function(done) { child.execute(done); }; + } + }; + + return Suite; +}; + +if (typeof window == void 0 && typeof exports == 'object') { + exports.Suite = jasmineRequire.Suite; +} + +getJasmineRequireObj().Timer = function() { + var defaultNow = (function(Date) { + return function() { return new Date().getTime(); }; + })(Date); + + function Timer(options) { + options = options || {}; + + var now = options.now || defaultNow, + startTime; + + this.start = function() { + startTime = now(); + }; + + this.elapsed = function() { + return now() - startTime; + }; + } + + return Timer; +}; + +getJasmineRequireObj().matchersUtil = function(j$) { + // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? + + return { + equals: function(a, b, customTesters) { + customTesters = customTesters || []; + + return eq(a, b, [], [], customTesters); + }, + + contains: function(haystack, needle, customTesters) { + customTesters = customTesters || []; + + if (Object.prototype.toString.apply(haystack) === '[object Array]') { + for (var i = 0; i < haystack.length; i++) { + if (eq(haystack[i], needle, [], [], customTesters)) { + return true; + } + } + return false; + } + return !!haystack && haystack.indexOf(needle) >= 0; + }, + + buildFailureMessage: function() { + var args = Array.prototype.slice.call(arguments, 0), + matcherName = args[0], + isNot = args[1], + actual = args[2], + expected = args.slice(3), + englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); + + var message = 'Expected ' + + j$.pp(actual) + + (isNot ? ' not ' : ' ') + + englishyPredicate; + + if (expected.length > 0) { + for (var i = 0; i < expected.length; i++) { + if (i > 0) { + message += ','; + } + message += ' ' + j$.pp(expected[i]); + } + } + + return message + '.'; + } + }; + + // Equality function lovingly adapted from isEqual in + // [Underscore](http://underscorejs.org) + function eq(a, b, aStack, bStack, customTesters) { + var result = true; + + for (var i = 0; i < customTesters.length; i++) { + var customTesterResult = customTesters[i](a, b); + if (!j$.util.isUndefined(customTesterResult)) { + return customTesterResult; + } + } + + if (a instanceof j$.Any) { + result = a.jasmineMatches(b); + if (result) { + return true; + } + } + + if (b instanceof j$.Any) { + result = b.jasmineMatches(a); + if (result) { + return true; + } + } + + if (b instanceof j$.ObjectContaining) { + result = b.jasmineMatches(a); + if (result) { + return true; + } + } + + if (a instanceof Error && b instanceof Error) { + return a.message == b.message; + } + + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) { return a !== 0 || 1 / a == 1 / b; } + // A strict comparison is necessary because `null == undefined`. + if (a === null || b === null) { return a === b; } + var className = Object.prototype.toString.call(a); + if (className != Object.prototype.toString.call(b)) { return false; } + switch (className) { + // Strings, numbers, dates, and booleans are compared by value. + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return a == String(b); + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for + // other numeric values. + return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a == +b; + // RegExps are compared by their source patterns and flags. + case '[object RegExp]': + return a.source == b.source && + a.global == b.global && + a.multiline == b.multiline && + a.ignoreCase == b.ignoreCase; + } + if (typeof a != 'object' || typeof b != 'object') { return false; } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] == a) { return bStack[length] == b; } + } + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + var size = 0; + // Recursively compare objects and arrays. + if (className == '[object Array]') { + // Compare array lengths to determine if a deep comparison is necessary. + size = a.length; + result = size == b.length; + if (result) { + // Deep compare the contents, ignoring non-numeric properties. + while (size--) { + if (!(result = eq(a[size], b[size], aStack, bStack, customTesters))) { break; } + } + } + } else { + // Objects with different constructors are not equivalent, but `Object`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(isFunction(aCtor) && (aCtor instanceof aCtor) && + isFunction(bCtor) && (bCtor instanceof bCtor))) { + return false; + } + // Deep compare objects. + for (var key in a) { + if (has(a, key)) { + // Count the expected number of properties. + size++; + // Deep compare each member. + if (!(result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters))) { break; } + } + } + // Ensure that both objects contain the same number of properties. + if (result) { + for (key in b) { + if (has(b, key) && !(size--)) { break; } + } + result = !size; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + + return result; + + function has(obj, key) { + return obj.hasOwnProperty(key); + } + + function isFunction(obj) { + return typeof obj === 'function'; + } + } +}; + +getJasmineRequireObj().toBe = function() { + function toBe() { + return { + compare: function(actual, expected) { + return { + pass: actual === expected + }; + } + }; + } + + return toBe; +}; + +getJasmineRequireObj().toBeCloseTo = function() { + + function toBeCloseTo() { + return { + compare: function(actual, expected, precision) { + if (precision !== 0) { + precision = precision || 2; + } + + return { + pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2) + }; + } + }; + } + + return toBeCloseTo; +}; + +getJasmineRequireObj().toBeDefined = function() { + function toBeDefined() { + return { + compare: function(actual) { + return { + pass: (void 0 !== actual) + }; + } + }; + } + + return toBeDefined; +}; + +getJasmineRequireObj().toBeFalsy = function() { + function toBeFalsy() { + return { + compare: function(actual) { + return { + pass: !!!actual + }; + } + }; + } + + return toBeFalsy; +}; + +getJasmineRequireObj().toBeGreaterThan = function() { + + function toBeGreaterThan() { + return { + compare: function(actual, expected) { + return { + pass: actual > expected + }; + } + }; + } + + return toBeGreaterThan; +}; + + +getJasmineRequireObj().toBeLessThan = function() { + function toBeLessThan() { + return { + + compare: function(actual, expected) { + return { + pass: actual < expected + }; + } + }; + } + + return toBeLessThan; +}; +getJasmineRequireObj().toBeNaN = function(j$) { + + function toBeNaN() { + return { + compare: function(actual) { + var result = { + pass: (actual !== actual) + }; + + if (result.pass) { + result.message = 'Expected actual not to be NaN.'; + } else { + result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; }; + } + + return result; + } + }; + } + + return toBeNaN; +}; + +getJasmineRequireObj().toBeNull = function() { + + function toBeNull() { + return { + compare: function(actual) { + return { + pass: actual === null + }; + } + }; + } + + return toBeNull; +}; + +getJasmineRequireObj().toBeTruthy = function() { + + function toBeTruthy() { + return { + compare: function(actual) { + return { + pass: !!actual + }; + } + }; + } + + return toBeTruthy; +}; + +getJasmineRequireObj().toBeUndefined = function() { + + function toBeUndefined() { + return { + compare: function(actual) { + return { + pass: void 0 === actual + }; + } + }; + } + + return toBeUndefined; +}; + +getJasmineRequireObj().toContain = function() { + function toContain(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + + return { + pass: util.contains(actual, expected, customEqualityTesters) + }; + } + }; + } + + return toContain; +}; + +getJasmineRequireObj().toEqual = function() { + + function toEqual(util, customEqualityTesters) { + customEqualityTesters = customEqualityTesters || []; + + return { + compare: function(actual, expected) { + var result = { + pass: false + }; + + result.pass = util.equals(actual, expected, customEqualityTesters); + + return result; + } + }; + } + + return toEqual; +}; + +getJasmineRequireObj().toHaveBeenCalled = function(j$) { + + function toHaveBeenCalled() { + return { + compare: function(actual) { + var result = {}; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (arguments.length > 1) { + throw new Error('toHaveBeenCalled does not take arguments, use toHaveBeenCalledWith'); + } + + result.pass = actual.calls.any(); + + result.message = result.pass ? + 'Expected spy ' + actual.and.identity() + ' not to have been called.' : + 'Expected spy ' + actual.and.identity() + ' to have been called.'; + + return result; + } + }; + } + + return toHaveBeenCalled; +}; + +getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { + + function toHaveBeenCalledWith(util, customEqualityTesters) { + return { + compare: function() { + var args = Array.prototype.slice.call(arguments, 0), + actual = args[0], + expectedArgs = args.slice(1), + result = { pass: false }; + + if (!j$.isSpy(actual)) { + throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); + } + + if (!actual.calls.any()) { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; }; + return result; + } + + if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) { + result.pass = true; + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; }; + } else { + result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + '.'; }; + } + + return result; + } + }; + } + + return toHaveBeenCalledWith; +}; + +getJasmineRequireObj().toMatch = function() { + + function toMatch() { + return { + compare: function(actual, expected) { + var regexp = new RegExp(expected); + + return { + pass: regexp.test(actual) + }; + } + }; + } + + return toMatch; +}; + +getJasmineRequireObj().toThrow = function(j$) { + + function toThrow(util) { + return { + compare: function(actual, expected) { + var result = { pass: false }, + threw = false, + thrown; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + result.message = 'Expected function to throw an exception.'; + return result; + } + + if (arguments.length == 1) { + result.pass = true; + result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; }; + + return result; + } + + if (util.equals(thrown, expected)) { + result.pass = true; + result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; }; + } else { + result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; }; + } + + return result; + } + }; + } + + return toThrow; +}; + +getJasmineRequireObj().toThrowError = function(j$) { + function toThrowError (util) { + return { + compare: function(actual) { + var threw = false, + pass = {pass: true}, + fail = {pass: false}, + thrown, + errorType, + message, + regexp, + name, + constructorName; + + if (typeof actual != 'function') { + throw new Error('Actual is not a Function'); + } + + extractExpectedParams.apply(null, arguments); + + try { + actual(); + } catch (e) { + threw = true; + thrown = e; + } + + if (!threw) { + fail.message = 'Expected function to throw an Error.'; + return fail; + } + + if (!(thrown instanceof Error)) { + fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; }; + return fail; + } + + if (arguments.length == 1) { + pass.message = 'Expected function not to throw an Error, but it threw ' + fnNameFor(thrown) + '.'; + return pass; + } + + if (errorType) { + name = fnNameFor(errorType); + constructorName = fnNameFor(thrown.constructor); + } + + if (errorType && message) { + if (thrown.constructor == errorType && util.equals(thrown.message, message)) { + pass.message = function() { return 'Expected function not to throw ' + name + ' with message ' + j$.pp(message) + '.'; }; + return pass; + } else { + fail.message = function() { return 'Expected function to throw ' + name + ' with message ' + j$.pp(message) + + ', but it threw ' + constructorName + ' with message ' + j$.pp(thrown.message) + '.'; }; + return fail; + } + } + + if (errorType && regexp) { + if (thrown.constructor == errorType && regexp.test(thrown.message)) { + pass.message = function() { return 'Expected function not to throw ' + name + ' with message matching ' + j$.pp(regexp) + '.'; }; + return pass; + } else { + fail.message = function() { return 'Expected function to throw ' + name + ' with message matching ' + j$.pp(regexp) + + ', but it threw ' + constructorName + ' with message ' + j$.pp(thrown.message) + '.'; }; + return fail; + } + } + + if (errorType) { + if (thrown.constructor == errorType) { + pass.message = 'Expected function not to throw ' + name + '.'; + return pass; + } else { + fail.message = 'Expected function to throw ' + name + ', but it threw ' + constructorName + '.'; + return fail; + } + } + + if (message) { + if (thrown.message == message) { + pass.message = function() { return 'Expected function not to throw an exception with message ' + j$.pp(message) + '.'; }; + return pass; + } else { + fail.message = function() { return 'Expected function to throw an exception with message ' + j$.pp(message) + + ', but it threw an exception with message ' + j$.pp(thrown.message) + '.'; }; + return fail; + } + } + + if (regexp) { + if (regexp.test(thrown.message)) { + pass.message = function() { return 'Expected function not to throw an exception with a message matching ' + j$.pp(regexp) + '.'; }; + return pass; + } else { + fail.message = function() { return 'Expected function to throw an exception with a message matching ' + j$.pp(regexp) + + ', but it threw an exception with message ' + j$.pp(thrown.message) + '.'; }; + return fail; + } + } + + function fnNameFor(func) { + return func.name || func.toString().match(/^\s*function\s*(\w*)\s*\(/)[1]; + } + + function extractExpectedParams() { + if (arguments.length == 1) { + return; + } + + if (arguments.length == 2) { + var expected = arguments[1]; + + if (expected instanceof RegExp) { + regexp = expected; + } else if (typeof expected == 'string') { + message = expected; + } else if (checkForAnErrorType(expected)) { + errorType = expected; + } + + if (!(errorType || message || regexp)) { + throw new Error('Expected is not an Error, string, or RegExp.'); + } + } else { + if (checkForAnErrorType(arguments[1])) { + errorType = arguments[1]; + } else { + throw new Error('Expected error type is not an Error.'); + } + + if (arguments[2] instanceof RegExp) { + regexp = arguments[2]; + } else if (typeof arguments[2] == 'string') { + message = arguments[2]; + } else { + throw new Error('Expected error message is not a string or RegExp.'); + } + } + } + + function checkForAnErrorType(type) { + if (typeof type !== 'function') { + return false; + } + + var Surrogate = function() {}; + Surrogate.prototype = type.prototype; + return (new Surrogate()) instanceof Error; + } + } + }; + } + + return toThrowError; +}; + +getJasmineRequireObj().version = function() { + return '2.0.1'; +}; diff --git a/test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/junit_reporter.js b/test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/junit_reporter.js new file mode 100644 index 000000000..0c1ade7b6 --- /dev/null +++ b/test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/junit_reporter.js @@ -0,0 +1,315 @@ +/* global java, __phantom_writeFile */ +(function(global) { + var UNDEFINED, + exportObject; + + if (typeof module !== "undefined" && module.exports) { + exportObject = exports; + } else { + exportObject = global.jasmineReporters = global.jasmineReporters || {}; + } + + function trim(str) { return str.replace(/^\s+/, "" ).replace(/\s+$/, "" ); } + function elapsed(start, end) { return (end - start)/1000; } + function isFailed(obj) { return obj.status === "failed"; } + function isSkipped(obj) { return obj.status === "pending"; } + function pad(n) { return n < 10 ? '0'+n : n; } + function extend(dupe, obj) { // performs a shallow copy of all props of `obj` onto `dupe` + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + dupe[prop] = obj[prop]; + } + } + return dupe; + } + function ISODateString(d) { + return d.getFullYear() + '-' + + pad(d.getMonth()+1) + '-' + + pad(d.getDate()) + 'T' + + pad(d.getHours()) + ':' + + pad(d.getMinutes()) + ':' + + pad(d.getSeconds()); + } + function escapeInvalidXmlChars(str) { + return str.replace(//g, ">") + .replace(/\"/g, """) + .replace(/\'/g, "'") + .replace(/\&/g, "&"); + } + function getQualifiedFilename(path, filename, separator) { + if (path && path.substr(-1) !== separator && filename.substr(0) !== separator) { + path += separator; + } + return path + filename; + } + function log(str) { + __log(str); +// var con = global.console || console; +// if (con && con.log) { +// con.log(str); +// } + } + + + /** + * Generates JUnit XML for the given spec run. There are various options + * to control where the results are written, and the default values are + * set to create as few .xml files as possible. It is possible to save a + * single XML file, or an XML file for each top-level `describe`, or an + * XML file for each `describe` regardless of nesting. + * + * Usage: + * + * jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter(options); + * + * @param {object} [options] + * @param {string} [savePath] directory to save the files (default: '') + * @param {boolean} [consolidateAll] whether to save all test results in a + * single file (default: true) + * NOTE: if true, {filePrefix} is treated as the full filename (excluding + * extension) + * @param {boolean} [consolidate] whether to save nested describes within the + * same file as their parent (default: true) + * NOTE: true does nothing if consolidateAll is also true. + * NOTE: false also sets consolidateAll to false. + * @param {boolean} [useDotNotation] whether to separate suite names with + * dots instead of spaces, ie "Class.init" not "Class init" (default: true) + * @param {string} [filePrefix] is the string value that is prepended to the + * xml output file (default: junitresults-) + * NOTE: if consolidateAll is true, the default is simply "junitresults" and + * this becomes the actual filename, ie "junitresults.xml" + */ + exportObject.JUnitXmlReporter = function(options) { + var self = this; + self.started = false; + self.finished = false; + // sanitize arguments + options = options || {}; + self.savePath = options.savePath || ''; + self.consolidate = options.consolidate === UNDEFINED ? true : options.consolidate; + self.consolidateAll = self.consolidate !== false && (options.consolidateAll === UNDEFINED ? true : options.consolidateAll); + self.useDotNotation = options.useDotNotation === UNDEFINED ? true : options.useDotNotation; + self.filePrefix = options.filePrefix || (self.consolidateAll ? 'junitresults' : 'junitresults-'); + + var suites = [], + currentSuite = null, + totalSpecsExecuted = 0, + totalSpecsDefined; + + var __suites = {}, __specs = {}; + function getSuite(suite) { + __suites[suite.id] = extend(__suites[suite.id] || {}, suite); + return __suites[suite.id]; + } + function getSpec(spec) { + __specs[spec.id] = extend(__specs[spec.id] || {}, spec); + return __specs[spec.id]; + } + + self.jasmineStarted = function(summary) { + totalSpecsDefined = summary && summary.totalSpecsDefined || NaN; + exportObject.startTime = new Date(); + self.started = true; + }; + self.suiteStarted = function(suite) { + suite = getSuite(suite); + suite._startTime = new Date(); + suite._specs = []; + suite._suites = []; + suite._failures = 0; + suite._skipped = 0; + suite._parent = currentSuite; + if (!currentSuite) { + suites.push(suite); + } else { + currentSuite._suites.push(suite); + } + currentSuite = suite; + }; + self.specStarted = function(spec) { + spec = getSpec(spec); + spec._startTime = new Date(); + spec._suite = currentSuite; + currentSuite._specs.push(spec); + }; + self.specDone = function(spec) { + spec = getSpec(spec); + spec._endTime = new Date(); + if (isSkipped(spec)) { spec._suite._skipped++; } + if (isFailed(spec)) { spec._suite._failures++; } + totalSpecsExecuted++; + }; + self.suiteDone = function(suite) { + suite = getSuite(suite); + // disabled suite (xdescribe) -- suiteStarted was never called + if (suite._parent === UNDEFINED) { + self.suiteStarted(suite); + suite._disabled = true; + } + suite._endTime = new Date(); + currentSuite = suite._parent; + }; + self.jasmineDone = function() { + var output = ''; + for (var i = 0; i < suites.length; i++) { + output += self.getOrWriteNestedOutput(suites[i]); + } + // if we have anything to write here, write out the consolidated file + if (output) { + wrapOutputAndWriteFile(self.filePrefix, output); + } + //log("Specs skipped but not reported (entire suite skipped)", totalSpecsDefined - totalSpecsExecuted); + + self.finished = true; + // this is so phantomjs-testrunner.js can tell if we're done executing + exportObject.endTime = new Date(); + }; + + self.getOrWriteNestedOutput = function(suite) { + var output = suiteAsXml(suite); + + for (var i = 0; i < suite._suites.length; i++) { + output += self.getOrWriteNestedOutput(suite._suites[i]); + } + if (self.consolidateAll || self.consolidate && suite._parent) { + return output; + } else { + // if we aren't supposed to consolidate output, just write it now + wrapOutputAndWriteFile(generateFilename(suite), output); + return ''; + } + }; + + self.writeFile = function(filename, text) { + var errors = []; + var path = self.savePath; + + function phantomWrite(path, filename, text) { + // turn filename into a qualified path + filename = getQualifiedFilename(path, filename, window.fs_path_separator); + // write via a method injected by phantomjs-testrunner.js + __phantom_writeFile(filename, text); + } + + function nodeWrite(path, filename, text) { + var fs = require("fs"); + var nodejs_path = require("path"); + require("mkdirp").sync(path); // make sure the path exists + var filepath = nodejs_path.join(path, filename); + var xmlfile = fs.openSync(filepath, "w"); + fs.writeSync(xmlfile, text, 0); + fs.closeSync(xmlfile); + return; + } + + // Attempt writing with each possible environment. + // Track errors in case no write succeeds + try { + phantomWrite(path, filename, text); + return; + } catch (e) { errors.push(' PhantomJs attempt: ' + e.message); } + try { + nodeWrite(path, filename, text); + return; + } catch (f) { errors.push(' NodeJS attempt: ' + f.message); } + try { + __JUnitSaveResults(text); + return; + } catch (f) { errors.push(' tns-android attempt: ' + f.message); } + + // If made it here, no write succeeded. Let user know. + log("Warning: writing junit report failed for '" + path + "', '" + + filename + "'. Reasons:\n" + + errors.join("\n") + ); + }; + + /******** Helper functions with closure access for simplicity ********/ + function generateFilename(suite) { + return self.filePrefix + getFullyQualifiedSuiteName(suite, true) + '.xml'; + } + + function getFullyQualifiedSuiteName(suite, isFilename) { + var fullName; + if (self.useDotNotation || isFilename) { + fullName = suite.description; + for (var parent = suite._parent; parent; parent = parent._parent) { + fullName = parent.description + '.' + fullName; + } + } else { + fullName = suite.fullName; + } + + // Either remove or escape invalid XML characters + if (isFilename) { + var fileName = "", + rFileChars = /[\w\.]/, + chr; + while (fullName.length) { + chr = fullName[0]; + fullName = fullName.substr(1); + if (rFileChars.test(chr)) { + fileName += chr; + } + } + return fileName; + } else { + var finalName = escapeInvalidXmlChars(fullName); + return finalName; + } + } + + function suiteAsXml(suite) { + + var fullyQualifiedSuiteName = getFullyQualifiedSuiteName(suite); + var xml = '\n '; + xml += '\n '; + } + } + xml += '\n '; + return xml; + } + + // To remove complexity and be more DRY about the silly preamble and element + var prefix = ''; + prefix += '\n'; + var suffix = '\n'; + function wrapOutputAndWriteFile(filename, text) { + if (filename.substr(-4) !== '.xml') { filename += '.xml'; } + self.writeFile(filename, (prefix + text + suffix)); + } + }; +})(this); diff --git a/test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/terminal_reporter.js b/test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/terminal_reporter.js new file mode 100644 index 000000000..4b8472157 --- /dev/null +++ b/test-app/assets/app/Infrastructure/Jasmine/jasmine-reporters/terminal_reporter.js @@ -0,0 +1,222 @@ +(function(global) { + var UNDEFINED, + exportObject; + + if (typeof module !== "undefined" && module.exports) { + exportObject = exports; + } else { + exportObject = global.jasmineReporters = global.jasmineReporters || {}; + } + + function elapsed(start, end) { return (end - start)/1000; } + function isFailed(obj) { return obj.status === "failed"; } + function isSkipped(obj) { return obj.status === "pending"; } + function extend(dupe, obj) { // performs a shallow copy of all props of `obj` onto `dupe` + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + dupe[prop] = obj[prop]; + } + } + return dupe; + } + function log(str) { + __log(str); +// var con = global.console || console; +// if (con && con.log && str) { +// con.log(str); +// } + } + + + /** + * Basic reporter that outputs spec results to the terminal. + * Use this reporter in your build pipeline. + * + * Usage: + * + * jasmine.getEnv().addReporter(new jasmineReporters.TerminalReporter(options); + * + * @param {object} [options] + * @param {number} [options.verbosity] meaningful values are 0 through 3; anything + * greater than 3 is treated as 3 (default: 2) + * @param {boolean} [options.color] print in color or not (default: true) + */ + var DEFAULT_VERBOSITY = 2, + ATTRIBUTES_TO_ANSI = { + "off": 0, + "bold": 1, + "red": 31, + "green": 32 + }; + + exportObject.TerminalReporter = function(options) { + var self = this; + self.started = false; + self.finished = false; + + // sanitize arguments + options = options || {}; + self.verbosity = typeof options.verbosity === "number" ? options.verbosity : DEFAULT_VERBOSITY; + self.color = options.color; + + var indent_string = ' ', + startTime, + suites = [], + currentSuite = null, + totalSpecsExecuted = 0, + totalSpecsSkipped = 0, + totalSpecsFailed = 0, + totalSpecsDefined; + + var __suites = {}, __specs = {}; + function getSuite(suite) { + __suites[suite.id] = extend(__suites[suite.id] || {}, suite); + return __suites[suite.id]; + } + function getSpec(spec) { + __specs[spec.id] = extend(__specs[spec.id] || {}, spec); + return __specs[spec.id]; + } + + self.jasmineStarted = function(summary) { + totalSpecsDefined = summary && summary.totalSpecsDefined || NaN; + startTime = exportObject.startTime = new Date(); + self.started = true; + }; + self.suiteStarted = function(suite) { + suite = getSuite(suite); + suite._specs = 0; + suite._nestedSpecs = 0; + suite._failures = 0; + suite._nestedFailures = 0; + suite._skipped = 0; + suite._nestedSkipped = 0; + suite._depth = currentSuite ? currentSuite._depth+1 : 1; + suite._parent = currentSuite; + currentSuite = suite; + if (self.verbosity > 2) { + log(indentWithLevel(suite._depth, inColor(suite.description, "bold"))); + } + }; + self.specStarted = function(spec) { + spec = getSpec(spec); + spec._suite = currentSuite; + spec._depth = currentSuite._depth+1; + currentSuite._specs++; + if (self.verbosity > 2) { + log(indentWithLevel(spec._depth, spec.description + ' ...')); + } + }; + self.specDone = function(spec) { + spec = getSpec(spec); + var failed = false, + skipped = false, + color = 'green', + resultText = ''; + if (isSkipped(spec)) { + skipped = true; + color = ''; + spec._suite._skipped++; + totalSpecsSkipped++; + } + if (isFailed(spec)) { + failed = true; + color = 'red'; + spec._suite._failures++; + totalSpecsFailed++; + } + totalSpecsExecuted++; + + if (self.verbosity === 2) { + resultText = failed ? 'F' : skipped ? 'S' : ''; + } else if (self.verbosity > 2) { + resultText = ' ' + (failed ? 'Failed' : skipped ? 'Skipped' : 'Passed'); + } + log(inColor(resultText, color)); + + if (failed) { + if (self.verbosity === 1) { + log(spec.fullName); + } else if (self.verbosity === 2) { + log(' '); + log(indentWithLevel(spec._depth, spec.fullName)); + } + + for (var i = 0, failure; i < spec.failedExpectations.length; i++) { + log(inColor(indentWithLevel(spec._depth, indent_string + spec.failedExpectations[i].message), color)); + } + } + }; + self.suiteDone = function(suite) { + suite = getSuite(suite); + // disabled suite (xdescribe) -- suiteStarted was never called + if (suite._parent === UNDEFINED) { + self.suiteStarted(suite); + suite._disabled = true; + } + if (suite._parent) { + suite._parent._specs += suite._specs + suite._nestedSpecs; + suite._parent._failures += suite._failures + suite._nestedFailures; + suite._parent._skipped += suite._skipped + suite._nestedSkipped; + } + currentSuite = suite._parent; + if (self.verbosity < 3) { + return; + } + + var total = suite._specs + suite._nestedSpecs, + failed = suite._failures + suite._nestedFailures, + skipped = suite._skipped + suite._nestedSkipped, + passed = total - failed - skipped, + color = failed ? 'red+bold' : 'green+bold', + str = passed + ' of ' + total + ' passed (' + skipped + ' skipped)'; + log(indentWithLevel(suite._depth, inColor(str+'.', color))); + }; + self.jasmineDone = function() { + var now = new Date(), + dur = elapsed(startTime, now), + total = totalSpecsDefined || totalSpecsExecuted, + disabled = total - totalSpecsExecuted, + skipped = totalSpecsSkipped, + spec_str = total + (total === 1 ? " spec, " : " specs, "), + fail_str = totalSpecsFailed + (totalSpecsFailed === 1 ? " failure, " : " failures, "), + skip_str = skipped + " skipped, ", + disabled_str = disabled + " disabled in ", + summary_str = spec_str + fail_str + skip_str + disabled_str + dur + "s.", + result_str = (totalSpecsFailed && "FAILURE: " || "SUCCESS: ") + summary_str, + result_color = totalSpecsFailed && "red+bold" || "green+bold"; + + if (self.verbosity === 2) { + log(''); + } + + if (self.verbosity > 0) { + log(inColor(result_str, result_color)); + } + //log("Specs skipped but not reported (entire suite skipped)", totalSpecsDefined - totalSpecsExecuted); + + self.finished = true; + // this is so phantomjs-testrunner.js can tell if we're done executing + exportObject.endTime = now; + }; + function indentWithLevel(level, string) { + return new Array(level).join(indent_string) + string; + } + function inColor(string, color) { + var color_attributes = color && color.split("+"), + ansi_string = "", + i, attr; + + if (!self.color || !color_attributes) { + return string; + } + + for(i = 0; i < color_attributes.length; i++) { + ansi_string += "\033[" + ATTRIBUTES_TO_ANSI[color_attributes[i]] + "m"; + } + ansi_string += string + "\033[" + ATTRIBUTES_TO_ANSI["off"] + "m"; + + return ansi_string; + } + }; +})(this); diff --git a/test-app/assets/app/Infrastructure/Jasmine/jasmine.d.ts b/test-app/assets/app/Infrastructure/Jasmine/jasmine.d.ts new file mode 100644 index 000000000..7ccfa9594 --- /dev/null +++ b/test-app/assets/app/Infrastructure/Jasmine/jasmine.d.ts @@ -0,0 +1,434 @@ +// Type definitions for Jasmine 2.0 +// Project: http://pivotal.github.com/jasmine/ +// Definitions by: Boris Yankov , Theodore Brown +// Definitions: https://github.com/borisyankov/DefinitelyTyped + + +// For ddescribe / iit use : https://github.com/borisyankov/DefinitelyTyped/blob/master/karma-jasmine/karma-jasmine.d.ts + +declare function describe(description: string, specDefinitions: () => void): void; +// declare function ddescribe(description: string, specDefinitions: () => void): void; Not a part of jasmine. Angular team adds these +declare function xdescribe(description: string, specDefinitions: () => void): void; + +declare function it(expectation: string, assertion?: () => void): void; +declare function it(expectation: string, assertion?: (done: () => void) => void): void; +// declare function iit(expectation: string, assertion?: () => void): void; Not a part of jasmine. Angular team adds these +// declare function iit(expectation: string, assertion?: (done: () => void) => void): void; Not a part of jasmine. Angular team adds these +declare function xit(expectation: string, assertion?: () => void): void; +declare function xit(expectation: string, assertion?: (done: () => void) => void): void; + +/** If you call the function pending anywhere in the spec body, no matter the expectations, the spec will be marked pending. */ +declare function pending(): void; + +declare function beforeEach(action: () => void): void; +declare function beforeEach(action: (done: () => void) => void): void; +declare function afterEach(action: () => void): void; +declare function afterEach(action: (done: () => void) => void): void; + +declare function expect(spy: Function): jasmine.Matchers; +declare function expect(actual: any): jasmine.Matchers; + +declare function spyOn(object: any, method: string): jasmine.Spy; + +declare function runs(asyncMethod: Function): void; +declare function waitsFor(latchMethod: () => boolean, failureMessage?: string, timeout?: number): void; +declare function waits(timeout?: number): void; + +declare module jasmine { + + var clock: () => Clock; + + function any(aclass: any): Any; + function objectContaining(sample: any): ObjectContaining; + function createSpy(name: string, originalFn?: Function): Spy; + function createSpyObj(baseName: string, methodNames: any[]): any; + function createSpyObj(baseName: string, methodNames: any[]): T; + function pp(value: any): string; + function getEnv(): Env; + function addMatchers(matchers: any): Any; + + interface Any { + + new (expectedClass: any): any; + + jasmineMatches(other: any): boolean; + jasmineToString(): string; + } + + interface ObjectContaining { + new (sample: any): any; + + jasmineMatches(other: any, mismatchKeys: any[], mismatchValues: any[]): boolean; + jasmineToString(): string; + } + + interface Block { + + new (env: Env, func: SpecFunction, spec: Spec): any; + + execute(onComplete: () => void): void; + } + + interface WaitsBlock extends Block { + new (env: Env, timeout: number, spec: Spec): any; + } + + interface WaitsForBlock extends Block { + new (env: Env, timeout: number, latchFunction: SpecFunction, message: string, spec: Spec): any; + } + + interface Clock { + install(): void; + uninstall(): void; + /** Calls to any registered callback are triggered when the clock is ticked forward via the jasmine.clock().tick function, which takes a number of milliseconds. */ + tick(ms: number): void; + } + + interface Env { + setTimeout: any; + clearTimeout: void; + setInterval: any; + clearInterval: void; + updateInterval: number; + + currentSpec: Spec; + + matchersClass: Matchers; + + version(): any; + versionString(): string; + nextSpecId(): number; + addReporter(reporter: Reporter): void; + execute(): void; + describe(description: string, specDefinitions: () => void): Suite; + // ddescribe(description: string, specDefinitions: () => void): Suite; Not a part of jasmine. Angular team adds these + beforeEach(beforeEachFunction: () => void): void; + currentRunner(): Runner; + afterEach(afterEachFunction: () => void): void; + xdescribe(desc: string, specDefinitions: () => void): XSuite; + it(description: string, func: () => void): Spec; + // iit(description: string, func: () => void): Spec; Not a part of jasmine. Angular team adds these + xit(desc: string, func: () => void): XSpec; + compareRegExps_(a: RegExp, b: RegExp, mismatchKeys: string[], mismatchValues: string[]): boolean; + compareObjects_(a: any, b: any, mismatchKeys: string[], mismatchValues: string[]): boolean; + equals_(a: any, b: any, mismatchKeys: string[], mismatchValues: string[]): boolean; + contains_(haystack: any, needle: any): boolean; + addEqualityTester(equalityTester: (a: any, b: any, env: Env, mismatchKeys: string[], mismatchValues: string[]) => boolean): void; + specFilter(spec: Spec): boolean; + } + + interface FakeTimer { + + new (): any; + + reset(): void; + tick(millis: number): void; + runFunctionsWithinRange(oldMillis: number, nowMillis: number): void; + scheduleFunction(timeoutKey: any, funcToCall: () => void, millis: number, recurring: boolean): void; + } + + interface HtmlReporter { + new (): any; + } + + interface HtmlSpecFilter { + new (): any; + } + + interface Result { + type: string; + } + + interface NestedResults extends Result { + description: string; + + totalCount: number; + passedCount: number; + failedCount: number; + + skipped: boolean; + + rollupCounts(result: NestedResults): void; + log(values: any): void; + getItems(): Result[]; + addResult(result: Result): void; + passed(): boolean; + } + + interface MessageResult extends Result { + values: any; + trace: Trace; + } + + interface ExpectationResult extends Result { + matcherName: string; + passed(): boolean; + expected: any; + actual: any; + message: string; + trace: Trace; + } + + interface Trace { + name: string; + message: string; + stack: any; + } + + interface PrettyPrinter { + + new (): any; + + format(value: any): void; + iterateObject(obj: any, fn: (property: string, isGetter: boolean) => void): void; + emitScalar(value: any): void; + emitString(value: string): void; + emitArray(array: any[]): void; + emitObject(obj: any): void; + append(value: any): void; + } + + interface StringPrettyPrinter extends PrettyPrinter { + } + + interface Queue { + + new (env: any): any; + + env: Env; + ensured: boolean[]; + blocks: Block[]; + running: boolean; + index: number; + offset: number; + abort: boolean; + + addBefore(block: Block, ensure?: boolean): void; + add(block: any, ensure?: boolean): void; + insertNext(block: any, ensure?: boolean): void; + start(onComplete?: () => void): void; + isRunning(): boolean; + next_(): void; + results(): NestedResults; + } + + interface Matchers { + + new (env: Env, actual: any, spec: Env, isNot?: boolean): any; + + env: Env; + actual: any; + spec: Env; + isNot?: boolean; + message(): any; + + toBe(expected: any): boolean; + toNotBe(expected: any): boolean; + toEqual(expected: any): boolean; + toNotEqual(expected: any): boolean; + toMatch(expected: any): boolean; + toNotMatch(expected: any): boolean; + toBeDefined(): boolean; + toBeUndefined(): boolean; + toBeNull(): boolean; + toBeNaN(): boolean; + toBeTruthy(): boolean; + toBeFalsy(): boolean; + toHaveBeenCalled(): boolean; + wasNotCalled(): boolean; + toHaveBeenCalledWith(...params: any[]): boolean; + toContain(expected: any): boolean; + toNotContain(expected: any): boolean; + toBeLessThan(expected: any): boolean; + toBeGreaterThan(expected: any): boolean; + toBeCloseTo(expected: any, precision: any): boolean; + toContainHtml(expected: string): boolean; + toContainText(expected: string): boolean; + toThrow(expected?: any): boolean; + toThrowError(expected?: any): boolean; + not: Matchers; + + Any: Any; + } + + interface Reporter { + reportRunnerStarting(runner: Runner): void; + reportRunnerResults(runner: Runner): void; + reportSuiteResults(suite: Suite): void; + reportSpecStarting(spec: Spec): void; + reportSpecResults(spec: Spec): void; + log(str: string): void; + } + + interface MultiReporter extends Reporter { + addReporter(reporter: Reporter): void; + } + + interface Runner { + + new (env: Env): any; + + execute(): void; + beforeEach(beforeEachFunction: SpecFunction): void; + afterEach(afterEachFunction: SpecFunction): void; + finishCallback(): void; + addSuite(suite: Suite): void; + add(block: Block): void; + specs(): Spec[]; + suites(): Suite[]; + topLevelSuites(): Suite[]; + results(): NestedResults; + } + + interface SpecFunction { + (spec?: Spec): void; + } + + interface SuiteOrSpec { + id: number; + env: Env; + description: string; + queue: Queue; + } + + interface Spec extends SuiteOrSpec { + + new (env: Env, suite: Suite, description: string): any; + + suite: Suite; + + afterCallbacks: SpecFunction[]; + spies_: Spy[]; + + results_: NestedResults; + matchersClass: Matchers; + + getFullName(): string; + results(): NestedResults; + log(arguments: any): any; + runs(func: SpecFunction): Spec; + addToQueue(block: Block): void; + addMatcherResult(result: Result): void; + expect(actual: any): any; + waits(timeout: number): Spec; + waitsFor(latchFunction: SpecFunction, timeoutMessage?: string, timeout?: number): Spec; + fail(e?: any): void; + getMatchersClass_(): Matchers; + addMatchers(matchersPrototype: any): void; + finishCallback(): void; + finish(onComplete?: () => void): void; + after(doAfter: SpecFunction): void; + execute(onComplete?: () => void): any; + addBeforesAndAftersToQueue(): void; + explodes(): void; + spyOn(obj: any, methodName: string, ignoreMethodDoesntExist: boolean): Spy; + removeAllSpies(): void; + } + + interface XSpec { + id: number; + runs(): void; + } + + interface Suite extends SuiteOrSpec { + + new (env: Env, description: string, specDefinitions: () => void, parentSuite: Suite): any; + + parentSuite: Suite; + + getFullName(): string; + finish(onComplete?: () => void): void; + beforeEach(beforeEachFunction: SpecFunction): void; + afterEach(afterEachFunction: SpecFunction): void; + results(): NestedResults; + add(suiteOrSpec: SuiteOrSpec): void; + specs(): Spec[]; + suites(): Suite[]; + children(): any[]; + execute(onComplete?: () => void): void; + } + + interface XSuite { + execute(): void; + } + + interface Spy { + (...params: any[]): any; + + identity: string; + and: SpyAnd; + calls: Calls; + mostRecentCall: { args: any[]; }; + argsForCall: any[]; + wasCalled: boolean; + callCount: number; + } + + interface SpyAnd { + /** By chaining the spy with and.callThrough, the spy will still track all calls to it but in addition it will delegate to the actual implementation. */ + callThrough(): void; + /** By chaining the spy with and.returnValue, all calls to the function will return a specific value. */ + returnValue(val: any): void; + /** By chaining the spy with and.callFake, all calls to the spy will delegate to the supplied function. */ + callFake(fn: Function): void; + /** By chaining the spy with and.throwError, all calls to the spy will throw the specified value. */ + throwError(msg: string): void; + /** When a calling strategy is used for a spy, the original stubbing behavior can be returned at any time with and.stub. */ + stub(): void; + } + + interface Calls { + /** By chaining the spy with calls.any(), will return false if the spy has not been called at all, and then true once at least one call happens. **/ + any(): boolean; + /** By chaining the spy with calls.count(), will return the number of times the spy was called **/ + count(): number; + /** By chaining the spy with calls.argsFor(), will return the arguments passed to call number index **/ + argsFor(index: number): any[]; + /** By chaining the spy with calls.allArgs(), will return the arguments to all calls **/ + allArgs(): any[]; + /** By chaining the spy with calls.all(), will return the context (the this) and arguments passed all calls **/ + all(): any; + /** By chaining the spy with calls.mostRecent(), will return the context (the this) and arguments for the most recent call **/ + mostRecent(): any; + /** By chaining the spy with calls.first(), will return the context (the this) and arguments for the first call **/ + first(): any; + /** By chaining the spy with calls.reset(), will clears all tracking for a spy **/ + reset(): void; + } + + interface Util { + inherit(childClass: Function, parentClass: Function): any; + formatException(e: any): any; + htmlEscape(str: string): string; + argsToArray(args: any): any; + extend(destination: any, source: any): any; + } + + interface JsApiReporter extends Reporter { + + started: boolean; + finished: boolean; + result: any; + messages: any; + + new (): any; + + suites(): Suite[]; + summarize_(suiteOrSpec: SuiteOrSpec): any; + results(): any; + resultsForSpec(specId: any): any; + log(str: any): any; + resultsForSpecs(specIds: any): any; + summarizeResult_(result: any): any; + } + + interface Jasmine { + Spec: Spec; + clock: Clock; + util: Util; + } + + export var HtmlReporter: HtmlReporter; + export var HtmlSpecFilter: HtmlSpecFilter; + export var DEFAULT_TIMEOUT_INTERVAL: number; +} diff --git a/test-app/assets/app/Infrastructure/timers.js b/test-app/assets/app/Infrastructure/timers.js new file mode 100644 index 000000000..130d6b3c2 --- /dev/null +++ b/test-app/assets/app/Infrastructure/timers.js @@ -0,0 +1,51 @@ +var timeoutHandler; +var timeoutCallbacks = {}; +function createHadlerAndGetId() { + if (!timeoutHandler) { + timeoutHandler = new android.os.Handler(android.os.Looper.getMainLooper()); + } + return new Date().getUTCMilliseconds(); +} +function setTimeout(callback, milliseconds) { + if (milliseconds === void 0) { milliseconds = 0; } + var id = createHadlerAndGetId(); + var runnable = new java.lang.Runnable({ + run: function () { + callback(); + if (timeoutCallbacks && timeoutCallbacks[id]) { + timeoutCallbacks[id] = null; + } + } + }); + if (!timeoutCallbacks[id]) { + timeoutCallbacks[id] = runnable; + } + timeoutHandler.postDelayed(runnable, long(milliseconds)); + return id; +} +global.setTimeout = setTimeout; +function clearTimeout(id) { + if (timeoutCallbacks[id]) { + timeoutHandler.removeCallbacks(timeoutCallbacks[id]); + timeoutCallbacks[id] = null; + } +} +global.clearTimeout = clearTimeout; +function setInterval(callback, milliseconds) { + if (milliseconds === void 0) { milliseconds = 0; } + var id = createHadlerAndGetId(); + var handler = timeoutHandler; + var runnable = new java.lang.Runnable({ + run: function () { + callback(); + handler.postDelayed(runnable, long(milliseconds)); + } + }); + if (!timeoutCallbacks[id]) { + timeoutCallbacks[id] = runnable; + } + timeoutHandler.postDelayed(runnable, long(milliseconds)); + return id; +} +global.setInterval = setInterval; +global.clearInterval = clearTimeout; diff --git a/test-app/assets/app/bootstrap.js b/test-app/assets/app/bootstrap.js index 0e23b86ae..6d66c0b49 100644 --- a/test-app/assets/app/bootstrap.js +++ b/test-app/assets/app/bootstrap.js @@ -10,4 +10,25 @@ global.__onUncaughtError = function(error){ return true; } +require('./Infrastructure/timers'); + +global.__JUnitSaveResults = function (unitTestResults) { + var pathToSdcard = '/sdcard'; + var unitTestFileName = 'android_unit_test_results.xml'; + try { + var javaFile = new java.io.File(pathToSdcard, unitTestFileName); + var stream = new java.io.FileOutputStream(javaFile); + var actualEncoding = 'UTF-8'; + var writer = new java.io.OutputStreamWriter(stream, actualEncoding); + writer.write(unitTestResults); + writer.close(); + } + catch (exception) { + __log('failed writing to files dir: ' + exception); + } +}; + +require('./Infrastructure/Jasmine/jasmine-2.0.1/boot'); //runs jasmine, attaches the junitOutputter + + require("./mainpage"); \ No newline at end of file diff --git a/test-app/assets/app/mainpage.js b/test-app/assets/app/mainpage.js index 0efdffde5..b959a84c6 100644 --- a/test-app/assets/app/mainpage.js +++ b/test-app/assets/app/mainpage.js @@ -1,15 +1,14 @@ __disableVerboseLogging(); -require("./tests/testWeakRef"); -require("./tests/tests"); +require("./tests/testWeakRef"); +require("./tests/tests"); require("./tests/testsForRuntimeBindingGenerator"); -//require("./tests/propertyAccessTests"); -require("./tests/numericConversionTests"); -require("./tests/inheritanceChainResolutionTest"); +require("./tests/numericConversionTests"); +require("./tests/inheritanceChainResolutionTest"); require("./tests/exceptionHandlingTests"); require("./tests/dispatchCallbacksOnUiThreadTests"); require("./tests/stringConversionTests"); -require("./tests/testsForTypescript"); +require("./tests/testsForTypescript"); require("./tests/testGC"); require("./tests/testsMemoryManagement"); require("./tests/testIfAbleToRunExternalFile"); @@ -17,34 +16,6 @@ require("./tests/finalFieldsSetTests"); require("./tests/extendedClassesTests"); require("./tests/extendClassNameTests"); - -//var MainActivity = com.tns.NativeScriptActivity.extend("MainActivity", { -// onCreate: function() { -// this.super.onCreate(null); -// -// require("./tests/testsWithContext").run(this); -// -// var layout = new android.widget.LinearLayout(this); -// layout.setOrientation(1); -// this.setContentView(layout); -// -// var textView = new android.widget.TextView(this); -// textView.setText("Hit that sucker"); -// layout.addView(textView); -// -// var button = new android.widget.Button(this); -// button.setText("Hit me"); -// layout.addView(button); -// var counter = 0; -// button.setOnClickListener(new android.view.View.OnClickListener("AppClickListener", { -// onClick: function() { -// __log("onClick called"); -// button.setText("Hit that sucker one more time " + ++counter); -// }})); -// }}); - - - var MainActivity = (function (_super) { __extends(MainActivity, _super); function MainActivity() { @@ -56,8 +27,9 @@ var MainActivity = (function (_super) { __log("this.toString " + k); _super.prototype.onCreate.call(this, null); //this.super.onCreate(null); - + require("./tests/testsWithContext").run(this); + execute(); //run jasmine var layout = new android.widget.LinearLayout(this); layout.setOrientation(1); diff --git a/test-app/assets/app/modules/module.js b/test-app/assets/app/modules/module.js index 3b753516d..91b4a4762 100644 --- a/test-app/assets/app/modules/module.js +++ b/test-app/assets/app/modules/module.js @@ -14,5 +14,6 @@ var tnsExtends = this.__extends; module.exports = { accessGlobalObject: function(s) { __log("global is working " + global); + return true; } } \ No newline at end of file diff --git a/test-app/assets/app/tests/dispatchCallbacksOnUiThreadTests.js b/test-app/assets/app/tests/dispatchCallbacksOnUiThreadTests.js index 69e855523..fba118c8e 100644 --- a/test-app/assets/app/tests/dispatchCallbacksOnUiThreadTests.js +++ b/test-app/assets/app/tests/dispatchCallbacksOnUiThreadTests.js @@ -1,30 +1,28 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestProcessDataCallbackShouldBeExecutedOnUiThread = function() { +describe("Tests dispatch callbacks on UI thread ", function () { + + it("TestProcessDataCallbackShouldBeExecutedOnUiThread", function () { - __log("TEST: TestProcessDataCallbackShouldBeExecutedOnUiThread"); + __log("TEST: TestProcessDataCallbackShouldBeExecutedOnUiThread"); - var D = com.tns.tests.DispatchAsyncOpOnUIThreadTest.extend("DispatchAsyncOpOnUIThreadTest", { - processData: function(index, data) { - if (index === 0) { - Assert(data === 123, "TestProcessDataCallbackShouldBeExecutedOnUiThread FAILED: Expected value is 123, actual value=" + data); - } else if (index === 1) { - Assert(data === 456, "TestProcessDataCallbackShouldBeExecutedOnUiThread FAILED: Expected value is 456, actual value=" + data); - } else if (index === 2) { - Assert(data === 789, "TestProcessDataCallbackShouldBeExecutedOnUiThread FAILED: Expected value is 789, actual value=" + data); - } else { - Assert(false, "TestProcessDataCallbackShouldBeExecutedOnUiThread FAILED: Expected index is 0, 1 or 2. Actual value=" + index); + var D = com.tns.tests.DispatchAsyncOpOnUIThreadTest.extend("DispatchAsyncOpOnUIThreadTest", { + processData: function(index, data) { + it("inner spec", function () { + if (index === 0) { + expect(data).toBe(123); + } else if (index === 1) { + expect(data).toBe(456); + } else if (index === 2) { + expect(data).toBe(789); + } else { + //one of the above has to be called ... else fail + expect(true).toBe(false); + } + }); } - } + }); + + var d = new D(); + + d.processDataAsync([123, 456, 789]); }); - - var d = new D(); - - d.processDataAsync([123, 456, 789]); -} - -TestProcessDataCallbackShouldBeExecutedOnUiThread(); +}); diff --git a/test-app/assets/app/tests/exceptionHandlingTests.js b/test-app/assets/app/tests/exceptionHandlingTests.js index d36f6f261..9d0cf230b 100644 --- a/test-app/assets/app/tests/exceptionHandlingTests.js +++ b/test-app/assets/app/tests/exceptionHandlingTests.js @@ -1,276 +1,269 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestThrowJSExceptionThroughJavaAndCatchInJS = function() { - - __log("TEST: TestThrowJSExceptionThroughJavaAndCatchInJS"); +describe("Tests exception handling ", function () { - var exceptionThrown = false; - var exceptionCaught = false; - var sameExObject = false; + var myCustomEquality = function(first, second) { + return first == second; + }; - var ex = { myProp: "SomeValue" }; + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); - var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest", { - onEvent1: function(s) { - exceptionThrown = true; - throw ex; + it("TestThrowJSExceptionThroughJavaAndCatchInJS", function () { + + __log("TEST: TestThrowJSExceptionThroughJavaAndCatchInJS"); + + var exceptionThrown = false; + var exceptionCaught = false; + var sameExObject = false; + + var ex = { myProp: "SomeValue" }; + + var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest", { + onEvent1: function(s) { + exceptionThrown = true; + throw ex; + } + }); + + var eh = new EH(); + + try + { + eh.triggerEvent1("test"); } + catch (e) + { + exceptionCaught = true; + sameExObject = e === ex; + __log("e=" + e); + } + + expect(exceptionThrown).toBe(true); + expect(exceptionCaught).toBe(true); + expect(sameExObject).toBe(true); }); - var eh = new EH(); - - try - { - eh.triggerEvent1("test"); - } - catch (e) - { - exceptionCaught = true; - sameExObject = e === ex; - __log("e=" + e); - } - - Assert(exceptionThrown === true, "TestThrowJSExceptionThroughJavaAndCatchInJS FAILED: Exception should be thrown"); - Assert(exceptionCaught === true, "TestThrowJSExceptionThroughJavaAndCatchInJS FAILED: Exception should be caught"); - Assert(sameExObject === true, "TestThrowJSExceptionThroughJavaAndCatchInJS FAILED: The expected caught object should be strict equal to 'ex'"); -} + it("TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS", function () { -var TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS = function() { + __log("TEST: TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS"); + + var exceptionThrown = false; + var exceptionCaught = false; + var nativeExceptionFound = false; + var exMsg = ""; + + var ex = new java.lang.Exception("This exception is thrown from JavaScript!"); + + var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest53", { + onEvent1: function(s) { + exceptionThrown = true; + throw ex; + } + }); + + var eh = new EH(); + + try + { + eh.triggerEvent1("test"); + } + catch (e) + { + exceptionCaught = true; + nativeExceptionFound = e.nativeException !== undefined; + if (nativeExceptionFound) + { + exMsg = e.nativeException.getMessage(); + } + } - __log("TEST: TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS"); - - var exceptionThrown = false; - var exceptionCaught = false; - var nativeExceptionFound = false; - var exMsg = ""; - - var ex = new java.lang.Exception("This exception is thrown from JavaScript!"); + expect(exceptionThrown).toBe(true); + expect(exceptionCaught).toBe(true); + expect(nativeExceptionFound).toBe(true); + expect(exMsg).toBe("This exception is thrown from JavaScript!"); + }); - var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest53", { - onEvent1: function(s) { - exceptionThrown = true; - throw ex; + it("TestThrowJSExceptionAndCatchInJava", function () { + + __log("TEST: TestThrowJSExceptionAndCatchInJava"); + + var exceptionThrown = false; + var exceptionCaught = true; + + var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest89", { + onEvent1: function(s) { + exceptionThrown = true; + throw "My Exception String"; + } + }); + + var eh = new EH(); + + try + { + eh.triggerEvent1WithCatchClause("test"); + exceptionCaught = false; } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionThrown).toBe(true); + expect(exceptionCaught).toBe(false); }); - var eh = new EH(); - - try - { - eh.triggerEvent1("test"); - } - catch (e) - { - exceptionCaught = true; - nativeExceptionFound = e.nativeException !== undefined; - if (nativeExceptionFound) + it("TestThrowJavaExceptionFromJsAndCatchInJava", function () { + + __log("TEST: TestThrowJavaExceptionFromJsAndCatchInJava"); + + var exceptionThrown = false; + var exceptionCaught = true; + + var ex = new java.lang.Exception("This exception is thrown from JavaScript!"); + + var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest121", { + onEvent1: function(s) { + exceptionThrown = true; + throw ex; + } + }); + + var eh = new EH(); + + try { - exMsg = e.nativeException.getMessage(); + eh.triggerEvent1WithCatchClause("test"); + exceptionCaught = false; + } + catch (e) + { + exceptionCaught = true; } - } - - Assert(exceptionThrown === true, "TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS FAILED: Exception should be thrown"); - Assert(exceptionCaught === true, "TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS FAILED: Exception should be caught"); - Assert(nativeExceptionFound === true, "TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS FAILED: The expected caught object should have 'nativeException' property set"); - Assert(exMsg === "This exception is thrown from JavaScript!", "TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS FAILED: Expected value is 'This exception is thrown from JavaScript!', actual value=" + exMsg); -} - -var TestThrowJSExceptionAndCatchInJava = function() { - __log("TEST: TestThrowJSExceptionAndCatchInJava"); - - var exceptionThrown = false; - var exceptionCaught = true; + expect(exceptionThrown).toBe(true); + expect(exceptionCaught).toBe(false); + }); - var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest89", { - onEvent1: function(s) { - exceptionThrown = true; - throw "My Exception String"; + it("TestMethodThatThrowsException", function () { + + __log("TEST: TestMethodThatThrowsException"); + + var exceptionCaught = false; + + var dummy = new com.tns.tests.DummyClass(); + + try + { + dummy.methodThatThrowsException(); + } + catch (e) + { + exceptionCaught = true; } + + expect(exceptionCaught).toBe(true); }); - var eh = new EH(); - - try - { - eh.triggerEvent1WithCatchClause("test"); - exceptionCaught = false; - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionThrown === true, "TestThrowJSExceptionAndCatchInJava FAILED: Exception should be thrown"); - Assert(exceptionCaught === false, "TestThrowJSExceptionAndCatchInJava FAILED: Exception should not be caught"); -} - -var TestThrowJavaExceptionFromJsAndCatchInJava = function() { + it("TestErrorObjectContainsJavaNativeException", function () { + + + __log("TEST: TestErrorObjectContainsJavaNativeException"); + + var nativeException = undefined; + + var dummy = new com.tns.tests.DummyClass(); + + try + { + dummy.methodThatThrowsException(); + } + catch (e) + { + var nativeException = e.nativeException; + } - __log("TEST: TestThrowJavaExceptionFromJsAndCatchInJava"); - - var exceptionThrown = false; - var exceptionCaught = true; - - var ex = new java.lang.Exception("This exception is thrown from JavaScript!"); + __log("nativeException=" + nativeException); + + expect(nativeException).not.toEqual(undefined); + + var nativeExceptionFrameCount = nativeException.getStackTrace().length; + + expect(nativeExceptionFrameCount).toBeGreaterThan(0); + }); - var EH = com.tns.tests.ExceptionHandlingTest.extend("ExceptionHandlingTest121", { - onEvent1: function(s) { - exceptionThrown = true; - throw ex; + it("TestConstructorThatThrowsException", function () { + + __log("TEST: TestConstructorThatThrowsException"); + + var exceptionCaught = false; + + try + { + var dummy = new com.tns.tests.DummyClass(true /* throwsException */); + } + catch (e) + { + exceptionCaught = true; } + + expect(exceptionCaught).toBe(true); }); - var eh = new EH(); - - try - { - eh.triggerEvent1WithCatchClause("test"); - exceptionCaught = false; - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionThrown === true, "TestThrowJavaExceptionFromJsAndCatchInJava FAILED: Exception should be thrown"); - Assert(exceptionCaught === false, "TestThrowJavaExceptionFromJsAndCatchInJava FAILED: Exception should not be caught"); -} - -var TestMethodThatThrowsException = function() { - - __log("TEST: TestMethodThatThrowsException"); - - var exceptionCaught = false; - - var dummy = new com.tns.tests.DummyClass(); - - try - { - dummy.methodThatThrowsException(); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestMethodThatThrowsException FAILED: Java exception was not caught") -} - -var TestErrorObjectContainsJavaNativeException = function() { - - __log("TEST: TestErrorObjectContainsJavaNativeException"); - - var nativeException = undefined; - - var dummy = new com.tns.tests.DummyClass(); - - try - { - dummy.methodThatThrowsException(); - } - catch (e) - { - var nativeException = e.nativeException; - } - - __log("nativeException=" + nativeException); - - Assert(nativeException != undefined, "TestErrorObjectContainsJavaNativeException FAILED: Error object does not contain Java native exception"); - - var nativeExceptionFrameCount = nativeException.getStackTrace().length; - - Assert(nativeExceptionFrameCount > 0, "TestErrorObjectContainsJavaNativeException FAILED: Java native exception does not contains stack frames"); -} - -var TestConstructorThatThrowsException = function() { - - __log("TEST: TestConstructorThatThrowsException"); - - var exceptionCaught = false; - - try - { - var dummy = new com.tns.tests.DummyClass(true /* throwsException */); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestConstructorThatThrowsException FAILED: Java exception was not caught"); -} - -var TestArrayElementGetAccessThatThrowsException = function() { - - __log("TEST: TestArrayElementGetAccessThatThrowsException"); - - var exceptionCaught = false; - - var d = new com.tns.tests.DummyClass(); - - var arr = d.getDummyClassArrayAsObject(); - - var arrLength = arr.length; - - Assert(arrLength == 1, "TestArrayElementGetAccessThatThrowsException FAILED: Expected array length is 1, actual length=" + arrLength); - - try - { - var dummy = arr[arrLength]; - - var name = dummy.getName(); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestArrayElementGetAccessThatThrowsException FAILED: Java exception was not caught during getting array element"); -} - -var TestArrayElementSetAccessThatThrowsException = function() { - - __log("TEST: TestArrayElementSetAccessThatThrowsException"); - - var exceptionCaught = false; + it("TestArrayElementGetAccessThatThrowsException", function () { + + __log("TEST: TestArrayElementGetAccessThatThrowsException"); + + var exceptionCaught = false; - var d = new com.tns.tests.DummyClass(); - - var arr = d.getDummyClassArrayAsObject(); - - var arrLength = arr.length; - - Assert(arrLength == 1, "TestArrayElementSetAccessThatThrowsException FAILED: Expected array length is 1, actual length=" + arrLength); - - var last = arr[arrLength - 1]; - - try - { - arr[arrLength] = last; - } - catch (e) - { - exceptionCaught = true; - } + var d = new com.tns.tests.DummyClass(); + + var arr = d.getDummyClassArrayAsObject(); + + var arrLength = arr.length; + + expect(arrLength).toEqual(1); + + try + { + var dummy = arr[arrLength]; + + var name = dummy.getName(); + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); - Assert(exceptionCaught === true, "TestArrayElementSetAccessThatThrowsException FAILED: Java exception was not caught during setting array element"); -} - -TestThrowJSExceptionThroughJavaAndCatchInJS(); -TestThrowJavaExceptionFromJsThroughJavaAndCatchInJS(); -TestThrowJSExceptionAndCatchInJava(); -TestThrowJavaExceptionFromJsAndCatchInJava(); -TestMethodThatThrowsException(); -TestErrorObjectContainsJavaNativeException(); -TestConstructorThatThrowsException(); -TestArrayElementGetAccessThatThrowsException(); -TestArrayElementSetAccessThatThrowsException(); - - - + it("TestArrayElementSetAccessThatThrowsException", function () { + + __log("TEST: TestArrayElementSetAccessThatThrowsException"); + + var exceptionCaught = false; + var d = new com.tns.tests.DummyClass(); + + var arr = d.getDummyClassArrayAsObject(); + + var arrLength = arr.length; + + expect(arrLength).toEqual(1); + + var last = arr[arrLength - 1]; + + try + { + arr[arrLength] = last; + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/extendClassNameTests.js b/test-app/assets/app/tests/extendClassNameTests.js index a03998b19..9419fa0ee 100644 --- a/test-app/assets/app/tests/extendClassNameTests.js +++ b/test-app/assets/app/tests/extendClassNameTests.js @@ -1,41 +1,43 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -//the class name valid symbols are [a-z , A-Z , 0-9, _] -var When_naming_extension_class_user_should_give_valid_name = function() { +describe("Tests extend class name ", function () { - var exceptionCaught = false; - try - { - var O = java.lang.Object.extend("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789", {}); - } - catch(e) - { - exceptionCaught = true; - __log("Validation is wrong"); - } + var myCustomEquality = function(first, second) { + return first == second; + }; - Assert(exceptionCaught === false, "FAILED: When_naming_extension_class_user_should_give_valid_name."); -} - -var When_naming_extension_contains_invalid_symbols_should_throw_exception = function() { + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); - var exceptionCaught = false; - try - { - var O = java.lang.Object.extend("1235!", {}); //[!] is invalid symbol - } - catch(e) - { - __log('message: ' + e.message); - exceptionCaught = true; - } + //the class name valid symbols are [a-z , A-Z , 0-9, _] + it("When_naming_extension_class_user_should_give_valid_name", function () { + + var exceptionCaught = false; + try + { + var O = java.lang.Object.extend("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789", {}); + } + catch(e) + { + exceptionCaught = true; + __log("Validation is wrong"); + } + + expect(exceptionCaught).toBe(false); + }); - Assert(exceptionCaught === true, "FAILED: When_naming_extension_doesnt_have_valid_name_should_throw_exception."); -} + it("When_naming_extension_contains_invalid_symbols_should_throw_exception", function () { + + var exceptionCaught = false; + try + { + var O = java.lang.Object.extend("1235!", {}); //[!] is invalid symbol + } + catch(e) + { + __log('message: ' + e.message); + exceptionCaught = true; + } -When_naming_extension_class_user_should_give_valid_name(); -When_naming_extension_contains_invalid_symbols_should_throw_exception(); \ No newline at end of file + expect(exceptionCaught).toBe(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/extendedClassesTests.js b/test-app/assets/app/tests/extendedClassesTests.js index f4fae3838..639a7cee3 100644 --- a/test-app/assets/app/tests/extendedClassesTests.js +++ b/test-app/assets/app/tests/extendedClassesTests.js @@ -1,83 +1,76 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} +describe("Tests extended classes ", function () { -var Instance_with_no_extension_shouldnt_use_previously_defined_implementation_object = function() { - var MyButton = new com.tns.tests.Button1.extend({ - toString: function () { - return "overriden toString method of chronometer instance"; - }, - getIMAGE_ID_PROP: function () { - return "overriden getIMAGE_ID_PROP method on button"; - } + it("Instance_with_no_extension_shouldnt_use_previously_defined_implementation_object", function () { + var MyButton = new com.tns.tests.Button1.extend({ + toString: function () { + return "overriden toString method of chronometer instance"; + }, + getIMAGE_ID_PROP: function () { + return "overriden getIMAGE_ID_PROP method on button"; + } + }); + var button = new MyButton(); + var labelToString = button.toString(); + var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); + // + + var button1 = new com.tns.tests.Button1(); + var labelToString1 = button1.toString(); + var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); + + expect(labelToString).not.toBe(labelToString1); + expect(labelgetIMAGE_ID_PROP).not.toBe(labelgetIMAGE_ID_PROP1); }); - var button = new MyButton(); - var labelToString = button.toString(); - var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); - // - var button1 = new com.tns.tests.Button1(); - var labelToString1 = button1.toString(); - var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); - - - Assert((labelToString !== labelToString1) && (labelgetIMAGE_ID_PROP !== labelgetIMAGE_ID_PROP1), "Instance_with_no_extension_it_shouldnt_use_previously_defined_implementation_object FAILED! Labels need to be different"); -} + it("Instance_with_extension_shouldnt_use_previously_defined_implementation_object", function () { + + var MyButton = new com.tns.tests.Button1.extend({ + toString: function () { + return "overriden toString method of button instance"; + }, + getIMAGE_ID_PROP: function () { + return "overriden getIMAGE_ID_PROP method on button"; + } + }); + var button = new MyButton(); + var labelToString = button.toString(); + var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); + // + + var MyButton1 = new com.tns.tests.Button1.extend({ + toString: function () { + return "overriden toString method of button1 instance "; + }, + getIMAGE_ID_PROP: function () { + return "overriden getIMAGE_ID_PROP method on button1"; + } + }); + var button1 = new MyButton1(); + var labelToString1 = button1.toString(); + var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); -var Instance_with_extension_shouldnt_use_previously_defined_implementation_object = function() { - var MyButton = new com.tns.tests.Button1.extend({ - toString: function () { - return "overriden toString method of button instance"; - }, - getIMAGE_ID_PROP: function () { - return "overriden getIMAGE_ID_PROP method on button"; - } - }); - var button = new MyButton(); - var labelToString = button.toString(); - var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); - // - - var MyButton1 = new com.tns.tests.Button1.extend({ - toString: function () { - return "overriden toString method of button1 instance "; - }, - getIMAGE_ID_PROP: function () { - return "overriden getIMAGE_ID_PROP method on button1"; - } + expect(labelToString).not.toBe(labelToString1); + expect(labelgetIMAGE_ID_PROP).not.toBe(labelgetIMAGE_ID_PROP1); }); - var button1 = new MyButton1(); - var labelToString1 = button1.toString(); - var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); - - Assert((labelToString !== labelToString1) && (labelgetIMAGE_ID_PROP !== labelgetIMAGE_ID_PROP1), "Instance_with_no_extension_it_shouldnt_use_previously_defined_implementation_object FAILED! Labels need to be different"); -} + it("Newly_created_instances_should_behave_the_same_and_not_use_previously_defined_implementation_objects", function () { -var Newly_created_instances_should_behave_the_same_and_not_use_previously_defined_implementation_objects = function() { - - var button1 = new com.tns.tests.Button1(); - var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); - - // - var MyButton = new com.tns.tests.Button1.extend({ - getIMAGE_ID_PROP: function () { - return "overriden getIMAGE_ID_PROP method on button"; - } + var button1 = new com.tns.tests.Button1(); + var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); + + // + var MyButton = new com.tns.tests.Button1.extend({ + getIMAGE_ID_PROP: function () { + return "overriden getIMAGE_ID_PROP method on button"; + } + }); + var button = new MyButton(); + var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); + // + + var button2 = new com.tns.tests.Button1(); + var labelgetIMAGE_ID_PROP2 = button2.getIMAGE_ID_PROP(); + + expect(labelgetIMAGE_ID_PROP1).toBe(labelgetIMAGE_ID_PROP2); }); - var button = new MyButton(); - var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); - // - - var button2 = new com.tns.tests.Button1(); - var labelgetIMAGE_ID_PROP2 = button2.getIMAGE_ID_PROP(); - - Assert(labelgetIMAGE_ID_PROP1 === labelgetIMAGE_ID_PROP2, "Instance_with_no_extension_it_shouldnt_use_previously_defined_implementation_object FAILED! Labels need to be different"); - -} - -Instance_with_no_extension_shouldnt_use_previously_defined_implementation_object(); -Instance_with_extension_shouldnt_use_previously_defined_implementation_object(); -Newly_created_instances_should_behave_the_same_and_not_use_previously_defined_implementation_objects(); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/finalFieldsSetTests.js b/test-app/assets/app/tests/finalFieldsSetTests.js index 3cd755fc4..81bf388ff 100644 --- a/test-app/assets/app/tests/finalFieldsSetTests.js +++ b/test-app/assets/app/tests/finalFieldsSetTests.js @@ -1,23 +1,17 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var When_a_java_final_field_is_set_exception_is_thrown = function() { - - var exceptionCaught = false; - try - { - com.tns.tests.Button1.STATIC_IMAGE_ID = "NEW STATIC IMAGE ID VALUE"; - } - catch (e) - { - __log("Don't try to SET a final field " + e); - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "When_a_java_final_field_is_set_exception_is_thrown FAILED: Exception(illegal access) should be thrown"); -} - -When_a_java_final_field_is_set_exception_is_thrown(); +describe("Tests final fields set", function () { + + it("When trying to set a final field throw exception", function () { + + var exceptionCaught = false; + try + { + com.tns.tests.Button1.STATIC_IMAGE_ID = "NEW STATIC IMAGE ID VALUE"; + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/inheritanceChainResolutionTest.js b/test-app/assets/app/tests/inheritanceChainResolutionTest.js index 3a8ffbc50..35ac44cfe 100644 --- a/test-app/assets/app/tests/inheritanceChainResolutionTest.js +++ b/test-app/assets/app/tests/inheritanceChainResolutionTest.js @@ -1,30 +1,32 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestCallWithStringArgumentWhenThereIsStringOverload = function() { - - __log("TEST: TestCallWithStringArgumentWhenThereIsStringOverload"); +describe("Tests inheritance chain resolution", function () { - var i = new com.tns.tests.InheritanceChainResolutionTest(); + var myCustomEquality = function(first, second) { + return first == second; + }; - var s = i.echo1("test123"); + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); - Assert(s === "String=test123", "TestCallWithStringArgumentWhenThereIsStringOverload FAILED: Expected value is 'String=test123', actual value=" + s); -} - -var TestCallWithStringArgumentWhenThereIsNoStringOverload = function() { - - __log("TEST: TestCallWithStringArgumentWhenThereIsNoStringOverload"); + it("TestCallWithStringArgumentWhenThereIsStringOverload", function () { + + __log("TEST: TestCallWithStringArgumentWhenThereIsStringOverload"); + + var i = new com.tns.tests.InheritanceChainResolutionTest(); + + var s = i.echo1("test123"); + + expect(s).toBe("String=test123"); + }); - var i = new com.tns.tests.InheritanceChainResolutionTest(); - - var s = i.echo2("test123"); - - Assert(s === "Object=test123", "TestCallWithStringArgumentWhenThereIsNoStringOverload FAILED: Expected value is 'Object=test123', actual value=" + s); -} - -TestCallWithStringArgumentWhenThereIsStringOverload(); -TestCallWithStringArgumentWhenThereIsNoStringOverload(); \ No newline at end of file + it("TestCallWithStringArgumentWhenThereIsNoStringOverload", function () { + + __log("TEST: TestCallWithStringArgumentWhenThereIsNoStringOverload"); + + var i = new com.tns.tests.InheritanceChainResolutionTest(); + + var s = i.echo2("test123"); + + expect(s).toBe("Object=test123"); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/numericConversionTests.js b/test-app/assets/app/tests/numericConversionTests.js index f99c0e651..d79eff981 100644 --- a/test-app/assets/app/tests/numericConversionTests.js +++ b/test-app/assets/app/tests/numericConversionTests.js @@ -1,270 +1,247 @@ -/* - Test suite for numeric conversions and constructor/method resolutions. -*/ - -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestCreateInstanceWithConstructorResolutionWithNumberLiteral = function() { - - __log("TEST: TestCreateInstanceWithConstructorResolutionWithNumberLiteral"); - - var n = new com.tns.tests.NumericConversionTest(123); - - var s = n.getInit(); - - Assert(s === "byte", "TestCreateInstanceWithConstructorResolutionWithNumberLiteral FAILED: Expected value is 'byte', actual value=" + s); -} - -var TestCreateInstanceWithConstructorResolutionWithCastFunctions = function() { - - __log("TEST: TestCreateInstanceWithConstructorResolutionWithCastFunctions"); - - var n1 = new com.tns.tests.NumericConversionTest(byte(123)); - var s1 = n1.getInit(); - Assert(s1 === "byte", "TestCreateInstanceWithConstructorResolutionWithCastFunctions FAILED: Expected value is 'byte', actual value=" + s1); - - var n2 = new com.tns.tests.NumericConversionTest(short(123)); - var s2 = n2.getInit(); - Assert(s2 === "byte", "TestCreateInstanceWithConstructorResolutionWithCastFunctions FAILED: Expected value is 'byte', actual value=" + s2); - - var n3 = new com.tns.tests.NumericConversionTest(long(123)); - var s3 = n3.getInit(); - Assert(s3 === "byte", "TestCreateInstanceWithConstructorResolutionWithCastFunctions FAILED: Expected value is 'byte', actual value=" + s3); -} - -var TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls = function() { - - __log("TEST: TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls"); - - var b = java.lang.Byte.parseByte("123"); - var n1 = new com.tns.tests.NumericConversionTest(b); - var s1 = n1.getInit(); - Assert(s1 === "byte", "TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls FAILED: Expected value is 'byte', actual value=" + s1); - - var i = java.lang.Integer.parseInt("12345"); - var n2 = new com.tns.tests.NumericConversionTest(i); - var s2 = n2.getInit(); - Assert(s2 === "byte", "TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls FAILED: Expected value is 'byte', actual value=" + s2); -} - -var TestCreateInstanceWithConstructorResolutionWithPromotingValueUp = function() { - - __log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueUp"); - - var n = new com.tns.tests.NumericConversionTest(null, short(1)); - var s = n.getInit(); - Assert(s === "Object,int", "TestCreateInstanceWithConstructorResolutionWithPromotingValueUp FAILED: Expected value is 'Object,int', actual value=" + s); -} - -var TestCreateInstanceWithConstructorResolutionWithPromotingValueDown = function() { - - __log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueDown"); - - var n = new com.tns.tests.NumericConversionTest(null, null, long(1)); - var s = n.getInit(); - Assert(s === "Object,Object,short", "TestCreateInstanceWithConstructorResolutionWithPromotingValueDown FAILED: Expected value is 'Object,Object,short', actual value=" + s); -} - -var TestCallMethodWithResolutionWithPromotingValueUp = function() { - - __log("TEST: TestCallMethodWithResolutionWithPromotingValueUp"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method1(byte(1)); - Assert(s === "short=1", "TestCallMethodWithResolutionWithPromotingValueUp FAILED: Expected value is 'short=1', actual value=" + s); -} - -var TestCallMethodWithResolutionWithPromotingValueDown = function() { - - __log("TEST: TestCallMethodWithResolutionWithPromotingValueDown"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method1(1); - Assert(s === "short=1", "TestCallMethodWithResolutionWithPromotingValueDown FAILED: Expected value is 'short=1', actual value=" + s); - - var n1 = new com.tns.tests.NumericConversionTest(); - var s1 = n1.method1(long((1 << 16) + 2)); - Assert(s1 === "short=2", "TestCallMethodWithResolutionWithPromotingValueDown FAILED: Expected value is 'short=2', actual value=" + s1); -} - -var TestLongCastToFloatConversionWhenThereIsDoubleOverload = function() { - - __log("TEST: TestLongCastToFloatConversionWhenThereIsDoubleOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method2(long(65536 + 2)); - Assert(s === "float=65538.0", "TestLongCastToFloatConversionWhenThereIsDoubleOverload FAILED: Expected value is 'float=65538.0', actual value=" + s); -} - -var TestByteCastToFloatConversionWhenThereIsDoubleOverload = function() { - - __log("TEST: TestByteCastToFloatConversionWhenThereIsDoubleOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method2(byte(65536 + 2)); - Assert(s === "float=2.0", "TestByteCastToFloatConversionWhenThereIsDoubleOverload FAILED: Expected value is 'float=2.0', actual value=" + s); -} - -var TestShortCastToFloatConversionWhenThereIsDoubleOverload = function() { - - __log("TEST: TestShortCastToFloatConversionWhenThereIsDoubleOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method2(short(65536 + 2)); - Assert(s === "float=2.0", "TestShortCastToFloatConversionWhenThereIsDoubleOverload FAILED: Expected value is 'float=2.0', actual value=" + s); -} - -var TestDoubleCastWhenThereIsDoubleOverload = function() { - - __log("TEST: TestDoubleCastWhenThereIsDoubleOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method2(double(65536 + 2)); - Assert(s === "double=65538.0", "TestDoubleCastWhenThereIsDoubleOverload FAILED: Expected value is 'double=65538.0', actual value=" + s); -} - -var TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload = function() { - - __log("TEST: TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method2(65536 + 2); - Assert(s === "float=65538.0", "TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload FAILED: Expected value is 'float=65538.0', actual value=" + s); -} - -var TestDoubleCastToLongConversionWhenThereIsShortOverload = function() { - - __log("TEST: TestDoubleCastToLongConversionWhenThereIsShortOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method3(double(65536 + 2)); - Assert(s === "long=65538", "TestDoubleCastToLongConversionWhenThereIsShortOverload FAILED: Expected value is 'long=65538', actual value=" + s); -} - -var TestFloatCastToLongConversionWhenThereIsShortOverload = function() { - - __log("TEST: TestFloatCastToLongConversionWhenThereIsShortOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method3(float(65536 + 2)); - Assert(s === "long=65538", "TestFloatCastToLongConversionWhenThereIsShortOverload FAILED: Expected value is 'long=65538', actual value=" + s); -} - -var TestFloatCastToShortConversionWhenThereIsObjectOverload = function() { - - __log("TEST: TestFloatCastToShortConversionWhenThereIsObjectOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method4(float(65536 + 2)); - Assert(s === "short=2", "TestFloatCastToShortConversionWhenThereIsObjectOverload FAILED: Expected value is 'short=2', actual value=" + s); -} - -var TestByteCastToShortConversionWhenThereIsObjectOverload = function() { - - __log("TEST: TestByteCastToShortConversionWhenThereIsObjectOverload"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method4(byte(65536 + 2)); - Assert(s === "short=2", "TestByteCastToShortConversionWhenThereIsObjectOverload FAILED: Expected value is 'short=2', actual value=" + s); -} - -var TestResolveMethodWithByteCast = function() { - - __log("TEST: TestResolveMethodWithByteCast"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(byte(65536 + 123)); - Assert(s === "byte=123", "TestResolveMethodWithByteCast FAILED: Expected value is 'byte=123', actual value=" + s); -} - -var TestResolveMethodWithShortCast = function() { - - __log("TEST: TestResolveMethodWithShortCast"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(short(65536 + 1234)); - Assert(s === "short=1234", "TestResolveMethodWithShortCast FAILED: Expected value is 'short=1234', actual value=" + s); -} - -var TestResolveMethodWithoutCastFunction = function() { - - __log("TEST: TestResolveMethodWithoutCastFunction"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(123456); - Assert(s === "int=123456", "TestResolveMethodWithoutCastFunction FAILED: Expected value is 'int=123456', actual value=" + s); -} - -var TestResolveMethodWithLongCast = function() { - - __log("TEST: TestResolveMethodWithLongCast"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(long("123456789012")); - Assert(s === "long=123456789012", "TestResolveMethodWithLongCast FAILED: Expected value is 'long=123456789012', actual value=" + s); -} - -var TestResolveMethodWithFloatCast = function() { - - __log("TEST: TestResolveMethodWithFloatCast"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(float(1.23)); - Assert(s === "float=1.23", "TestResolveMethodWithFloatCast FAILED: Expected value is 'float=1.23', actual value=" + s); -} - -var TestResolveMethodWithDoubleCast = function() { - - __log("TEST: TestResolveMethodWithDoubleCast"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(double(1)); - Assert(s === "double=1.0", "TestResolveMethodWithDoubleCast FAILED: Expected value is 'double=1.0', actual value=" + s); -} - -var TestResolveIntMethodWithNumberObjectWithIntArgument = function() { - - __log("TEST: TestResolveIntMethodWithNumberObjectWithIntArgument"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(new Number(1)); - Assert(s === "int=1", "TestResolveIntMethodWithNumberObjectWithIntArgument FAILED: Expected value is 'int=1', actual value=" + s); -} - -var TestResolveIntMethodWithNumberObjectWithDoubleArgument = function() { - - __log("TEST: TestResolveIntMethodWithNumberObjectWithDoubleArgument"); - - var n = new com.tns.tests.NumericConversionTest(); - var s = n.method5(new Number(1.23)); - Assert(s === "double=1.23", "TestResolveIntMethodWithNumberObjectWithDoubleArgument 123FAILED: Expected value is 'double=1.23', actual value=" + s); -} - -TestCreateInstanceWithConstructorResolutionWithNumberLiteral(); -TestCreateInstanceWithConstructorResolutionWithCastFunctions(); -TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls(); -TestCreateInstanceWithConstructorResolutionWithPromotingValueUp(); -TestCreateInstanceWithConstructorResolutionWithPromotingValueDown(); -TestCallMethodWithResolutionWithPromotingValueUp(); -TestCallMethodWithResolutionWithPromotingValueDown(); -TestLongCastToFloatConversionWhenThereIsDoubleOverload(); -TestByteCastToFloatConversionWhenThereIsDoubleOverload(); -TestShortCastToFloatConversionWhenThereIsDoubleOverload(); -TestDoubleCastWhenThereIsDoubleOverload(); -TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload(); -TestDoubleCastToLongConversionWhenThereIsShortOverload(); -TestFloatCastToLongConversionWhenThereIsShortOverload(); -TestFloatCastToShortConversionWhenThereIsObjectOverload(); -TestByteCastToShortConversionWhenThereIsObjectOverload(); -TestResolveMethodWithByteCast(); -TestResolveMethodWithShortCast(); -TestResolveMethodWithoutCastFunction(); -TestResolveMethodWithLongCast(); -TestResolveMethodWithFloatCast(); -TestResolveMethodWithDoubleCast(); -TestResolveIntMethodWithNumberObjectWithIntArgument(); -TestResolveIntMethodWithNumberObjectWithDoubleArgument(); \ No newline at end of file +describe("Tests numeric conversions and constructor/method resolutions", function () { + + var myCustomEquality = function(first, second) { + return first == second; + }; + + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); + + it("TestCreateInstanceWithConstructorResolutionWithNumberLiteral", function () { + + __log("TEST: TestCreateInstanceWithConstructorResolutionWithNumberLiteral"); + + var n = new com.tns.tests.NumericConversionTest(123); + + var s = n.getInit(); + + expect(s).toBe("byte"); + }); + + it("TestCreateInstanceWithConstructorResolutionWithCastFunctions", function () { + + __log("TEST: TestCreateInstanceWithConstructorResolutionWithCastFunctions"); + + var n1 = new com.tns.tests.NumericConversionTest(byte(123)); + var s1 = n1.getInit(); + expect(s1).toBe("byte"); + + var n2 = new com.tns.tests.NumericConversionTest(short(123)); + var s2 = n2.getInit(); + expect(s2).toBe("byte"); + + var n3 = new com.tns.tests.NumericConversionTest(long(123)); + var s3 = n3.getInit(); + expect(s3).toBe("byte"); + }); + + it("TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls", function () { + + __log("TEST: TestCreateInstanceWithConstructorResolutionWithValuesFromJavaCalls"); + + var b = java.lang.Byte.parseByte("123"); + var n1 = new com.tns.tests.NumericConversionTest(b); + var s1 = n1.getInit(); + expect(s1).toBe("byte"); + + var i = java.lang.Integer.parseInt("12345"); + var n2 = new com.tns.tests.NumericConversionTest(i); + var s2 = n2.getInit(); + expect(s2).toBe("byte"); + }); + + it("TestCreateInstanceWithConstructorResolutionWithPromotingValueUp", function () { + + __log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueUp"); + + var n = new com.tns.tests.NumericConversionTest(null, short(1)); + var s = n.getInit(); + expect(s).toBe("Object,int"); + }); + + it("TestCreateInstanceWithConstructorResolutionWithPromotingValueDown", function () { + + __log("TEST: TestCreateInstanceWithConstructorResolutionWithPromotingValueDown"); + + var n = new com.tns.tests.NumericConversionTest(null, null, long(1)); + var s = n.getInit(); + expect(s).toBe("Object,Object,short"); + }); + + it("TestCallMethodWithResolutionWithPromotingValueUp", function () { + + __log("TEST: TestCallMethodWithResolutionWithPromotingValueUp"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method1(byte(1)); + expect(s).toBe("short=1"); + }); + + it("TestCallMethodWithResolutionWithPromotingValueDown", function () { + + __log("TEST: TestCallMethodWithResolutionWithPromotingValueDown"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method1(1); + expect(s).toBe("short=1"); + + var n1 = new com.tns.tests.NumericConversionTest(); + var s1 = n1.method1(long((1 << 16) + 2)); + expect(s1).toBe("short=2"); + }); + + it("TestLongCastToFloatConversionWhenThereIsDoubleOverload", function () { + + __log("TEST: TestLongCastToFloatConversionWhenThereIsDoubleOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method2(long(65536 + 2)); + expect(s).toBe("float=65538.0"); + }); + + it("TestByteCastToFloatConversionWhenThereIsDoubleOverload", function () { + + __log("TEST: TestByteCastToFloatConversionWhenThereIsDoubleOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method2(byte(65536 + 2)); + expect(s).toBe("float=2.0"); + }); + + it("TestShortCastToFloatConversionWhenThereIsDoubleOverload", function () { + + __log("TEST: TestShortCastToFloatConversionWhenThereIsDoubleOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method2(short(65536 + 2)); + expect(s).toBe("float=2.0"); + }); + + it("TestDoubleCastWhenThereIsDoubleOverload", function () { + + __log("TEST: TestDoubleCastWhenThereIsDoubleOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method2(double(65536 + 2)); + expect(s).toBe("double=65538.0"); + }); + + it("TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload", function () { + + __log("TEST: TestNumberExpressionToFloatConversionWhenThereIsDoubleOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method2(65536 + 2); + expect(s).toBe("float=65538.0"); + expect(true).toEqual(true); + }); + + it("TestDoubleCastToLongConversionWhenThereIsShortOverload", function () { + + __log("TEST: TestDoubleCastToLongConversionWhenThereIsShortOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method3(double(65536 + 2)); + expect(s).toBe("long=65538"); + }); + + it("TestFloatCastToLongConversionWhenThereIsShortOverload", function () { + + __log("TEST: TestFloatCastToLongConversionWhenThereIsShortOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method3(float(65536 + 2)); + expect(s).toBe("long=65538"); + }); + + it("TestFloatCastToShortConversionWhenThereIsObjectOverload", function () { + + __log("TEST: TestFloatCastToShortConversionWhenThereIsObjectOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method4(float(65536 + 2)); + expect(s).toBe("short=2"); + }); + + it("TestByteCastToShortConversionWhenThereIsObjectOverload", function () { + + __log("TEST: TestByteCastToShortConversionWhenThereIsObjectOverload"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method4(byte(65536 + 2)); + expect(s).toBe("short=2"); + }); + + it("TestResolveMethodWithByteCast", function () { + + __log("TEST: TestResolveMethodWithByteCast"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(byte(65536 + 123)); + expect(s).toBe("byte=123"); + }); + + it("TestResolveMethodWithShortCast", function () { + + __log("TEST: TestResolveMethodWithShortCast"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(short(65536 + 1234)); + expect(s).toBe("short=1234"); + }); + + it("TestResolveMethodWithoutCastFunction", function () { + + __log("TEST: TestResolveMethodWithoutCastFunction"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(123456); + expect(s).toBe("int=123456"); + }); + + it("TestResolveMethodWithLongCast", function () { + + __log("TEST: TestResolveMethodWithLongCast"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(long("123456789012")); + expect(s).toBe("long=123456789012"); + }); + + it("TestResolveMethodWithFloatCast", function () { + + __log("TEST: TestResolveMethodWithFloatCast"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(float(1.23)); + expect(s).toBe("float=1.23"); + }); + + it("TestResolveMethodWithDoubleCast", function () { + + __log("TEST: TestResolveMethodWithDoubleCast"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(double(1)); + expect(s).toBe("double=1.0"); + }); + + it("TestResolveIntMethodWithNumberObjectWithIntArgument", function () { + + __log("TEST: TestResolveIntMethodWithNumberObjectWithIntArgument"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(new Number(1)); + expect(s).toBe("int=1"); + }); + + it("TestResolveIntMethodWithNumberObjectWithDoubleArgument", function () { + + __log("TEST: TestResolveIntMethodWithNumberObjectWithDoubleArgument"); + + var n = new com.tns.tests.NumericConversionTest(); + var s = n.method5(new Number(1.23)); + expect(s).toBe("double=1.23"); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/propertyAccessTests.js b/test-app/assets/app/tests/propertyAccessTests.js deleted file mode 100644 index ed70b043b..000000000 --- a/test-app/assets/app/tests/propertyAccessTests.js +++ /dev/null @@ -1,73 +0,0 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestAccessPropertyGetterStartingWithLowerLetter = function() { - - __log("TEST: TestAccessPropertyStartingWithLowerLetter"); - - var dummyClass = com.tns.tests.DummyClass.class; - - var name1 = dummyClass.getName(); - Assert(name1 === "com.tns.tests.DummyClass", "TestAccessPropertyStartingWithLowerLetter FAILED: Expected value is 'com.tns.tests.DummyClass', actual value=" + name1); - - var name2 = dummyClass.Name; - Assert(name2 === "com.tns.tests.DummyClass", "TestAccessPropertyStartingWithLowerLetter FAILED: Expected value is 'com.tns.tests.DummyClass', actual value=" + name2); - - var name3 = dummyClass.name; - Assert(name3 === "com.tns.tests.DummyClass", "TestAccessPropertyStartingWithLowerLetter FAILED: Expected value is 'com.tns.tests.DummyClass', actual value=" + name3); -} - -var TestAccessPropertySetterStartingWithLowerLetter = function() { - - __log("TEST: TestAccessPropertySetterStartingWithLowerLetter"); - - var dummy = new com.tns.tests.DummyClass(); - - var name = dummy.getName(); - - var newName = name + "!"; - - dummy.name = newName; - - var name1 = dummy.getName(); - - Assert(name1 === newName, "TestAccessPropertySetterStartingWithLowerLetter FAILED: Expected value should be equal to='" + newName + "' but actual value=" + name1); -} - -var TestAccessNonCamelCasePropertyWithoutGetter = function() { - - __log("TEST: TestAccessNonCamelCasePropertyWithoutGetter"); - - var d = new com.tns.tests.DummyClass("test"); - - var name1 = d.getname2(); - Assert(name1 === "test", "TestAccessNonCamelCasePropertyWithoutGetter FAILED: Expected value is 'test', actual value=" + name1); - - var name2 = d.name2; - Assert(name2 === "test", "TestAccessNonCamelCasePropertyWithoutGetter FAILED: Expected value is 'test', actual value=" + name2); -} - -var TestAccessNonCamelCasePropertyWithoutSetter = function() { - - __log("TEST: TestAccessNonCamelCasePropertyWithoutSetter"); - - var dummy = new com.tns.tests.DummyClass(); - - var name = dummy.getname2(); - - var newName = name + "!"; - - dummy.name2 = newName; - - var name1 = dummy.getname2(); - - Assert(name1 === newName, "TestAccessNonCamelCasePropertyWithoutSetter FAILED: Expected value should be equal to='" + newName + "' but actual value=" + name1); -} - -TestAccessPropertyGetterStartingWithLowerLetter(); -TestAccessPropertySetterStartingWithLowerLetter(); -TestAccessNonCamelCasePropertyWithoutGetter(); -TestAccessNonCamelCasePropertyWithoutSetter(); diff --git a/test-app/assets/app/tests/stringConversionTests.js b/test-app/assets/app/tests/stringConversionTests.js index c87b653af..32ff7a7df 100644 --- a/test-app/assets/app/tests/stringConversionTests.js +++ b/test-app/assets/app/tests/stringConversionTests.js @@ -1,98 +1,100 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestCanConvertNonTrivalJavaString1 = function() { - - __log("TEST: TestCanConvertNonTrivalJavaString1"); - - var strConvTest = new com.tns.tests.StringConversionTest(); - - var s = strConvTest.getString(); - - var len = strConvTest.getLength(); - - var isEqualsLength = strConvTest.equalsLength(s); - - Assert(isEqualsLength === true, "TestCanConvertNonTrivalJavaString1 FAILED: Expected value is " + len + ", actual value=" + s.length); - - var isEqualsString = strConvTest.equalsString(s); - - Assert(isEqualsString === true, "TestCanConvertNonTrivalJavaString1 FAILED: Expected value is 'true', actual value=" + isEqualsString); -} - -var TestCanConvertNonTrivalJavaString2 = function() { - - __log("TEST: TestCanConvertNonTrivalJavaString2"); - - var strConvTest = new com.tns.tests.StringConversionTest(); - - var s = strConvTest.getString(1); - - var arr = strConvTest.getStringArr(); - - arr[0] = s; - - var newS = arr[0]; +describe("Tests string conversion ", function () { - var isEqualsLength = strConvTest.equalsLength(newS); + var myCustomEquality = function(first, second) { + return first == second; + }; - Assert(isEqualsLength === true, "TestCanConvertNonTrivalJavaString2 FAILED: Expected value is " + s.length + ", actual value=" + newS.length); + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); - var isEqualsString = strConvTest.equalsString(newS); + it("TestCanConvertNonTrivalJavaString1", function () { + + __log("TEST: TestCanConvertNonTrivalJavaString1"); + + var strConvTest = new com.tns.tests.StringConversionTest(); + + var s = strConvTest.getString(); + + var len = strConvTest.getLength(); + + var isEqualsLength = strConvTest.equalsLength(s); + + expect(isEqualsLength).toBe(true); + + var isEqualsString = strConvTest.equalsString(s); + + expect(isEqualsString).toBe(true); + + }); - Assert(isEqualsString === true, "TestCanConvertNonTrivalJavaString2 FAILED: Expected value is 'true', actual value=" + isEqualsString); -} - -var TestCanConvertNonTrivalJavaString3 = function() { + it("TestCanConvertNonTrivalJavaString2", function () { + - __log("TEST: TestCanConvertNonTrivalJavaString3"); + __log("TEST: TestCanConvertNonTrivalJavaString2"); - var strConvTest = new com.tns.tests.StringConversionTest(); - - var s = strConvTest.s; - - var len = strConvTest.getLength(); - - var isEqualsLength = strConvTest.equalsLength(s); - - Assert(isEqualsLength === true, "TestCanConvertNonTrivalJavaString3 FAILED: Expected value is " + len + ", actual value=" + s.length); - - var isEqualsString = strConvTest.equalsString(s); + var strConvTest = new com.tns.tests.StringConversionTest(); + + var s = strConvTest.getString(1); + + var arr = strConvTest.getStringArr(); + + arr[0] = s; + + var newS = arr[0]; + + var isEqualsLength = strConvTest.equalsLength(newS); + + expect(isEqualsLength).toBe(true); + + var isEqualsString = strConvTest.equalsString(newS); + + expect(isEqualsString).toBe(true); + }); - Assert(isEqualsString === true, "TestCanConvertNonTrivalJavaString3 FAILED: Expected value is 'true', actual value=" + isEqualsString); -} - -var TestCanConvertNonTrivalJavaString4 = function() { + it("TestCanConvertNonTrivalJavaString3", function () { + + __log("TEST: TestCanConvertNonTrivalJavaString3"); - __log("TEST: TestCanConvertNonTrivalJavaString4"); - - var s = ""; - var len = 0; - var isEqualsLength = false; - var isEqualsString = false; - - var MyStringConversionTest = com.tns.tests.StringConversionTest.extend("StringConversionTest77", { - callback: function(str) { - s = str; - len = this.getLength(); - isEqualsLength = this.equalsLength(s); - isEqualsString = this.equalsString(s); - } + var strConvTest = new com.tns.tests.StringConversionTest(); + + var s = strConvTest.s; + + var len = strConvTest.getLength(); + + var isEqualsLength = strConvTest.equalsLength(s); + + expect(isEqualsLength).toBe(true); + + var isEqualsString = strConvTest.equalsString(s); + + expect(isEqualsString).toBe(true); }); - var strConvTest = new MyStringConversionTest(); - - strConvTest.triggerCallback(); - - Assert(isEqualsLength === true, "TestCanConvertNonTrivalJavaString4 FAILED: Expected value is " + len + ", actual value=" + s.length); + it("TestCanConvertNonTrivalJavaString4", function () { - Assert(isEqualsString === true, "TestCanConvertNonTrivalJavaString4 FAILED: Expected value is 'true', actual value=" + isEqualsString); -} - -TestCanConvertNonTrivalJavaString1(); -TestCanConvertNonTrivalJavaString2(); -TestCanConvertNonTrivalJavaString3(); -TestCanConvertNonTrivalJavaString4(); \ No newline at end of file + __log("TEST: TestCanConvertNonTrivalJavaString4"); + + var s = ""; + var len = 0; + var isEqualsLength = false; + var isEqualsString = false; + + var MyStringConversionTest = com.tns.tests.StringConversionTest.extend("StringConversionTest77", { + callback: function(str) { + s = str; + len = this.getLength(); + isEqualsLength = this.equalsLength(s); + isEqualsString = this.equalsString(s); + } + }); + + var strConvTest = new MyStringConversionTest(); + + strConvTest.triggerCallback(); + + expect(isEqualsLength).toBe(true); + + expect(isEqualsString).toBe(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testGC.js b/test-app/assets/app/tests/testGC.js index c613ffc77..8ef3859c2 100644 --- a/test-app/assets/app/tests/testGC.js +++ b/test-app/assets/app/tests/testGC.js @@ -1,204 +1,197 @@ -///START: Extends tests -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - - -// this test has implicit assert in com.tns.Platform.getJavaObjectByID method -function test1() { - - function createObjects(name) { - var c1 = new com.tns.tests.Class1(); +describe("Tests garbage collection", function () { + + var myCustomEquality = function(first, second) { + return first == second; + }; + + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); + + // this test has implicit assert in com.tns.Platform.getJavaObjectByID method + it("test1", function () { + + function createObjects(name) { + var c1 = new com.tns.tests.Class1(); + + var cb1 = new com.tns.tests.Class1.Callback1(name, { + getMessage: function() { + var msg = c1.getMessage(); + return msg; + } + }); + + return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); + } - var cb1 = new com.tns.tests.Class1.Callback1(name, { - getMessage: function() { - var msg = c1.getMessage(); - return msg; - } - }); + expect(createObjects("Callback5")).toBe(true); + expect(createObjects("Callback26")).toBe(true); - return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); - } + gc(); + java.lang.System.gc(); + }); - Assert(createObjects("Callback5") === true, "test1 FAILED: to enqueue first message"); - Assert(createObjects("Callback26") === true, "test1 FAILED: to enqueue second message"); - gc(); - java.lang.System.gc(); -} - - -// this test has implicit assert in com.tns.Platform.getJavaObjectByID method -function test2() { - - function indref1() { - this.class1 = new com.tns.tests.Class1(); - } - indref1.prototype.getMessage = function() { - return "~~~" + this.class1.getMessage(); - } - - function createObjects(name) { - var c1 = new indref1(); + // this test has implicit assert in com.tns.Platform.getJavaObjectByID method + it("test2", function () { - var cb1 = new com.tns.tests.Class1.Callback1(name, { - getMessage: function() { - var msg = c1.getMessage(); - return msg; - } - }); + function indref1() { + this.class1 = new com.tns.tests.Class1(); + } + indref1.prototype.getMessage = function() { + return "~~~" + this.class1.getMessage(); + } + + function createObjects(name) { + var c1 = new indref1(); + + var cb1 = new com.tns.tests.Class1.Callback1(name, { + getMessage: function() { + var msg = c1.getMessage(); + return msg; + } + }); + + return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); + } - return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); - } + expect(createObjects("Callback55")).toBe(true); + expect(createObjects("Callback56")).toBe(true); + gc(); + java.lang.System.gc(); + }); - Assert(createObjects("Callback55") === true, "test2 FAILED: to enqueue first message"); - Assert(createObjects("Callback56") === true, "test2 FAILED: to enqueue second message"); - gc(); - java.lang.System.gc(); -} - - -// this test has implicit assert in com.tns.Platform.getJavaObjectByID method -function test3() { - - function indref2() { - this.helper = new indref2helper(); - } - indref2.prototype.getMessage = function() { - return "---" + this.helper.getMessage(); - } - function indref2helper() { - this.class1 = new com.tns.tests.Class1(); - } - indref2helper.prototype.getMessage = function() { - return "***" + this.class1.getMessage(); - } - - function createObjects(name) { - var c1 = new indref2(); + // this test has implicit assert in com.tns.Platform.getJavaObjectByID method + it("test3", function () { - var cb1 = new com.tns.tests.Class1.Callback1(name, { - getMessage: function() { - var msg = c1.getMessage(); - return msg; - } - }); + function indref2() { + this.helper = new indref2helper(); + } + indref2.prototype.getMessage = function() { + return "---" + this.helper.getMessage(); + } + function indref2helper() { + this.class1 = new com.tns.tests.Class1(); + } + indref2helper.prototype.getMessage = function() { + return "***" + this.class1.getMessage(); + } + + function createObjects(name) { + var c1 = new indref2(); + + var cb1 = new com.tns.tests.Class1.Callback1(name, { + getMessage: function() { + var msg = c1.getMessage(); + return msg; + } + }); + + return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); + } - return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); - } + expect(createObjects("Callback91")).toBe(true); + expect(createObjects("Callback92")).toBe(true); + gc(); + java.lang.System.gc(); + }); - Assert(createObjects("Callback91") === true, "test3 FAILED: to enqueue first message"); - Assert(createObjects("Callback92") === true, "test3 FAILED: to enqueue second message"); - gc(); - java.lang.System.gc(); -} - - -// this test has implicit assert in com.tns.Platform.getJavaObjectByID method -function test4() { - - function indref3() { - this.helper = new indref3helper(); - } - indref3.prototype.getMessage = function() { - return "+++" + this.helper.getMessage(); - } - function indref3helper() { - this._class1 = new com.tns.tests.Class1(); - - Object.defineProperty(this, "class1", { - get: function() { - return this._class1 - } - }); - } - indref3helper.prototype.getMessage = function() { - return "^^^" + this.class1.getMessage(); - } - - function createObjects(name) { - var c1 = new indref3(); + // this test has implicit assert in com.tns.Platform.getJavaObjectByID method + it("test4", function () { - var cb1 = new com.tns.tests.Class1.Callback1(name, { - getMessage: function() { - var msg = c1.getMessage(); - return msg; - } - }); + function indref3() { + this.helper = new indref3helper(); + } + indref3.prototype.getMessage = function() { + return "+++" + this.helper.getMessage(); + } + function indref3helper() { + this._class1 = new com.tns.tests.Class1(); - return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); - } - - Assert(createObjects("Callback1133") === true, "test4 FAILED: to enqueue first message"); - Assert(createObjects("Callback1134") === true, "test4 FAILED: to enqueue second message"); - gc(); - java.lang.System.gc(); -} - - -// this test has implicit assert in com.tns.Platform.getJavaObjectByID method -function test5() { - - function indref4() { - this.helper = new indref4helper(); - } - indref4.prototype.getMessage = function() { - return "&&&" + this.helper.getMessageZZZ(); - } - function indref4helper() { - var _class1 = new com.tns.tests.Class1(); + Object.defineProperty(this, "class1", { + get: function() { + return this._class1 + } + }); + } + indref3helper.prototype.getMessage = function() { + return "^^^" + this.class1.getMessage(); + } + + function createObjects(name) { + var c1 = new indref3(); + + var cb1 = new com.tns.tests.Class1.Callback1(name, { + getMessage: function() { + var msg = c1.getMessage(); + return msg; + } + }); + + return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); + } - __log("indref4helper _class1=" + _class1); + expect(createObjects("Callback1133")).toBe(true); + expect(createObjects("Callback1134")).toBe(true); + gc(); + java.lang.System.gc(); + }); - Object.defineProperty(this, "class1", { - get: function() { - return _class1 - } - ,enumerable: false - }); - } - indref4helper.prototype.getMessageZZZ = function() { - return "```" + this.class1.getMessage(); - } - - function createObjects(name) { - var c1 = new indref4(); + // this test has implicit assert in com.tns.Platform.getJavaObjectByID method + //originally test was commented out + xit("test5", function () { - var cb1 = new com.tns.tests.Class1.Callback1(name, { - getMessage: function() { - var msg = c1.getMessage(); - return msg; - } - }); + function indref4() { + this.helper = new indref4helper(); + } + indref4.prototype.getMessage = function() { + return "&&&" + this.helper.getMessageZZZ(); + } + function indref4helper() { + var _class1 = new com.tns.tests.Class1(); + + __log("indref4helper _class1=" + _class1); - return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); - } - - Assert(createObjects("Callback1178") === true, "test5 FAILED: to enqueue first message"); - Assert(createObjects("Callback1179") === true, "test5 FAILED: to enqueue second message"); - gc(); - java.lang.System.gc(); -} - -function testAccessingStringFieldWontLeak() { - - __log("TEST: testAccessingStringFieldWontLeak"); - - var dummy = new com.tns.tests.DummyClass(); + Object.defineProperty(this, "class1", { + get: function() { + return _class1 + } + ,enumerable: false + }); + } + indref4helper.prototype.getMessageZZZ = function() { + return "```" + this.class1.getMessage(); + } + + function createObjects(name) { + var c1 = new indref4(); + + var cb1 = new com.tns.tests.Class1.Callback1(name, { + getMessage: function() { + var msg = c1.getMessage(); + return msg; + } + }); + + return com.tns.tests.Class1.Class2.printMessageWithDelay(cb1, 5 * 1000); + } + + expect(createObjects("Callback1178")).toBe(true); + expect(createObjects("Callback1179")).toBe(true); + gc(); + java.lang.System.gc(); + }); - for (var i=0; i<10000; i++) - { - var name = dummy.nameField; + it("testAccessingStringFieldWontLeak", function () { - Assert(name === "dummy", "FAILED testAccessingStringFieldWontLeak: Expected vaule='dummy', actual value=" + name); - } -} - + __log("TEST: testAccessingStringFieldWontLeak"); -test1() -test2() -test3() -test4() -//test5() -testAccessingStringFieldWontLeak(); \ No newline at end of file + var dummy = new com.tns.tests.DummyClass(); + + for (var i=0; i<10000; i++) + { + var name = dummy.nameField; + + expect(name).toBe("dummy"); + } + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testIfAbleToRunExternalFile.js b/test-app/assets/app/tests/testIfAbleToRunExternalFile.js index 730c120a9..d72218c36 100644 --- a/test-app/assets/app/tests/testIfAbleToRunExternalFile.js +++ b/test-app/assets/app/tests/testIfAbleToRunExternalFile.js @@ -1,34 +1,29 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var When_file_outside_the_project_folder_is_required_it_should_fail = function() { - - __log("When_file_outside_the_project_folder_is_required_it_should_throw_IllegalAccessException"); - - var illegalAccesExceptionCaught = false; - var fileSeparator = "/"; - var nonExistingFileName = "nonExistingFile"; - var nonExistingFileExtension = ".js"; +describe("Tests running external files", function () { - //create a file in external storage - var pathToExternalStorage = android.os.Environment.getExternalStorageDirectory().toString(); - var appDirectory = new java.io.File(pathToExternalStorage + fileSeparator + nonExistingFileName + nonExistingFileExtension); - appDirectory.mkdirs(); - - try - { - //try to require it with absolute path (requireing files with absolute path should not be possible) - require(pathToExternalStorage + fileSeparator + nonExistingFileName); - } - catch(e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "When_file_outside_the_project_folder_is_required_it_should_fail FAILED: Exception(illegal access) should be thrown"); -} + it("When_file_outside_the_project_folder_is_required_it_should_fail", function () { + + __log("When_file_outside_the_project_folder_is_required_it_should_throw_IllegalAccessException"); -When_file_outside_the_project_folder_is_required_it_should_fail(); + var illegalAccesExceptionCaught = false; + var fileSeparator = "/"; + var nonExistingFileName = "nonExistingFile"; + var nonExistingFileExtension = ".js"; + + //create a file in external storage + var pathToExternalStorage = android.os.Environment.getExternalStorageDirectory().toString(); + var appDirectory = new java.io.File(pathToExternalStorage + fileSeparator + nonExistingFileName + nonExistingFileExtension); + appDirectory.mkdirs(); + + try + { + //try to require it with absolute path (requireing files with absolute path should not be possible) + require(pathToExternalStorage + fileSeparator + nonExistingFileName); + } + catch(e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testWeakRef.js b/test-app/assets/app/tests/testWeakRef.js index 8ffc00ade..f8499d6a1 100644 --- a/test-app/assets/app/tests/testWeakRef.js +++ b/test-app/assets/app/tests/testWeakRef.js @@ -1,157 +1,149 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} +describe("Test WeakRef ", function () { + + it("Test if WeakRef gets cleared after gc", function () { + + __log("TEST: TestWeakRefGetsClearedAfterGC"); + + var wr = new WeakRef({ someProp: 12345 }); + + var val = wr.get().someProp; + expect(val).toBe(12345); + + gc(); + + var val = wr.get(); + expect(val).toBe(null); + }); + + it("Test if WeakRef gets cleared after clear", function () { + + __log("TEST: TestWeakRefGetsClearedAfterClear"); + + var wr = new WeakRef({ someProp: 54321 }); + + var val = wr.get().someProp; + expect(val).toBe(54321); + + wr.clear(); + + var val = wr.get(); + expect(val).toBe(null); + }); + + it("Test if WeakRef can create multiple instances", function () { + + __log("TEST: TestWeakRefCanCreateMultipleInstances"); + + var target = { someProp: 54321 }; + + var wr1 = new WeakRef(target); + var wr2 = new WeakRef(target); + + target = null; + + wr1.clear(); + + var val = wr1.get(); + expect(val).toBe(null); + + val = wr2.get().someProp; + expect(val).toBe(54321); + }); + + it("Test if WeakRef can create multiple instances 2", function () { -var TestWeakRefGetsClearedAfterGC = function() { + __log("TEST: TestWeakRefCanCreateMultipleInstances2"); + + var target = { someProp: 54321 }; + + var wr1 = new WeakRef(target); + var wr2 = new WeakRef(target); + + target = null; + gc(); + + var val1 = wr1.get(); + expect(val1).toBe(null); + + var val2 = wr2.get(); + expect(val2).toBe(null); + }); + + it("Test if WeakRef throws exception when constructed with wrong number of parameters", function () { + + __log("TEST: TestWeakRefThrowsExceptionWhenConstructedWithWrongNumberOfParameters"); + + var exceptionCaught = false; + try + { + new WeakRef(); + } + catch (e) + { + exceptionCaught = true; + } + expect(exceptionCaught).toBe(true); + + exceptionCaught = false; + try + { + new WeakRef(1, 2); + } + catch (e) + { + exceptionCaught = true; + } + expect(exceptionCaught).toBe(true); + + }); - __log("TEST: TestWeakRefGetsClearedAfterGC"); - - var wr = new WeakRef({ someProp: 12345 }); - - var val = wr.get().someProp; - Assert(val === 12345, "TestWeakRefGetsClearedAfterGC FAILED: Expected value '12345', actual value=" + val); - - gc(); - - var val = wr.get(); - Assert(val === null, "TestWeakRefGetsClearedAfterGC FAILED: Expected value 'null', actual value=" + val); -} - -var TestWeakRefGetsClearedAfterClear = function() { - - __log("TEST: TestWeakRefGetsClearedAfterClear"); - - var wr = new WeakRef({ someProp: 54321 }); - - var val = wr.get().someProp; - Assert(val === 54321, "TestWeakRefGetsClearedAfterClear FAILED: Expected value '54321', actual value=" + val); - - wr.clear(); - - var val = wr.get(); - Assert(val === null, "TestWeakRefGetsClearedAfterClear FAILED: Expected value 'null', actual value=" + val); -} - -var TestWeakRefCanCreateMultipleInstances = function() { - - __log("TEST: TestWeakRefCanCreateMultipleInstances"); - - var target = { someProp: 54321 }; - - var wr1 = new WeakRef(target); - var wr2 = new WeakRef(target); - - target = null; - - wr1.clear(); - - var val = wr1.get(); - Assert(val === null, "TestWeakRefCanCreateMultipleInstances FAILED: Expected value 'null', actual value=" + val); - - val = wr2.get().someProp; - Assert(val === 54321, "TestWeakRefCanCreateMultipleInstances FAILED: Expected value '54321', actual value=" + val); -} - -var TestWeakRefCanCreateMultipleInstances2 = function() { - - __log("TEST: TestWeakRefCanCreateMultipleInstances2"); - - var target = { someProp: 54321 }; - - var wr1 = new WeakRef(target); - var wr2 = new WeakRef(target); - - target = null; - gc(); - - var val1 = wr1.get(); - Assert(val1 === null, "TestWeakRefCanCreateMultipleInstances2 FAILED: Expected value (val1) 'null', actual value=" + val1); - - var val2 = wr2.get(); - Assert(val2 === null, "TestWeakRefCanCreateMultipleInstances2 FAILED: Expected value (val2) 'null', actual value=" + val2); -} - -var TestWeakRefThrowsExceptionWhenConstructedWithWrongNumberOfParameters = function() { - - __log("TEST: TestWeakRefThrowsExceptionWhenConstructedWithWrongNumberOfParameters"); - - var exceptionCaught = false; - try - { - new WeakRef(); - } - catch (e) - { - exceptionCaught = true; - } - Assert(exceptionCaught === true, "TestWeakRefThrowsExceptionWhenConstructedWithWrongNumberOfParameters FAILED: Expected value 'true'"); - - exceptionCaught = false; - try - { - new WeakRef(1, 2); - } - catch (e) - { - exceptionCaught = true; - } - Assert(exceptionCaught === true, "TestWeakRefThrowsExceptionWhenConstructedWithWrongNumberOfParameters FAILED: Expected value 'true'"); -} - -var TestWeakRefThrowsExceptionWhenConstructedWithNonObject = function() { - - __log("TEST: TestWeakRefThrowsExceptionWhenConstructedWithNonObject"); - - var exceptionCaught = false; - try - { - new WeakRef(1); - } - catch (e) - { - exceptionCaught = true; - } - Assert(exceptionCaught === true, "TestWeakRefThrowsExceptionWhenConstructedWithNonObject FAILED: Expected value 'true'"); - - exceptionCaught = false; - try - { - new WeakRef(false); - } - catch (e) - { - exceptionCaught = true; - } - Assert(exceptionCaught === true, "TestWeakRefThrowsExceptionWhenConstructedWithNonObject FAILED: Expected value 'true'"); + it("Test if WeakRef throws exception when constructed with non object", function () { + + __log("TEST: TestWeakRefThrowsExceptionWhenConstructedWithNonObject"); + + var exceptionCaught = false; + try + { + new WeakRef(1); + } + catch (e) + { + exceptionCaught = true; + } + expect(exceptionCaught).toBe(true); + + exceptionCaught = false; + try + { + new WeakRef(false); + } + catch (e) + { + exceptionCaught = true; + } + expect(exceptionCaught).toBe(true); - exceptionCaught = false; - try - { - new WeakRef(null); - } - catch (e) - { - exceptionCaught = true; - } - Assert(exceptionCaught === true, "TestWeakRefThrowsExceptionWhenConstructedWithNonObject FAILED: Expected value 'true'"); + exceptionCaught = false; + try + { + new WeakRef(null); + } + catch (e) + { + exceptionCaught = true; + } + expect(exceptionCaught).toBe(true); - exceptionCaught = false; - try - { - new WeakRef(undefined); - } - catch (e) - { - exceptionCaught = true; - } - Assert(exceptionCaught === true, "TestWeakRefThrowsExceptionWhenConstructedWithNonObject FAILED: Expected value 'true'"); -} + exceptionCaught = false; + try + { + new WeakRef(undefined); + } + catch (e) + { + exceptionCaught = true; + } + expect(exceptionCaught).toBe(true); + }); +}); -TestWeakRefGetsClearedAfterGC(); -TestWeakRefGetsClearedAfterClear(); -TestWeakRefCanCreateMultipleInstances(); -TestWeakRefCanCreateMultipleInstances2(); -TestWeakRefThrowsExceptionWhenConstructedWithWrongNumberOfParameters(); -TestWeakRefThrowsExceptionWhenConstructedWithNonObject(); diff --git a/test-app/assets/app/tests/tests.js b/test-app/assets/app/tests/tests.js index 1034c234c..b370f47aa 100644 --- a/test-app/assets/app/tests/tests.js +++ b/test-app/assets/app/tests/tests.js @@ -1,1868 +1,1801 @@ -///START: Extends tests -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var objectToString = function(o){ - var str=''; - - for(var p in o){ - if(typeof o[p] == 'string'){ - str+= p + ': ' + o[p]+';'; - }else{ - str+= p + ': { ' + objectToString(o[p]) + ' } '; - } - } - - return str; -}; - -var When_extending_a_class_two_times = function() { - - __log("TEST: When_extending_a_class_two_times"); - - __log("TEST: Creating MyButton"); - var MyButton = com.tns.tests.Button1.extend("MyButton", { - toString : function() { - return "button1"; - } - }); - - __log("TEST: Calling MyButton ctor"); - var button1 = new MyButton(); - __log("TEST: Calling button1 toString"); - var button1Label = button1.toString(); - button1.setLabel("first button"); - - __log("TEST: Creating MyButton2 class"); - var MyButton2 = new com.tns.tests.Button1.extend("MyButton", { - toString : function() { - return "button2"; - }}); - - var button2 = new MyButton2(); - button2.setLabel("second button"); - var button2Label = button2.toString(); - - __log("but1=" + button1Label + ", but2=" + button2Label); - - Assert(button1 != button2 && button1Label == "button1" && button2Label == "button2", "FAILED: When_extending_a_class_two_times"); - - var button1LabelAfterButton2Created = button1.toString(); - Assert(button1 != button2 && button1LabelAfterButton2Created == "button1" && button2Label == "button2", "FAILED: When_extending_a_class_two_times"); -} +describe("Tests ", function () { -var When_extending_a_class_two_times_with_no_extend_names = function() { + var objectToString = function(o){ + var str=''; + + for(var p in o){ + if(typeof o[p] == 'string'){ + str+= p + ': ' + o[p]+';'; + }else{ + str+= p + ': { ' + objectToString(o[p]) + ' } '; + } + } + + return str; + }; - __log("TEST: When_extending_a_class_two_times_with_no_extend_names"); + var myCustomEquality = function(first, second) { + return first == second; + }; - __log("TEST: Creating MyButton"); - var MyButton = com.tns.tests.Button1.extend({ - toString : function() { - return "button1"; - } + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); }); - __log("TEST: Calling MyButton ctor"); - var button1 = new MyButton(); - __log("TEST: Calling button1 toString"); - var button1Label = button1.toString(); - button1.setLabel("first button"); - - __log("TEST: Creating MyButton2 class"); - var MyButton2 = new com.tns.tests.Button1.extend({ - toString : function() { - return "button2"; - }}); - - var button2 = new MyButton2(); - button2.setLabel("second button"); - var button2Label = button2.toString(); - - __log("but1=" + button1Label + ", but2=" + button2Label); - - Assert(button1 != button2 && button1Label == "button1" && button2Label == "button2", "FAILED: When_extending_a_class_two_times_with_no_extend_names"); - - var button1LabelAfterButton2Created = button1.toString(); - Assert(button1 != button2 && button1LabelAfterButton2Created == "button1" && button2Label == "button2", "FAILED: When_extending_a_class_two_times_with_no_extend_names"); -} - -var When_implementing_an_interface_with_new_the_overrides_should_work = function() { - __log("TEST: When_implementing_an_interface_with_new__the_overrides_should_work"); - - var MyButton = new com.tns.tests.Button1.extend("MyButton60", { - toString : function() { - return "button1"; - } + it("When_extending_a_class_two_times", function () { + + __log("TEST: When_extending_a_class_two_times"); + + __log("TEST: Creating MyButton"); + var MyButton = com.tns.tests.Button1.extend("MyButton", { + toString : function() { + return "button1"; + } + }); + + __log("TEST: Calling MyButton ctor"); + var button1 = new MyButton(); + __log("TEST: Calling button1 toString"); + var button1Label = button1.toString(); + button1.setLabel("first button"); + + __log("TEST: Creating MyButton2 class"); + var MyButton2 = new com.tns.tests.Button1.extend("MyButton", { + toString : function() { + return "button2"; + }}); + + var button2 = new MyButton2(); + button2.setLabel("second button"); + var button2Label = button2.toString(); + + __log("but1=" + button1Label + ", but2=" + button2Label); + + var shouldBeTrue = (button1 != button2 && button1Label == "button1" && button2Label == "button2"); + + expect(shouldBeTrue).toBe(true); + + var button1LabelAfterButton2Created = button1.toString(); + shouldBeTrue = (button1 != button2 && button1LabelAfterButton2Created == "button1" && button2Label == "button2"); + + expect(shouldBeTrue).toBe(true); }); - var button1 = new MyButton(); - var buttonClicked = false; - button1.setOnClickListener(new android.view.View.OnClickListener("MyClickListener", { - onClick : function() { - buttonClicked = true; - } - })); - button1.click(null); - - Assert(buttonClicked == true, "FAILED: When_implementing_an_interface_with_new__the_overrides_should_work"); -} -var When_calling_instanceof_on_field_result_it_should_work = function() { - __log("TEST: When_calling_instanceof_on_field_result_it_should_work"); - - var MyButton = new com.tns.tests.Button1.extend("MyButton81", { - toString : function() { - return "button1"; - }, + it("When_extending_a_class_two_times_with_no_extend_names", function () { + + __log("TEST: When_extending_a_class_two_times_with_no_extend_names"); + + __log("TEST: Creating MyButton"); + var MyButton = com.tns.tests.Button1.extend({ + toString : function() { + return "button1"; + } + }); + + __log("TEST: Calling MyButton ctor"); + var button1 = new MyButton(); + __log("TEST: Calling button1 toString"); + var button1Label = button1.toString(); + button1.setLabel("first button"); + + __log("TEST: Creating MyButton2 class"); + var MyButton2 = new com.tns.tests.Button1.extend({ + toString : function() { + return "button2"; + }}); + + var button2 = new MyButton2(); + button2.setLabel("second button"); + var button2Label = button2.toString(); + + __log("but1=" + button1Label + ", but2=" + button2Label); + + var shouldBeTrue = (button1 != button2 && button1Label == "button1" && button2Label == "button2"); + + expect(shouldBeTrue).toBe(true); + + var button1LabelAfterButton2Created = button1.toString(); + shouldBeTrue = (button1 != button2 && button1LabelAfterButton2Created == "button1" && button2Label == "button2"); + + expect(shouldBeTrue).toBe(true); }); - var button1 = new MyButton(); - var dummyObject = button1.DummyClassAsObjectField; - - var isInstanceOf = dummyObject instanceof com.tns.tests.DummyClass; - Assert(isInstanceOf == true, "FAILED: When_calling_instanceof_on_field_result_it_should_work."); -} - -var When_calling_instanceof_on_method_result_it_should_work = function() { - __log("TEST: When_calling_instanceof_on_method_result_it_should_work"); - - var MyButton = new com.tns.tests.Button1.extend("MyButton98", { - toString : function() { - return "button1"; - }, + it("When_implementing_an_interface_with_new_the_overrides_should_work", function () { + + __log("TEST: When_implementing_an_interface_with_new__the_overrides_should_work"); + + var MyButton = new com.tns.tests.Button1.extend("MyButton60", { + toString : function() { + return "button1"; + } + }); + + var button1 = new MyButton(); + var buttonClicked = false; + button1.setOnClickListener(new android.view.View.OnClickListener("MyClickListener", { + onClick : function() { + buttonClicked = true; + } + })); + button1.click(null); + + expect(buttonClicked).toEqual(true); }); - var button1 = new MyButton(); - var dummy = button1.getDummy(); - - var isInstanceOf = dummy instanceof com.tns.tests.DummyClass; - Assert(isInstanceOf == true, "FAILED: When_calling_instanceof_on_method_result_it_should_work."); -} - -var When_calling_instanceof_on_method_argument_it_should_work = function() { - __log("TEST: When_calling_instanceof_on_method_argument_it_should_work"); - - var isInstanceOf; - - var MyButton = new com.tns.tests.Button1.extend("MyButton115", { - toString : function() { - return "button1"; - }, - - methodDummyClassAsObjectInArgs: function(object) { - isInstanceOf = object instanceof com.tns.tests.DummyClass; - } + it("When_calling_instanceof_on_field_result_it_should_work", function () { + + __log("TEST: When_calling_instanceof_on_field_result_it_should_work"); + + var MyButton = new com.tns.tests.Button1.extend("MyButton81", { + toString : function() { + return "button1"; + }, + }); + + var button1 = new MyButton(); + var dummyObject = button1.DummyClassAsObjectField; + + var isInstanceOf = dummyObject instanceof com.tns.tests.DummyClass; + + expect(isInstanceOf).toEqual(true); }); - var button1 = new MyButton(); - button1.callMethodDummyClassAsObjectInArgs(); - - Assert(isInstanceOf == true, "FAILED: When_calling_instanceof_on_method_argument_it_should_work."); -} - -var When_calling_instanceof_on_interface_it_should_work = function() { - - __log("NOT WORKING: When_calling_instanceof_on_interface_it_should_work"); - return; - - __log("TEST: When_calling_instanceof_on_interface_it_should_work"); - - var interfaceInstance = new android.view.View.OnClickListener("ClickListener", { - onClick : function() { - buttonClicked = true; - } + it("When_calling_instanceof_on_method_result_it_should_work", function () { + + __log("TEST: When_calling_instanceof_on_method_result_it_should_work"); + + var MyButton = new com.tns.tests.Button1.extend("MyButton98", { + toString : function() { + return "button1"; + }, + }); + + var button1 = new MyButton(); + var dummy = button1.getDummy(); + + var isInstanceOf = dummy instanceof com.tns.tests.DummyClass; + + expect(isInstanceOf).toEqual(true); }); - var secondInterfaceInstance = new android.view.View.OnClickListener("ClickListener", { - onClick : function() { - buttonClicked = true; - } + it("When_calling_instanceof_on_method_argument_it_should_work", function () { + + __log("TEST: When_calling_instanceof_on_method_argument_it_should_work"); + + var isInstanceOf; + + var MyButton = new com.tns.tests.Button1.extend("MyButton115", { + toString : function() { + return "button1"; + }, + + methodDummyClassAsObjectInArgs: function(object) { + isInstanceOf = object instanceof com.tns.tests.DummyClass; + } + }); + + var button1 = new MyButton(); + button1.callMethodDummyClassAsObjectInArgs(); + + expect(isInstanceOf).toEqual(true); }); - var thirdInterfaceInstance = new android.view.View.OnClickListener("ClickListener", { - onClick : function() { - buttonClicked = true; - } + //originally wasn't run + it("When_calling_instanceof_on_interface_it_should_work", function () { + + __log("TEST: When_calling_instanceof_on_interface_it_should_work"); + + var interfaceInstance = new android.view.View.OnClickListener("ClickListener", { + onClick : function() { + buttonClicked = true; + } + }); + + var secondInterfaceInstance = new android.view.View.OnClickListener("ClickListener", { + onClick : function() { + buttonClicked = true; + } + }); + + var thirdInterfaceInstance = new android.view.View.OnClickListener("ClickListener", { + onClick : function() { + buttonClicked = true; + } + }); + + //__log("Object get PrototypeOf" + Object.getPrototypeOf(interfaceInstance).toString()); + //__log("Object get PrototypeOf" + Object.getPrototypeOf(secondInterfaceInstance).toString()); + + var isInstanceOfOnClickListener = interfaceInstance instanceof android.view.View.OnClickListener; + var secondIsInstanceOfOnClickListener = secondInterfaceInstance instanceof android.view.View.OnClickListener; + var thirdIsInstanceOfOnClickListener = thirdInterfaceInstance instanceof android.view.View.OnClickListener; + + expect(isInstanceOfOnClickListener).toEqual(true); + expect(secondIsInstanceOfOnClickListener).toEqual(true); + expect(thirdIsInstanceOfOnClickListener).toEqual(true); }); - //__log("Object get PrototypeOf" + Object.getPrototypeOf(interfaceInstance).toString()); - //__log("Object get PrototypeOf" + Object.getPrototypeOf(secondInterfaceInstance).toString()); - - var isInstanceOfOnClickListener = interfaceInstance instanceof android.view.View.OnClickListener; - var secondIsInstanceOfOnClickListener = secondInterfaceInstance instanceof android.view.View.OnClickListener; - var thirdIsInstanceOfOnClickListener = thirdInterfaceInstance instanceof android.view.View.OnClickListener; - __log("isInstanceOfOnClickListener: " + isInstanceOfOnClickListener + " secondIsInstanceOfOnClickListener:" + secondIsInstanceOfOnClickListener + " thirdIsInstanceOfOnClickListener: " + thirdIsInstanceOfOnClickListener); - - Assert(isInstanceOfOnClickListener == true, "FAILED: When_calling_instanceof_on_interface_it_should_work. Actual isInstanceOfOnClickListener: " + isInstanceOfOnClickListener); - Assert(secondIsInstanceOfOnClickListener == true, "FAILED 11: When_calling_instanceof_on_interface_it_should_work. Actual secondIsInstanceOfOnClickListener: " + secondIsInstanceOfOnClickListener); -} + it("When_calling_instanceof_it_should_work", function () { + + __log("TEST: When_calling_instanceof_it_should_work"); + + var MyButton = com.tns.tests.Button1.extend("MyButton148", { + toString : function() { + return "button1"; + } + }); -var When_calling_instanceof_it_should_work = function() { - __log("TEST: When_calling_instanceof_it_should_work"); - - var MyButton = com.tns.tests.Button1.extend("MyButton148", { - toString : function() { - return "button1"; - } + var button1 = new MyButton(); + + var isInstanceOfMyButton = button1 instanceof MyButton; + var isInstanceOfButton1 = button1 instanceof com.tns.tests.Button1; + + expect(isInstanceOfMyButton).toEqual(true); + expect(isInstanceOfButton1).toBe(true); }); - - var button1 = new MyButton(); - - var isInstanceOfMyButton = button1 instanceof MyButton; - var isInstanceOfButton1 = button1 instanceof com.tns.tests.Button1; - Assert(isInstanceOfMyButton == true, "FAILED: When_calling_instanceof_it_should_work. The button should be instanceof MyButton"); - - Assert(isInstanceOfButton1 === true, "FAILED: When_calling_instanceof_it_should_work. The button should be instanceof Button1"); -} - - -var When_accessing_a_property_it_should_call_the_get_and_set_methods_respectivelly = function() { - __log("TEST: When_calling_instance_and_static_member_with_same_name_the_calls_should_succeed"); - var MyButton = com.tns.tests.Button1.extend("MyButton167", { - toString : function() { - return "button1"; + it("When_calling_instance_and_static_member_with_same_name_the_calls_should_succeed", function () { + + __log("TEST: When_calling_instance_and_static_member_with_same_name_the_calls_should_succeed"); + var MyButton = com.tns.tests.Button1.extend("MyButton213", { + toString : function() { + return "button1"; + } + }); + + var button1 = new MyButton(); + + var exceptionCaught = false; + try { + MyButton.someMethod(1, "hello"); + button1.someMethod(1, "hello"); + button1.someMethod(1, new java.lang.Object()); } + catch(e) { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(false); }); - - var button1 = new MyButton(); - - //call static method from instance - var prop = button1.IMAGE_ID_PROP; - - Assert(prop === "image id prop", "FAILED (1): When_accessing_a_property_it_should_call_the_get_and_set_methods_respectivelly"); - - button1.IMAGE_ID_PROP = "new value"; + it("When_calling_toString_on_an_java_object_it_should_call_the_java_method", function () { - prop = button1.IMAGE_ID_PROP; - - Assert(prop === "new value", "FAILED (2): When_accessing_a_property_it_should_call_the_get_and_set_methods_respectivelly"); -} - -var When_accessing_a_bool_property_it_should_call_the_is_and_set_methods_respectivelly = function() { - __log("TEST: When_accessing_a_bool_property_it_should_call_the_is_and_set_methods_respectivelly"); - var MyButton = com.tns.tests.Button1.extend("MyButton190", { - toString : function() { - return "button1"; - } + __log("TEST: When_calling_toString_on_an_java_object_it_should_call_the_java_method"); + var instance = new com.tns.tests.DummyClass(); + var s = instance.toString(); + + expect(s.indexOf("com.tns.tests.DummyClass")).not.toEqual(-1); }); - - var button1 = new MyButton(); - - //call static method from instance - var prop = button1.IMAGE_ID_BOOL_PROP; - - Assert(prop == false, "FAILED: When_accessing_a_bool_property_it_should_call_the_is_and_set_methods_respectivelly"); + it("When_calling_toString_on_an_java_object_that_has_overriden_toString_in_js_it_should_call_the_js_method", function () { + + __log("TEST: When_calling_toString_on_an_java_object_that_has_overriden_toString_in_js_it_should_call_the_js_method"); + var MyButton = com.tns.tests.Button1.extend("MyButton240", { + toString : function() { + return "button1"; + } + }); + + var instance = new MyButton(); + var s = instance.toString(); + + expect(s).toBe("button1"); + }); - button1.IMAGE_ID_BOOL_PROP = true; + it("When_extending_a_class_two_times_without_second_implementation_object", function () { + + __log("TEST: When_extending_a_class_two_times_without_second_implementation_object"); + + var MyButton = com.tns.tests.Button1.extend("MyButton257", { + toString : function() { + return "button1"; + } + }); + + var button1 = new MyButton(); + var button1Label = button1.toString(); - prop = button1.IMAGE_ID_BOOL_PROP; + var button2 = new com.tns.tests.Button1(); + var button2Label = button2.toString(); + + __log("button1Label=" + button1Label + ", button2Label=" + button2Label); + var shouldBeTrue = (button1 !== button2 && button1Label !== button2Label); + + expect(shouldBeTrue).toBe(true); + + var button1PostButton2CreationLabel = button1.toString(); + + expect(button1Label).toBe(button1PostButton2CreationLabel); + }); - Assert(prop == true, "FAILED: When_accessing_a_bool_property_it_should_call_the_is_and_set_methods_respectivelly"); -} + it("When__calling_super_method_using_the_prototype_property_of_a_function_it_should_call_the_super_method", function () { + + __log("TEST: When__calling_super_method_using_the_prototype_property_of_a_function_it_should_call_the_super_method"); -var When_calling_instance_and_static_member_with_same_name_the_calls_should_succeed = function() { - __log("TEST: When_calling_instance_and_static_member_with_same_name_the_calls_should_succeed"); - var MyButton = com.tns.tests.Button1.extend("MyButton213", { - toString : function() { - return "button1"; - } + var button1 = new com.tns.tests.Button1(); + var prop = com.tns.tests.Button1.prototype.getIMAGE_ID_PROP.call(button1); + + expect(prop).toBe("image id prop"); }); - - var button1 = new MyButton(); - - //call static method from extended object - MyButton.someMethod(1, "hello"); - //call static method from instance - button1.someMethod(1, "hello"); - - //call instance method - button1.someMethod(1, new java.lang.Object()); -} - - -var When_calling_toString_on_an_java_object_it_should_call_the_java_method = function() { - __log("TEST: When_calling_toString_on_an_java_object_it_should_call_the_java_method"); - var instance = new com.tns.tests.DummyClass(); - var s = instance.toString(); - Assert(s.indexOf("com.tns.tests.DummyClass") != -1, "FAILED: When_calling_toString_on_an_java_object_it_should_call_the_java_method. Actual value: " + instance.toString()); -} + it("When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method", function () { + + __log("TEST: When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method"); -var When_calling_toString_on_an_java_object_that_has_overriden_toString_in_js_it_should_call_the_js_method = function() { - __log("TEST: When_calling_toString_on_an_java_object_that_has_overriden_toString_in_js_it_should_call_the_js_method"); - var MyButton = com.tns.tests.Button1.extend("MyButton240", { - toString : function() { - return "button1"; - } + var MyButton = com.tns.tests.Button1.extend("MyButton289", {}); + var button1 = new MyButton(); + var prop = com.tns.tests.Button1.prototype.getIMAGE_ID_PROP.call(button1); + + expect(prop).toBe("image id prop"); }); - var instance = new MyButton(); - var s = instance.toString(); - Assert(s === "button1", "FAILED: When_calling_toString_on_an_java_object_that_has_overriden_toString_in_js_it_should_call_the_js_method. Actual value: " + instance.toString()); -} + it("When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method2", function () { + + __log("TEST: When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method2"); -var When_extending_a_class_two_times_without_second_implementation_object = function() { - __log("TEST: When_extending_a_class_two_times_without_second_implementation_object"); - - var MyButton = com.tns.tests.Button1.extend("MyButton257", { - toString : function() { - return "button1"; - } + var MyButton = com.tns.tests.Button1.extend("MyButton294", { + getIMAGE_ID_PROP: function() { return ""; } + }); + var button1 = new MyButton(); + var prop = com.tns.tests.Button1.prototype.getIMAGE_ID_PROP.call(button1); + + expect(prop).toBe("image id prop"); }); - var button1 = new MyButton(); - var button1Label = button1.toString(); - - var button2 = new com.tns.tests.Button1(); - var button2Label = button2.toString(); - - __log("button1Label=" + button1Label + ", button2Label=" + button2Label); - Assert(button1 !== button2 && button1Label !== button2Label, "FAILED: When_extending_a_class_two_times_without_second_implementation_object"); + it("When_extending_a_class_and_calling_super_toString", function () { + + //__log("//TODO: NOT WORKING: super method calls are not working correctly. Tests fails with FAILED: When_extending_a_class_and_calling_super_toString. Actual: com.tns.com.tns.tests.Button1-MyButton305@52854640 Expected: com.tns.tests.Button1@"); + //return; + + __log("TEST: When_extending_a_class_and_calling_super_toString"); + + var MyButton = com.tns.tests.Button1.extend("MyButton", { + toString : function() { + return this.super.toString() + this.super.echo("success"); + }, + + echo : function(s) { + return "fail"; + } + }); + + var button1 = new MyButton(); + var button1Label = button1.toString(); + + expect(button1Label.indexOf("com.tns.tests.Button1-")).not.toEqual(-1); + expect(button1Label.indexOf("MyButton")).not.toEqual(-1); + expect(button1Label.indexOf("success")).not.toEqual(-1); + + }); + it("When_extending_a_class_and_calling_super_method_it_should_work", function () { + + __log("TEST: When_extending_a_class_and_calling_super_method_it_should_work"); + var MyButton = com.tns.tests.Button1.extend("MyButton318", { + toString : function() { + return "toString overriden"; + }, + + getIMAGE_ID_PROP : function() { + return this.super.getIMAGE_ID_PROP() + "!"; + } + }); + var button1 = new MyButton(); + var button1SuperToString = button1.toString(); + + expect(button1SuperToString).toBe("toString overriden"); + + var IMAGE_ID_PROP_Result = button1.getIMAGE_ID_PROP(); + + expect(IMAGE_ID_PROP_Result).toBe("image id prop!"); + }); - var button1PostButton2CreationLabel = button1.toString(); - Assert(button1Label === button1PostButton2CreationLabel, "FAILED: When_extending_a_class_two_times_without_second_implementation_object"); -} - -var When__calling_super_method_using_the_prototype_property_of_a_function_it_should_call_the_super_method = function() { - __log("TEST: When__calling_super_method_using_the_prototype_property_of_a_function_it_should_call_the_super_method"); - - var button1 = new com.tns.tests.Button1(); - var prop = com.tns.tests.Button1.prototype.getIMAGE_ID_PROP.call(button1); + it("When_accessing_static_members_on_an_extended_class", function () { + + __log("TEST: When_accessing_static_members_on_an_extended_class"); + + var MyButton = com.tns.tests.Button1.extend("MyButton341", { + hashCode : function() { + return 5454; + } + }); + + var MyButton2 = com.tns.tests.Button1.extend("MyButton347", { + hashCode : function() { + return 1212; + } + }); + + var setValue = 4; + MyButton.setMyStaticIntField(setValue); + var readValue = MyButton2.getMyStaticIntField(); + + expect(readValue).toEqual(setValue); + + var readValue = com.tns.tests.Button1.getMyStaticIntField(); + + expect(readValue).toEqual(setValue); + }); - Assert(prop === "image id prop", "FAILED: When__calling_super_method_using_the_prototype_property_of_a_function_it_should_call_the_super_method"); -} - -var When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method = function() { - __log("TEST: When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method"); + it("When_implementing_an_interface_with_new__the_overrides_should_work", function () { + + __log("TEST: When_implementing_an_interface_with_new__the_overrides_should_work"); + + var MyButton = new com.tns.tests.Button1.extend({ + toString : function() { + return "button1"; + } + }); + + var button1 = new MyButton(); + var buttonClicked = false; - var MyButton = com.tns.tests.Button1.extend("MyButton289", {}); - var button1 = new MyButton(); - var prop = com.tns.tests.Button1.prototype.getIMAGE_ID_PROP.call(button1); - Assert(prop === "image id prop", "FAILED: When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method"); -} + button1.setOnClickListener(new android.view.View.OnClickListener({ + onClick : function() { + buttonClicked = true; + } + })); -var When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method2 = function() { - __log("TEST: When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method2"); + button1.click(null); - var MyButton = com.tns.tests.Button1.extend("MyButton294", { - getIMAGE_ID_PROP: function() { return ""; } + expect(buttonClicked).toEqual(true); }); - var button1 = new MyButton(); - var prop = com.tns.tests.Button1.prototype.getIMAGE_ID_PROP.call(button1); - Assert(prop === "image id prop", "FAILED: When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method2"); -} - -var When_extending_a_class_and_calling_super_toString = function() { - //__log("//TODO: NOT WORKING: super method calls are not working correctly. Tests fails with FAILED: When_extending_a_class_and_calling_super_toString. Actual: com.tns.com.tns.tests.Button1-MyButton305@52854640 Expected: com.tns.tests.Button1@"); - //return; - __log("TEST: When_extending_a_class_and_calling_super_toString"); - - var MyButton = com.tns.tests.Button1.extend("MyButton", { - toString : function() { - return this.super.toString() + this.super.echo("success"); - }, + it("When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance", function () { + + __log("TEST: When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance"); - echo : function(s) { - return "fail"; + var MyButton = new com.tns.tests.Button1.extend("MyButton381", { + toString : function() { + return "button1"; + } + }); + + var button1 = new MyButton(); + var dummy = button1.getDummy(); + + var exceptionCaught = false; + try { + var res = dummy.dummyMethod(123); //this will fail if button2 is not valid proxy object and properly exposed to js } - }); - - var button1 = new MyButton(); - var button1Label = button1.toString(); - Assert(button1Label.indexOf("com.tns.tests.Button1-") != -1, "FAILED: When_extending_a_class_and_calling_super_toString. Actual: " + button1Label + " Expected to contain: com.tns.tests.Button1-"); - Assert(button1Label.indexOf("MyButton") != -1, "FAILED: When_extending_a_class_and_calling_super_toString. Actual: " + button1Label + " Expected to contain: -MyButton"); - Assert(button1Label.indexOf("success") != -1, "FAILED: When_extending_a_class_and_calling_super_toString. Actual: " + button1Label + " Expected: com.tns.tests.Button1"); -} - -var When_extending_a_class_and_calling_super_method_it_should_work = function() { - __log("TEST: When_extending_a_class_and_calling_super_method_it_should_work"); - var MyButton = com.tns.tests.Button1.extend("MyButton318", { - toString : function() { - return "toString overriden"; - }, - - getIMAGE_ID_PROP : function() { - return this.super.getIMAGE_ID_PROP() + "!"; + catch (e) { + exceptionCaught = true; } + + expect(exceptionCaught).toBe(false); }); - var button1 = new MyButton(); - var button1SuperToString = button1.toString(); - - Assert(button1SuperToString === "toString overriden", "FAILED (1): When_extending_a_class_and_calling_super_method_it_should_work"); - - var IMAGE_ID_PROP_Result = button1.getIMAGE_ID_PROP(); - - Assert(IMAGE_ID_PROP_Result === "image id prop!", "FAILED (2): When_extending_a_class_and_calling_super_method_it_should_work"); -} + it("When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type", function () { -var When_accessing_static_members_on_an_extended_class = function() { - __log("TEST: When_accessing_static_members_on_an_extended_class"); - - var MyButton = com.tns.tests.Button1.extend("MyButton341", { - hashCode : function() { - return 5454; - } + __log("TEST: When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); + + var Button = new com.tns.tests.Button1.extend("MyButton397", { + toString : function() { + return "button1"; + } + }); + + var button = new Button(); + var object = button.getDummyClassAsObject(); + var name = object.getName(); + + expect(name).toEqual("dummy"); }); - var MyButton2 = com.tns.tests.Button1.extend("MyButton347", { - hashCode : function() { - return 1212; - } + it("When_a_java_field_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type", function () { + + __log("TEST: When_a_java_field_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); + + var Button = new com.tns.tests.Button1.extend("MyButton413", { + toString : function() { + return "button1"; + } + }); + + var button = new Button(); + var object = button.DummyClassAsObjectField; + var name = object.getName(); + + expect(name).toEqual("dummy"); }); - var setValue = 4; - MyButton.setMyStaticIntField(setValue); - var readValue = MyButton2.getMyStaticIntField(); - - Assert(readValue == setValue, "FAILED: When_accessing_static_members_on_an_extended_class"); - - var readValue = com.tns.tests.Button1.getMyStaticIntField(); - - Assert(readValue == setValue, "FAILED: When_accessing_static_members_on_an_extended_class"); -} - -var When_implementing_an_interface_with_new__the_overrides_should_work = function() { - __log("TEST: When_implementing_an_interface_with_new__the_overrides_should_work"); - - var MyButton = new com.tns.tests.Button1.extends({ - toString : function() { - return "button1"; - } + it("When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type", function () { + + __log("TEST: When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); + + var name = ""; + var Button = new com.tns.tests.Button1.extend("MyButton418", { + toString : function() { + return "button1"; + }, + + methodDummyClassAsObjectInArgs: function(object) { + name = object.getName(); + __log("The actual name is " + name); + } + }); + + var button = new Button(); + var object = button.callMethodDummyClassAsObjectInArgs(); + + expect(name).toEqual("dummy"); }); - var button1 = new MyButton(); - var buttonClicked = false; - button1.setOnClickListener(new android.view.View.OnClickListener({ - onClick : function() { - buttonClicked = true; - } - })); - button1.click(null); - - Assert(buttonClicked == true, "FAILED: When_implementing_an_interface_with_new__the_overrides_should_work"); -} - -var When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance = function() { - __log("TEST: When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance"); - - var MyButton = new com.tns.tests.Button1.extend("MyButton381", { - toString : function() { - return "button1"; - } + it("When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type", function () { + + __log("TEST: When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); + + var Button = new com.tns.tests.Button1.extend("MyButton450", { + toString : function() { + return "button1"; + } + }); + + var button = new Button(); + var arrayOfObjects = button.getDummyClassAsObjectArray(); + var name = arrayOfObjects[0].getName(); + + expect(name).toEqual("dummy"); }); - var button1 = new MyButton(); - var dummy = button1.getDummy(); - var res = dummy.dummyMethod(123); //this will fail if button2 is not valid proxy object and properly exposed to js - - Assert(true, "FAILED: When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance"); -} - -var When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type = function() { - __log("TEST: When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); - - var Button = new com.tns.tests.Button1.extend("MyButton397", { - toString : function() { - return "button1"; - } + it("When_accessing_a_static_field_on_a_javascript_instance_it_should_work", function () { + + __log("TEST: When_accessing_a_static_field_on_a_javascript_instance_it_should_work"); + + var MyButton = com.tns.tests.Button1.extend("MyButton455", { + hashCode : function() { + return 5454; + }, + + toString : function() { + return "button1"; + }, + + equals : function() { + return true; + } + }); + + var valueUsingChild = MyButton.STATIC_IMAGE_ID; + expect(valueUsingChild).toEqual("static image id"); + + var valueUsingParent = com.tns.tests.Button1.STATIC_IMAGE_ID; + + expect(valueUsingParent).toEqual("static image id"); }); - var button = new Button(); - var object = button.getDummyClassAsObject(); - var name = object.getName(); + it("TestRequireDirName", function () { + + __log("TEST: TestRequireDirName"); + + var dir = __dirname; + + var expectedDirname = "/data/data/com.tns.android_runtime_testapp/files/app/tests"; + + expect(dir).toBe(expectedDirname); + }); - Assert(name == "dummy", "FAILED: When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); -} + it("TestRequireFileName", function () { + + __log("TEST: TestRequireFileName"); + + var file = __filename; + + var expectedFilename = "/data/data/com.tns.android_runtime_testapp/files/app/tests/tests.js"; + + expect(file).toBe(expectedFilename); + + var file2 = module.filename; -var When_a_java_field_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type = function() { - __log("TEST: When_a_java_field_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); - - var Button = new com.tns.tests.Button1.extend("MyButton413", { - toString : function() { - return "button1"; - } + expect(file).toBe(file2); }); - var button = new Button(); - var object = button.DummyClassAsObjectField; - var name = object.getName(); + it("TestGarbageCollection", function (done) { + var normalTest = function () { + + __log("TEST: TestGarbageCollection"); + + var obj = new com.tns.tests.ClassX(); + + obj.dummy(); + + obj = null; + + gc(); + java.lang.System.gc(); + gc(); + java.lang.System.gc(); + gc(); + java.lang.System.gc(); + + new java.lang.Thread(new java.lang.Runnable("ThreadFunc", { + run: function() { + var isCollected = com.tns.tests.ClassX.IsCollected; + __log('----------> isCollected: ' + isCollected); + expect(isCollected).toBe(true); + done(); + } + })).start(); + }; + normalTest(); + }); - Assert(name == "dummy", "FAILED: When_a_java_field_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); -} + it("TestWorkingWithJavaArrayDoesNotMakeMemoryLeak", function () { + -var When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type = function() { - __log("TEST: When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); - - var name = ""; - var Button = new com.tns.tests.Button1.extend("MyButton418", { - toString : function() { - return "button1"; - }, + __log("TEST: TestWorkingWithJavaArrayDoesNotMakeMemoryLeak"); + + var size = 10 * 1024 * 1024; + + for (var i = 0; i < 100; i++) { + + var arr = java.lang.reflect.Array.newInstance(java.lang.Byte.class.getField("TYPE").get(null), size); + + var length = arr.length; + + expect(length).toEqual(size); + + arr[0] = 123; + + var el = arr[0]; + + expect(el).toEqual(123); - methodDummyClassAsObjectInArgs: function(object) { - name = object.getName(); - __log("The actual name is " + name); + gc(); + java.lang.System.gc(); } }); - var button = new Button(); - var object = button.callMethodDummyClassAsObjectInArgs(); - - Assert(name == "dummy", "FAILED: When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); -} + it("TestConstructorOverride", function () { + -var When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type = function() { - __log("TEST: When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); - - var Button = new com.tns.tests.Button1.extend("MyButton450", { - toString : function() { - return "button1"; - } + __log("TEST: TestConstructorOverride"); + + var ctorCalled = false; + var isConstructor = false; + + var MyButton = new com.tns.tests.Button1.extend("MyButton574", { + init : function() { + ctorCalled = true; + isConstructor = arguments[arguments.length - 1]; + }, + + toString : function() { + return "button1"; + } + }); + + var btn = new MyButton(); + + expect(ctorCalled).toEqual(true); + expect(isConstructor).toEqual(true); }); - var button = new Button(); - var arrayOfObjects = button.getDummyClassAsObjectArray(); - var name = arrayOfObjects[0].getName(); - - Assert(name == "dummy", "FAILED: When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); -} + it("TestConstructorOverrideOnTypeWithInitMethod", function () { -var When_accessing_a_static_field_on_a_javascript_instance_it_should_work = function() { - - __log("TEST: When_accessing_a_static_field_on_a_javascript_instance_it_should_work"); + __log("TEST: TestConstructorOverrideOnTypeWithInitMethod"); + + var isCalled = false; + var isConstructor = false; + + var MyDummyClassWithInit = com.tns.tests.DummyClassWithInit.extend("MyButton591", { + init: function() { + isCalled = true; + isConstructor = arguments[arguments.length - 1]; + } + }); + + __log("TEST: TestConstructorOverrideOnTypeWithInitMethod: calling overriden ctor"); + var dummy = new MyDummyClassWithInit(); + + expect(isCalled).toEqual(true); + expect(isConstructor).toEqual(true); + + __log("TEST: TestConstructorOverrideOnTypeWithInitMethod: calling ctor as regular method"); + isCalled = undefined; + isConstructor = undefined; + dummy.callInit(); + + expect(isCalled).toEqual(true); + expect(isConstructor).toEqual(false); + + }); - var MyButton = com.tns.tests.Button1.extend("MyButton455", { - hashCode : function() { - return 5454; - }, + it("TestRequire", function () { - toString : function() { - return "button1"; - }, + __log("TEST: TestRequire"); - equals : function() { - return true; + var exceptionCaught = false; + try{ + var myModule = require("../simplemodule"); } + catch(e) { + exceptionCaught = true; + } + + myModule.myLog("Hello world from NativeScript!"); + + expect(exceptionCaught).toBe(false); }); - var valueUsingChild = MyButton.STATIC_IMAGE_ID; - Assert(valueUsingChild == "static image id", "FAILED: When_accessing_a_static_field_on_a_javascript_instance_it_should_work."); - - var valueUsingParent = com.tns.tests.Button1.STATIC_IMAGE_ID; - Assert(valueUsingParent == "static image id", "FAILED: When_accessing_a_static_field_on_a_javascript_instance_it_should_work."); -}; - - -var TestRequireDirName = function() { + it("TestArrays", function () { + + __log("TEST: TestArrays"); + + var MyButton = com.tns.tests.Button1.extend("MyButton639", { + toString : function() { + return "button1"; + } + }); + var tester = new MyButton(); + var instances = tester.getDummyInstances(); + + var instanceFound = false; - __log("TEST: TestRequireDirName"); - - var dir = __dirname; + for (var i = 0; i < instances.length; i++) + { + if (instances[i].getName() == "second"); + { + instanceFound = true; + } + } + + expect(instanceFound).toEqual(true); + + instances[0] = instances[1]; + + var instances0name = instances[0].getName(); + var instances1name = instances[1].getName(); + + expect(instances0name).toEqual(instances1name); + }); - var expectedDirname = "/data/data/com.tns.android_runtime_testapp/files/app/tests"; + it("TestArrayLengthPropertyIsNumber", function () { - Assert(dir === expectedDirname, "TestRequireDirName FAILED: Expected value '" + expectedDirname + "', actual value=" + dir); -} - -var TestRequireFileName = function() { + __log("TEST: TestArrayLengthPropertyIsNumber"); + + var expectedLength = 10; - __log("TEST: TestRequireFileName"); + function getLength(x) + { + var arr = x.getIntArray1(expectedLength); + + return arr ? arr.length : 123456; + } + + var MyButton = com.tns.tests.Button1.extend("MyButton680", { + toString : function() { + return "button1"; + } + }); + + var count = getLength(new MyButton()); + + expect(count).toBe(expectedLength); + + }); - var file = __filename; + it("TestCreationOfLocationListener", function () { + + __log("TEST: TestCreationOfLocationListener"); + + var onLocationChangedCalled = false; + var onProviderDisabledCalled = false; + var onProviderEnabledCalled = false; + + var listener = new android.location.LocationListener("LocationListener",{ + onLocationChanged: function(location) { + onLocationChangedCalled = true; + }, + onProviderDisabled: function(provider) { + onProviderDisabledCalled = true; + }, + onProviderEnabled: function(provider) { + onProviderEnabledCalled = true; + } + }); + + listener.onLocationChanged(null); + + expect(onLocationChangedCalled).toEqual(true); + + listener.onProviderDisabled(""); + + expect(onProviderDisabledCalled).toEqual(true); + + listener.onProviderEnabled(""); + + expect(onProviderEnabledCalled).toEqual(true); + }); - var expectedFilename = "/data/data/com.tns.android_runtime_testapp/files/app/tests/tests.js"; + it("TestInnerClassCreation", function () { - Assert(file === expectedFilename, "TestRequireFileName FAILED: Expected value '" + expectedFilename + "', actual value=" + file); + __log("TEST: TestInnerClassCreation"); + + var MyButton = com.tns.tests.Button1.extend("MyButton726", { + toString : function() { + return "button1" + }}); + + var button1 = new MyButton(); + + var innerButton = new button1.InnerButton(); + + var s = innerButton.getSomeString(); + + expect(s.length).toBeGreaterThan(0); + + var innerButton2 = new new button1.InnerButton().InnerClass2(123) + + var s1 = innerButton2.getSomeString2(); + + expect(s1.length).toBeGreaterThan(0); + }); - var file2 = module.filename; - - Assert(file === file2, "TestRequireFileName FAILED: Values 'file' and 'file2' should be strict equal"); -} - - -var TestGarbageCollection = function() { + it("TestNestedClassCreation", function () { + + __log("TEST: TestNestedClassCreation"); - __log("TEST: TestGarbageCollection"); - - var obj = new com.tns.tests.ClassX(); - - obj.dummy(); - - Assert(obj != null, "TestGarbageCollection FAILED: Instance should not be null"); + var i = 123; + + var nested = new com.tns.tests.Button1.InnerStaticClass(i); + + var actual_i = nested.getInt(); + + expect(actual_i).toEqual(i); + }); - obj = null; + it("TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata", function () { + + __log("TEST: TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata"); + + var dummy = new com.tns.tests.DummyClass(); + + var dummy2 = dummy.getDummyClassAsObject(); + + var name = dummy2.getName(); + + expect(name).toEqual("dummy"); + }); - gc(); - gc(); - gc(); - java.lang.System.gc(); - java.lang.System.gc(); - java.lang.System.gc(); + it("TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata", function () { + + __log("TEST: TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata"); + + var dummy = new com.tns.tests.DummyClass(); + + dummy.setDummyField(); + + var dummy2 = dummy.dummyField; + + var name = dummy2.getName(); + + expect(name).toEqual("dummy"); + }); - new java.lang.Thread(new java.lang.Runnable("ThreadFunc", { - run: function() { - var isCollected = com.tns.tests.ClassX.IsCollected; - Assert(isCollected === true, "TestGarbageCollection FAILED: Expected value is 'true', actual value=" + isCollected); - } - })).start(); -} - -var TestWorkingWithJavaArrayDoesNotMakeMemoryLeak = function() { + it("TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata", function () { + + __log("TEST: TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata"); + + var D = com.tns.tests.DummyClass.DummyDerivedClass.extend("D",{ + dummyMethod: function(dummy) { + return this.getName(); + } + }) + + var d = new D(); - __log("TEST: TestWorkingWithJavaArrayDoesNotMakeMemoryLeak"); - - var size = 10 * 1024 * 1024; - - for (var i = 0; i < 100; i++) { + var name = d.executeCallback(); + + expect(name).toEqual("dummy"); + }); - var arr = java.lang.reflect.Array.newInstance(java.lang.Byte.class.getField("TYPE").get(null), size); + it("TestAccessArrayElementAsObjectWithoutMetadata", function () { - var length = arr.length; + __log("TEST: TestAccessArrayElementAsObjectWithoutMetadata"); - Assert(length == size, "TestWorkingWithJavaArrayDoesNotMakeMemoryLeak FAILED: Expected value is " + size + ", actual value=" + length); + var d = new com.tns.tests.DummyClass(); - arr[0] = 123; + var arr = d.getDummyClassArrayAsObject(); - var el = arr[0]; + var arrLength = arr.length; - Assert(el == 123, "TestWorkingWithJavaArrayDoesNotMakeMemoryLeak FAILED: Expected value is 123, actual value=" + el); - - gc(); - java.lang.System.gc(); - } -} - -var TestConstructorOverride = function() { - - __log("TEST: TestConstructorOverride"); + expect(arrLength).toEqual(1); + + var dummy = arr[0]; + + var name = dummy.getName(); + + expect(name).toBe("dummy"); + }); - var ctorCalled = false; - var isConstructor = false; - - var MyButton = new com.tns.tests.Button1.extend("MyButton574", { - init : function() { - ctorCalled = true; - isConstructor = arguments[arguments.length - 1]; - }, + it("TestCallMethodThatReturnsNull", function () { + + __log("TEST: TestCallMethodThatReturnsNull"); - toString : function() { - return "button1"; - } + var dummy = new com.tns.tests.DummyClass(); + + var x = dummy.getNull(); + + expect(x).toEqual(null); }); - var btn = new MyButton(); - - Assert(ctorCalled == true, "TestConstructorOverride FAILED: constructor not called"); - Assert(isConstructor == true, "TestConstructorOverride FAILED: isConstructor should be 'true'"); -} + it("TestCallMethodThatReturnsNullString", function () { -var TestConstructorOverrideOnTypeWithInitMethod = function() { - - __log("TEST: TestConstructorOverrideOnTypeWithInitMethod"); - - var isCalled = false; - var isConstructor = false; + __log("TEST: TestCallMethodThatReturnsNullString"); - var MyDummyClassWithInit = com.tns.tests.DummyClassWithInit.extend("MyButton591", { - init: function() { - isCalled = true; - isConstructor = arguments[arguments.length - 1]; - } + var dummy = new com.tns.tests.DummyClass(); + + var x = dummy.getNullString(); + + expect(x).toEqual(null); }); - __log("TEST: TestConstructorOverrideOnTypeWithInitMethod: calling overriden ctor"); - var dummy = new MyDummyClassWithInit(); - - Assert(isCalled == true, "TestConstructorOverrideOnTypeWithInitMethod FAILED: constructor not called"); - Assert(isConstructor == true, "TestConstructorOverrideOnTypeWithInitMethod FAILED: isConstructor should be 'true'"); - - __log("TEST: TestConstructorOverrideOnTypeWithInitMethod: calling ctor as regular method"); - isCalled = undefined; - isConstructor = undefined; - dummy.callInit(); - - Assert(isCalled == true, "TestConstructorOverrideOnTypeWithInitMethod FAILED: constructor not called"); - Assert(isConstructor == false, "FAILED: isConstructor should be 'false' actual: " + isConstructor); -} + it("TestAccessNullField", function () { -var TestRequire = function() { - __log("TEST: TestRequire"); - - var myModule = require("../simplemodule"); - myModule.myLog("Hello world from NativeScript!"); -} + __log("TEST: TestAccessNullField"); -var TestArrays = function() { - __log("TEST: TestArrays"); - - var MyButton = com.tns.tests.Button1.extend("MyButton639", { - toString : function() { - return "button1"; - } + var dummy = new com.tns.tests.DummyClass(); + + var x = dummy.nullField + + expect(x).toEqual(null); }); - var tester = new MyButton(); - var instances = tester.getDummyInstances(); - - var instanceFound = false; - - for (var i = 0; i < instances.length; i++) - { - if (instances[i].getName() == "second"); - { - instanceFound = true; - } - } - - Assert(instanceFound, "TestArrays FAILED: TestArrays indexer not working"); - instances[0] = instances[1]; - - var instances0name = instances[0].getName(); - var instances1name = instances[1].getName(); - - Assert(instances0name == instances1name, "TestArrays FAILED: Cannot set element into the array"); -} + it("TestAccessNullArrayElement", function () { -var TestArrayLengthPropertyIsNumber = function() { + __log("TEST: TestAccessNullArrayElement"); - __log("TEST: TestArrayLengthPropertyIsNumber"); + var dummy = new com.tns.tests.DummyClass(); + + var arr = dummy.getArrayWithNullElement(); + + __log("arr=" + arr.length) + + var x = arr[0]; + + expect(x).toEqual(null); + }); - var expectedLength = 10; + it("TEMPLATE", function () { - function getLength(x) - { - var arr = x.getIntArray1(expectedLength); + __log("TEST: TestCallMethodWithIntVarArg"); - return arr ? arr.length : 123456; - } - - var MyButton = com.tns.tests.Button1.extend("MyButton680", { - toString : function() { - return "button1"; - } + var dummy = new com.tns.tests.DummyClass(); + + var s = dummy.concatIntArrayAsString([1, 2, 3, 4]); + + expect(s).toBe("1234"); }); - var count = getLength(new MyButton()); + it("TestCallMethodWithCharVarArg", function () { + + __log("TEST: TestCallMethodWithCharVarArg"); + + var dummy = new com.tns.tests.DummyClass(); + + var s = dummy.concatCharArrayAsString(['t', 'e', 's', 't']); + + expect(s).toBe("test"); + }); - Assert(count === expectedLength, "TestArrayLengthPropertyIsNumber FAILED: Array length property should be number"); -} + it("TestCallMethodWithObjectVarArg", function () { + + __log("TEST: TestCallMethodWithObjectVarArg"); + + var dummy = new com.tns.tests.DummyClass(); + + var s = dummy.concatObjectArrayAsString([1, "test", false]); -var TestCreationOfLocationListener = function() { - __log("TEST: TestCreationOfLocationListener"); - - var onLocationChangedCalled = false; - var onProviderDisabledCalled = false; - var onProviderEnabledCalled = false; - - var listener = new android.location.LocationListener("LocationListener",{ - onLocationChanged: function(location) { - onLocationChangedCalled = true; - }, - onProviderDisabled: function(provider) { - onProviderDisabledCalled = true; - }, - onProviderEnabled: function(provider) { - onProviderEnabledCalled = true; - } + expect(s).toBe("1, test, false"); }); - listener.onLocationChanged(null); - - Assert(onLocationChangedCalled, "TestCreationOfLocationListener FAILED: onLocationChanged is not called"); - - listener.onProviderDisabled(""); + it("TestCanInheritFromClassInAndroidSupportLibrary", function () { + + __log("TEST: TestCanInheritFromClassInAndroidSupportLibrary"); + + var MyParcelableCompat = android.support.v4.os.ParcelableCompat.extend("MyParcelableCompat", { + toString: function() { + return "MyParcelableCompat"; + } + }); + + var compat = new MyParcelableCompat(); + + var s = compat.toString(); + + expect(s).toBe("MyParcelableCompat"); + }); - Assert(onProviderDisabledCalled, "TestCreationOfLocationListener FAILED: onProviderDisabled is not called"); + it("TestCallMethodWithByteParameter", function () { + + __log("TEST: TestCallMethodWithByteParameter"); + + var b = java.lang.Byte.valueOf(byte(123)); + + var s = "" + b; + + expect(s).toBe("123"); + }); - listener.onProviderEnabled(""); + it("TestCallMethodWithFloatParameter", function () { + + __log("TEST: TestCallMethodWithFloatParameter"); + + var d = new com.tns.tests.DummyClass(); + + var s = d.methodWithoutOverloads(1.23); + + expect(s).toBe("float=1.23"); + }); - Assert(onProviderEnabledCalled, "TestCreationOfLocationListener FAILED: onProviderEnabled is not called"); -} + it("TestCanCallStaticMethodThroughBaseClass", function () { + + __log("TEST: TestCanCallStaticMethodThroughBaseClass"); + + var name = com.tns.tests.MyClassDerived.getName(); -var TestInnerClassCreation = function() { - __log("TEST: TestInnerClassCreation"); - - var MyButton = com.tns.tests.Button1.extend("MyButton726", { - toString : function() { - return "button1" - }}); - - var button1 = new MyButton(); - - var innerButton = new button1.InnerButton(); - - var s = innerButton.getSomeString(); - - Assert(s.length > 0, "TestInnerClassCreation FAILED: innerButton.getSomeString returned empty string"); + expect(name).toBe("com.tns.tests.MyClassBase"); + }); - var innerButton2 = new new button1.InnerButton().InnerClass2(123) + it("TestUseFieldThatIsArray", function () { + + __log("TEST: TestUseFieldThatIsArray"); + + var d = new com.tns.tests.DummyClass(); + + var arrInt = d.arrIntField; + + var arrIntLength = arrInt.length; + + expect(arrIntLength).toBe(5); + + var intElement = arrInt[2]; + + expect(intElement).toBe(33); + + var arrString = d.arrStringField; + + var arrStringLength = arrString.length; + + expect(arrIntLength).toBe(5); + + var stringElement = arrString[2]; + + expect(stringElement).toBe("cc"); + }); - var s1 = innerButton2.getSomeString2(); + it("TestCanAssignArrayToField", function () { + + __log("TEST: TestCanAssignArrayToField"); + + var d = new com.tns.tests.DummyClass(); + + var arr = d.arrIntField2; + + expect(arr).toBe(null); + + d.arrIntField2 = d.arrIntField; + + var arrLength = d.arrIntField2.length; + + expect(arrLength).toBe(5); + }); - Assert(s1.length > 0, "TestInnerClassCreation FAILED: innerButton2.getSomeString2 returned empty string"); -} + it("TestCallMethodThatReturnsLong", function () { + + __log("TEST: TestCallMethodThatReturnsLong"); + + var n = java.lang.Long.parseLong("9007199254740991"); // 9007199254740991 = 2^53-1 -var TestNestedClassCreation = function() { - __log("TEST: TestNestedClassCreation"); + expect(n.__proto__.valueOf()).toBe(0); + expect(n.value).toBe(undefined); + expect(typeof n).toBe("number"); + expect(n instanceof Number).toBe(false); - var i = 123; - - var nested = new com.tns.tests.Button1.InnerStaticClass(i); - - var actual_i = nested.getInt(); + var n = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 + + var ctorFuncName = n.__proto__.constructor.name; + expect(ctorFuncName).toBe("NativeScriptLongNumber"); + expect(isNaN(n.valueOf())).toBe(true); + + var javaValue = n.value; + expect(javaValue).toBe("9007199254740992"); + + var typeName = typeof n; + expect(typeName).toBe("object"); + }); - Assert(actual_i == i, "TestNestedClassCreation FAILED: InnerStaticClass.getInt returned wrong value " + actual_i + ", expected " + i); -} + it("TestCallMethodWithLongParameter", function () { -var TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata = function() { - __log("TEST: TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata"); - - var dummy = new com.tns.tests.DummyClass(); - - var dummy2 = dummy.getDummyClassAsObject(); - - var name = dummy2.getName(); + __log("TEST: TestCallMethodWithLongParameter"); + + var d = new com.tns.tests.DummyClass(); + + var n1 = java.lang.Long.parseLong("9007199254740991"); // 9007199254740991 = 2^53-1 + var s1 = d.getLongAsString(n1); + expect(s1).toBe("9007199254740991"); + + var n2 = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 + var s2 = d.getLongAsString(n2); + expect(s2).toBe("9007199254740992"); + + var n3 = java.lang.Long.parseLong("9007199254740993"); // 9007199254740992 = 2^53+1 + var s3 = d.getLongAsString(n3); + expect(s3).toBe("9007199254740993"); + }); - Assert(name == "dummy", "TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata FAILED: Expected value is 'dummy', returned value is '" + name + "'"); -} - + it("TestCallMethodWithLongCastArgument", function () { -var TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata = function() { - __log("TEST: TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata"); + __log("TEST: TestCallMethodWithLongCastArgument"); + + var d = new com.tns.tests.DummyClass(); + + var s1 = d.getLongAsString(long("9007199254740991")); // 9007199254740991 = 2^53-1 + expect(s1).toBe("9007199254740991"); + + var s2 = d.getLongAsString(long(9007199254740991)); // 9007199254740991 = 2^53-1 + expect(s2).toBe("9007199254740991"); + + var s3 = d.getLongAsString(long("9007199254740992")); // 9007199254740992 = 2^53 + expect(s3).toBe("9007199254740992"); + + var s4 = d.getLongAsString(long("9007199254740993")); // 9007199254740992 = 2^53+1 + expect(s4).toBe("9007199254740993"); + }); - var dummy = new com.tns.tests.DummyClass(); + it("TestCallToStringOfNativeScriptLongObject", function () { + + __log("TEST: TestCallToStringOfNativeScriptLongObject"); + + var n = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 + + var s = n.toString(); + + expect(s).toBe(n.value); + }); - dummy.setDummyField(); + it("TestCallMethodWithLongParameterWithNumberObject", function () { + + __log("TEST: TestCallMethodWithLongParameterWithNumberObject"); + + var d = new com.tns.tests.DummyClass(); + + var s = d.getLongAsString(new Number("9007199254740991")); // 9007199254740991 = 2^53-1 + expect(s).toBe("9007199254740991"); + }); - var dummy2 = dummy.dummyField; + it("TestCallMethodWithMinAndMaxLongValues", function () { + + __log("TEST: TestCallMethodWithMinAndMaxLongValues"); + + var d = new com.tns.tests.DummyClass(); + + var maxLong = d.getMaxLong(); + var sMax = d.getLongAsString(maxLong); + expect(sMax).toBe("9223372036854775807"); + + var minLong = d.getMinLong(); + var sMin = d.getLongAsString(minLong); + expect(sMin).toBe("-9223372036854775808"); + }); - var name = dummy2.getName(); + it("TestCallMethodWithByteParameter", function () { + + __log("TEST: TestCallMethodWithByteParameter"); + + var d = new com.tns.tests.DummyClass(); + + var s1 = d.method1(byte(123)); + expect(s1).toBe("byte=123"); + + var s2 = d.method1(byte(new Number(123))); + expect(s2).toBe("byte=123"); + + var s3 = d.method1(byte("123")); + expect(s3).toBe("byte=123"); + + var s4 = d.method1(byte(new String("123"))); + expect(s4).toBe("byte=123"); + }); - Assert(name == "dummy", "TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata FAILED: Expected value is 'dummy', returned value is '" + name + "'"); -} - - -var TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata = function() { - __log("TEST: TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata"); + it("TestCallMethodWithShortParameter", function () { + + __log("TEST: TestCallMethodWithShortParameter"); + + var d = new com.tns.tests.DummyClass(); + + var s1 = d.method1(short(12345)); + expect(s1).toBe("short=12345"); + + var s2 = d.method1(short(new Number(12345))); + expect(s2).toBe("short=12345"); + + var s3 = d.method1(short("12345")); + expect(s3).toBe("short=12345"); + + var s4 = d.method1(short(new String("12345"))); + expect(s4).toBe("short=12345"); + }); - var D = com.tns.tests.DummyClass.DummyDerivedClass.extend("D",{ - dummyMethod: function(dummy) { - return this.getName(); - } - }) + it("TestCallMethodWithBooleanParameter", function () { + + __log("TEST: TestCallMethodWithBooleanParameter"); + + var d = new com.tns.tests.DummyClass(); + + var s1 = d.method1(true); + expect(s1).toBe("boolean=true"); + + var s2 = d.method1(false); + expect(s2).toBe("boolean=false"); + + var s3 = d.method1(new Boolean(true)); + expect(s3).toBe("boolean=true"); + + var s4 = d.method1(new Boolean(false)); + expect(s4).toBe("boolean=false"); + }); - var d = new D(); - - var name = d.executeCallback(); + it("TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod"); + + var exceptionCaught = false; + + var d = new com.tns.tests.DummyClass(); + + try + { + var s = d.method1(new java.lang.Object()); + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); - Assert(name == "dummy", "TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata FAILED: Expected value is 'dummy', returned value is '" + name + "'"); -} - -var TestAccessArrayElementAsObjectWithoutMetadata = function() { - - __log("TEST: TestAccessArrayElementAsObjectWithoutMetadata"); + it("TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor"); + + var exceptionCaught = false; + + try + { + var d = new com.tns.tests.DummyClass(new java.lang.Object()); + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); - var d = new com.tns.tests.DummyClass(); - - var arr = d.getDummyClassArrayAsObject(); - - var arrLength = arr.length; - - Assert(arrLength == 1, "TestAccessArrayElementAsObjectWithoutMetadata FAILED: Expected array length is 1, actual length=" + arrLength); - - var dummy = arr[0]; - - var name = dummy.getName(); - - Assert(name === "dummy", "TestAccessArrayElementAsObjectWithoutMetadata FAILED: Expected value is 'dummy', returned value is '" + name + "'"); -} - -var TestCallMethodThatReturnsNull = function() { - - __log("TEST: TestCallMethodThatReturnsNull"); - - var dummy = new com.tns.tests.DummyClass(); - - var x = dummy.getNull(); - - Assert(x == null, "TestCallMethodThatReturnsNull FAILED: Expected value is null, but actual value is not null"); -} - -var TestCallMethodThatReturnsNullString = function() { - - __log("TEST: TestCallMethodThatReturnsNullString"); - - var dummy = new com.tns.tests.DummyClass(); - - var x = dummy.getNullString(); - - Assert(x == null, "TestCallMethodThatReturnsNullString FAILED: Expected value is null, but actual value is not null"); -} - -var TestAccessNullField = function() { - - __log("TEST: TestAccessNullField"); - - var dummy = new com.tns.tests.DummyClass(); - - var x = dummy.nullField - - Assert(x == null, "TestAccessNullField FAILED: Expected value is null, but actual value is not null"); -} - -var TestAccessNullArrayElement = function() { - - __log("TEST: TestAccessNullArrayElement"); - - var dummy = new com.tns.tests.DummyClass(); - - var arr = dummy.getArrayWithNullElement(); - - __log("arr=" + arr.length) - - var x = arr[0]; - - Assert(x == null, "TestAccessNullArrayElement FAILED: Expected value is null, but actual value is not null"); -} - -var TestCallMethodWithIntVarArg = function() { - - __log("TEST: TestCallMethodWithIntVarArg"); - - var dummy = new com.tns.tests.DummyClass(); - - var s = dummy.concatIntArrayAsString([1, 2, 3, 4]); - - Assert(s === "1234", "TestCallMethodWithIntVarArg FAILED: Expected value is '1234', but actual value is=" + s); -} - -var TestCallMethodWithCharVarArg = function() { - - __log("TEST: TestCallMethodWithCharVarArg"); - - var dummy = new com.tns.tests.DummyClass(); - - var s = dummy.concatCharArrayAsString(['t', 'e', 's', 't']); - - Assert(s === "test", "TestCallMethodWithCharVarArg FAILED: Expected value is 'test', but actual value is=" + s); -} - -var TestCallMethodWithObjectVarArg = function() { - - __log("TEST: TestCallMethodWithObjectVarArg"); - - var dummy = new com.tns.tests.DummyClass(); - - var s = dummy.concatObjectArrayAsString([1, "test", false]); - - Assert(s === "1, test, false", "TestCallMethodWithObjectVarArg FAILED: Expected value is '1, test, false', but actual value is=" + s); -} - -var TestCanInheritFromClassInAndroidSupportLibrary = function() { - - __log("TEST: TestCanInheritFromClassInAndroidSupportLibrary"); - - var MyParcelableCompat = android.support.v4.os.ParcelableCompat.extend("MyParcelableCompat", { - toString: function() { - return "MyParcelableCompat"; + it("TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject"); + + var arr = java.lang.reflect.Array.newInstance(java.lang.Object.class, 10); + + var o = new java.lang.Object(); + arr[0] = o; + + var exceptionCaught = false; + + try + { + arr[0] = {}; } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + + var isOldElement = o.equals(arr[0]); + + expect(isOldElement).toBe(true); }); - var compat = new MyParcelableCompat(); - - var s = compat.toString(); - - Assert(s === "MyParcelableCompat", "TestCanInheritFromClassInAndroidSupportLibrary FAILED: Expected value is 'MyParcelableCompat', but actual value is=" + s); -} - -var TestCallMethodWithByteParameter = function() { - - __log("TEST: TestCallMethodWithByteParameter"); - - var b = java.lang.Byte.valueOf(byte(123)); - - var s = "" + b; - - Assert(s === "123", "TestCallMethodWithByteParameter FAILED: Expected value is '123', but actual value is=" + s); -} - -var TestCallMethodWithFloatParameter = function() { - - __log("TEST: TestCallMethodWithFloatParameter"); - - var d = new com.tns.tests.DummyClass(); - - var s = d.methodWithoutOverloads(1.23); - - Assert(s === "float=1.23", "TestCallMethodWithFloatParameter FAILED: Expected value is 'float=1.23', but actual value is=" + s); -} - -var TestCanCallStaticMethodThroughBaseClass = function() { - - __log("TEST: TestCanCallStaticMethodThroughBaseClass"); - - var name = com.tns.tests.MyClassDerived.getName(); - - Assert(name === "com.tns.tests.MyClassBase", "TestCanCallStaticMethodThroughBaseClass FAILED: TestCanCallStaticMethodThroughBaseClass: Expected value is 'com.tns.tests.MyClassBase', but actual value is=" + name); -} - -var TestUseFieldThatIsArray = function() { - - __log("TEST: TestUseFieldThatIsArray"); - - var d = new com.tns.tests.DummyClass(); - - var arrInt = d.arrIntField; - - var arrIntLength = arrInt.length; - - Assert(arrIntLength === 5, "TestUseFieldThatIsArray FAILED: Expected array length is 5, but actual length is=" + arrIntLength); - - var intElement = arrInt[2]; - - Assert(intElement === 33, "TestUseFieldThatIsArray FAILED: Expected array element value is 33, but actual element value is=" + intElement); - - var arrString = d.arrStringField; - - var arrStringLength = arrString.length; - - Assert(arrIntLength === 5, "TestUseFieldThatIsArray FAILED: Expected array length is 5, but actual length is=" + arrStringLength); - - var stringElement = arrString[2]; - - Assert(stringElement === "cc", "TestUseFieldThatIsArray FAILED: Expected array element value is 'cc', but actual element value is=" + stringElement); -} - -var TestCanAssignArrayToField = function() { - - __log("TEST: TestCanAssignArrayToField"); - - var d = new com.tns.tests.DummyClass(); - - var arr = d.arrIntField2; - - Assert(arr === null, "TestCanAssignArrayToField FAILED: Expected value is null, but actual value is=" + arr); - - d.arrIntField2 = d.arrIntField; - - var arrLength = d.arrIntField2.length; - - Assert(arrLength === 5, "TestCanAssignArrayToField FAILED: Expected array length is 5, but actual length is=" + arrLength); -} - -var TestCallMethodThatReturnsLong = function() { - - __log("TEST: TestCallMethodThatReturnsLong"); - - var n = java.lang.Long.parseLong("9007199254740991"); // 9007199254740991 = 2^53-1 - - Assert(n.__proto__.valueOf() === 0, "TestCallMethodThatReturnsLong FAILED: n.__proto__.valueOf() === 0"); - Assert(n.value === undefined, "TestCallMethodThatReturnsLong FAILED: n.value === undefined"); - Assert(typeof n === "number", "TestCallMethodThatReturnsLong FAILED: typeof n === 'number'"); - Assert(n instanceof Number === false, "TestCallMethodThatReturnsLong FAILED: n instanceof Number === false"); - - var n = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 - - var ctorFuncName = n.__proto__.constructor.name; - Assert(ctorFuncName === "NativeScriptLongNumber", "TestCallMethodThatReturnsLong FAILED: Expected constructor function name is 'NativeScriptLongNumber', actual name=" + ctorFuncName); - Assert(isNaN(n.valueOf()) === true, "TestCallMethodThatReturnsLong FAILED: Expected JavaScript value is NaN"); - var javaValue = n.value; - Assert(javaValue === "9007199254740992", "TestCallMethodThatReturnsLong FAILED: Expected Java value is '9007199254740992', actual value=" + javaValue); - var typeName = typeof n; - Assert(typeName === "object", "TestCallMethodThatReturnsLong FAILED: Expected type is 'object', actual type=" + typeName); -} - -var TestCallMethodWithLongParameter = function() { - - __log("TEST: TestCallMethodWithLongParameter"); - - var d = new com.tns.tests.DummyClass(); - - var n1 = java.lang.Long.parseLong("9007199254740991"); // 9007199254740991 = 2^53-1 - var s1 = d.getLongAsString(n1); - Assert(s1 === "9007199254740991", "TestCallMethodWithLongParameter FAILED: Expected value is '9007199254740991', actual value=" + s1); - - var n2 = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 - var s2 = d.getLongAsString(n2); - Assert(s2 === "9007199254740992", "TestCallMethodWithLongParameter FAILED: Expected value is '9007199254740992', actual value=" + s2); - - var n3 = java.lang.Long.parseLong("9007199254740993"); // 9007199254740992 = 2^53+1 - var s3 = d.getLongAsString(n3); - Assert(s3 === "9007199254740993", "TestCallMethodWithLongParameter FAILED: Expected value is '9007199254740993', actual value=" + s3); -} - -var TestCallMethodWithLongCastArgument = function() { - - __log("TEST: TestCallMethodWithLongCastArgument"); - - var d = new com.tns.tests.DummyClass(); - - var s1 = d.getLongAsString(long("9007199254740991")); // 9007199254740991 = 2^53-1 - Assert(s1 === "9007199254740991", "TestCallMethodWithLongCastArgument FAILED: Expected value is '9007199254740991', actual value=" + s1); - - var s2 = d.getLongAsString(long(9007199254740991)); // 9007199254740991 = 2^53-1 - Assert(s2 === "9007199254740991", "TestCallMethodWithLongCastArgument FAILED: Expected value is '9007199254740991', actual value=" + s2); - - var s3 = d.getLongAsString(long("9007199254740992")); // 9007199254740992 = 2^53 - Assert(s3 === "9007199254740992", "TestCallMethodWithLongCastArgument FAILED: Expected value is '9007199254740992', actual value=" + s3); - - var s4 = d.getLongAsString(long("9007199254740993")); // 9007199254740992 = 2^53+1 - Assert(s4 === "9007199254740993", "TestCallMethodWithLongCastArgument FAILED: Expected value is '9007199254740993', actual value=" + s4); -} - -var TestCallToStringOfNativeScriptLongObject = function() { - - __log("TEST: TestCallToStringOfNativeScriptLongObject"); - - var n = java.lang.Long.parseLong("9007199254740992"); // 9007199254740992 = 2^53 - - var s = n.toString(); - - Assert(s === n.value, "TestCallToStringOfNativeScriptLongObject FAILED: Expected value is '9007199254740992', actual value=" + s); -} - -var TestCallMethodWithLongParameterWithNumberObject = function() { - - __log("TEST: TestCallMethodWithLongParameterWithNumberObject"); - - var d = new com.tns.tests.DummyClass(); - - var s = d.getLongAsString(new Number("9007199254740991")); // 9007199254740991 = 2^53-1 - Assert(s === "9007199254740991", "TestCallMethodWithLongParameterWithNumberObject FAILED: Expected value is '9007199254740991', actual value=" + s); -} - -var TestCallMethodWithMinAndMaxLongValues = function() { - - __log("TEST: TestCallMethodWithMinAndMaxLongValues"); - - var d = new com.tns.tests.DummyClass(); - - var maxLong = d.getMaxLong(); - var sMax = d.getLongAsString(maxLong); - Assert(sMax === "9223372036854775807", "TestCallMethodWithMinAndMaxLongValues FAILED: Expected value is '9223372036854775807', actual value=" + sMax); - - var minLong = d.getMinLong(); - var sMin = d.getLongAsString(minLong); - Assert(sMin === "-9223372036854775808", "TestCallMethodWithMinAndMaxLongValues FAILED: Expected value is '-9223372036854775808', actual value=" + sMin); -} - -var TestCallMethodWithByteParameter = function() { - - __log("TEST: TestCallMethodWithByteParameter"); - - var d = new com.tns.tests.DummyClass(); - - var s1 = d.method1(byte(123)); - Assert(s1 === "byte=123", "TestCallMethodWithByteParameter FAILED: Expected value is 'byte=123', actual value=" + s1); - - var s2 = d.method1(byte(new Number(123))); - Assert(s2 === "byte=123", "TestCallMethodWithByteParameter FAILED: Expected value is 'byte=123', actual value=" + s2); - - var s3 = d.method1(byte("123")); - Assert(s3 === "byte=123", "TestCallMethodWithByteParameter FAILED: Expected value is 'byte=123', actual value=" + s3); - - var s4 = d.method1(byte(new String("123"))); - Assert(s4 === "byte=123", "TestCallMethodWithByteParameter FAILED: Expected value is 'byte=123', actual value=" + s4); -} - -var TestCallMethodWithShortParameter = function() { - - __log("TEST: TestCallMethodWithShortParameter"); - - var d = new com.tns.tests.DummyClass(); - - var s1 = d.method1(short(12345)); - Assert(s1 === "short=12345", "TestCallMethodWithShortParameter FAILED: Expected value is 'short=12345', actual value=" + s1); - - var s2 = d.method1(short(new Number(12345))); - Assert(s2 === "short=12345", "TestCallMethodWithShortParameter FAILED: Expected value is 'short=12345', actual value=" + s2); - - var s3 = d.method1(short("12345")); - Assert(s3 === "short=12345", "TestCallMethodWithShortParameter FAILED: Expected value is 'short=12345', actual value=" + s3); - - var s4 = d.method1(short(new String("12345"))); - Assert(s4 === "short=12345", "TestCallMethodWithShortParameter FAILED: Expected value is 'short=12345', actual value=" + s4); -} - -var TestCallMethodWithBooleanParameter = function() { - - __log("TEST: TestCallMethodWithBooleanParameter"); - - var d = new com.tns.tests.DummyClass(); - - var s1 = d.method1(true); - Assert(s1 === "boolean=true", "TestCallMethodWithBooleanParameter FAILED: Expected value is 'boolean=true', actual value=" + s1); - - var s2 = d.method1(false); - Assert(s2 === "boolean=false", "TestCallMethodWithBooleanParameter FAILED: Expected value is 'boolean=false', actual value=" + s1); - - var s3 = d.method1(new Boolean(true)); - Assert(s3 === "boolean=true", "TestCallMethodWithBooleanParameter FAILED: Expected value is 'boolean=true', actual value=" + s3); - - var s4 = d.method1(new Boolean(false)); - Assert(s4 === "boolean=false", "TestCallMethodWithBooleanParameter FAILED: Expected value is 'boolean=false', actual value=" + s4); -} - -var TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod = function() { - - __log("TEST: TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod"); - - var exceptionCaught = false; - - var d = new com.tns.tests.DummyClass(); - - try - { - var s = d.method1(new java.lang.Object()); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor = function() { - - __log("TEST: TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor"); - - var exceptionCaught = false; - - try - { - var d = new com.tns.tests.DummyClass(new java.lang.Object()); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject = function() { - - __log("TEST: TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject"); - - var arr = java.lang.reflect.Array.newInstance(java.lang.Object.class, 10); - - var o = new java.lang.Object(); - arr[0] = o; - - var exceptionCaught = false; - - try - { - arr[0] = {}; - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject FAILED: No exception is thrown"); - - var isOldElement = o.equals(arr[0]); - - Assert(isOldElement === true, "TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject FAILED: Old and new element should be the same"); -} - -var TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive = function() { - - __log("TEST: TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive"); - - var arr = java.lang.reflect.Array.newInstance(java.lang.Object.class, 10); - - var o = new java.lang.Object(); - arr[0] = o; - - var exceptionCaught = false; - - try - { - arr[0] = 123; - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive FAILED: No exception is thrown"); - - var isOldElement = o.equals(arr[0]); - - Assert(isOldElement === true, "TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive FAILED: Old and new element should be the same"); -} - -var TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject = function() { - - __log("TEST: TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject"); - - var exceptionCaught = false; - - try - { - var d = new com.tns.tests.DummyClass({}); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject = function() { - - __log("TEST: TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject"); - - var exceptionCaught = false; + it("TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive"); + + var arr = java.lang.reflect.Array.newInstance(java.lang.Object.class, 10); + + var o = new java.lang.Object(); + arr[0] = o; + + var exceptionCaught = false; + + try + { + arr[0] = 123; + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + + var isOldElement = o.equals(arr[0]); + + expect(isOldElement).toBe(true); + }); - var d = new com.tns.tests.DummyClass(); - - try - { - var s = d.method2({}); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject FAILED: No exception is thrown"); -} + it("TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject"); + + var exceptionCaught = false; -var TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected = function() { + try + { + var d = new com.tns.tests.DummyClass({}); + } + catch (e) + { + exceptionCaught = true; + } - __log("TEST: TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected"); - - var exceptionCaught = false; + expect(exceptionCaught).toBe(true); + }); - var d = new com.tns.tests.DummyClass(); - - try - { - var s = d.method2(123); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted = function() { + it("TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject"); + + var exceptionCaught = false; + + var d = new com.tns.tests.DummyClass(); - __log("TEST: TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted"); - - var exceptionCaught = false; - - var impl = { - echo : function(s) { - return "!!!" + s; + try + { + var s = d.method2({}); + } + catch (e) + { + exceptionCaught = true; } - }; - - var MyButton = com.tns.tests.Button1.extend("btn1303", impl); - var btn = new MyButton(); - - var echo = com.tns.tests.Button1.prototype.echo; - delete com.tns.tests.Button1.prototype.echo; - delete impl.echo; - try - { - __log("btn=" + btn.triggerEcho("12345")); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted FAILED (1): No exception is thrown"); + expect(exceptionCaught).toBe(true); + }); - exceptionCaught = false; + it("TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected"); + + var exceptionCaught = false; + + var d = new com.tns.tests.DummyClass(); - try - { - __log("btn=" + btn.triggerEchoAsObject("123")); - } - catch (e) - { - exceptionCaught = true; - } + try + { + var s = d.method2(123); + } + catch (e) + { + exceptionCaught = true; + } - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted FAILED (2): No exception is thrown"); + expect(exceptionCaught).toBe(true); + }); - com.tns.tests.Button1.prototype.echo = echo; -} - + it("TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted"); + + var exceptionCaught = false; + + var impl = { + echo : function(s) { + return "!!!" + s; + } + }; + + var MyButton = com.tns.tests.Button1.extend("btn1303", impl); + var btn = new MyButton(); + + var echo = com.tns.tests.Button1.prototype.echo; + delete com.tns.tests.Button1.prototype.echo; + delete impl.echo; + + try + { + __log("btn=" + btn.triggerEcho("12345")); + } + catch (e) + { + exceptionCaught = true; + } -var TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten = function() { + expect(exceptionCaught).toBe(true); + + exceptionCaught = false; - __log("TEST: TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten"); - - var exceptionCaught = false; - - var impl = { - echo : function(s) { - return "!!!" + s; + try + { + __log("btn=" + btn.triggerEchoAsObject("123")); } - }; - - var MyButton = com.tns.tests.Button1.extend("btn1344", impl); - var btn = new MyButton(); - - impl.echo = "" - - try - { - __log("btn=" + btn.triggerEcho("123")); - } - catch (e) - { - exceptionCaught = true; - } + catch (e) + { + exceptionCaught = true; + } - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten FAILED (1): No exception is thrown"); + expect(exceptionCaught).toBe(true); + + com.tns.tests.Button1.prototype.echo = echo; + }); - exceptionCaught = false; - - try - { - __log("btn=" + btn.triggerEchoAsObject("123")); - } - catch (e) - { - exceptionCaught = true; - } + it("TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten"); + + var exceptionCaught = false; + + var impl = { + echo : function(s) { + return "!!!" + s; + } + }; + + var MyButton = com.tns.tests.Button1.extend("btn1344", impl); + var btn = new MyButton(); + + impl.echo = "" + + try + { + __log("btn=" + btn.triggerEcho("123")); + } + catch (e) + { + exceptionCaught = true; + } - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten FAILED (2): No exception is thrown"); -} + expect(exceptionCaught).toBe(true); + + exceptionCaught = false; -var TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed = function() { + try + { + __log("btn=" + btn.triggerEchoAsObject("123")); + } + catch (e) + { + exceptionCaught = true; + } - __log("TEST: TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed"); - - var methodCalled = false; - var exceptionCaught = false; - - var d = new com.tns.tests.DummyClass(); - - var impl1 = new com.tns.tests.DummyClass.MyInterface("impl1_1393", { - echoInt: function(i) { methodCalled = true; return i; } + expect(exceptionCaught).toBe(true); }); - var i = d.triggerEchoInt(impl1, 123); - - Assert(methodCalled === true, "TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed FAILED: Method override is not called"); - - Assert(i === 123, "TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed FAILED: Expected value is 123, actual value=" + i); - - try - { - d.triggerDoSomething(impl1); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed FAILED: No exception is thrown"); - - methodCalled = false; - exceptionCaught = false; - - var impl2 = new com.tns.tests.DummyClass.MyInterface("impl2_1417",{ - doSomething: function() { methodCalled = true; } + it("TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed"); + + var methodCalled = false; + var exceptionCaught = false; + + var d = new com.tns.tests.DummyClass(); + + var impl1 = new com.tns.tests.DummyClass.MyInterface("impl1_1393", { + echoInt: function(i) { methodCalled = true; return i; } + }); + + var i = d.triggerEchoInt(impl1, 123); + + expect(methodCalled).toBe(true); + + expect(i).toBe(123); + + try + { + d.triggerDoSomething(impl1); + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + + methodCalled = false; + exceptionCaught = false; + + var impl2 = new com.tns.tests.DummyClass.MyInterface("impl2_1417",{ + doSomething: function() { methodCalled = true; } + }); + + d.triggerDoSomething(impl2); + + expect(methodCalled).toBe(true); + + try + { + d.triggerEchoInt(impl2, 123); + } + catch (e) + { + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); }); - d.triggerDoSomething(impl2); - - Assert(methodCalled === true, "TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed FAILED: Method override is not called"); - - try - { - d.triggerEchoInt(impl2, 123); - } - catch (e) - { - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass = function() { - - __log("TEST: TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass"); - - var implObj = {} - - var exceptionCaught = false; - - var Button1 = new com.tns.tests.Button1.extend("Button1", implObj); - - try - { - var D = com.tns.tests.DummyClass.DummyDerivedClass.extend("D1440", implObj); - } - catch (e) - { - __log("TEST: TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass exception:" + e); - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected = function() { - - __log("TEST: TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected"); - - var d = new com.tns.tests.DummyClass(); - - var exceptionCaught = false; - - try - { - d.setName(false); - } - catch (e) - { - __log("e=" + e); - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected FAILED: No exception is thrown"); - - exceptionCaught = false; - - try - { - d.setName(true); - } - catch (e) - { - __log("e=" + e); - exceptionCaught = true; - } - - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected FAILED: No exception is thrown"); -} - -var TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected = function() { - - __log("TEST: TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected"); - - var d = new com.tns.tests.DummyClass(); - - var exceptionCaught = false; - - try - { - d.setName(1); - } - catch (e) - { - __log("e=" + e); - exceptionCaught = true; - } + it("TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass"); + + var implObj = {} + + var exceptionCaught = false; + + var Button1 = new com.tns.tests.Button1.extend("Button1", implObj); + + try + { + var D = com.tns.tests.DummyClass.DummyDerivedClass.extend("D1440", implObj); + } + catch (e) + { + __log("TEST: TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass exception:" + e); + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); - Assert(exceptionCaught === true, "TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected FAILED: No exception is thrown"); -} - -var TestCallProctedMethodDefinedAsAbstractAndThenOverwritten = function() { - - __log("TEST: TestCallProctedMethodDefinedAsAbstractAndThenOverwritten"); + it("TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected", function () { + + __log("TEST: TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected"); + + var d = new com.tns.tests.DummyClass(); + + var exceptionCaught = false; + + try + { + d.setName(false); + } + catch (e) + { + __log("e=" + e); + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + + exceptionCaught = false; - var C = com.tns.tests.AbsClassImpl.extend("C1520", { - echoString: function(s) { - var echo = this.super.echoString(s); - return echo + "!"; + try + { + d.setName(true); + } + catch (e) + { + __log("e=" + e); + exceptionCaught = true; } + + expect(exceptionCaught).toBe(true); }); - var c = new C(); - - var s = c.echo("test"); - Assert(s === "test!", "TestCallProctedMethodDefinedAsAbstractAndThenOverwritten FAILED: Expected value 'test!', actual value=" + s); -} - -var TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString = function() { + it("TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected", function () { - __log("TEST: TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString"); - - var d = new com.tns.tests.DummyClass(); - - var s = d.getNameAsCharSequence(); + __log("TEST: TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected"); + + var d = new com.tns.tests.DummyClass(); + + var exceptionCaught = false; + + try + { + d.setName(1); + } + catch (e) + { + __log("e=" + e); + exceptionCaught = true; + } + + expect(exceptionCaught).toBe(true); + }); - Assert(s === "dummy", "TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString FAILED: Expected value 'dummy', actual value=" + s); -} - - -var TestObjectReturnValueIsTreatedAsStringWhenItIsString = function() { + it("TestCallProctedMethodDefinedAsAbstractAndThenOverwritten", function () { + + __log("TEST: TestCallProctedMethodDefinedAsAbstractAndThenOverwritten"); + + var C = com.tns.tests.AbsClassImpl.extend("C1520", { + echoString: function(s) { + var echo = this.super.echoString(s); + return echo + "!"; + } + }); + var c = new C(); + + var s = c.echo("test"); + + expect(s).toBe("test!"); + }); - __log("TEST: TestObjectReturnValueIsTreatedAsStringWhenItIsString"); + it("TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString", function () { + + __log("TEST: TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString"); - var d = new com.tns.tests.DummyClass(); - - var s = d.getNameAsCharSequence(); + var d = new com.tns.tests.DummyClass(); + + var s = d.getNameAsCharSequence(); + + expect(s).toBe("dummy"); + }); - Assert(s === "dummy", "TestObjectReturnValueIsTreatedAsStringWhenItIsString FAILED: Expected value 'dummy', actual value=" + s); -} - -var TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava = function() { - - __log("TEST: TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava"); + it("TestObjectReturnValueIsTreatedAsStringWhenItIsString", function () { + + __log("TEST: TestObjectReturnValueIsTreatedAsStringWhenItIsString"); - var O = java.lang.Object.extend("O1560", {}); - - var ctor = (new O()).getClass().getConstructors()[0]; + var d = new com.tns.tests.DummyClass(); + + var s = d.getNameAsCharSequence(); + + expect(s).toBe("dummy"); + expect(true).toEqual(true); + }); - var o = ctor.newInstance(null); - - Assert(o !== null, "TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava FAILED: Cannot find implementation object for given extended class"); -} + it("TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava", function () { -var TestCanCallMethodThatReturnsArrayOfInterfaces = function() { + __log("TEST: TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava"); - __log("TEST: TestCanCallMethodThatReturnsArrayOfInterfaces"); + var O = java.lang.Object.extend("O1560", {}); + + var ctor = (new O()).getClass().getConstructors()[0]; + + var o = ctor.newInstance(null); - var arr = java.lang.reflect.Array.newInstance(android.view.View.OnClickListener.class, 1); - - Assert(arr !== null, "TestCanCallMethodThatReturnsArrayOfInterfaces FAILED: Cannot create an array of interfaces"); - - var listener = new android.view.View.OnClickListener("listener1580", {}); + expect(o).not.toBe(null); + }); - arr[0] = listener; - - Assert(arr[0] !== null, "TestCanCallMethodThatReturnsArrayOfInterfaces FAILED: Cannot set an interface implementation to an array of interfaces"); -} - -var TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes = function() { - - __log("TEST: TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes"); + it("TestCanCallMethodThatReturnsArrayOfInterfaces", function () { - var formats = java.lang.reflect.Array.newInstance(java.text.NumberFormat.class, 2); - formats[0] = java.text.NumberFormat.getInstance(); - formats[1] = java.text.NumberFormat.getIntegerInstance(); - var mf = new java.text.MessageFormat("{0}, {1}") - mf.setFormats(formats); - var arr = mf.parse("123, 4567"); - var len = arr.length; + __log("TEST: TestCanCallMethodThatReturnsArrayOfInterfaces"); - Assert(len === 2, "TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes FAILED: Expected length is 2, actual=" + len); -} - -var TestCanCallToStringOnClassProxy = function() { - __log("TEST: TestCanCallToStringOnClassProxy"); + var arr = java.lang.reflect.Array.newInstance(android.view.View.OnClickListener.class, 1); + + expect(arr).not.toBe(null); + + var listener = new android.view.View.OnClickListener("listener1580", {}); + + arr[0] = listener; - var view = android.view.View; - var s = view.toString(); + expect(arr[0]).not.toBe(null); + }); - Assert(s.length > 0, "TestCanCallToStringOnClassProxy FAILED: Cannot call toString on class proxy"); -} + it("TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes", function () { + + __log("TEST: TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes"); -var When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class = function() { - __log("TEST: When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class"); - - var MyButton = com.tns.tests.Button1.extend("MyButton1615", { - toString : function() { - return "button1" - }}); + var formats = java.lang.reflect.Array.newInstance(java.text.NumberFormat.class, 2); + formats[0] = java.text.NumberFormat.getInstance(); + formats[1] = java.text.NumberFormat.getIntegerInstance(); + var mf = new java.text.MessageFormat("{0}, {1}") + mf.setFormats(formats); + var arr = mf.parse("123, 4567"); + var len = arr.length; + expect(len).toBe(2); + }); - var button = new MyButton(); - var clazz1 = button.getClass(); - var name1 = clazz1.getName(); - Assert(name1.indexOf("MyButton1615") != -1, "FAILED: When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class"); - - var clazz2 = MyButton.class; - var name2 = clazz2.getName(); - Assert(name2.indexOf("MyButton1615") != -1, "FAILED: When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class"); -} + it("TestCanCallToStringOnClassProxy", function () { + + __log("TEST: TestCanCallToStringOnClassProxy"); -var When_using_global_in_a_module_global_should_be_defined = function() { - __log("TEST: When_using_global_in_a_module_global_should_be_defined"); + var view = android.view.View; + var s = view.toString(); + + expect(s.length).toBeGreaterThan(0); + }); - var module = require("../modules/module"); - module.accessGlobalObject(); -} + it("When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class", function () { + + __log("TEST: When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class"); + + var MyButton = com.tns.tests.Button1.extend("MyButton1615", { + toString : function() { + return "button1" + }}); + -var When_using_package_json_should_load_module = function() { - __log("TEST: When_using_package_json_should_load_module"); + var button = new MyButton(); + var clazz1 = button.getClass(); + var name1 = clazz1.getName(); + expect(name1.indexOf("MyButton1615")).not.toEqual(-1); + + var clazz2 = MyButton.class; + var name2 = clazz2.getName(); + expect(name2.indexOf("MyButton1615")).not.toEqual(-1); + }); - var module2 = require("../module2"); - var value456 = module2.value456; + it("When_using_global_in_a_module_global_should_be_defined", function () { + + __log("TEST: When_using_global_in_a_module_global_should_be_defined"); + + var module = require("../modules/module"); + var canAccessGlobalObject = module.accessGlobalObject(); + expect(canAccessGlobalObject).toBe(true); + }); - Assert(value456 === 456, "FAILED: When_using_package_json_should_load_module"); -} - -var When_require_bcl_module_it_should_be_loaded = function() { - __log("TEST: When_require_bcl_module_it_should_be_loaded"); + it("When_using_package_json_should_load_module", function () { + + __log("TEST: When_using_package_json_should_load_module"); + + var module2 = require("../module2"); + var value456 = module2.value456; + + expect(value456).toBe(456); + }); - var module = require("bclmodule"); - module.getModuleName(); -} - -var When_require_a_module_it_should_be_loaded = function() { - __log("TEST: When_require_a_module_it_should_be_loaded"); + it("When_require_bcl_module_it_should_be_loaded", function () { + + __log("TEST: When_require_bcl_module_it_should_be_loaded"); + + var module = require("bclmodule"); + var moduleName = module.getModuleName(); + var expectedModuleName = "bclModule"; + expect(moduleName).toBe(expectedModuleName); + }); - var module = require("./testModules/testmodule"); - var moduleName = module.getModuleName(); + it("When_require_a_module_it_should_be_loaded", function () { + + __log("TEST: When_require_a_module_it_should_be_loaded"); + + var module = require("./testModules/testmodule"); + var moduleName = module.getModuleName(); + + expect(moduleName).toEqual("testModule"); + }); - Assert(moduleName == "testModule", "FAILED: When_require_a_module_it_should_be_loaded"); -} - - -var When_require_a_bcl_module_in_a_dir_it_should_be_loaded = function() { - __log("TEST: When_require_a_bcl_module_in_a_dir_it_should_be_loaded"); + it("When_require_a_bcl_module_in_a_dir_it_should_be_loaded", function () { + + __log("TEST: When_require_a_bcl_module_in_a_dir_it_should_be_loaded"); + + var module = require("tests/testModules/testBclModule"); + var moduleName = module.getModuleName(); + + expect(moduleName).toEqual("testBclModule"); + }); - var module = require("tests/testModules/testBclModule"); - var moduleName = module.getModuleName(); + it("When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it", function () { + + __log("TEST: When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); + + var module = require("./testModules/someDirModule"); + var moduleName = module.getModuleName(); + + expect(moduleName).toEqual("index.js"); + }); - Assert(moduleName == "testBclModule", "FAILED: When_require_a_bcl_module_in_a_dir_it_should_be_loaded"); -} - -var When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it = function() { - __log("TEST: When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); + it("When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it", function () { + + __log("TEST: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); + + var module = require("tests/testModules/someBclDirModule"); + var moduleName = module.getModuleName(); + + expect(moduleName).toEqual("bclindex.js"); + }); - var module = require("./testModules/someDirModule"); - var moduleName = module.getModuleName(); - - Assert(moduleName == "index.js", "FAILED: When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); -} - -var When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it = function() { - __log("TEST: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); - - var module = require("tests/testModules/someBclDirModule"); - var moduleName = module.getModuleName(); - - Assert(moduleName == "bclindex.js", "FAILED: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it"); -} - -var When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it = function() { - __log("TEST: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it"); - - var module = require("tests/testModules/someModule"); - var value123 = module.value123; - - Assert(value123 === 123, "FAILED: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it"); -} - -When_extending_a_class_two_times(); -When_extending_a_class_two_times_with_no_extend_names(); -When_implementing_an_interface_with_new_the_overrides_should_work(); - -//LOG("ALL PASSED"); -//fail(); - -When_extending_a_class_two_times_without_second_implementation_object(); -When_extending_a_class_and_calling_super_toString(); -When_accessing_a_static_field_on_a_javascript_instance_it_should_work(); -When_accessing_static_members_on_an_extended_class(); - -When__calling_super_method_using_the_prototype_property_of_a_function_it_should_call_the_super_method(); -When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method(); -When__calling_super_method_using_the_prototype_property_of_a_extended_function_it_should_call_the_super_method2() - - - -When_extending_a_class_and_calling_super_method_it_should_work(); - -//@@@ -//When_accessing_a_property_it_should_call_the_get_and_set_methods_respectivelly(); -//When_accessing_a_bool_property_it_should_call_the_is_and_set_methods_respectivelly(); - -//When_calling_instance_and_static_member_with_same_name_the_calls_should_succeed(); //TODO: Enable when supporting isStatic in MethodResolver -When_calling_toString_on_an_java_object_that_has_overriden_toString_in_js_it_should_call_the_js_method(); -When_calling_toString_on_an_java_object_it_should_call_the_java_method(); -When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type(); -When_a_java_field_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type(); -When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type(); -When_calling_instanceof_it_should_work(); -When_calling_instanceof_on_method_argument_it_should_work(); -When_calling_instanceof_on_method_result_it_should_work(); -When_calling_instanceof_on_field_result_it_should_work(); -When_accessing_class_property_on_a_extended_class_it_should_return_the_extended_class(); -When_using_global_in_a_module_global_should_be_defined(); -When_using_package_json_should_load_module(); -When_require_bcl_module_it_should_be_loaded(); -When_require_a_module_it_should_be_loaded(); -When_require_a_bcl_module_in_a_dir_it_should_be_loaded(); -When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it(); -When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it(); -When_require_a_module_that_is_a_directory_name_it_should_load_the_index_js_inside_it(); -When_calling_instanceof_on_interface_it_should_work(); - -TestRequireDirName(); -TestRequireFileName(); -TestGarbageCollection(); -TestWorkingWithJavaArrayDoesNotMakeMemoryLeak(); -TestConstructorOverride(); -TestConstructorOverrideOnTypeWithInitMethod(); -TestRequire(); -TestArrays(); -TestArrayLengthPropertyIsNumber(); -TestCreationOfLocationListener(); -TestInnerClassCreation(); -TestNestedClassCreation(); -TestCallMethodOnAnObjectReturnedAsObjectWithoutMetadata(); -TestGetFieldOnAnObjectReturnedAsObjectWithoutMetadata(); -TestCallMethodOnAnObjectPassedAsParameterInOverriddenMethodAsAnObjectWithoutMetadata(); -TestAccessArrayElementAsObjectWithoutMetadata(); -TestCallMethodThatReturnsNull(); -TestCallMethodThatReturnsNullString(); -TestAccessNullField(); -TestAccessNullArrayElement(); -TestCallMethodWithIntVarArg(); -TestCallMethodWithCharVarArg(); -TestCallMethodWithObjectVarArg(); -TestCanInheritFromClassInAndroidSupportLibrary(); -TestCallMethodWithByteParameter(); -TestCanCallStaticMethodThroughBaseClass(); -TestUseFieldThatIsArray(); -TestCanAssignArrayToField(); -TestCallMethodThatReturnsLong(); -TestCallMethodWithLongParameter(); -TestCallMethodWithLongCastArgument(); -TestCallToStringOfNativeScriptLongObject(); -TestCallMethodWithMinAndMaxLongValues(); -TestCallMethodWithLongParameterWithNumberObject(); -TestCallMethodWithByteParameter(); -TestCallMethodWithFloatParameter(); -TestCallMethodWithShortParameter(); -TestCallMethodWithBooleanParameter(); -TestThrowJavaScriptExceptionWhenCannotResolveJavaMethod(); -TestThrowJavaScriptExceptionWhenCannotResolveJavaConstructor(); -TestThrowJavaScriptExceptionWhenSetArrayRefElementWithNakedJavaScriptObject(); -TestThrowJavaScriptExceptionWhenSetArrayRefElementWithJavaScriptPrimitive(); -TestThrowJavaScriptExceptionWhenCreateJavaObjectWithNakedJavaScriptObject(); -TestThrowJavaScriptExceptionWhenCallJavaMethodWithNakedJavaScriptObject(); -TestThrowJavaScriptExceptionWhenCallJavaMethodWithJavaScriptPrimitiveWhenJavaRefIsExpected(); -TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsDeleted(); -TestThrowJavaScriptExceptionWhenOverideMethodImplementationIsOverwritten(); -// ART does not allow partiallly implemented interfaces (as expected) -//TestThrowJavaScriptExceptionWhenPartiallyImplementedInterfaceIsUsed(); -TestThrowJavaScriptExceptionWhenImplementationObjectIsUsedToExtendMoreThanOneClass(); -TestThrowJavaScriptExceptionWhenPassBooleanArgumentWhereNotExpected(); -TestThrowJavaScriptExceptionWhenPassNumberArgumentWhereNotExpected(); -TestCallProctedMethodDefinedAsAbstractAndThenOverwritten(); -TestCharSequenceReturnValueIsTreatedAsStringWhenItIsString(); -TestObjectReturnValueIsTreatedAsStringWhenItIsString(); -TestCanFindImplementationObjectWhenCreateExtendedObjectFromJava(); -TestCanCallMethodThatReturnsArrayOfInterfaces(); -TestCanParseSignatureWithTypesThatContainsCapitalLettersForPrimitiveTypes(); -TestCanCallToStringOnClassProxy(); \ No newline at end of file + it("When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it", function () { + + __log("TEST: When_require_a_bcl_module_that_is_a_directory_name_it_should_load_the_package_json_inside_it"); + + var module = require("tests/testModules/someModule"); + var value123 = module.value123; + + expect(value123).toBe(123); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js b/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js index c9cb4a7ef..c8a4dcb15 100644 --- a/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js +++ b/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js @@ -1,50 +1,51 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var When_generating_a_proxy_of_nested_interface_at_runtime = function() { - __log("TEST: When_generating_a_proxy_of_nested_interface_at_runtime"); - - var MyButton = new com.tns.tests.Button1.extend("MyButton10", { - toString : function() { - return "button1"; - }, - }); +describe("Tests for runtime binding generator", function () { - var button = new MyButton(); + var myCustomEquality = function(first, second) { + return first == second; + }; - var called = false; - button.setOnClickListener(new android.view.View.OnClickListener("ClickListener19", { - onClick: function() { - called = true; - } - })); - - - - button.click(null); + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); - Assert(called === true, "FAILED: When_generating_a_proxy_of_nested_interface_at_runtime."); -} + it("When_generating_a_proxy_of_nested_interface_at_runtime", function () { - -var When_generating_a_proxy_of_android_class_at_runtime = function() { - __log("TEST: When_generating_a_proxy_of_android_class_at_runtime"); - - var MyButton = new com.tns.tests.Button1.extend("MyButton36", { - toString : function() { - return "button1"; - }, + __log("TEST: When_generating_a_proxy_of_nested_interface_at_runtime"); + + var MyButton = new com.tns.tests.Button1.extend("MyButton10", { + toString : function() { + return "button1"; + }, + }); + + var button = new MyButton(); + + var called = false; + button.setOnClickListener(new android.view.View.OnClickListener("ClickListener19", { + onClick: function() { + called = true; + } + })); + + button.click(null); + + expect(called).toBe(true); }); - var button1 = new MyButton(); - var dummyObject = button1.DummyClassAsObjectField; - - var isInstanceOf = dummyObject instanceof com.tns.tests.DummyClass; - Assert(isInstanceOf == true, "FAILED: When_generating_a_proxy_of_android_class_at_runtime."); -} - -When_generating_a_proxy_of_nested_interface_at_runtime(); -When_generating_a_proxy_of_android_class_at_runtime(); \ No newline at end of file + it("When_generating_a_proxy_of_android_class_at_runtime", function () { + + __log("TEST: When_generating_a_proxy_of_android_class_at_runtime"); + + var MyButton = new com.tns.tests.Button1.extend("MyButton36", { + toString : function() { + return "button1"; + }, + }); + + var button1 = new MyButton(); + var dummyObject = button1.DummyClassAsObjectField; + + var isInstanceOf = dummyObject instanceof com.tns.tests.DummyClass; + expect(isInstanceOf).toEqual(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testsForTypescript.js b/test-app/assets/app/tests/testsForTypescript.js index 9ce1fd1c1..11aa80957 100644 --- a/test-app/assets/app/tests/testsForTypescript.js +++ b/test-app/assets/app/tests/testsForTypescript.js @@ -1,543 +1,538 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -}; - - -(function When_creating_a_typescript_instance_with_constructor_property_it_should_support_this() { - - __log("TEST: When_creating_a_typescript_instance_with_constructor_property_it_should_support_this"); - var NativeViewGroup = (function (_super) { - __extends(NativeViewGroup, _super); - function NativeViewGroup(view) { - this._view = view; - return __native(this); - } - - NativeViewGroup.prototype.Then = function () { - this._view.Do(); - }; - - return NativeViewGroup; - })(android.view.ViewGroup); +describe("Tests typescript", function () { - var doCalled = false; - - var myView = new NativeViewGroup({ Do: function() { doCalled = true; }}); - myView.Then(); - Assert(doCalled == true, "FAILED: When_creating_a_typescript_instance_with_constructor_property_it_should_support_this. Method 'Do' not called"); - - var MyButton = (function (_super) { - __extends(MyButton, _super); - function MyButton() { - _super.call(this); - this.myName = "MyName"; - return __native(this); - } - - MyButton.prototype.echo = function (s) { - return "echo: " + this.myName; - }; - - MyButton.prototype.toString = function (s) { - return "toString: " + this.myName; - }; - - return MyButton; - })(com.tns.tests.Button1); - - var b = new MyButton(); - var exo = b.triggerEcho("exo"); - Assert(exo === "echo: MyName", "FAILED: When_creating_a_typescript_instance_with_constructor_property_it_should_support_this. Exo not wroking"); - - var toStringResult = b.toString(); - Assert(toStringResult === "toString: MyName", "FAILED: When_creating_a_typescript_instance_with_constructor_property_it_should_support_this. toString not wroking"); -})(); - - -(function When_creating_a_typescript_instance_it_should_support_overriden_members() { + var myCustomEquality = function(first, second) { + return first == second; + }; - __log("TEST: When_creating_a_typescript_instance_it_should_support_overriden_members"); + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); - var initCalled = false; - var MyButton1 = (function (_super) { - __extends(MyButton1, _super); - function MyButton1() { - _super.call(this); - return __native(this); - } - - MyButton1.prototype.init = function () { - initCalled = true; - }; - - MyButton1.prototype.toString = function (s) { - return "toString called" - }; - - return MyButton1; - })(com.tns.tests.Button1); + it("When_creating_a_typescript_instance_with_constructor_property_it_should_support_this", function () { - var button = new MyButton1(); - Assert(initCalled == true, "FAILED: When_creating_a_typescript_instance_it_should_support_overriden_members. Init not called"); - - var value = button.toString(); - Assert(value == "toString called", "FAILED: When_creating_a_typescript_instance_it_should_support_overriden_members. toString not called. Actual: " + value); -})(); - + __log("TEST: When_creating_a_typescript_instance_with_constructor_property_it_should_support_this"); + var NativeViewGroup = (function (_super) { + __extends(NativeViewGroup, _super); + function NativeViewGroup(view) { + this._view = view; + return __native(this); + } + + NativeViewGroup.prototype.Then = function () { + this._view.Do(); + }; + + return NativeViewGroup; + })(android.view.ViewGroup); + + var doCalled = false; -(function When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members() { - - __log("TEST: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members"); - - - var MyButton2 = (function (_super) { - __extends(MyButton2, _super); - function MyButton2() { + var myView = new NativeViewGroup({ Do: function() { doCalled = true; }}); + myView.Then(); + expect(doCalled).toEqual(true); + + var MyButton = (function (_super) { + __extends(MyButton, _super); + function MyButton() { _super.call(this); + this.myName = "MyName"; return __native(this); } - MyButton2.prototype.superToString = function () { - return _super.prototype.toString.call(this); + MyButton.prototype.echo = function (s) { + return "echo: " + this.myName; }; - MyButton2.prototype.toString = function (s) { - return this.super.toString(); - }; - - return MyButton2; - })(com.tns.tests.Button1); - - var button = new MyButton2(); - var button1Label = button.superToString(); - Assert(button1Label.indexOf("com.tns.tests.Button1-") != -1, "FAILED: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members. Actual: " + button1Label); - Assert(button1Label.indexOf("-MyButton2") != -1, "FAILED: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members. Expected to contain MyButton2. Actual: " + button1Label); -})(); - - -(function When_creating_a_pure_typescript_inheritance_chain_it_should_work() { - - __log("TEST: When_creating_a_pure_typescript_inheritance_chain_it_should_work"); - - var Animal = (function () { - function Animal(name) { - this.name = name; - } - Animal.prototype.move = function (meters) { - __log(this.name + " moved " + meters + "m."); - }; - return Animal; - })(); - - var Snake = (function (_super) { - __extends(Snake, _super); - function Snake(name) { - _super.call(this, name); - } - Snake.prototype.move = function () { - __log("Slithering..."); - _super.prototype.move.call(this, 5); - }; - return Snake; - })(Animal); - - var Horse = (function (_super) { - __extends(Horse, _super); - function Horse(name) { - _super.call(this, name); - } - Horse.prototype.move = function () { - __log("Galloping..."); - _super.prototype.move.call(this, 45); - }; - return Horse; - })(Animal); - - var horse = new Horse(); - var isInstanceOf = horse instanceof Horse; - Assert(isInstanceOf == true, "FAILED: When_creating_a_pure_typescript_inheritance_chain_it_should_work."); - - isInstanceOf = horse instanceof Animal; - Assert(isInstanceOf == true, "FAILED: When_creating_a_pure_typescript_inheritance_chain_it_should_work."); - - var snake = new Snake(); - isInstanceOf = snake instanceof Snake; - Assert(isInstanceOf == true, "FAILED: When_creating_a_pure_typescript_inheritance_chain_it_should_work."); - - isInstanceOf = snake instanceof Animal; - Assert(isInstanceOf == true, "FAILED: When_creating_a_pure_typescript_inheritance_chain_it_should_work."); - - var animal = new Animal(); - isInstanceOf = animal instanceof Animal; - Assert(isInstanceOf == true, "FAILED: When_creating_a_pure_typescript_inheritance_chain_it_should_work."); - -})(); - -(function When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance() { - - __log("TEST: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance"); - - var MyButton3 = (function (_super) { - __extends(MyButton3, _super); - function MyButton3() { - _super.call(this); - return __native(this); - } - - MyButton3.prototype.toString = function (s) { - return this.super.toString(); + MyButton.prototype.toString = function (s) { + return "toString: " + this.myName; }; - return MyButton3; + return MyButton; })(com.tns.tests.Button1); - - var button = new MyButton3(); - - var isInstanceOf = button instanceof MyButton3; - Assert(isInstanceOf == true, "FAILED: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance. Should be instance of MyButton3"); - - isInstanceOf = button instanceof com.tns.tests.Button1; - Assert(isInstanceOf == true, "FAILED: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance.Should be instance of com.tns.tests.Button1"); -})(); -(function When_creating_a_typescript_instance_with_arguments_it_should_be_a_valid_nativescript_instance() { - - __log("TEST: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance"); - - var MyButtonWithArgs = (function (_super) { - __extends(MyButtonWithArgs, _super); - function MyButtonWithArgs(value) { - _super.call(this, value); - return __native(this); - } - - MyButtonWithArgs.prototype.init = function () { - }; - - MyButtonWithArgs.prototype.onClick = function () { - __log("MyButton onClick called"); - }; + var b = new MyButton(); + var exo = b.triggerEcho("exo"); + expect(exo).toBe("echo: MyName"); - MyButtonWithArgs.prototype.superToString = function () { - return _super.prototype.toString.call(this); - }; - - return MyButtonWithArgs; - })(com.tns.tests.Button1); + var toStringResult = b.toString(); + expect(toStringResult).toBe("toString: MyName"); + }); - var button = new MyButtonWithArgs(5); - - var isInstanceOf = button instanceof MyButtonWithArgs; - Assert(isInstanceOf == true, "FAILED: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance. Should be instance of MyButtonWithArgs"); - - isInstanceOf = button instanceof com.tns.tests.Button1; - Assert(isInstanceOf == true, "FAILED: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance.Should be instance of com.tns.tests.Button1"); -})(); - - -(function When_creating_a_typescript_instance_it_should_support_member_access() { - - __log("TEST: When_creating_a_typescript_instance_it_should_support_member_access"); - - var MyButton4 = (function (_super) { - __extends(MyButton4, _super); - function MyButton4() { + it("When_creating_a_typescript_instance_it_should_support_overriden_members", function () { + + __log("TEST: When_creating_a_typescript_instance_it_should_support_overriden_members"); + + var initCalled = false; + var MyButton1 = (function (_super) { + __extends(MyButton1, _super); + function MyButton1() { _super.call(this); - this.my1 = "MyName"; return __native(this); } - MyButton4.prototype.init = function () { + MyButton1.prototype.init = function () { + initCalled = true; }; - MyButton4.prototype.echo = function (s) { - return "echo: " + this.my1; + MyButton1.prototype.toString = function (s) { + return "toString called" }; - return MyButton4; + return MyButton1; })(com.tns.tests.Button1); + + var button = new MyButton1(); + expect(initCalled).toEqual(true); + + var value = button.toString(); + expect(value).toEqual("toString called"); + }); - var button = new MyButton4(); - var prop = button.getIMAGE_ID_PROP(); - Assert(prop == "image id prop", "FAILED: When_creating_a_typescript_instance_it_should_support_member_access."); + it("When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members", function () { + + __log("TEST: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_overriden_members"); + + var MyButton2 = (function (_super) { + __extends(MyButton2, _super); + function MyButton2() { + _super.call(this); + return __native(this); + } + + MyButton2.prototype.superToString = function () { + return _super.prototype.toString.call(this); + }; + + MyButton2.prototype.toString = function (s) { + return this.super.toString(); + }; + + return MyButton2; + })(com.tns.tests.Button1); + + var button = new MyButton2(); + var button1Label = button.superToString(); + expect(button1Label.indexOf("com.tns.tests.Button1-")).not.toEqual(-1); + expect(button1Label.indexOf("-MyButton2")).not.toEqual(-1); + }); - var button1 = new MyButton4(); - var prop1 = button1.getIMAGE_ID_PROP(); - Assert(prop1 == "image id prop", "FAILED: When_creating_a_typescript_instance_it_should_support_member_access."); -})(); - - - -(function When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype() { + it("When_creating_a_pure_typescript_inheritance_chain_it_should_work", function () { + + __log("TEST: When_creating_a_pure_typescript_inheritance_chain_it_should_work"); + + var Animal = (function () { + function Animal(name) { + this.name = name; + } + Animal.prototype.move = function (meters) { + __log(this.name + " moved " + meters + "m."); + }; + return Animal; + })(); + + var Snake = (function (_super) { + __extends(Snake, _super); + function Snake(name) { + _super.call(this, name); + } + Snake.prototype.move = function () { + __log("Slithering..."); + _super.prototype.move.call(this, 5); + }; + return Snake; + })(Animal); + + var Horse = (function (_super) { + __extends(Horse, _super); + function Horse(name) { + _super.call(this, name); + } + Horse.prototype.move = function () { + __log("Galloping..."); + _super.prototype.move.call(this, 45); + }; + return Horse; + })(Animal); + + var horse = new Horse(); + var isInstanceOf = horse instanceof Horse; + expect(isInstanceOf).toEqual(true); + + isInstanceOf = horse instanceof Animal; + expect(isInstanceOf).toEqual(true); + + var snake = new Snake(); + isInstanceOf = snake instanceof Snake; + expect(isInstanceOf).toEqual(true); + + isInstanceOf = snake instanceof Animal; + expect(isInstanceOf).toEqual(true); + + var animal = new Animal(); + isInstanceOf = animal instanceof Animal; + expect(isInstanceOf).toEqual(true); + }); - __log("TEST: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype"); + it("When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance", function () { + + __log("TEST: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance"); + + var MyButton3 = (function (_super) { + __extends(MyButton3, _super); + function MyButton3() { + _super.call(this); + return __native(this); + } + + MyButton3.prototype.toString = function (s) { + return this.super.toString(); + }; + + return MyButton3; + })(com.tns.tests.Button1); + + var button = new MyButton3(); + + var isInstanceOf = button instanceof MyButton3; + expect(isInstanceOf).toEqual(true); + + isInstanceOf = button instanceof com.tns.tests.Button1; + expect(isInstanceOf).toEqual(true); + }); - var MyButton5 = (function (_super) { - __extends(MyButton5, _super); - function MyButton5() { - _super.call(this); - this.my1 = "MyName"; - return __native(this); - } - - MyButton5.prototype.init = function () { - }; - - MyButton5.prototype.toString = function (s) { - return this.super.toString(); - }; - - return MyButton5; - })(com.tns.tests.Button1); - - var button = new MyButton5(); - var button1Label = button.toString(); - Assert(button1Label.indexOf("com.tns.tests.Button1-") != -1, "FAILED: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype"); - Assert(button1Label.indexOf("-MyButton5") != -1, "FAILED: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype. Expected to conatin MyButton5"); -})(); + it("When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance", function () { + + __log("TEST: When_creating_a_typescript_instance_it_should_be_a_valid_nativescript_instance"); + + var MyButtonWithArgs = (function (_super) { + __extends(MyButtonWithArgs, _super); + function MyButtonWithArgs(value) { + _super.call(this, value); + return __native(this); + } + + MyButtonWithArgs.prototype.init = function () { + }; -(function When_extending_an_already_extended_object_it_should_throw_an_error() { - - __log("TEST: When_extending_an_already_extended_object_it_should_throw_an_error"); + MyButtonWithArgs.prototype.onClick = function () { + __log("MyButton onClick called"); + }; + + MyButtonWithArgs.prototype.superToString = function () { + return _super.prototype.toString.call(this); + }; + + return MyButtonWithArgs; + })(com.tns.tests.Button1); + + var button = new MyButtonWithArgs(5); + + var isInstanceOf = button instanceof MyButtonWithArgs; + expect(isInstanceOf).toEqual(true); + + isInstanceOf = button instanceof com.tns.tests.Button1; + expect(isInstanceOf).toEqual(true); + }); - var errorThrown = false; - try { + it("When_creating_a_typescript_instance_it_should_support_member_access", function () { + + __log("TEST: When_creating_a_typescript_instance_it_should_support_member_access"); - var MyButton6 = (function (_super) { - __extends(MyButton6, _super); - function MyButton6() { + var MyButton4 = (function (_super) { + __extends(MyButton4, _super); + function MyButton4() { _super.call(this); this.my1 = "MyName"; return __native(this); } - MyButton6.prototype.init = function () { + MyButton4.prototype.init = function () { }; - MyButton6.prototype.toString = function (s) { - return this.super.toString(); + MyButton4.prototype.echo = function (s) { + return "echo: " + this.my1; }; - return MyButton6; + return MyButton4; })(com.tns.tests.Button1); - - var SecondButton = (function (_super) { - __extends(SecondButton, _super); - - function SecondButton() { - _super.apply(this, arguments); - } - - return SecondButton; - })(MyButton6); - } catch (err) { - errorThrown = true; - } + + var button = new MyButton4(); + var prop = button.getIMAGE_ID_PROP(); + expect(prop).toEqual("image id prop"); + + var button1 = new MyButton4(); + var prop1 = button1.getIMAGE_ID_PROP(); + expect(prop1).toEqual("image id prop"); + }); - Assert(errorThrown == true, "FAILED: When_extending_an_already_extended_object_it_should_throw_an_error."); -})(); - + it("When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype", function () { + + __log("TEST: When_creating_a_typescript_instance_it_should_support_calling_super_members_from_super_prototype"); + + var MyButton5 = (function (_super) { + __extends(MyButton5, _super); + function MyButton5() { + _super.call(this); + this.my1 = "MyName"; + return __native(this); + } + + MyButton5.prototype.init = function () { + }; -(function When_accessing_a_static_field_on_a_typescript_instance_it_should_work() { + MyButton5.prototype.toString = function (s) { + return this.super.toString(); + }; + + return MyButton5; + })(com.tns.tests.Button1); + + var button = new MyButton5(); + var button1Label = button.toString(); + expect(button1Label.indexOf("com.tns.tests.Button1-")).not.toEqual(-1); + expect(button1Label.indexOf("-MyButton5")).not.toEqual(-1); + }); - __log("TEST: When_accessing_a_static_field_on_a_typescript_instance_it_should_work"); + it("When_extending_an_already_extended_object_it_should_throw_an_error", function () { + + __log("TEST: When_extending_an_already_extended_object_it_should_throw_an_error"); + + var errorThrown = false; + try { + + var MyButton6 = (function (_super) { + __extends(MyButton6, _super); + function MyButton6() { + _super.call(this); + this.my1 = "MyName"; + return __native(this); + } + + MyButton6.prototype.init = function () { + }; + + MyButton6.prototype.toString = function (s) { + return this.super.toString(); + }; + + return MyButton6; + })(com.tns.tests.Button1); + + var SecondButton = (function (_super) { + __extends(SecondButton, _super); + + function SecondButton() { + _super.apply(this, arguments); + } + + return SecondButton; + })(MyButton6); + } catch (err) { + errorThrown = true; + } + + expect(errorThrown).toEqual(true); + }); - var MyButton7 = (function (_super) { - __extends(MyButton7, _super); - function MyButton7() { - _super.call(this); - this.my1 = "MyName"; - } - - MyButton7.prototype.init = function () { - }; + it("When_accessing_a_static_field_on_a_typescript_instance_it_should_work", function () { + + __log("TEST: When_accessing_a_static_field_on_a_typescript_instance_it_should_work"); + + var MyButton7 = (function (_super) { + __extends(MyButton7, _super); + function MyButton7() { + _super.call(this); + this.my1 = "MyName"; + } + + MyButton7.prototype.init = function () { + }; - MyButton7.prototype.toString = function (s) { - return "my"; - }; - - return MyButton7; - })(com.tns.tests.Button1); - - var valueUsingChild = MyButton7.STATIC_IMAGE_ID; - Assert(valueUsingChild == "static image id", "FAILED: When_accessing_a_static_field_on_a_typescript_instance_it_should_work. MyButton7.STATIC_IMAGE_ID should be 5"); - - MyButton7.STATIC_IMAGE_ID = "test"; - valueUsingChild = MyButton7.STATIC_IMAGE_ID; - Assert(valueUsingChild == "test", "FAILED: When_accessing_a_static_field_on_a_typescript_instance_it_should_work. MyButton7.STATIC_IMAGE_ID should be 5"); + MyButton7.prototype.toString = function (s) { + return "my"; + }; + + return MyButton7; + })(com.tns.tests.Button1); + + var valueUsingChild = MyButton7.STATIC_IMAGE_ID; + expect(valueUsingChild).toEqual("static image id"); + + MyButton7.STATIC_IMAGE_ID = "test"; + valueUsingChild = MyButton7.STATIC_IMAGE_ID; + expect(valueUsingChild).toEqual("test"); + + var valueUsingParent = com.tns.tests.Button1.STATIC_IMAGE_ID; + expect(valueUsingParent).toEqual("static image id"); + }); - var valueUsingParent = com.tns.tests.Button1.STATIC_IMAGE_ID; - Assert(valueUsingParent == "static image id", "FAILED: When_accessing_a_static_field_on_a_typescript_instance_it_should_work. com.tns.tests.Button1.STATIC_IMAGE_ID should be 5"); -})(); + it("When_calling_a_static_method_on_a_typescript_instance_it_should_work", function () { + + __log("TEST: When_calling_a_static_method_on_a_typescript_instance_it_should_work"); -(function When_calling_a_static_method_on_a_typescript_instance_it_should_work() { - - __log("TEST: When_calling_a_static_method_on_a_typescript_instance_it_should_work"); + + var MyButton8 = (function (_super) { + __extends(MyButton8, _super); + function MyButton8() { + _super.call(this); + this.my1 = "MyName"; + } + + MyButton8.prototype.init = function () { + }; + MyButton8.prototype.onClick = function () { + __log("MyButton onClick called"); + }; + + MyButton8.prototype.superToString = function () { + return _super.prototype.toString.call(this); + }; + + MyButton8.prototype.echo = function (s) { + return "echo: " + this.my1; + }; + + return MyButton8; + })(com.tns.tests.Button1); + + MyButton8.setMyStaticIntField(5); + var valueUsingChild = MyButton8.getMyStaticIntField(); + expect(valueUsingChild).toEqual(5); + + var valueUsingParent = com.tns.tests.Button1.getMyStaticIntField(); + expect(valueUsingParent).toEqual(5); + + com.tns.tests.Button1.setMyStaticIntField(6); + var valueUsingParent = com.tns.tests.Button1.getMyStaticIntField(); + expect(valueUsingParent).toEqual(6); + + valueUsingChild = MyButton8.getMyStaticIntField(); + expect(valueUsingChild).toEqual(6); + }); + + it("When_inherit_from_android_base_class_it_should_create_an_instance", function () { + + /* + // From issue #137 https://github.com/telerik/Kimera/issues/137 + class ListViewAdapter extends android.widget.BaseAdapter { + private _items: Array; + + constructor(items: Array) { + super(); + + this._items = items; + } + + get items(): Array { + return this._items; + } + set items(value: Array) { + this._items = value; + } + + public getCount() { + return this._items ? this._items.length : 0; + } + + public getItem(i) { + return this._items && i < this._items.length ? this._items[i] : null; + } + + public getItemId(i) { + return long(0); + } + + public getView(i, view, viewGroup) { + return null; + } + + public refresh() { + this.notifyDataSetChanged(); + } + } + */ + var ListViewAdapter = (function (_super) { + __extends(ListViewAdapter, _super); + function ListViewAdapter(items) { + _super.call(this); + + this._items = items; + return __native(this); + } + Object.defineProperty(ListViewAdapter.prototype, "items", { + get: function () { + return this._items; + }, + set: function (value) { + this._items = value; + }, + enumerable: true, + configurable: true + }); + + ListViewAdapter.prototype.getCount = function () { + return this._items ? this._items.length : 0; + }; + + ListViewAdapter.prototype.getItem = function (i) { + return this._items && i < this._items.length ? this._items[i] : null; + }; + + ListViewAdapter.prototype.getItemId = function (i) { + return long(0); + }; + + ListViewAdapter.prototype.getView = function (i, view, viewGroup) { + return null; + }; + + ListViewAdapter.prototype.refresh = function () { + this.notifyDataSetChanged(); + }; + return ListViewAdapter; + })(android.widget.BaseAdapter); + + var adapter = new ListViewAdapter(); + + expect(adapter).not.toEqual(null); + }); - var MyButton8 = (function (_super) { - __extends(MyButton8, _super); - function MyButton8() { + it("When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work", function () { + + __log("TEST: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work"); + + var MyButton9 = (function (_super) { + __extends(MyButton9, _super); + + function MyButton9() { _super.call(this); - this.my1 = "MyName"; + + var that = __native(this); + + that.setOnClickListener(new android.view.View.OnClickListener({ + onClick : function() { + that.buttonClicked = true; + } + })); + + return that; } - - MyButton8.prototype.init = function () { - }; - MyButton8.prototype.onClick = function () { - __log("MyButton onClick called"); - }; - - MyButton8.prototype.superToString = function () { - return _super.prototype.toString.call(this); - }; - - MyButton8.prototype.echo = function (s) { - return "echo: " + this.my1; - }; - - return MyButton8; + return MyButton9; })(com.tns.tests.Button1); - - MyButton8.setMyStaticIntField(5); - var valueUsingChild = MyButton8.getMyStaticIntField(); - Assert(valueUsingChild == 5, "FAILED: When_calling_a_static_method_on_a_typescript_instance_it_should_work."); - - var valueUsingParent = com.tns.tests.Button1.getMyStaticIntField(); - Assert(valueUsingParent == 5, "FAILED: When_calling_a_static_method_on_a_typescript_instance_it_should_work."); - - com.tns.tests.Button1.setMyStaticIntField(6); - var valueUsingParent = com.tns.tests.Button1.getMyStaticIntField(); - Assert(valueUsingParent == 6, "FAILED: When_calling_a_static_method_on_a_typescript_instance_it_should_work."); - valueUsingChild = MyButton8.getMyStaticIntField(); - Assert(valueUsingChild == 6, "FAILED: When_calling_a_static_method_on_a_typescript_instance_it_should_work."); -})(); - -(function When_inherit_from_android_base_class_it_should_create_an_instance() { - /* - // From issue #137 https://github.com/telerik/Kimera/issues/137 - class ListViewAdapter extends android.widget.BaseAdapter { - private _items: Array; - - constructor(items: Array) { - super(); - - this._items = items; - } - - get items(): Array { - return this._items; - } - set items(value: Array) { - this._items = value; - } - - public getCount() { - return this._items ? this._items.length : 0; - } - - public getItem(i) { - return this._items && i < this._items.length ? this._items[i] : null; - } - - public getItemId(i) { - return long(0); - } - - public getView(i, view, viewGroup) { - return null; - } - - public refresh() { - this.notifyDataSetChanged(); - } - } - */ - var ListViewAdapter = (function (_super) { - __extends(ListViewAdapter, _super); - function ListViewAdapter(items) { - _super.call(this); - - this._items = items; - return __native(this); - } - Object.defineProperty(ListViewAdapter.prototype, "items", { - get: function () { - return this._items; - }, - set: function (value) { - this._items = value; - }, - enumerable: true, - configurable: true - }); - - ListViewAdapter.prototype.getCount = function () { - return this._items ? this._items.length : 0; - }; - - ListViewAdapter.prototype.getItem = function (i) { - return this._items && i < this._items.length ? this._items[i] : null; - }; - - ListViewAdapter.prototype.getItemId = function (i) { - return long(0); - }; - - ListViewAdapter.prototype.getView = function (i, view, viewGroup) { - return null; - }; - - ListViewAdapter.prototype.refresh = function () { - this.notifyDataSetChanged(); - }; - return ListViewAdapter; - })(android.widget.BaseAdapter); - - var adapter = new ListViewAdapter(); - - Assert(adapter != null, "FAILED: When_inherit_from_android_base_class_it_should_create_an_instance."); - -})(); - -(function When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work() { - - __log("TEST: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work"); - - var MyButton9 = (function (_super) { - __extends(MyButton9, _super); - - function MyButton9() { - _super.call(this); - - var that = __native(this); - - that.setOnClickListener(new android.view.View.OnClickListener({ - onClick : function() { - that.buttonClicked = true; - } - })); - - return that; - } - - return MyButton9; - })(com.tns.tests.Button1); - - var button = new MyButton9(); - var button1 = new MyButton9(); - button.click(null); - - Assert(button.buttonClicked === true, "FAILED: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work."); - Assert(button1.buttonClicked === undefined, "FAILED: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work."); - - button.buttonClicked = false; - button1.click(null); - - Assert(button.buttonClicked === false, "FAILED: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work."); - Assert(button1.buttonClicked === true, "FAILED: When_creating_a_typescript_instance_and_anonymous_interfaces_in_its_ctor_it_should_work."); -})(); \ No newline at end of file + var button = new MyButton9(); + var button1 = new MyButton9(); + button.click(null); + + expect(button.buttonClicked).toBe(true); + expect(button1.buttonClicked).toBe(undefined); + + button.buttonClicked = false; + button1.click(null); + + expect(button.buttonClicked).toBe(false); + expect(button1.buttonClicked).toBe(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testsMemoryManagement.js b/test-app/assets/app/tests/testsMemoryManagement.js index 14959c45e..e4fcbdcb4 100644 --- a/test-app/assets/app/tests/testsMemoryManagement.js +++ b/test-app/assets/app/tests/testsMemoryManagement.js @@ -1,23 +1,41 @@ -function TestSecondaryCallbackInvokationWithObjectParamsShouldWork() -{ - var u = new com.tns.tests.UseCallbackTest(123); +describe("Tests for memmory managment", function () { - u.setDataCallback(new com.tns.tests.UseCallbackTest.DataCallback("DataCallback_5", { - onData: function(data, delay) { - android.util.Log.i("TNS.TESTS", "data=" + data.getData()); - } - })); + var myCustomEquality = function(first, second) { + return first == second; + }; - u.setCleanCallback(new com.tns.tests.UseCallbackTest.CleanCallback("CleanCallback11", { - onClean: function(delay) { - gc(); - java.lang.System.gc(); - } - })); - - u.enqueDataCallback(0); - u.enqueDataCallback(10 * 1000); - u.enqueCleanCallback(0); -} + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); + + it("TestSecondaryCallbackInvokationWithObjectParamsShouldWork", function () { + + var u = new com.tns.tests.UseCallbackTest(123); + + u.setDataCallback(new com.tns.tests.UseCallbackTest.DataCallback("DataCallback_5", { + onData: function(data, delay) { + if("inner spec: ", function () { + android.util.Log.i("TNS.TESTS", "data=" + data.getData()); + expect(data).not.toEqual(undefined); + expect(delay).not.toEqual(undefined); + }); + } + })); + + u.setCleanCallback(new com.tns.tests.UseCallbackTest.CleanCallback("CleanCallback11", { + onClean: function(delay) { + if("inner spec: ", function () { + expect(delay).not.toEqual(undefined); + gc(); + java.lang.System.gc(); + }); + } + })); -TestSecondaryCallbackInvokationWithObjectParamsShouldWork(); + u.enqueDataCallback(0); + u.enqueDataCallback(10 * 1000); + u.enqueCleanCallback(0); + expect(true).toBe(true); + expect(true).toEqual(true); + }); +}); \ No newline at end of file diff --git a/test-app/assets/app/tests/testsWithContext.js b/test-app/assets/app/tests/testsWithContext.js index b55c4f196..78d581e40 100644 --- a/test-app/assets/app/tests/testsWithContext.js +++ b/test-app/assets/app/tests/testsWithContext.js @@ -1,113 +1,111 @@ -var Assert = function(condition, failMessage) { - if (condition == false) { - fail(failMessage); - } -} - -var TestConstructorOverrideForBuiltinType = function(context) { - - __log("TEST: TestConstructorOverrideForBuiltinType"); - - var ctorCalled = false; - var isConstructor = false; - - var MyButton = new android.widget.Button.extend({ - init : function() { - ctorCalled = true; - isConstructor = arguments[arguments.length - 1]; - } - }); - - var btn = new MyButton(context); - - Assert(ctorCalled == true, "TestConstructorOverrideForBuiltinType FAILED: constructor not called"); - Assert(isConstructor == true, "TestConstructorOverrideForBuiltinType FAILED: isConstructor should be 'true'"); -} +exports.run = function(cntxt) +{ + describe("Tests with context ", function () { + + var context = cntxt; + var myCustomEquality = function(first, second) { + return first == second; + }; + + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); + + it("TestConstructorOverrideForBuiltinType", function () { + + __log("TEST: TestConstructorOverrideForBuiltinType"); + + var ctorCalled = false; + var isConstructor = false; -var TestConstructorOverrideForBuiltinTypeWithInitMethod = function(context) { + var MyButton = new android.widget.Button.extend({ + init : function() { + ctorCalled = true; + isConstructor = arguments[arguments.length - 1]; + } + }); + + var btn = new MyButton(context); + + expect(ctorCalled).toEqual(true); + expect(isConstructor).toEqual(true); + }); + + it("TestConstructorOverrideForBuiltinTypeWithInitMethod", function () { + + __log("TEST: TestConstructorOverrideForBuiltinTypeWithInitMethod"); + + var initInvocationCount = 0; - __log("TEST: TestConstructorOverrideForBuiltinTypeWithInitMethod"); - - var initInvocationCount = 0; + var MyDatePicker = android.widget.DatePicker.extend({ + init: function() { + ++initInvocationCount; + } + }); + + var datePicker = new MyDatePicker(context); + + __log("datePicker=" + datePicker); + + var count1 = initInvocationCount; + + expect(count1).toBeGreaterThan(0); + + datePicker.init(2014, 3, 25, null); + + var count2 = initInvocationCount; + + expect(count2).toBeGreaterThan(count1); + }); + + it("TestBuiltinNestedClassCreation", function () { + + __log("TEST: TestBuiltinNestedClassCreation"); + + var loader = new android.content.Loader(context); + + var observer = new loader.ForceLoadContentObserver(); + + expect(observer).not.toEqual(null); + }); + + it("TestPublicWindowManagerImplWithoutMetadata", function () { + + __log("TEST: TestPublicWindowManagerImplWithoutMetadata"); + + var windowManagerImpl = context.getSystemService(android.content.Context.WINDOW_SERVICE); + + var display = windowManagerImpl.getDefaultDisplay(); + + //__log("display.isValid=" + display.isValid()); + + var displayInfo = display.toString(); + + expect(displayInfo.length).toBeGreaterThan(0); + }); + + it("TestUsingClassFromAndroidSupportLibrary", function () { + + __log("TEST: TestUsingClassFromAndroidSupportLibrary"); - var MyDatePicker = android.widget.DatePicker.extend({ - init: function() { - ++initInvocationCount; - } + var layout = new android.support.v4.widget.DrawerLayout(context); + + expect(layout).not.toEqual(null); + }); + + it("TestCanPassCharSequenceArray", function () { + + __log("TEST: TestCanPassCharSequenceArray"); + + var alert = new android.app.AlertDialog.Builder(context); + + var builder = alert.setItems(["One", "Two" ], new android.content.DialogInterface.OnClickListener({ + onClick: function (dialog, which) { + // + } + })); + + expect(builder).not.toEqual(null); + }); }); - - var datePicker = new MyDatePicker(context); - - __log("datePicker=" + datePicker); - - var count1 = initInvocationCount; - - Assert(count1 > 0, "TestConstructorOverrideForBuiltinTypeWithInitMethod FAILED: initInvocationCount should be > 0"); - - datePicker.init(2014, 3, 25, null); - - var count2 = initInvocationCount; - - Assert(count2 > count1, "TestConstructorOverrideForBuiltinTypeWithInitMethod FAILED: initInvocationCount should be increased"); -} - -var TestBuiltinNestedClassCreation = function(context) { - - __log("TEST: TestBuiltinNestedClassCreation"); - - var loader = new android.content.Loader(context); - - var observer = new loader.ForceLoadContentObserver(); - - Assert(observer != null, "TestBuiltinNestedClassCreation FAILED: Cannot instantiate android.content.Loader.ForceLoadContentObserver class"); -} - - -var TestPublicWindowManagerImplWithoutMetadata = function(context) { - - __log("TEST: TestPublicWindowManagerImplWithoutMetadata"); - - var windowManagerImpl = context.getSystemService(android.content.Context.WINDOW_SERVICE); - - var display = windowManagerImpl.getDefaultDisplay(); - - //__log("display.isValid=" + display.isValid()); - - var displayInfo = display.toString(); - - Assert(displayInfo.length > 0, "TestPublicWindowManagerImplWithoutMetadata FAILED: Cannot obtain display info string from WindowManagerImpl instance"); -} - -var TestUsingClassFromAndroidSupportLibrary = function(context) { - - __log("TEST: TestUsingClassFromAndroidSupportLibrary"); - - var layout = new android.support.v4.widget.DrawerLayout(context); - - Assert(layout != null, "TestUsingClassFromAndroidSupportLibrary FAILED: Cannot create an instance of class from Android Support Library"); -} - -var TestCanPassCharSequenceArray = function(context) { - - __log("TEST: TestCanPassCharSequenceArray"); - - var alert = new android.app.AlertDialog.Builder(context); - - var builder = alert.setItems(["One", "Two" ], new android.content.DialogInterface.OnClickListener({ - onClick: function (dialog, which) { - // - } - })); - - Assert(builder != null, "TestCanPassCharSequenceArray: builder should be != null"); -} - -exports.run = function(context) -{ - TestConstructorOverrideForBuiltinType(context); - TestConstructorOverrideForBuiltinTypeWithInitMethod(context); - TestBuiltinNestedClassCreation(context); - TestPublicWindowManagerImplWithoutMetadata(context); - TestUsingClassFromAndroidSupportLibrary(context); - TestCanPassCharSequenceArray(context); -} \ No newline at end of file +}; \ No newline at end of file From 307021046a77f39c7152aadbba738eab0a44b3bc Mon Sep 17 00:00:00 2001 From: blagoev Date: Thu, 30 Apr 2015 11:28:08 +0300 Subject: [PATCH 08/46] fixed Do not extract assests if app was not updated --- src/src/com/tns/internal/DefaultExtractPolicy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/src/com/tns/internal/DefaultExtractPolicy.java b/src/src/com/tns/internal/DefaultExtractPolicy.java index 97f9a9559..a67b600cf 100644 --- a/src/src/com/tns/internal/DefaultExtractPolicy.java +++ b/src/src/com/tns/internal/DefaultExtractPolicy.java @@ -28,7 +28,7 @@ public boolean shouldExtract(android.content.Context context) { String assetsThumbFilePath = context.getFilesDir().getPath() + File.separatorChar + ASSETS_THUMB_FILENAME; String oldAssetsThumb = getCachedAssetsThumb(assetsThumbFilePath); - if (oldAssetsThumb == null || !assetsThumb.equals(assetsThumbFilePath)) + if (oldAssetsThumb == null || !assetsThumb.equals(oldAssetsThumb)) { saveNewAssetsThumb(assetsThumb, assetsThumbFilePath); return true; From b245ca851c6d22c501594009b77aaa87240be654 Mon Sep 17 00:00:00 2001 From: blagoev Date: Thu, 30 Apr 2015 11:49:59 +0300 Subject: [PATCH 09/46] little change on appRoot path generation --- src/src/com/tns/AssetExtractor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/src/com/tns/AssetExtractor.java b/src/src/com/tns/AssetExtractor.java index b68e089b1..ff006228b 100644 --- a/src/src/com/tns/AssetExtractor.java +++ b/src/src/com/tns/AssetExtractor.java @@ -32,7 +32,7 @@ public static void extractAssets(Context context, ExtractPolicy extractPolicy) } else if (extractPolicy.shouldExtract(context)) { - String appRoot = context.getFilesDir().getPath() + "/"; + String appRoot = context.getFilesDir().getPath() + File.separator; String apkPath = context.getPackageCodePath(); boolean forceOverwrite = extractPolicy.forceOverwrite(); From 26f6d990e5c4efc723fe136876c7ef1561dab886 Mon Sep 17 00:00:00 2001 From: blagoev Date: Thu, 30 Apr 2015 11:51:11 +0300 Subject: [PATCH 10/46] do not wait for the debugger if none is coming --- src/src/com/tns/JsDebugger.java | 52 ++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/src/src/com/tns/JsDebugger.java b/src/src/com/tns/JsDebugger.java index d856f9b3a..23f2609d1 100644 --- a/src/src/com/tns/JsDebugger.java +++ b/src/src/com/tns/JsDebugger.java @@ -47,9 +47,11 @@ public class JsDebugger private static final int INVALID_PORT = -1; private static final String portEnvInputFile = "envDebug.in"; - + private static final String portEnvOutputFile = "envDebug.out"; + private static final String DEBUG_BRAKE_FILENAME = "debugbrake"; + private static int currentPort = INVALID_PORT; private static LinkedBlockingQueue dbgMessages = new LinkedBlockingQueue(); @@ -343,14 +345,17 @@ int getDebuggerPortFromEnvironment() } w = null; } - - try - { - Thread.sleep(3 * 1000); - } - catch (InterruptedException e1) + + if (shouldDebugBrake(context)) { - e1.printStackTrace(); + try + { + Thread.sleep(3 * 1000); + } + catch (InterruptedException e1) + { + e1.printStackTrace(); + } } File envInFile = new File(baseDir, portEnvInputFile); @@ -514,6 +519,7 @@ public void onReceive(Context context, Intent intent) }, new IntentFilter(getDebuggerPortAction)); } + public static boolean shouldEnableDebugging(Context context) { int flags; @@ -526,7 +532,37 @@ public static boolean shouldEnableDebugging(Context context) flags = 0; e.printStackTrace(); } + boolean shouldEnableDebugging = ((flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0); return shouldEnableDebugging; } + + + public static Boolean shouldDebugBrakeFlag = null; + + public static boolean shouldDebugBrake(Context context) + { + if (shouldDebugBrakeFlag != null) + { + return shouldDebugBrakeFlag; + } + + if (!shouldEnableDebugging(context)) + { + shouldDebugBrakeFlag = false; + return false; + } + + String appRoot = context.getFilesDir().getPath() + File.separator; + File debugBrakeFile = new File(appRoot, DEBUG_BRAKE_FILENAME); + if (debugBrakeFile.exists()) + { + debugBrakeFile.delete(); + shouldDebugBrakeFlag = true; + return true; + } + + shouldDebugBrakeFlag = false; + return false; + } } From 860a8da4587bcda4bc3a1173c6a2bc568c402afd Mon Sep 17 00:00:00 2001 From: blagoev Date: Thu, 30 Apr 2015 12:32:20 +0300 Subject: [PATCH 11/46] fix typo --- src/src/com/tns/JsDebugger.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/src/com/tns/JsDebugger.java b/src/src/com/tns/JsDebugger.java index 23f2609d1..c2c310041 100644 --- a/src/src/com/tns/JsDebugger.java +++ b/src/src/com/tns/JsDebugger.java @@ -50,7 +50,7 @@ public class JsDebugger private static final String portEnvOutputFile = "envDebug.out"; - private static final String DEBUG_BRAKE_FILENAME = "debugbrake"; + private static final String DEBUG_BRAKE_FILENAME = "debugbreak"; private static int currentPort = INVALID_PORT; From da489fbfd9c40441352de82327d8d7f889c7695f Mon Sep 17 00:00:00 2001 From: plamen5kov Date: Mon, 4 May 2015 14:47:12 +0300 Subject: [PATCH 12/46] added grunt automatization added needed node module --- gruntfile.js | 22 ++++++++- test-app/ant.properties | 4 ++ test-app/custom_sign.keystore | Bin 0 -> 2245 bytes test-app/gruntfile.js | 82 ++++++++++++++++++++++++++++++++++ test-app/package.json | 16 +++++++ 5 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 test-app/ant.properties create mode 100644 test-app/custom_sign.keystore create mode 100644 test-app/gruntfile.js create mode 100644 test-app/package.json diff --git a/gruntfile.js b/gruntfile.js index 20896e8b6..5be46baf8 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -195,7 +195,19 @@ module.exports = function(grunt) { }, runMetadataGenerator: { cmd: "./node_modules/.bin/generate-metadata " + localCfg.libsDir + " ./dist/framework/assets/metadata" - } + }, + runTests: { + cmd: "npm install && grunt --verbose", + cwd: "./test-app" + }, + antCleanBindingGenerator: { + cmd: "ant clean", + cwd: "./binding-generator/Generator/" + }, + antCleanRunTime: { + cmd: "ant clean", + cwd: "./src/" + }, } }); @@ -206,7 +218,7 @@ module.exports = function(grunt) { grunt.loadNpmTasks("grunt-replace"); grunt.registerTask("generateRuntime", [ - "exec:generateRuntime" + "exec:generateRuntime" ]); grunt.registerTask("generateMetadata", [ @@ -230,6 +242,12 @@ module.exports = function(grunt) { return []; } })()); + + grunt.registerTask("test", [ + "exec:antCleanBindingGenerator", + "exec:antCleanRunTime", + "exec:runTests" + ]); grunt.registerTask("default", [ "clean:build", diff --git a/test-app/ant.properties b/test-app/ant.properties new file mode 100644 index 000000000..e009510c5 --- /dev/null +++ b/test-app/ant.properties @@ -0,0 +1,4 @@ +key.store.password=aaaaaa +key.alias.password=aaaaaa +key.store=./custom_sign.keystore +key.alias=aaaa-alias \ No newline at end of file diff --git a/test-app/custom_sign.keystore b/test-app/custom_sign.keystore new file mode 100644 index 0000000000000000000000000000000000000000..30c13d52676217890c18c35b40da3298bf36eeb6 GIT binary patch literal 2245 zcmchYc{J1w7sux}hOx}p%M#J*kuVrEc(R0$ANk&VxW8@SX#IyP(IO zsd^B6JOcNSb!FDL7zo4*ASjR>gfO3=3LgLgPJqP#fENUzKz$boG9Y0B5wdWklXNZ8brt(({^0tacrhV1KN(1C9t8orY6r)5)2rZFoha-)RB zb7%d+-*-~;#Z&nbm_;x$O>^`tpc@P07O^>=iBZLq6^Z zy3FfQeAKO>jo~eGYfB2%sF@Dyu~TvSc1HuJ9}l~tgp8Lbty^I@TGZ+T_Gt{fR@bQoX0_4aKbZ4~yQazVCLo)`MlPi> zzRnbywis-h{3>w;|gMGo< zk>D29vy!9FA-{E4+!uM&o~mv9^m8Oe;9Oy7&5)(?)iKUWP+V*B0zwOr ze;E5fO&zwgsxoA`fMdiF1N78QGB5*IAl@~W7xf(fa%YY5x!{7MxwlgKNs5_O!tkNu z_DR4i@t)IGYwb2<HkP*dhos+YBVWv_|h`OTh4iSslFC+$iy52}v=wAZ~p+J=7#plCNNI&5rgJyaZ7>{5n}M4`|6 zt;dbGm*c$els~uAJqA}VeYJTy+OLGx&as26@iqjccaYt{d0=z=V4H*9oHt)DWTwdd$@AdKTVQKtw{M@FU7FWg= z&H2F5mI~Lqbdy{wjw0truFblMKC;>597E4Aw$u>3vcm zT2?$=54sU6OUFXd5n%6g;rs6oCV8o&6+ZourCYGo<8wwpW?4+I!$nlmUsG&10r+7Y z@3SLcZIzU)(pXj_t|#wNoLPfSZCFaeUW($^GV`!tQ;V5YM#|#(+30+Sse6&C!RO9? zZmoISGJmm0Pbo;Yex>=W>_d#ZRH`Mes&cg??c#-f$9Y+tk%UDtj#s~L=d>`x3Ei3b z-Jh0_NxM7$P6G!NPFf-RC#c`IiE8hH0=FNi-;g?Q2OVlJf&YiHSPSHlpZfJD~?HlSvz4P6j1z zuDY#CtT}b8t!nE6Y?;yzn}}-86k8wm@8W@$WK4jn!{oMdKGVhB!rT3Pn}d&=Zz%?h zfsT!Ylm>U5bq_?FJ@D*7a59D`Qc(d-Q`4@u8$I0Gg18mj4)gVf!1BM3Bku(@Z3GGg z;t57jcy1ynV7F`@FaQQaT&bLo2sod>iCBx+bvOVB@q!R|4bi=e$%BFLNkB0~Jkc+R z_&>t`3xWPZ1b-ny|0g1Q#r87uNbva+Jg$2Z5eKE<8rle?22w*CiPF%)O2Ltuh*MgK z|Azl=GZf(PKgHO46+9F`1caaff?x^&fF75XSwxid8j*4235b0R^cA z#_Ly~X;XpHBH(2rj5gplDi(AtG3P{2G^V(aDU~wN?Sr7t_mxaPja2&5?uQbE;NbM zA-^|8d11(Yh@^;~!C}?{RYx)EYJF3l z=HSsO!PI|>xVKSzA_5@U1^nbF`57+e-Vvxhe0VX}OjUpDvV{9|C_o!)`x+pqOcN!( zvs1L{6+FTl%dHyP&74cIg;w+$e#Gg(`%OoScI<_ZHoNdW+Qp$}PHWLN&q|ATe}6er zC0Ev~zZD6bR;3EaC*BZ|7G{y#N!LX;1OhC=lcS*sZRFU7hQ+Mo?(AjK!L^_~P{^H# zsYP-crs6l__KYP~i$bLH3%-#NnP|SA_DnysHs|(jwKQ_DDL?=G%bG0c%!br82BgzD zsibQtn0xt{ Date: Thu, 7 May 2015 10:41:21 +0300 Subject: [PATCH 13/46] added timeout to adb install command --- test-app/gruntfile.js | 14 +++++++------- test-app/tasks/deploy-apk.js | 31 +++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 test-app/tasks/deploy-apk.js diff --git a/test-app/gruntfile.js b/test-app/gruntfile.js index 0e32373e2..3053af3e3 100644 --- a/test-app/gruntfile.js +++ b/test-app/gruntfile.js @@ -21,7 +21,7 @@ module.exports = function(grunt) { grunt.initConfig({ wait: { - forDelay: { + timeToRunTests: { options: { delay: 20000 } @@ -40,15 +40,15 @@ module.exports = function(grunt) { } }, exec: { - createTestAppBuildFile: { + createBuildXml: { cmd: "android update project --path ." }, runAntCleanRelease: { cmd: "ant release" }, installApkOnDevice: { - cmd: "adb install -r NativeScriptActivity-release.apk", - cwd: "./bin" + cmd: "node ./tasks/deploy-apk.js ./bin/NativeScriptActivity-release.apk", + cwd: "." }, startInstalledApk: { cmd: "adb shell am start -n com.tns.android_runtime_testapp/com.tns.NativeScriptActivity -a android.intent.action.MAIN -c android.intent.category.LAUNCHER", @@ -71,11 +71,11 @@ module.exports = function(grunt) { grunt.registerTask("default", [ "clean:build", "mkdir:build", - "exec:createTestAppBuildFile", - "exec:runAntCleanRelease", + "exec:createBuildXml", + "exec:runAntCleanRelease", "exec:installApkOnDevice", "exec:startInstalledApk", - "wait:forDelay", + "wait:timeToRunTests", "exec:copyResultToDist" ]); diff --git a/test-app/tasks/deploy-apk.js b/test-app/tasks/deploy-apk.js new file mode 100644 index 000000000..776cd8646 --- /dev/null +++ b/test-app/tasks/deploy-apk.js @@ -0,0 +1,31 @@ +// This node app deploys apk file on device +// Parameters: +// - Path to APK to deploy + +if (process.argv.length < 2) { + console.error('Expect path to apk file to install'); + process.exit(1); +} + +var apk = process.argv[2]; + +var proc = require('child_process'); + +var deployTimeout = 180000; // 3 minutes to deploy and launch. + +var cmd = 'adb install -r ' + apk; + +function timeoutFunction(msg) { + console.error(msg); + testrun.kill(); + process.exit(1); +}; + +var timeout = setTimeout(function() { timeoutFunction("ERROR: Deploy timeout!"); }, deployTimeout); + +console.log("Executing adb install: " + cmd); +var testrun = proc.exec(cmd, function(error, stdout, stderr) { + // If the process exits prematurely kill the timer anyway... + clearTimeout(timeout); +}); +testrun.stderr.pipe(process.stderr, { end: false }); \ No newline at end of file From 39941adabf57a73fe82dde0232d3245193c1022f Mon Sep 17 00:00:00 2001 From: plamen5kov Date: Thu, 7 May 2015 16:29:07 +0300 Subject: [PATCH 14/46] fix gruntfile to work with references runtime and binding generator changed manifest so it runs on newer devices --- test-app/AndroidManifest.xml | 2 +- test-app/custom_rules.xml | 87 ++++++++++++++++++++++++++++++++++++ test-app/gruntfile.js | 41 ++++++++++------- 3 files changed, 114 insertions(+), 16 deletions(-) create mode 100644 test-app/custom_rules.xml diff --git a/test-app/AndroidManifest.xml b/test-app/AndroidManifest.xml index 6f8a1f6be..714a14ed6 100644 --- a/test-app/AndroidManifest.xml +++ b/test-app/AndroidManifest.xml @@ -5,7 +5,7 @@ + android:targetSdkVersion="22" /> diff --git a/test-app/custom_rules.xml b/test-app/custom_rules.xml new file mode 100644 index 000000000..47477411c --- /dev/null +++ b/test-app/custom_rules.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test-app/gruntfile.js b/test-app/gruntfile.js index 3053af3e3..09807eb45 100644 --- a/test-app/gruntfile.js +++ b/test-app/gruntfile.js @@ -4,33 +4,26 @@ module.exports = function(grunt) { var pathModule = require("path"); - var args = { - buildVersion: grunt.option("build-version") || "0.0.1", - commitVersion: grunt.option("commit-version") || process.env.GIT_COMMIT || "" - }; - var localCfg = { rootDir: ".", outDir: "./dist", - commitVersion: args.commitVersion, }; - localCfg.jniDir = pathModule.join(localCfg.rootDir, "/jni"), - localCfg.runtimeVersionHFile = pathModule.join(localCfg.rootDir, "/jni/Version.h"), - localCfg.applicationMkFile = pathModule.join(localCfg.rootDir, "/jni/Application.mk"), - grunt.initConfig({ wait: { timeToRunTests: { options: { - delay: 20000 + delay: 180000 } } }, clean: { build: { src: [localCfg.outDir] - } + }, + metadata: { + src: "./assets/metadata/*" + } }, mkdir: { build: { @@ -43,7 +36,7 @@ module.exports = function(grunt) { createBuildXml: { cmd: "android update project --path ." }, - runAntCleanRelease: { + runAntRelease: { cmd: "ant release" }, installApkOnDevice: { @@ -58,7 +51,20 @@ module.exports = function(grunt) { cmd: "adb pull /sdcard/android_unit_test_results.xml", cwd: localCfg.outDir } - } + }, + copy: { + //these .so files need to be in the src/libs folder because the test-app refers them + //later if we want to separate the tests from the build, these files can be taken from k:distributions ... stable/android-runtime/ ... + generatedLibraries: { + expand: true, + cwd: "../src/dist/libs/", + src: [ + "**/armeabi-v7a/*", + "**/x86/*" + ], + dest: "../src/libs/" + } + } }); grunt.loadNpmTasks("grunt-contrib-clean"); @@ -71,8 +77,13 @@ module.exports = function(grunt) { grunt.registerTask("default", [ "clean:build", "mkdir:build", + "copy:generatedLibraries", "exec:createBuildXml", - "exec:runAntCleanRelease", + + //currently runAntRelease step includes an ant custom build step which generates latest greatest metadata + //currently we generate metadata using the target sdk declared in the AndroidManifest file and if the sdk is missing the build will fail + "exec:runAntRelease", + "exec:installApkOnDevice", "exec:startInstalledApk", "wait:timeToRunTests", From 105c54b994671517808cb4b8762db00fce74e235 Mon Sep 17 00:00:00 2001 From: plamen5kov Date: Wed, 13 May 2015 15:24:39 +0300 Subject: [PATCH 15/46] fixed hardcoded prefix value --- src/jni/MetadataNode.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/jni/MetadataNode.cpp b/src/jni/MetadataNode.cpp index 37dcdb234..6ef92ddfe 100644 --- a/src/jni/MetadataNode.cpp +++ b/src/jni/MetadataNode.cpp @@ -58,10 +58,10 @@ MetadataNode::MetadataNode(MetadataTreeNode *treeNode) : if (!m_isArray && isInterface) { bool isPrefix; - string impTypeName = s_metadataReader.ReadInterfaceImplementationTypeName(m_treeNode, isPrefix); + TNS_PREFIX = s_metadataReader.ReadInterfaceImplementationTypeName(m_treeNode, isPrefix); m_implType = isPrefix - ? (impTypeName + m_name) - : impTypeName; + ? (TNS_PREFIX + m_name) + : TNS_PREFIX; } } @@ -1262,7 +1262,7 @@ void MetadataNode::CreateTopLevelNamespaces(const Handle& global) } - +string MetadataNode::TNS_PREFIX; std::map MetadataNode::s_name2NodeCache; std::map MetadataNode::s_name2TreeNodeCache; std::map MetadataNode::s_treeNode2NodeCache; @@ -1276,7 +1276,6 @@ RegisterInstanceCallback MetadataNode::s_registerInstance = nullptr; GetTypeMetadataCallback MetadataNode::s_getTypeMetadata = nullptr; FindClassCallback MetadataNode::s_findClass = nullptr; GetArrayLengthCallback MetadataNode::s_getArrayLength = nullptr; -string MetadataNode::TNS_PREFIX = "com/tns/gen/"; MetadataReader MetadataNode::s_metadataReader; ObjectManager* MetadataNode::s_objectManager = nullptr; From eed211f654c8c0a17de0dd75ff65e9e19b926bff Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Thu, 14 May 2015 17:52:29 +0300 Subject: [PATCH 16/46] fix compiler warnings --- src/jni/ExceptionUtil.cpp | 2 +- src/jni/ExceptionUtil.h | 2 +- src/jni/NativeScriptRuntime.cpp | 4 ++-- src/jni/com_tns_Platform.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/jni/ExceptionUtil.cpp b/src/jni/ExceptionUtil.cpp index b73a27282..fb9f863ff 100644 --- a/src/jni/ExceptionUtil.cpp +++ b/src/jni/ExceptionUtil.cpp @@ -241,7 +241,7 @@ string ExceptionUtil::GetErrorStackTrace(const Handle& stackTrace) return ss.str(); } -bool ExceptionUtil::ThrowExceptionToJava(TryCatch& tc, const string& prependMessage) +void ExceptionUtil::ThrowExceptionToJava(TryCatch& tc, const string& prependMessage) { Isolate *isolate = Isolate::GetCurrent(); auto ex = tc.Exception(); diff --git a/src/jni/ExceptionUtil.h b/src/jni/ExceptionUtil.h index 4d05c5a12..15c06c28e 100644 --- a/src/jni/ExceptionUtil.h +++ b/src/jni/ExceptionUtil.h @@ -16,7 +16,7 @@ namespace tns bool CheckForJavaException(JEnv& env); - bool ThrowExceptionToJava(v8::TryCatch& tc, const std::string& prependMessage = ""); + void ThrowExceptionToJava(v8::TryCatch& tc, const std::string& prependMessage = ""); void ThrowExceptionToJs(const std::string& exceptionMessage); diff --git a/src/jni/NativeScriptRuntime.cpp b/src/jni/NativeScriptRuntime.cpp index f66da4548..7ea3f95a8 100644 --- a/src/jni/NativeScriptRuntime.cpp +++ b/src/jni/NativeScriptRuntime.cpp @@ -671,7 +671,7 @@ void NativeScriptRuntime::LogMethodCallback(const v8::FunctionCallbackInfoIsString(), "Log should be called with string parameter"); String::Utf8Value message(args[0]->ToString()); - DEBUG_WRITE(*message); + DEBUG_WRITE("%s", *message); } void NativeScriptRuntime::DumpReferenceTablesMethodCallback(const v8::FunctionCallbackInfo& args) @@ -925,7 +925,7 @@ void NativeScriptRuntime::BuildMetadata(JEnv& env, jstring filesPath) long millis1 = (time1.tv_sec * 1000) + (time1.tv_usec / 1000); long millis2 = (time2.tv_sec * 1000) + (time2.tv_usec / 1000); - __android_log_print(ANDROID_LOG_DEBUG, "TNS.Native", "time=%d", (millis2 - millis1)); + __android_log_print(ANDROID_LOG_DEBUG, "TNS.Native", "time=%ld", (millis2 - millis1)); MetadataNode::BuildMetadata(lenNodes, reinterpret_cast(nodes), lenNames, reinterpret_cast(names), lenValues, reinterpret_cast(values)); diff --git a/src/jni/com_tns_Platform.cpp b/src/jni/com_tns_Platform.cpp index 874f375fa..71cb20134 100644 --- a/src/jni/com_tns_Platform.cpp +++ b/src/jni/com_tns_Platform.cpp @@ -348,7 +348,7 @@ extern "C" jobject Java_com_tns_Platform_callJSMethodNative(JNIEnv *_env, jobjec string exceptionMessage = ss.str(); if (ExceptionUtil::GetInstance()->HandleTryCatch(tc, exceptionMessage)) { - DEBUG_WRITE(exceptionMessage.c_str()); + DEBUG_WRITE("%s", exceptionMessage.c_str()); } jobject javaObject = ConvertJsValueToJavaObject(env, jsResult); From 87d50a154310a052df382157eb7bf7ce52560950 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Fri, 15 May 2015 12:20:18 +0300 Subject: [PATCH 17/46] fix issue #64 --- src/jni/ArgConverter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jni/ArgConverter.cpp b/src/jni/ArgConverter.cpp index 65c36b64e..18a0d8edf 100644 --- a/src/jni/ArgConverter.cpp +++ b/src/jni/ArgConverter.cpp @@ -94,7 +94,7 @@ jchar ArgConverter::ObjectToChar(jobject object) JniLocalRef argClass(env.GetObjectClass(object)); //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "characterValue", "()C"); + jmethodID methodID = env.GetMethodID(argClass, "charValue", "()C"); return env.CallCharMethod(object, methodID); } From bdc0c6af37ff31a93e3d99db97800663193a9f03 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Mon, 18 May 2015 14:36:35 +0300 Subject: [PATCH 18/46] add unit test for issue #64 --- test-app/assets/app/bootstrap.js | 22 ++++++++++++++ test-app/assets/app/mainpage.js | 2 ++ .../app/tests/testPrimitiveTypeConversion.js | 27 ++++++++++++++++++ test-app/assets/metadata/treeNodeStream.dat | Bin 48492 -> 88800 bytes .../assets/metadata/treeStringsStream.dat | Bin 442736 -> 564801 bytes test-app/assets/metadata/treeValueStream.dat | Bin 480783 -> 703229 bytes .../src/com/tns/tests/CharConversionTest.java | 12 ++++++++ 7 files changed, 63 insertions(+) create mode 100644 test-app/assets/app/tests/testPrimitiveTypeConversion.js create mode 100644 test-app/src/com/tns/tests/CharConversionTest.java diff --git a/test-app/assets/app/bootstrap.js b/test-app/assets/app/bootstrap.js index 6d66c0b49..fa1d03b7f 100644 --- a/test-app/assets/app/bootstrap.js +++ b/test-app/assets/app/bootstrap.js @@ -1,3 +1,25 @@ +// +// +////var CrasherLogger = com.tns.tests.CharConversionTest.Logger.extend({ +//// print: function(value) { +//// __log('type=' + (typeof value) + ' value=' + value); +//// } +////}); +// +//var crasherLogger = new com.tns.tests.CharConversionTest.Logger({ +// print: function(value) { +// __log('type=' + (typeof value) + ' value=' + value); +// } +//}); +// +// +////com.tns.tests.CharConversionTest.crash(new CrasherLogger()); +//com.tns.tests.CharConversionTest.printWithChar(crasherLogger, 'z'); +// +// +//__exit("SUCCESS"); + + global.__onUncaughtError = function(error){ if(error.nativeException){ __log("err.message: " + error.message); diff --git a/test-app/assets/app/mainpage.js b/test-app/assets/app/mainpage.js index b959a84c6..d93799fae 100644 --- a/test-app/assets/app/mainpage.js +++ b/test-app/assets/app/mainpage.js @@ -3,6 +3,7 @@ __disableVerboseLogging(); require("./tests/testWeakRef"); require("./tests/tests"); require("./tests/testsForRuntimeBindingGenerator"); +require("./tests/testPrimitiveTypeConversion"); require("./tests/numericConversionTests"); require("./tests/inheritanceChainResolutionTest"); require("./tests/exceptionHandlingTests"); @@ -16,6 +17,7 @@ require("./tests/finalFieldsSetTests"); require("./tests/extendedClassesTests"); require("./tests/extendClassNameTests"); + var MainActivity = (function (_super) { __extends(MainActivity, _super); function MainActivity() { diff --git a/test-app/assets/app/tests/testPrimitiveTypeConversion.js b/test-app/assets/app/tests/testPrimitiveTypeConversion.js new file mode 100644 index 000000000..daf346d4c --- /dev/null +++ b/test-app/assets/app/tests/testPrimitiveTypeConversion.js @@ -0,0 +1,27 @@ +describe("Tests primitive type conversion", function () { + + var myCustomEquality = function(first, second) { + return first == second; + }; + + beforeEach(function() { + jasmine.addCustomEqualityTester(myCustomEquality); + }); + + it("convert_char", function () { + + var logged = null; + + var logger = new com.tns.tests.CharConversionTest.Logger({ + print: function(value) { + logged = value; + } + }); + + com.tns.tests.CharConversionTest.printWithChar(logger, 'x'); + + expect(logged).toBe('a'); + }); + + +}); \ No newline at end of file diff --git a/test-app/assets/metadata/treeNodeStream.dat b/test-app/assets/metadata/treeNodeStream.dat index 059d8427055ea9705bd1855a29342e66287f6574..a28cc08444967e287756f892078bb636e50fcca6 100644 GIT binary patch literal 88800 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 F{{WqUB_#j= literal 48492 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 delta 22513 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 qf+r+7;-2Z5@83vh%Y=%tE~I#Uj7%_&&6K= diff --git a/test-app/assets/metadata/treeValueStream.dat b/test-app/assets/metadata/treeValueStream.dat index d957083e8e6ff9cc5a8183f21c8da77d3079f854..3b5a5c2d90342548ce9f8679fdca00e34e7d48da 100644 GIT binary patch literal 703229 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

  • -qA*hA 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

    Ucu8ox@e+39C86!cOG4W> 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�bEO9Cx9CW>;`Zn0nG+gSNd)2#${G1z9*PW0A($g23yC2&5xK3 zbE1z8kcr4&?1QQYAsrYet!Eyi@WJMh3$JL!qtjR>AbV?6bW^4U&MPu6aW*jLBPRNq zn=&I6+^E1_j&)P!PW73kV4i}73Xm5hgr8@gA4;u)cQds%+zh!oc}r#|tYbiMGWA3R@~QZ@6a6Fk?9T&cV@ghB7)a_nLIWSiJ;>k=qM5N=%}Dg!*1qy z5o>DZ904!=ZIps30;>H76uctfSpO3N$NAM7)Mz5-^LW3NfYxRY0aG)si`^*aSa2p1 z-@Ms;LS{ndc%dhUD_p=TzrgC16_Skk?UcWJAA;53aeL zWDCQI?PO~uLAa_`K_3ODDY#0(Mj7$ULAA$yO1Lu{#M}pO}vEN6n{%i~;FnmMf0`%$!`VobhZY0?x|( zr4>cgcP|MOvF%+nm-{H_qu>|?Co6by2HIq@7PnvaTn*|v(+1g_=5hI>zLUB_XzCr- zV@ZALM!I)qd7H%TA577N9NYQ|^^@k)Lfr$#2E2~3TS|UL8N02tE~(cw=r7a!wE6Tf zO+ebq@5Z1 zwzD?Mue&w5fVlTl+(x0U_<9erFn8n09F=5&f~5*vLcgfbdIbd}{QxB$QK{p$)xB1? z1u%J#m`DfJ<7_@>(LZlECh;4ua7D%kIS-hwhGbEJZQYtTvsX1YzQxq@~87>>@#9ID_P0NfZj zhtzB!Fh3lVY{>F_k-YWAvixyFj5F+f?$de92+ON zMhK>ZV1^J}5GS}n2p#~zLqc#|oZwa=m;iz~LU3W6;7%d92Lw+G!9{U`i9#?11TP4| z#c_gZLhv96ZkLhi@o@sX#pz)Xj2D8Tae_yM!y_P=ECj>i1oma_ED$Ueg5gnuU5&dg zqwZTW>_M|COq|}8Jj}=Gv^^%HE2Gx}w8+m6nJ}HOHScq#cAX*W5?QMmw-c{pRKoG8 zaCr?}z7g0TH*oN^8~D~L2#QSP4vsN$^#*NxWr+K10Fx%so*8z4gKy`c=_yTMBUg27 zB_zZ>N#e>EfEd#80a`WLO-MSy5xLKUA+e*sZRDPh)^N@Z8M>99<41rqonRUwU{G)# z0qQAU%dDmR$<%s&=52~Cj+FT=ba-Zc=%_S_`&^vYGR;Cq|M>MGZ-m!}B+VH+JJucI z7mHjShV&0U3*#ir_%NhX{Qi+P;bkPPO_$KoKj06m(ZQ=~|4PYjU@n@;o#FiCw=b|J zD#NXjG|}IVa^Rc(LI2>jOb>Cqh7a4kmg%dGN@&VW+5uz3xL%YF*;bYR$!|7+Qz<6d z)dKl6>cV8nWh}(%q$`)Y*DZbXAmT1eny)YA%M=slY>{GqrqayMj8wcC}Q znS0cM5A%iNzxk0K_GO~5FTR>r`-{n`3qQYv4y=RB2nk`ZB@rj$?LbbAXYj+-y6{3h zdOdT90-cWg#tqNUrg$C>qEVc1rKgeEyCvcZ!!^zM+f{OMk)inGif1~%F8)J>QMJ!! z+Qo0&$E^8k|0)WUOs-C*%%xG@V<=1*u1>N;wk58{P2aR^Nk0`F8#bd+XM}92%Ej19 zM104^H*bh&fmyD=2F4~`5sUfbXDhc;lN;A_Mbm+F=qBvTyZFQ(&2Pq5dOthRxHtDdeh zK0>^tU$8CVLNxmGGf#^@If_>ywr>`q`nej*fL7-=nn%tT(dZi0gl^I!9t$%Il;L}s zg_&jQpb&dg^1{sOWtFXm&f)6nIT1RvvQfa9gN@hKCp~&@7L|3k? zUCZF^ySS6mC1r@F!gTp9P0X@p2`O^LKPAOM*|2f&%I8T&$j%prFe12DF7crZblSpm zVWuvvxV@c=VK$31!TqeF#Zb^YGhNL5%xTtY!j)E`ZhTImN%V^bMf&f?&RIm=qEqSMu38Qp;E2 zK3mVsrD)jkQo^#RRW&v%ATAR5K67gM51HhH)^Rc%&B&2N$SLLW%EfvG*6WAN)CBe~=LIg@yZ zqyLi02*4I#1)UZ2Q80*rh;ydGl=)uoeyjFJh%a5@K1KEf@;(ZmEk9M^yz&tWpDVvh;q&E>DSV;)V}&o4Pxumfr`N$^ zG`NUF!&2sV>?daJzf|5n$qvfyOXUq8VKo8cmo&}c#IWF}Or?U(3Jz9qyaH})hrtEa zom_rg@+N|wIk$YW_#Kx#Ic%0Q=6MNDnfDa@tiXSiW2Vd&3U*h}SHWNfmngW60A(X( z?hoN}A^a?a)gf#$+eNDkVfPRo9l~=$$Qp93vTyFxpqI=%6iim|6ah@xGPpG*gdZsk z%ohq%W_1Xg%yH3Lg)p`dzgOsgPzX;5AvOEwlM`3NU>`!GqAELcs>U2o7ORY`1683_ z{j(>hxJ%fo{ymvCcTjxK{FIp_d~pF|=9J0Y9MKK47b+YgUl1aLa38fDo1Bmwhi|93 zj%+4TQ&D|DfSR2lkZOLi#dQ#s{5SdeTYrj6_CW}P%-swNw_jqzmxeMcGWIKMD>7AZ zgkvsT{jbvhq@BaHMGflA9QVYM4JUVD@GS|bD@G86uA01oqT+BK^K%iE${-g67L8! z=9Th46uw&C>Io~vYvsKa&M*I$LhNb)gr;eW0znq-WOR?t|K#$!Lh46DSgQ(qWK{nq z0(=!J^QTg-{=dMeDxPGc8WT0DHJLSPRBJN7!@&g{IWgN6k;rs|BL(0FdufkOEb6iK`AJKBZj`!R=I!*+qHPF+R#Uss*+&Hi6% zaMoqksco!7gR_oogK|)pYW~kRnRQwB`pkOG!FpKtda-Uc2n5p?qxkQ4<4AE0Ma|k$a;3r z7nC$-+^DH*3a>{4BQ4aV0m`D)EQm*ea=4!O^Ph?N37@%2+knu!B+=7|ae+9~iiW7HU)H z3Cn&#Ta(DXDvp8dz?&jCu{@HU)dw+J^B=${JbIf3Sgv0T3^~m ze91bSoi0y{BD1{+(25tW;J=Y%Clx9=PmG7LQ^ST)Sj-VJxr@Rm_x3Zs8bS*b_9LXe zX^{1k4YKg~5_enjm9J7N&+W+_PLN%kn?rnPaPYK(QJt)h%aZ`GX$)Jk9}6UnRr>>} zF!1x5AQky}O|!U9S|*vja{~iM-#bUn7bF>J7ZFj{Apo0Z{beNb>w3 zkdm=qU8jl%p^dkWEQxiYii2kz$GzQly9?1r#fuSm9VX zsPesA%}W4A0KLIWnC}`KdM{t{ObhkL5+r;7m-wa3;GowO?5(7i)dK~b5Zo#NuK<+% zY6brX5=+u%mrqW>w?rH0ij&i)c^vJJZ;dDY3Lw!w*5)AO5RuZ! zFCxb>Q*c7i60Woy0ik?TnZ^FyDnupNwb;RG|B)ZLIQj*4w|`}}GJD-!uvBR;cw@iB zmxNV(d~p~2K$U=DY#da}K!gAiB{yMFWI(+}FjMOL-OI6vEg?`1sCBkA*%LKikw_~^ zC~7U-TQ_TO+h-lWXP-ssQ{9_SK(3*2#Tw5FzHw7;1t4)_qES@H)6`T@COl*zBG?y_ zXkdPlM7tJa3i&P%Mm{S4@<)!4NURmAuEi4r-dU|QK={p7x}>p zZRC#Gs}V>ct{~k@-%aS}3u#A5hBhRQ2l1V)HX$RS7LTPRhe#_q(~R4En%;W@iweLXFuy2+U9v^bTSZ~P=U^)ZwQKZ)ev@Wr zBA{Biw@?PiMc**eV1gt^8;njbP=6V$c;*^-p!|2C`4Mp}GV_FFx9phouGvq-LH*LM z*^dw6X%t*sC|!&1QrIRtOJTxl$>r>A3F%rqCfzx^R2*%P&CXeFBB-?` z2eTE~yB2rOGHY?R$#xd@HfM>>=(BzXqprnX=j>{LHdz3hV8WEX$O2L>x@5PGI(Cja z4vsoPTS=IIOM7d~q565X=>zztiUx_ZC=NAG@>A6XVVs+Ut1&&((-iKf^>R-XiDODE zJo5^OpzUs1@5OX+$i_9dj(qH4EW_c&Ll0rluei2UbtnFzezUuQ7R{bnd`D`8ZO{)t zl=3bceJRwFZ00(xf`D)>pkp9-44 z%5r(j@SlSbUyuz-< ztrg;agb?;q7?@KOrp#puyJ~@}a+2mIgh4q6W~VE7M8VSvUQysG{c`v~JZv&dACz4w z4!rJzBl#+ah$Bl5sn+;LdX_UK&T9XlY-K!j<1#EZ`-1?o9h@Dg;A{n#Dj2QcE(Nm` z%v12Lf@KPjk)$bl%__EEP_A%BdS``m(!CU3oIXn7P_69L;`W}3Sp{V%);a$#`0o+z z{K;57so=D^u*&Zzqe}9}>|#E0l`;)5#--^G{U2XQ&eG5qt$%|A1;m^U68*D{C{lt$ zsbjVtLf*Bwf0X}ywkH~IMF=^J+z4(ainJ*xWTA_ZybPiV)s zBL`Vp_-7@)-*q3zb1E)oL;)_}n^0@rDp_MK7W$*zR&PQQXtH1MIRPIk{oc%3&IK?n zJrMn8WQgC>T(g8r)R-eM@nQ#YJEHg=@+UYzAldu?ki0?uw4(Esg5XU~Z$^3x0X@>) z2sAMx(gV^x(mjg%rrTwYP7hCCmOdYUBT;Hc3uWK*a2us~yns3B#|2!ReqF%O^j89o zO0O0$Cf(pIPVt!Z76OK+y9sEQ?JwZ`^aTPgOWz=1KzgbM%@;5-{RIIZJxaIYS#5b; zWRGH+13AYY*`w0rfFkxN-XqH}iPn&a&Pz)e>Wq4DJaX=lb)k6A&Q2R92^^KKLefy< zjI?>1LEm)q;DoXAbeH8`88y)E6qJoqLT=9u(xB#(y-pR3?X1-4nBw@2gD@0)L! z8}(UR(-I#|>}X*-lHfX-_aH`Z(8&%pzRTLcC#(dd%y80g0zK37 zL10{dPN%g-QY`G1+p;^wffFxbrl~`HPl~5Og8Y|>VMA6bF>ca%nZ60#NrO)N z6DzN+uCsy)$Di}1%0`ZqvaI0;&-LaoPQB=W0nh*fkFLF&;uYNVkw&uIc4GC;%yXmD_%!&sVSoO zMmMN`V78alQUvf1=9V({gm{(DOK247DD=qodud|OW6}@N2U{r_tkp_>(4iAEQaTOZ z$D}Kyv7r?>Hw+t|ZDh_-dOplTnsvH%2EMs6yo{4Uoc#i1_&nVtytU_}-?%RRjDhq~ zSUXy@ik-it@rnjg|0>R(tn-q~S;;}dEi$`OdMKLNdFlufUBe=Z6o(V{eLAPc8$dxB z(Gztk1BnaS$=3AgKF9^wwK$QW(s+h+NU9Fl`41u`Hbg<;fcT*}>s!3N4ilfX#KgxO z;FpkIzA3|{*r%9`pMn)Fu}?tFV6KswRw}HAj{SolAyJa3(m053M8lWmw_G6u6X7GA z3MYj5Eiz}l4=v!@l|;Wln&)BUk$@44bEC!YCBJf_=wlP3L5RHXkeEP#1ld8G9NLib zI`JXZ#8s%Z@M8-0&B5tyvg5A+6;UR4;C}nSbQ`>RzgRTCO_u96aXv6jB{Grx@r45> zs@6oDNr4W$f)9A^dX4Oj*>Jtx-7@1J)fpM_fcd#<_ z71~HLBoc(8PM4?R9&9dVe3)y4J1qEngQ`cikiJglS2+7ee70W({dIm#u?Fu z3qdwRi*(Q#{bK=U60aa@WEnpoJ%I0PRiv=~xa@!&Kkvz)VHp20m>4s1-C3g#t$CIa z2yMcNx2amyP9xj2VzROzqR#p>e%yx;hc;nRy7Yszk=!~Vx$yr=Hp`*zCT%nty4rTL zIkeOkw^)NZN4v+CBI9h033DXnfy!o0=x0TFEWla@*)3U@D??X68)?Nx`tLPxJ@Oi9 zb1mN+P?IdA8rYD;rWgE=rJqb!B9x$Ba$r*gvzroxo@MdfKDoUu0)MQWEXjhTz$uu0PRH&&7{ zqPmK;K2G)d|0gMIWL+_toZv-fuw=7e&@XUBc|Q4hSOKgnSN($hi|aF1w*vP}IPRH& z>BJ@zv62a2E7{$c)YYB%zfG;gajy9zt|Ha`lj#}R&!P@k8V$VcB4k9Y-)!kI0i~KW zCgNX)2PW0Wm?LIL*WUiEcEK3wuQwCzrOs}F1_(kUCg5Ej#{@7 zN#*^YijgqGKH(Oa3cA{l73lwhh>v3Nd?St5)@ofsY;L{XY-8X(cv63h$iDEy=Q>C? zRMpV_e+tOnOr$iP*`mIHgDHR_@7au_m@v*z4eC}aXo?1Ptrhe>1tveE@gJbjy-Uzw5V_$D(-&9U-g6vI@SWEKEfRni4Tb-n4qC`LDq6! zkhKgKWN#IQ3$l|G*hCj(kwih?dwwUI4BrHWX5AeZ#@10sip*VOd2y-6e@sAN-c_Hk z)W=>p5!p6K#fH5`wl>0S$MF#Jp=LN|o9rYGV;*XTg(GrMReQ*qJ?knkmpo0wW^@0O zzNx|cQsmcuXDhh~N-v+tu|CYUPgaI-7lk!`uMn~*RJ3?Ain9X9<+aIK5{#4ZC|ml0 zYhYdx-;c62zGX$wvLa|{tNfOx^j}a|0`UXLcUsbMUO+r3iO+@E$LOejRyexocZD^6 z!%3WnkF%#G|E93U-ywwE6k?~8!qbw+5X5&J5DlN9Q2+MHO9+ZUWJ%X*NMLSNn8N*@ zHqDfN9Fa0`;+-xpG$(jYi2{L?7_oet{K>I8X&pX0if`h<{m0ow*^e}8jlX;&ND*uN z(M3P2KTLnJm8O$vqEP38Tp+E)_mi+d2-*T6=n5oj-hhdqQTR05I)v5!N9r4atSvYO{0%RcnA<0jrDJnICuVlFzB>y3l?-XC9 zV3L3uf2h!454ZS0F$xwbNREai^eTIq_^eJcK>vv{{z?3>%tTw(iE1KAi}RPhy$Pk- zUnevv(_|@&oH8vGKth#$F=Ss1*|kN$Ys%}`n4}SqV)S+|LgRdfU8Pz|fC?CT=O4Nr z3(WW{`QnwOw6KMK>rK|%7ckNj9%rt!A0#lv%~;qf|9A4GS2kqDbO{ap5Vfn+Vq%Lo zN?X~*?6FCP)S-@r5+a=^bEiEc)&8q*yEKayIQR>#?w+J7^~rt2spFnT1?LIplo_GmkdH0RcbWt%mYNJwD?9kmf=OJ(lz1uggw+F1 zBPi^c+%<$pkZe-QCx>w8k%&*eHU4LMn?vMchZ_IvrIsLNUJYR{<(o3AK6eBssxM0P zQ7aA_cq%GNVr-J37WV}e)(r4LAT7C+S+~rwE2#lgYIX=0TaiiTVVWYDE?)Ubj4!fe zPG4l%=>Z5tn?)fJ2Zfa3gf!du7uoR&9#-(2f{zq@t)NCh=1CiUHwDKixI)1M1Eom)Qr%Ny~=48hx21% z?5p5R1)~&9Q-EBwkG2SJB7m#trvhsH+V%N6rCG0FwzQB{{&4!XJk{_Gzi)}ZRq)Dd@#dgk&_{`Dw+pTnaFu_s5T{J-s_rWAjYLBRjyEz2Yy7&as=Iil z#(zL*0~4vLFNVJFD#Q&-3en+&@Q)A{Ydu_$jMUC8)EB#rw07c+X$T|LH&RVw)pyU3 z2aO$U&0LmUCY97T1ec-Tveuh4ot|RrO__rmeOi*Re^? z)tAhkRHceS9yzbD%U2hW;NHsYG6gQsGk=KRZ)AZI0ULhb;Rvg;UGRbuF;`{F)yGl! zW?S)Fo!v!&3-rvs;#U*0#l~XsTa)dr;BWXIZyn4&t9$ofu8Ad7dO4S6rb$U zG+|D77rLOA9Mc=jxs=U9bMM>ggcxyucCLJ9~ zc?dV=dB@$HpTWU20f9N_ClnstZ)&fj**o=!1mVMoBmn7#et~HQ0|Kqdby6@$K^;OD zg+dqQoX|y4p^I`(=%Snxx@e~e-fa!$4_p^ z&QD@PT~4POA$6K^PL&9ESx_+kwH9Tl5Gb|A<_4)r4RR~|`N^5&z=a1mM*q0NAU8is z@`d_W`*tCstmGH<8yx(h5Vv+Nv&^t>{1zV5HpuOr%Be42GAPt$RE5W`YYD=|iW?~q z7v0K@0JQFPvr;wLhzd*zze32V%+sB$Rf!QK%v{8W5j4uZt>8-qs}$gh3T#`t z7CMv865S==B8A#Vw@6X(!HneRn}=b;7|S-!J)=PLlr;NM@taySAemNHg+Xr7F%(uJ9kFD7djIxrwUxs?em&p%O2EiJcU(ST4cU{!sBt!BGE2 zS2B3!S6p0z?LtC;U2?ew=2{S;s7iA8DtHyMC-!+>eLhg|m4Ye-WxH^>l;pf|$&9)9 zZdQ{qyTBXiF#+C#}^|)7V2LN#s|xv;_mdpUNlbh7WUu=l`VaUDxdRmIgU=3n;_e{96lPp8*5-a zidKH!0WEe83(S>)|261n0LC2)DK=I^oVsgUztg*G4fngy=7=v@;o4Q zZ}jKF+H)9u@b;!875c9&cO+{9o%|UR_Ie+LKkbUCHUxmUw1m`L5!FjhzbkCK1vm z-y=eRZxJEDcZd-9r$om=9E~-j3p2z!Pz6r|pqNwU453LGDp<}`Rk?-z@jBl5j!n|{ zn3-T~(te9MwjPJeoVER;JaH}Az2Zh?|C`uNIO5TE7q|IpJl6nPBcs+4`N7ZY(;{Vh z@5i}7xAGp(w532fp}oR_-m7Ft(v=n!-Xzt+-=*=Q^6-qkLZ)TTPqsu=g_#$ba~1)R z2Ay>}TjVTJ%qrZaH(fKupQxtNuR?=JKd_-kNoZ0Qx)(YHEv+i#08|>diF~qt# zD#OOwrM1#7tyRu;X{~a$OKX+0{Z^}77bJ%sq*d-91%nivtKez{6BRtA0Nq~WuobP{ z?YWM_bqcKt@6wzVN4k-j+PP#)B0UOa9E1IEUrO@Rq;D4V`S=``FT}NO#VuEvYMKuyb)$FeX&r<`;zXFWxS~1Ik$keWdsev0=-yDk= zyNMe7==!dEt5UECouni#1j9~+h(L^WwMm8?ur6aREqP}jRz$V`p@3nkk-w^)#L@Oi z1i54h#Nm-8MRjJByHVfll{;FxR}yAG33tvOe0e}XGj^Q){ejjfO$`bRkE2oMwy2VS z!J8P`UUY9H<5===0lUC+Nt1;ZvHg*576#MP?xAs>q5DM9<+PNCXLv+{iHWy2DZ0Q! z(P5z>lYz-TNS*Jc^UOX-v@IB89@i6zVp_Q~TzKp*sdW<u^3S_{bZ zEi1aAJYL>|UCW-~apD_r?Ugep;(>ACyLh0;7vX_~u0y*BJ8(Dl_sCU3j?FB4d-q^Z zWQFUhXL{y}%>f6q!S$8L5%L%)j}zsQhPbfFoIL&}kFDiVDGxiu#4z6Lxw&%LYY_K? zT-=X&X1`p@v=hd=$fJuq_QnHxcos^9K)>zJt{b3mc#?YdL-#r+|` z%hG`F5BsFLhf1*)iS$O6Flp?bLlWFMd*(N9|IN*(z0|Q6lDR;JpS_SwV=(^BGtKcp ziEfJr67_h3g7&Z%3cA^8x+}SA|kfV}`20evSDTtvzw9>c} zt`0xfW!7e4yBf|9^C_T*WR?5o9&}HKkV5~eGw}@D0@@P9=u0tZ($u0mXZL{;J4QPc zmTKt;+C&JlVthl;j)Mrw4~cuG&fz6}jR(d4Fw#6sq^yUqR7OgVgYfX$nh#8u+$$w3 zX^jxSuvpv_P8VpyAUhVp#tp0;$WH@(wZ%~b zJA&i+wK(!v0G;e+apaXC-|PgA7uMp)_MS5BH;dx~qQ{-V@#0z>xm!+|4x7c1SD)~K zGH@J59RIqRA1*TNf*8XKi*dQc*cCA@DJ%vr4Ekm_#JIGu7`$|bJq?I)Sz$4Fg$;8` z#28Un3|@%C`W0e~EG!1E*I~N|Vq9KW3|`jrO;^OYqOcgex1Y7#)~UE>yVbGX?~{~B;RL%3ao*@zuUUI3qKX$X0? z1g-I|*<5Kak(k%!>^R|CB$PB)z!wefb$DRxcrzYomB-i;+bq4SR=~@p&X^k$de0j0fHwPic^@tG; zOWc@6m%({>u~(t%1)h0G)+~+&=Nm-TS+#LM~s^{$$DoY90bB! zBDo7>!cF6)(~__C;UX~RZ3SGSg*0z>?8ANk8DM|wCgr$C2+suJZG~lVmc;lcV%)w- z){h9`*&rNCgtXbo-V#3!gJOQW;~RoI)98{Q?l%*&yTFcBwA4N0UU66*Y)%EG?@@yP zoiOXU!v9VTUY-L)m9cZMSK-2(%TD!(xDx+DyNk?jhFRfwZs5MH`L=NGR`I@oO7n?; zi%UNjaCh!&0d|BgDzT@^s(p7`(how_FQ^hgciZA4z~Y#gyIYm%BDfkspBq>wbiH%_ zzu9~wb^~$Tlbay10~y^1<{l`$cTVR?_^?A$p(Hx`A(Qyp9)@;M;KbY{UJ+wBA-As- z+eC24QY0b>OohZJDQ)~l;XUYENnpRAwSpZLbX3q;!Cne_DmYNVp$d*vKq@*`9Frj? z3*Jaqz9u8vc0GzVw~c@UTM@je(C%5_F*OHxzJlQj>Ti5` zZPho|q9#rw&HVN7h!S z{89*S0O2emq^YQHu7F-{EA_6!qhG+?)@F5u_Ql5oXfvL}qCX1Yfv{7*1x)v>fW`eH zL4SA;AYm^o?|PFu605D?^-#`!VdNq3r|QdZon@UEY-wh72hzYI;6!;$#{-LBY*zI( zeGh^LydTcl50*S!FYm`diALpVJkYV*rN~Y4eo=TolC$4Gd8A(6^FdjOtq^#uPnbn` zV3e{+-b;k{qdEIIl}GF0oi@usiN^DLc|7q5?LIVBa3M1_^7s=EB$)gT$$O?T9uMbC z1`o(oA&;%)u{|CS@j`n3h$T@FACEY6BB8xW``3(Q;i zcA@Ko=H>?JK9E6ygE$Kw?gKd@+}g5lg`L3=AIc6DCH~D%QgaNINn_05Kx&m~L&r=J za(=S;K}<70`LOt$QuH_g6F(#1soaYKuu)FI0s!z?ocut1<|j`)z;Z^~i2W)2TO03* zoNnO23yVbv2-h#efX|NSsHdO`bL1*NZJgiFGH{daG_1|_zAdvs!DqRjMG$;~M8GLU zD+S=Ibpi$j8x$nJ=Y$3ZjRaKtB?`&}j7@GKpnu6W0@hOj;s?Vh=(Oz9vKQ*a!`VJ? zd+<>JR3P#qoODCGrtm%TXNVH#-H;AE@jsMV#Xfk-=JRKBXG+Lw|JmF*0@nkwD3K40 z#uBh*KQC9}StZTOol>+FxI%UF&==Z;%z3%FIomDIvztzxT=Ph-$XRe#6y0bnPc3UK zNmh>L={brU5w6z=h)emwJfwYrmvF}5d3 zT#OS0lz3+eklB^X;tM%%|BBdaTbD^H3#+qg}pi$uA84>pEUnNOM~5fX++Yjo`1$71a3GGYsz zcJivByy_H&vN}97=K*W}Y2F7ye8Ju~D`W|F9%QmBHWf}LZ5izHdDuX*@oM8nte9C7 zGwEU^LRR)}@?&Iz;gJ<<6dqMkcT3#z2d1U=c~6B$RoKNHs*QHEN*jdjt1e@vm!3$p z)Q){{hy_0aK!N&02Jsmf8j;W`kOs*j+zH^E)jm17nWl_w

    6J_P!`+0d}4(2+aa} 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

    p=LP5e`Wr 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ೊ~-U8veRM&>4859~DboK&!5~vHV1tY-%umOAn z4uSHrC6XuVFR*8V%Ryf-7EA_@fTiF~@FDmP90teS7PeIbTmx<3jR zhMBX#-QXFp8hir^-5HiT4KxGSgYjSq*ai-Q@^^*xoCCUoyTNL(51c+JEY$%_0?WZ( zQ1b3D^MxP_+yRz?t-zZcmZ}A=1UG|4U%b^*KUfO3fy}94J(WOH z&>M^fv%s_9UGO8Qa8Fp_1)wXq9Xtv0!FQniyegUMhqcps!^g!NPc?ZHi8CRhsAf$zYdpzMQTg>}HC;7V{KxChJy ztH2iU1xU{fYd!;<2U>uhUg@1SH}SaSt%Cb$H21_Qt(@F-XbJ_d(Cky&9A zCxLT8OK=?+0;YrI;C=8FI1EmFC~Tq$=nL)xFN2Rk(b-|C^Fa?V9xMSH!B61yhr{B{ zK_4&~ECC;aj7P#!bwD>T7R&|jfW4snqZ9|-!ENAS@Fv&~D$NOtw*wQvGVl$k@K~7n zaxe@$0d@j!ZkYKTkPRk)m%-0Y#q(OVtA1 z!9?&Bcn|ylDn1z&ZwR`B+rT`q8Ti-+@CO zR)9Sqy(}zM6|@C?!F2FE_yGJ2%0D00b0O#f?gKA@?I86+Sn5R31at#;fCXS3_yQDt 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

    %x_YS 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

    Oy87~0_i9kRwOc1DpW(0 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 diff --git a/test-app/src/com/tns/tests/CharConversionTest.java b/test-app/src/com/tns/tests/CharConversionTest.java new file mode 100644 index 000000000..28d9fbe89 --- /dev/null +++ b/test-app/src/com/tns/tests/CharConversionTest.java @@ -0,0 +1,12 @@ +package com.tns.tests; + +public class CharConversionTest { + public static interface Logger { + public void print(Object value); + } + + public static void printWithChar(Logger logger, char value) { + assert logger != null; + logger.print(value); + } +} From b077d9935924eda0a82f6097c793382e998e58e7 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Mon, 18 May 2015 14:48:58 +0300 Subject: [PATCH 19/46] run jasmine unit tests synchronously --- .../Jasmine/jasmine-2.0.1/jasmine.js | 6 ++++- test-app/assets/app/bootstrap.js | 22 ------------------- 2 files changed, 5 insertions(+), 23 deletions(-) diff --git a/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/jasmine.js b/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/jasmine.js index b590ef6ef..63614709d 100644 --- a/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/jasmine.js +++ b/test-app/assets/app/Infrastructure/Jasmine/jasmine-2.0.1/jasmine.js @@ -484,7 +484,11 @@ getJasmineRequireObj().Env = function(j$) { return catchExceptions; }; - var maximumSpecCallbackDepth = 20; + /* + set maximumSpecCallbackDepth to a large number in order to execute tests in very large batches, + e.g. it looks like tests are executed synchronously; this guarantees that test order is preserved. + */ + var maximumSpecCallbackDepth = 20000; var currentSpecCallbackDepth = 0; function clearStack(fn) { diff --git a/test-app/assets/app/bootstrap.js b/test-app/assets/app/bootstrap.js index fa1d03b7f..6d66c0b49 100644 --- a/test-app/assets/app/bootstrap.js +++ b/test-app/assets/app/bootstrap.js @@ -1,25 +1,3 @@ -// -// -////var CrasherLogger = com.tns.tests.CharConversionTest.Logger.extend({ -//// print: function(value) { -//// __log('type=' + (typeof value) + ' value=' + value); -//// } -////}); -// -//var crasherLogger = new com.tns.tests.CharConversionTest.Logger({ -// print: function(value) { -// __log('type=' + (typeof value) + ' value=' + value); -// } -//}); -// -// -////com.tns.tests.CharConversionTest.crash(new CrasherLogger()); -//com.tns.tests.CharConversionTest.printWithChar(crasherLogger, 'z'); -// -// -//__exit("SUCCESS"); - - global.__onUncaughtError = function(error){ if(error.nativeException){ __log("err.message: " + error.message); From 8d277c8735399276a6893d05ffb865dd33e48b5e Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Mon, 18 May 2015 15:21:56 +0300 Subject: [PATCH 20/46] refactor code to use pre-initialized jmethodIDs --- src/jni/ArgConverter.cpp | 104 +++++++++++++++++++++------------------ src/jni/ArgConverter.h | 8 +++ 2 files changed, 64 insertions(+), 48 deletions(-) diff --git a/src/jni/ArgConverter.cpp b/src/jni/ArgConverter.cpp index 18a0d8edf..3dd823411 100644 --- a/src/jni/ArgConverter.cpp +++ b/src/jni/ArgConverter.cpp @@ -39,6 +39,46 @@ void ArgConverter::Init(JavaVM *jvm) JniLocalRef encoding(env.NewStringUTF("UTF-8")); UTF_8_ENCODING = (jstring)env.NewGlobalRef(encoding); assert(UTF_8_ENCODING != nullptr); + + auto charClass = env.FindClass("java/lang/Character"); + assert(charClass != nullptr); + CHAR_VALUE_METHOD_ID = env.GetMethodID(charClass, "charValue", "()C"); + assert(CHAR_VALUE_METHOD_ID != nullptr); + + auto booleanClass = env.FindClass("java/lang/Boolean"); + assert(booleanClass != nullptr); + BOOLEAN_VALUE_METHOD_ID = env.GetMethodID(booleanClass, "booleanValue", "()Z"); + assert(BOOLEAN_VALUE_METHOD_ID != nullptr); + + auto byteClass = env.FindClass("java/lang/Byte"); + assert(byteClass != nullptr); + BYTE_VALUE_METHOD_ID = env.GetMethodID(byteClass, "byteValue", "()B"); + assert(BYTE_VALUE_METHOD_ID != nullptr); + + auto shortClass = env.FindClass("java/lang/Short"); + assert(shortClass != nullptr); + SHORT_VALUE_METHOD_ID = env.GetMethodID(shortClass, "shortValue", "()S"); + assert(SHORT_VALUE_METHOD_ID != nullptr); + + auto integerClass = env.FindClass("java/lang/Integer"); + assert(integerClass != nullptr); + INT_VALUE_METHOD_ID = env.GetMethodID(integerClass, "intValue", "()I"); + assert(INT_VALUE_METHOD_ID != nullptr); + + auto longClass = env.FindClass("java/lang/Long"); + assert(longClass != nullptr); + LONG_VALUE_METHOD_ID = env.GetMethodID(longClass, "longValue", "()J"); + assert(LONG_VALUE_METHOD_ID != nullptr); + + auto floatClass = env.FindClass("java/lang/Float"); + assert(floatClass != nullptr); + FLOAT_VALUE_METHOD_ID = env.GetMethodID(floatClass, "floatValue", "()F"); + assert(FLOAT_VALUE_METHOD_ID != nullptr); + + auto doubleClass = env.FindClass("java/lang/Double"); + assert(doubleClass != nullptr); + DOUBLE_VALUE_METHOD_ID = env.GetMethodID(doubleClass, "doubleValue", "()D"); + assert(DOUBLE_VALUE_METHOD_ID != nullptr); } void ArgConverter::NativeScriptLongValueOfFunctionCallback(const v8::FunctionCallbackInfo& args) @@ -67,36 +107,21 @@ jlong ArgConverter::ObjectToLong(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "longValue", "()J"); - - return env.CallLongMethod(object, methodID); + return env.CallLongMethod(object, LONG_VALUE_METHOD_ID); } jboolean ArgConverter::ObjectToBoolean(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "booleanValue", "()Z"); - - return env.CallBooleanMethod(object, methodID); + return env.CallBooleanMethod(object, BOOLEAN_VALUE_METHOD_ID); } jchar ArgConverter::ObjectToChar(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "charValue", "()C"); - - return env.CallCharMethod(object, methodID); + return env.CallCharMethod(object, CHAR_VALUE_METHOD_ID); } @@ -104,36 +129,21 @@ jbyte ArgConverter::ObjectToByte(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "byteValue", "()B"); - - return env.CallByteMethod(object, methodID); + return env.CallByteMethod(object, BYTE_VALUE_METHOD_ID); } jshort ArgConverter::ObjectToShort(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "shortValue", "()S"); - - return env.CallShortMethod(object, methodID); + return env.CallShortMethod(object, SHORT_VALUE_METHOD_ID); } jint ArgConverter::ObjectToInt(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "intValue", "()I"); - - return env.CallIntMethod(object, methodID); + return env.CallIntMethod(object, INT_VALUE_METHOD_ID); } @@ -141,24 +151,14 @@ jfloat ArgConverter::ObjectToFloat(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "floatValue", "()F"); - - return env.CallFloatMethod(object, methodID); + return env.CallFloatMethod(object, FLOAT_VALUE_METHOD_ID); } jdouble ArgConverter::ObjectToDouble(jobject object) { JEnv env; - JniLocalRef argClass(env.GetObjectClass(object)); - - //TODO: Lubo: cache this methodId on startup - jmethodID methodID = env.GetMethodID(argClass, "doubleValue", "()D"); - - return env.CallDoubleMethod(object, methodID); + return env.CallDoubleMethod(object, DOUBLE_VALUE_METHOD_ID); } @@ -347,4 +347,12 @@ Persistent* ArgConverter::NATIVESCRIPT_NUMERA_CTOR_FUNC = nullptr; Persistent* ArgConverter::NAN_NUMBER_OBJECT = nullptr; jclass ArgConverter::STRING_CLASS = nullptr; jmethodID ArgConverter::GET_BYTES_METHOD_ID = nullptr; +jmethodID ArgConverter::CHAR_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::BOOLEAN_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::BYTE_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::SHORT_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::INT_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::LONG_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::FLOAT_VALUE_METHOD_ID = nullptr; +jmethodID ArgConverter::DOUBLE_VALUE_METHOD_ID = nullptr; jstring ArgConverter::UTF_8_ENCODING = nullptr; diff --git a/src/jni/ArgConverter.h b/src/jni/ArgConverter.h index 55015cfe3..e7b30e346 100644 --- a/src/jni/ArgConverter.h +++ b/src/jni/ArgConverter.h @@ -82,6 +82,14 @@ namespace tns static jclass STRING_CLASS; static jmethodID GET_BYTES_METHOD_ID; + static jmethodID CHAR_VALUE_METHOD_ID; + static jmethodID BOOLEAN_VALUE_METHOD_ID; + static jmethodID BYTE_VALUE_METHOD_ID; + static jmethodID SHORT_VALUE_METHOD_ID; + static jmethodID INT_VALUE_METHOD_ID; + static jmethodID LONG_VALUE_METHOD_ID; + static jmethodID FLOAT_VALUE_METHOD_ID; + static jmethodID DOUBLE_VALUE_METHOD_ID; static jstring UTF_8_ENCODING; }; From efc0f0b63146eb9c1af9aa9c947805a2c64e5b1b Mon Sep 17 00:00:00 2001 From: blagoev Date: Mon, 18 May 2015 16:20:13 +0300 Subject: [PATCH 21/46] fix support for method overloads by argument type and/or argument count --- .../Generator/src/com/tns/bindings/Dump.java | 25 +++++++- .../Tester/src/com/proxy/TargetObject.java | 16 +++++ .../tester/RuntimeTests.java | 60 +++++++++++++++++++ 3 files changed, 99 insertions(+), 2 deletions(-) diff --git a/binding-generator/Generator/src/com/tns/bindings/Dump.java b/binding-generator/Generator/src/com/tns/bindings/Dump.java index 4c63756fe..1a191508d 100644 --- a/binding-generator/Generator/src/com/tns/bindings/Dump.java +++ b/binding-generator/Generator/src/com/tns/bindings/Dump.java @@ -25,7 +25,9 @@ public class Dump static final String initInstanceMethodName = "initInstance"; static final StringBuffer methodDescriptorBuilder = new StringBuffer(); - /** + + + /** * Returns the dex descriptor corresponding to the given method. * * @param m @@ -44,6 +46,24 @@ public String getDexMethodDescriptor(final Method method) return methodDescriptorBuilder.toString(); } + /** + * Returns the dex descriptor corresponding to the given method. + * + * @param m + * a {@link Method Method} object. + * @return the descriptor of the given method. + */ + public String getMethodOverloadDescriptor(final Method method) + { + Class[] parameters = method.getParameterTypes(); + methodDescriptorBuilder.setLength(0); + for (int i = 0; i < parameters.length; ++i) + { + getDexDescriptor(methodDescriptorBuilder, parameters[i]); + } + return methodDescriptorBuilder.toString(); + } + /** * Returns the dex descriptor corresponding to the given method. * @@ -233,6 +253,8 @@ private Method[] groupMethodsByName(Method[] methods) { Method method = methods[i]; String methodName = method.getName(); + String methodOverLoadDescriptor = getMethodOverloadDescriptor(method); + methodName += "_" + methodOverLoadDescriptor; if (!result.containsKey(methodName)) { result.put(methodName, method); @@ -583,7 +605,6 @@ private void generateSetNativeOverrides(ClassVisitor cv, Class classTo, Metho mv.visitOperationInsn(org.ow2.asmdex.Opcodes.INSN_OR_INT_LIT8, 0, 0, 0, bitCounter); mv.visitOperationInsn(org.ow2.asmdex.Opcodes.INSN_INT_TO_BYTE, 0, 0, 0, 0); mv.visitFieldInsn(org.ow2.asmdex.Opcodes.INSN_IPUT_BYTE, tnsClassSignature, fieldName, "B", 0, thisRegister); //classSignature should be"Ldummy;" - mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_GOTO, returnLabel, 0, 0); //jump to return mv.visitLabel(skipMethod); bitCounter *= 2; diff --git a/binding-generator/Tester/src/com/proxy/TargetObject.java b/binding-generator/Tester/src/com/proxy/TargetObject.java index dc97e6731..36ece1270 100644 --- a/binding-generator/Tester/src/com/proxy/TargetObject.java +++ b/binding-generator/Tester/src/com/proxy/TargetObject.java @@ -20,6 +20,22 @@ public void methodWithStringArg(String a) Log.d("Proxy.Tester", "methodWithStringArg: " + a); } + public void methodWithOverload(int a) + { + Log.d("Proxy.Tester", "methodWithOverload: " + a); + } + + public void methodWithOverload(byte a) + { + Log.d("Proxy.Tester", "methodWithOverload: " + a); + } + + public void methodWithOverload() + { + arg = null; + Log.d("Proxy.Tester", "methodWithOverload no args"); + } + public void methodWithIntArg(int a) { arg = a; diff --git a/binding-generator/Tester/src/com/tns/runtimebindinggenerator/tester/RuntimeTests.java b/binding-generator/Tester/src/com/tns/runtimebindinggenerator/tester/RuntimeTests.java index 953d19284..1dc281fd7 100644 --- a/binding-generator/Tester/src/com/tns/runtimebindinggenerator/tester/RuntimeTests.java +++ b/binding-generator/Tester/src/com/tns/runtimebindinggenerator/tester/RuntimeTests.java @@ -189,6 +189,66 @@ private TargetObject.TargetInterface loadInterfaceProxy(File proxyFile, TargetOb return proxy; } + public void test_When_generating_proxy_on_overloaded_method() throws Throwable + { + dump.generateProxy(aw, TargetObject.class, new String[] {"methodWithOverload"}, 0); + aw.visitEnd(); + byte[] generatedBytes = aw.toByteArray(); + + + File proxyFile = saveProxy(generatedBytes); + final Object resultNoArg = new Object(); + class ImplementationObject extends TargetObject + { + @Override + public void methodWithOverload(int o) + { + arg = o; + overrideCalled = true; + } + + @Override + public void methodWithOverload(byte o) + { + arg = o; + overrideCalled = true; + } + + @Override + public void methodWithOverload() + { + arg = resultNoArg; + overrideCalled = true; + } + } + + ImplementationObject implementationObject = new ImplementationObject(); + TargetObject proxy = loadProxy(proxyFile, implementationObject); + ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithOverload"); + implementationObject.arg = null; + implementationObject.overrideCalled = false; + + proxy.methodWithOverload((int)6); + assertTrue("Override should be called with int", implementationObject.overrideCalled == true); + assertTrue("Override should be called with int 6", implementationObject.arg instanceof Integer); + assertEquals(6, implementationObject.arg); + + implementationObject.arg = null; + implementationObject.overrideCalled = false; + proxy.methodWithOverload((byte)8); + assertTrue("Override should be called with byte", implementationObject.overrideCalled == true); + assertTrue("Override should be called with byte 8", implementationObject.arg instanceof Byte); + assertEquals(8, (byte)implementationObject.arg); + + implementationObject.arg = null; + implementationObject.overrideCalled = false; + proxy.methodWithOverload(); + assertTrue("Override should be called with no args", implementationObject.overrideCalled == true); + assertTrue("Override should be called with no args", implementationObject.arg instanceof Object); + assertEquals(resultNoArg, implementationObject.arg); + } + + public void test_When_generating_proxy_on_method_with_object_argument() throws Throwable { dump.generateProxy(aw, TargetObject.class); From a06729464db47bd6deb1659447ece359002f44a8 Mon Sep 17 00:00:00 2001 From: blagoev Date: Mon, 18 May 2015 16:20:59 +0300 Subject: [PATCH 22/46] tests for method overloads from js --- test-app/assets/app/tests/tests.js | 32 +++++++++++++++++++++++++ test-app/src/com/tns/tests/Button1.java | 20 ++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/test-app/assets/app/tests/tests.js b/test-app/assets/app/tests/tests.js index b370f47aa..10472a6fe 100644 --- a/test-app/assets/app/tests/tests.js +++ b/test-app/assets/app/tests/tests.js @@ -100,6 +100,38 @@ describe("Tests ", function () { expect(shouldBeTrue).toBe(true); }); + + it("When_extending_a_class_with_method_overloads_by_argument_type", function () { + + __log("TEST: Creating MyButton"); + var MyButton = com.tns.tests.Button1.extend({ + method2 : function(arg1) { + return arg1.toString(); + } + }); + + var button1 = new MyButton(); + + var callWithInt = button1.getClass().getMethod("callMethod2WithInt", []); + var callWithByte = button1.getClass().getMethod("callMethod2WithByte", []); + + + + __log("TEST: Calling MyButton method2 with int"); + var intResult = callWithInt.invoke(button1, []); + expect(intResult).toBe("1"); + //var intResult = button1.callMethod2WithInt(); + __log("TEST: intResult = " + intResult); + + __log("TEST: Calling MyButton method2 with byte"); + //var byteResult = button1.callMethod2WithByte(); + var byteResult = callWithByte.invoke(button1, []); + __log("TEST: byteResult = " + byteResult); + + expect(byteResult).toBe("5"); + }); + + it("When_implementing_an_interface_with_new_the_overrides_should_work", function () { __log("TEST: When_implementing_an_interface_with_new__the_overrides_should_work"); diff --git a/test-app/src/com/tns/tests/Button1.java b/test-app/src/com/tns/tests/Button1.java index 052e89d25..33193b9b5 100644 --- a/test-app/src/com/tns/tests/Button1.java +++ b/test-app/src/com/tns/tests/Button1.java @@ -196,6 +196,26 @@ public void method1(byte value) { Log.d(logTag, "method1(byte): " + value); } + + public String method2(int value) + { + return "int=" + value; + } + + public String callMethod2WithInt() + { + return method2((int)1); + } + + public String callMethod2WithByte() + { + return method2((byte)5); + } + + public String method2(byte value) + { + return "byte=" + value; + } public String getIMAGE_ID_PROP() { From 8205a5421c69e2bd10633cb8688b42d1bf366675 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Mon, 18 May 2015 16:49:48 +0300 Subject: [PATCH 23/46] fix unit text --- test-app/assets/app/tests/testPrimitiveTypeConversion.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-app/assets/app/tests/testPrimitiveTypeConversion.js b/test-app/assets/app/tests/testPrimitiveTypeConversion.js index daf346d4c..c21898ebc 100644 --- a/test-app/assets/app/tests/testPrimitiveTypeConversion.js +++ b/test-app/assets/app/tests/testPrimitiveTypeConversion.js @@ -20,7 +20,7 @@ describe("Tests primitive type conversion", function () { com.tns.tests.CharConversionTest.printWithChar(logger, 'x'); - expect(logged).toBe('a'); + expect(logged).toBe('x'); }); From 6cfe3de658eba4575bbc13deff8b1ccbc76bc029 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Mon, 18 May 2015 17:11:19 +0300 Subject: [PATCH 24/46] fix unit test --- test-app/assets/app/tests/testPrimitiveTypeConversion.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-app/assets/app/tests/testPrimitiveTypeConversion.js b/test-app/assets/app/tests/testPrimitiveTypeConversion.js index c21898ebc..5d97005ea 100644 --- a/test-app/assets/app/tests/testPrimitiveTypeConversion.js +++ b/test-app/assets/app/tests/testPrimitiveTypeConversion.js @@ -20,7 +20,7 @@ describe("Tests primitive type conversion", function () { com.tns.tests.CharConversionTest.printWithChar(logger, 'x'); - expect(logged).toBe('x'); + expect(logged).toBe(char('x')); }); From 2e6261990c8bb4926c452a2312ec08b5df476c37 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Mon, 18 May 2015 17:19:53 +0300 Subject: [PATCH 25/46] fix unit test --- test-app/assets/app/tests/testPrimitiveTypeConversion.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test-app/assets/app/tests/testPrimitiveTypeConversion.js b/test-app/assets/app/tests/testPrimitiveTypeConversion.js index 5d97005ea..f1e39c78f 100644 --- a/test-app/assets/app/tests/testPrimitiveTypeConversion.js +++ b/test-app/assets/app/tests/testPrimitiveTypeConversion.js @@ -18,9 +18,9 @@ describe("Tests primitive type conversion", function () { } }); - com.tns.tests.CharConversionTest.printWithChar(logger, 'x'); + com.tns.tests.CharConversionTest.printWithChar(logger, char('x')); - expect(logged).toBe(char('x')); + expect(logged).toBe('x'); }); From 94dfaf99a9f185434f752208e74b430436be53a6 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Thu, 21 May 2015 14:08:50 +0300 Subject: [PATCH 26/46] simplify code --- src/jni/NativeScriptRuntime.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/jni/NativeScriptRuntime.cpp b/src/jni/NativeScriptRuntime.cpp index 7ea3f95a8..c88cbccb7 100644 --- a/src/jni/NativeScriptRuntime.cpp +++ b/src/jni/NativeScriptRuntime.cpp @@ -553,16 +553,7 @@ jobject NativeScriptRuntime::CreateJavaInstance(int objectID, const std::string& if (argConverter.IsValid()) { - jobjectArray methodOverrides; - if (hasImplementationObject) - { - methodOverrides = GetMethodOverrides(env, implementationObject); - } - else - { - Handle emptyObject; - methodOverrides = GetMethodOverrides(env, emptyObject); - } + jobjectArray methodOverrides = GetMethodOverrides(env, implementationObject); jobjectArray javaArgs = argConverter.ToJavaArray(); From 07f89e5d762cf76e00913c4637848b6d77efecbb Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Thu, 21 May 2015 14:48:27 +0300 Subject: [PATCH 27/46] simplify code --- src/jni/NativeScriptRuntime.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/jni/NativeScriptRuntime.cpp b/src/jni/NativeScriptRuntime.cpp index c88cbccb7..009cd5389 100644 --- a/src/jni/NativeScriptRuntime.cpp +++ b/src/jni/NativeScriptRuntime.cpp @@ -544,12 +544,8 @@ jobject NativeScriptRuntime::CreateJavaInstance(int objectID, const std::string& JEnv env; auto& args = argWrapper.args; - bool hasImplementationObject = !implementationObject.IsEmpty(); - - bool hasImplementationObjectInArgs = isInterface; - - JsArgToArrayConverter argConverter(args, hasImplementationObjectInArgs, argWrapper.outerThis); + JsArgToArrayConverter argConverter(args, isInterface, argWrapper.outerThis); if (argConverter.IsValid()) { From 15c6f5b54f7aa7dc70df4add67e02ac9a60f6617 Mon Sep 17 00:00:00 2001 From: blagoev Date: Fri, 22 May 2015 11:04:48 +0300 Subject: [PATCH 28/46] Fail tns build if ant is not using java 1.7 --- build/project-template/custom_rules.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/build/project-template/custom_rules.xml b/build/project-template/custom_rules.xml index cf684e470..5ad12b906 100644 --- a/build/project-template/custom_rules.xml +++ b/build/project-template/custom_rules.xml @@ -1,6 +1,14 @@ + + + + + + + + From e451e6180b2634a0d4acc927c2f72ba0137b4df5 Mon Sep 17 00:00:00 2001 From: blagoev Date: Mon, 25 May 2015 10:53:28 +0300 Subject: [PATCH 29/46] fix buidl for java 1.8 --- build/project-template/custom_rules.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build/project-template/custom_rules.xml b/build/project-template/custom_rules.xml index 5ad12b906..999b13a63 100644 --- a/build/project-template/custom_rules.xml +++ b/build/project-template/custom_rules.xml @@ -1,13 +1,14 @@ - + + - + From f0c6188f5d650a66451ea53c831c7952ac047946 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Tue, 26 May 2015 15:41:55 +0300 Subject: [PATCH 30/46] change generated proxy objects to call unconditionally the JavaScript implementation --- .../com/tns/NativeScriptHashCodeProvider.java | 4 - .../Generator/src/com/tns/bindings/Dump.java | 149 +- .../tester/RuntimeTests.java | 228 +- src/src/com/tns/NativeScriptActivity.java | 3294 +---------------- src/src/com/tns/NativeScriptApplication.java | 8 +- src/src/com/tns/Platform.java | 9 - .../com/tns/com/tns/tests/AbsClassImpl.java | 61 - .../src/com/tns/com/tns/tests/Button1.java | 152 - .../src/com/tns/com/tns/tests/Class1.java | 18 - .../tests/DispatchAsyncOpOnUIThreadTest.java | 52 - .../src/com/tns/com/tns/tests/DummyClass.java | 106 - .../tns/com/tns/tests/DummyClassWithInit.java | 68 - .../com/tns/tests/ExceptionHandlingTest.java | 63 - .../com/tns/tests/StringConversionTest.java | 57 - .../tns/com/tns/tests/UseCallbackTest.java | 27 - 15 files changed, 72 insertions(+), 4224 deletions(-) delete mode 100644 test-app/src/com/tns/com/tns/tests/AbsClassImpl.java delete mode 100644 test-app/src/com/tns/com/tns/tests/Button1.java delete mode 100644 test-app/src/com/tns/com/tns/tests/Class1.java delete mode 100644 test-app/src/com/tns/com/tns/tests/DispatchAsyncOpOnUIThreadTest.java delete mode 100644 test-app/src/com/tns/com/tns/tests/DummyClass.java delete mode 100644 test-app/src/com/tns/com/tns/tests/DummyClassWithInit.java delete mode 100644 test-app/src/com/tns/com/tns/tests/ExceptionHandlingTest.java delete mode 100644 test-app/src/com/tns/com/tns/tests/StringConversionTest.java delete mode 100644 test-app/src/com/tns/com/tns/tests/UseCallbackTest.java diff --git a/binding-generator/Generator/src/com/tns/NativeScriptHashCodeProvider.java b/binding-generator/Generator/src/com/tns/NativeScriptHashCodeProvider.java index 06eb391b3..91b7f32f3 100644 --- a/binding-generator/Generator/src/com/tns/NativeScriptHashCodeProvider.java +++ b/binding-generator/Generator/src/com/tns/NativeScriptHashCodeProvider.java @@ -5,8 +5,4 @@ public interface NativeScriptHashCodeProvider int hashCode__super(); boolean equals__super(Object other); - -// void setNativeScriptOverrides(String[] overrides); - - void setNativeScriptOverride(String override); } diff --git a/binding-generator/Generator/src/com/tns/bindings/Dump.java b/binding-generator/Generator/src/com/tns/bindings/Dump.java index 1a191508d..1553225a9 100644 --- a/binding-generator/Generator/src/com/tns/bindings/Dump.java +++ b/binding-generator/Generator/src/com/tns/bindings/Dump.java @@ -235,13 +235,13 @@ public void generateProxy(ApplicationWriter aw, String proxyName, Class class methods = groupMethodsByName(methods); - int overridenFieldsCount = (int)Math.ceil(methods.length / 6.0);// + ((methods.length / 8) % 8 != 0 ? 1 : 0); - String[] fieldNames = generateOverrideFields(cv, overridenFieldsCount); + generateFields(cv); Constructor[] ctors = classTo.getConstructors(); - generateCtors(cv, classTo, ctors, classSignature, tnsClassSignature); - - generateMethods(cv, classTo, methods, classSignature, tnsClassSignature, fieldNames); + + boolean hasOverridenCtor = ((methodOverrides != null) && methodOverrides.contains("init")); + generateCtors(cv, classTo, ctors, classSignature, tnsClassSignature, hasOverridenCtor); + generateMethods(cv, classTo, methods, classSignature, tnsClassSignature); cv.visitEnd(); } @@ -419,13 +419,13 @@ private static boolean areMethodSignaturesEqual(Method x, Method y) return result; } - private void generateCtors(ClassVisitor cv, Class classTo, Constructor[] ctors, String classSignature, String tnsClassSignature) + private void generateCtors(ClassVisitor cv, Class classTo, Constructor[] ctors, String classSignature, String tnsClassSignature, boolean hasOverridenCtor) { if (classTo.isInterface()) { try { - generateCtor(cv, classTo, Object.class.getConstructor(), classSignature, tnsClassSignature); + generateCtor(cv, classTo, Object.class.getConstructor(), classSignature, tnsClassSignature, false); } catch (NoSuchMethodException e) { @@ -437,13 +437,13 @@ private void generateCtors(ClassVisitor cv, Class classTo, Constructor[] c { for (Constructor ctor : ctors) { - generateCtor(cv, classTo, ctor, classSignature, tnsClassSignature); + generateCtor(cv, classTo, ctor, classSignature, tnsClassSignature, hasOverridenCtor); } } } - private void generateCtor(ClassVisitor cv, Class classTo, Constructor ctor, String classSignature, String tnsClassSignature) + private void generateCtor(ClassVisitor cv, Class classTo, Constructor ctor, String classSignature, String tnsClassSignature, boolean hasOverridenCtor) { //TODO: handle generic and vararg ctors if needed String ctorSignature = getDexConstructorDescriptor(ctor); @@ -473,7 +473,10 @@ private void generateCtor(ClassVisitor cv, Class classTo, Constructor ctor } generateInitializedBlock(mv, thisRegister, classSignature, tnsClassSignature); - generateCtorOverridenBlock(mv, thisRegister, classSignature, tnsClassSignature); + if (hasOverridenCtor) + { + generateCtorOverridenBlock(mv, thisRegister, classSignature, tnsClassSignature); + } generateReturnVoid(mv); } @@ -507,7 +510,7 @@ private void generateInitializedBlock(MethodVisitor mv, int thisRegister, String mv.visitLabel(label); } - private void generateMethods(ClassVisitor cv, Class classTo, Method[] methods, String classSignature, String tnsClassSignature, String[] fieldNames) + private void generateMethods(ClassVisitor cv, Class classTo, Method[] methods, String classSignature, String tnsClassSignature) { //for (Method method : methods) int fieldNameCounter = 0; @@ -522,13 +525,11 @@ private void generateMethods(ClassVisitor cv, Class classTo, Method[] methods Method sourceMethod = methods[i]; - String fieldName = fieldNames[fieldNameCounter]; - generateMethod(cv, classTo, sourceMethod, i, classSignature, tnsClassSignature, fieldName, bitCounter); + generateMethod(cv, classTo, sourceMethod, i, classSignature, tnsClassSignature, bitCounter); bitCounter *= 2; } - generateSetNativeOverrides(cv, classTo, methods, classSignature, tnsClassSignature, fieldNames); generateEqualsSuper(cv); generateHashCodeSuper(cv); } @@ -555,68 +556,7 @@ private void generateHashCodeSuper(ClassVisitor cv) mv.visitEnd(); } - private void generateSetNativeOverrides(ClassVisitor cv, Class classTo, Method[] methods, String classSignature, String tnsClassSignature, String[] fieldNames) - { - int locaVarsCount = 0; - int thisRegister = locaVarsCount + 1; - - MethodVisitor mv = cv.visitMethod(org.ow2.asmdex.Opcodes.ACC_PUBLIC, "setNativeScriptOverride", "VLjava/lang/String;", null, null); - mv.visitCode(); - mv.visitMaxs(3, 0); - if (classTo.isInterface()) - { - mv.visitInsn(org.ow2.asmdex.Opcodes.INSN_RETURN_VOID); - mv.visitEnd(); - return; - } - - //check if "init" and set __ctorOverriden - mv.visitStringInsn(org.ow2.asmdex.Opcodes.INSN_CONST_STRING, 0, "init"); - mv.visitMethodInsn(org.ow2.asmdex.Opcodes.INSN_INVOKE_VIRTUAL, "Ljava/lang/String;", "equals", "ZLjava/lang/Object;", new int[] { 2, 0 }); - mv.visitIntInsn(org.ow2.asmdex.Opcodes.INSN_MOVE_RESULT, 0); - Label skipCtorOverridenLabel = new Label(); - mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_IF_EQZ, skipCtorOverridenLabel, 0, 0); - mv.visitVarInsn(org.ow2.asmdex.Opcodes.INSN_CONST_4, 0, 1); - mv.visitFieldInsn(org.ow2.asmdex.Opcodes.INSN_IPUT_BOOLEAN, tnsClassSignature, "__ctorOverridden", "Z", 0, thisRegister); - Label returnLabel = new Label(); - mv.visitLabel(skipCtorOverridenLabel); - - int fieldNameCounter = 0; - int bitCounter = 1; - for (int i = 0; i < methods.length; i++) - { - if (bitCounter == 128) - { - bitCounter = 1; - fieldNameCounter++; - } - - Method sourceMethod = methods[i]; - String fieldName = fieldNames[fieldNameCounter]; - - - //generate bit set for method - mv.visitStringInsn(org.ow2.asmdex.Opcodes.INSN_CONST_STRING, 0, sourceMethod.getName()); - mv.visitMethodInsn(org.ow2.asmdex.Opcodes.INSN_INVOKE_VIRTUAL, "Ljava/lang/String;", "equals", "ZLjava/lang/Object;", new int[] { 2, 0 }); - mv.visitIntInsn(org.ow2.asmdex.Opcodes.INSN_MOVE_RESULT, 0); - Label skipMethod = new Label(); - mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_IF_EQZ, skipMethod, 0, 0); - mv.visitFieldInsn(org.ow2.asmdex.Opcodes.INSN_IGET_BYTE, tnsClassSignature, fieldName, "B", 0, thisRegister); - mv.visitOperationInsn(org.ow2.asmdex.Opcodes.INSN_OR_INT_LIT8, 0, 0, 0, bitCounter); - mv.visitOperationInsn(org.ow2.asmdex.Opcodes.INSN_INT_TO_BYTE, 0, 0, 0, 0); - mv.visitFieldInsn(org.ow2.asmdex.Opcodes.INSN_IPUT_BYTE, tnsClassSignature, fieldName, "B", 0, thisRegister); //classSignature should be"Ldummy;" - mv.visitLabel(skipMethod); - - bitCounter *= 2; - } - - mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_GOTO, returnLabel, 0, 0); //jump to return if the last method is not overriden - mv.visitLabel(returnLabel); - mv.visitInsn(org.ow2.asmdex.Opcodes.INSN_RETURN_VOID); - mv.visitEnd(); - } - - private void generateMethod(ClassVisitor cv, Class classTo, Method method, int methodNumber, String classSignature, String tnsClassSignature, String fieldName, int fieldBit) + private void generateMethod(ClassVisitor cv, Class classTo, Method method, int methodNumber, String classSignature, String tnsClassSignature, int fieldBit) { if (ProxyGenerator.IsLogEnabled) Log.d("TNS.Rungime.Proxy.Generator", "generatingMethod " + method.getName()); @@ -636,12 +576,8 @@ private void generateMethod(ClassVisitor cv, Class classTo, Method method, in if (!classTo.isInterface()) { generateInitializedBlock(mv, thisRegister, classSignature, tnsClassSignature); - generateFieldOverrideCheckBlock(mv, method, thisRegister, classSignature, tnsClassSignature, methodDexSignature, fieldName, fieldBit); - } - else - { - generateCallOverrideBlock(mv, method, thisRegister, classSignature, tnsClassSignature, methodDexSignature, fieldName, fieldBit); } + generateCallOverrideBlock(mv, method, thisRegister, classSignature, tnsClassSignature, methodDexSignature, fieldBit); mv.visitEnd(); } @@ -714,40 +650,7 @@ else if (paramType == Long.TYPE || paramType == Double.TYPE) return thisRegister; } - private void generateFieldOverrideCheckBlock(MethodVisitor mv, Method method, int thisRegister, String classSignature, String tnsClassSignature, String methodDexSignature, String fieldName, int fieldBit) - { - //String methodSignature = org.objectweb.asm.Type.getMethodDescriptor(method); - - mv.visitFieldInsn(org.ow2.asmdex.Opcodes.INSN_IGET_BYTE, tnsClassSignature, fieldName, "B", 1, thisRegister); - mv.visitOperationInsn(org.ow2.asmdex.Opcodes.INSN_AND_INT_LIT8, 1, 1, 0, fieldBit); - Label callSuperLabel = new Label(); - - //goto "call super implementation" if Less or equal to zero - mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_IF_LEZ, callSuperLabel, 1, 0); - - //call the override - int argCount = generateArrayForCallJsArguments(mv, method, thisRegister, classSignature, tnsClassSignature, methodDexSignature); - mv.visitStringInsn(org.ow2.asmdex.Opcodes.INSN_CONST_STRING, 1, method.getName()); - mv.visitMethodInsn(org.ow2.asmdex.Opcodes.INSN_INVOKE_STATIC, platformClass, callJSMethodName, callJsMethodSignatureMethod, new int[] { thisRegister, 1, 0 }); - - //Label returnLabel = new Label(); - //mv.visitLabel(returnLabel); - generateReturnFromObject(mv, method.getReturnType(), thisRegister, 1); - - //call super implementation - - //TODO: pass the arguments to the super call - mv.visitLabel(callSuperLabel); - int[] args = generateArgsArray(thisRegister, argCount, method); - mv.visitMethodInsn(org.ow2.asmdex.Opcodes.INSN_INVOKE_SUPER_RANGE, classSignature, method.getName(), methodDexSignature, args); - generateReturn(mv, method.getReturnType(), thisRegister, 1); - //mv.visitIntInsn(org.ow2.asmdex.Opcodes.INSN_MOVE_RESULT_OBJECT, 1); - - //goto return - //mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_GOTO, returnLabel, 0, 0); - } - - private void generateCallOverrideBlock(MethodVisitor mv, Method method, int thisRegister, String classSignature, String tnsClassSignature, String methodDexSignature, String fieldName, int fieldBit) + private void generateCallOverrideBlock(MethodVisitor mv, Method method, int thisRegister, String classSignature, String tnsClassSignature, String methodDexSignature, int fieldBit) { //call the override int argCount = generateArrayForCallJsArguments(mv, method, thisRegister, classSignature, tnsClassSignature, methodDexSignature); @@ -1119,24 +1022,10 @@ else if (targetReturnType.isPrimitive() && (targetReturnType == Double.TYPE || t } } - private String[] generateOverrideFields(ClassVisitor cv, int count) + private void generateFields(ClassVisitor cv) { - String[] fieldNames = new String[count]; generateCtorOverridenField(cv); generateInitializedField(cv); - for (int i = 0; i < count; i++) - { - fieldNames[i] = "__ho" + i; - generateOverridenField(cv, fieldNames[i]); - } - - return fieldNames; - } - - private void generateOverridenField(ClassVisitor cv, String fieldName) - { - FieldVisitor fv = cv.visitField(org.ow2.asmdex.Opcodes.ACC_PRIVATE, fieldName, "B", null, null); - fv.visitEnd(); } private void generateInitializedField(ClassVisitor cv) diff --git a/binding-generator/Tester/src/com/tns/runtimebindinggenerator/tester/RuntimeTests.java b/binding-generator/Tester/src/com/tns/runtimebindinggenerator/tester/RuntimeTests.java index 1dc281fd7..930018497 100644 --- a/binding-generator/Tester/src/com/tns/runtimebindinggenerator/tester/RuntimeTests.java +++ b/binding-generator/Tester/src/com/tns/runtimebindinggenerator/tester/RuntimeTests.java @@ -224,7 +224,6 @@ public void methodWithOverload() ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithOverload"); implementationObject.arg = null; implementationObject.overrideCalled = false; @@ -269,11 +268,6 @@ public void methodWithObjectArg(Object o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithObjectArg(new Object()); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithObjectArg"); //this cast should succeed - proxy.methodWithObjectArg(new Object()); assertTrue("Override should be called", implementationObject.overrideCalled == true); } @@ -299,12 +293,6 @@ public void methodWithStringArg(String o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithStringArg("not overriden"); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals("not overriden", proxy.arg); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithStringArg"); //this cast should succeed - proxy.methodWithStringArg("overriden"); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals("overriden", implementationObject.arg); @@ -331,12 +319,6 @@ public void methodWithIntArg(int o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithIntArg(5); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(5, proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithIntArg"); //this cast should succeed - proxy.methodWithIntArg(6); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals(6, implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -363,12 +345,6 @@ public void methodWithBooleanArg(boolean o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithBooleanArg(true); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(true, proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithBooleanArg"); //this cast should succeed - proxy.methodWithBooleanArg(true); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals(true, implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -395,12 +371,6 @@ public void methodWithCharArg(char o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithCharArg('x'); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals('x', proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithCharArg"); //this cast should succeed - proxy.methodWithCharArg('b'); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals('b', implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -427,12 +397,6 @@ public void methodWithLongArg(long o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithLongArg(6L); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(6L, proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithLongArg"); //this cast should succeed - proxy.methodWithLongArg(7L); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals(7L, implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -459,12 +423,6 @@ public void methodWithDoubleArg(double o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithDoubleArg(4.0); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(4.0, proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithDoubleArg"); //this cast should succeed - proxy.methodWithDoubleArg(5.0); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals(5.0, implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -491,12 +449,6 @@ public void methodWithFloatArg(float o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithFloatArg((float)33.0); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((float)33.0, proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithFloatArg"); //this cast should succeed - proxy.methodWithFloatArg((float)44.0); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((float)44.0, implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -523,12 +475,6 @@ public void methodWithByteArg(byte o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithByteArg((byte)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((byte)154, proxy.arg); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithByteArg"); //this cast should succeed - proxy.methodWithByteArg((byte)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((byte)164, implementationObject.arg); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -555,13 +501,6 @@ public void methodWithByteArrayArg(byte[] o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - proxy.methodWithByteArrayArg(new byte[] { (byte)141 }); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - - assertEquals((byte)141, ((byte[])proxy.arg)[0]); //asserting against the proxy instance. Override should not be called but proxy instance should be - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithByteArrayArg"); //this cast should succeed - proxy.methodWithByteArrayArg(new byte[] { (byte)111 }); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((byte)111, ((byte[]) implementationObject.arg)[0]); //asserting against the implementation instance. Override should be called and implementation instance is updated @@ -592,15 +531,7 @@ public void methodWithLongAndDoubleArgs(Object arg0, long arg1, Object arg2, dou Object first = new Object(); Object second = new Object(); - proxy.methodWithLongAndDoubleArgs(first, 334534L, second, 345.345); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(first, proxy.arg0); - assertEquals(334534L, proxy.arg1); - assertEquals(second, proxy.arg2); - assertEquals(345.345, proxy.arg3); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithLongAndDoubleArgs"); //this cast should succeed - + proxy.methodWithLongAndDoubleArgs(first, 11222L, second, 346.3456); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals(first, implementationObject.arg0); @@ -637,14 +568,7 @@ public byte methodReturningByte(byte o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - byte result = proxy.methodReturningByte((byte)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((byte)154, proxy.arg); - assertEquals((byte)154, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningByte"); //this cast should succeed - - result = proxy.methodReturningByte((byte)164); + byte result = proxy.methodReturningByte((byte)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((byte)167, implementationObject.arg); assertEquals((byte)168, result); @@ -672,14 +596,7 @@ public char methodReturningChar(char o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - char result = proxy.methodReturningChar('j'); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals('j', proxy.arg); - assertEquals('j', result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningChar"); //this cast should succeed - - result = proxy.methodReturningChar('b'); + char result = proxy.methodReturningChar('b'); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals('v', implementationObject.arg); assertEquals('c', result); @@ -707,14 +624,7 @@ public short methodReturningShort(short o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - short result = proxy.methodReturningShort((short)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((short)154, proxy.arg); - assertEquals((short)154, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningShort"); //this cast should succeed - - result = proxy.methodReturningShort((short)164); + short result = proxy.methodReturningShort((short)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((short)167, implementationObject.arg); assertEquals((short)168, result); @@ -742,14 +652,7 @@ public int methodReturningInt(int o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - int result = proxy.methodReturningInt((int)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((int)154, proxy.arg); - assertEquals((int)154, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningInt"); //this cast should succeed - - result = proxy.methodReturningInt((int)164); + int result = proxy.methodReturningInt((int)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((int)167, implementationObject.arg); assertEquals((int)168, result); @@ -777,14 +680,7 @@ public float methodReturningFloat(float o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - float result = proxy.methodReturningFloat((float)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((float)154, proxy.arg); - assertEquals((float)154, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningFloat"); //this cast should succeed - - result = proxy.methodReturningFloat((float)164); + float result = proxy.methodReturningFloat((float)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((float)167, implementationObject.arg); assertEquals((float)168, result); @@ -812,14 +708,7 @@ public double methodReturningDouble(double o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - double result = proxy.methodReturningDouble((double)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((double)154, proxy.arg); - assertEquals((double)154, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningDouble"); //this cast should succeed - - result = proxy.methodReturningDouble((float)164); + double result = proxy.methodReturningDouble((float)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((double)167, implementationObject.arg); assertEquals((double)168, result); @@ -847,14 +736,7 @@ public long methodReturningLong(long o) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - long result = proxy.methodReturningLong((long)154); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals((long)154, proxy.arg); - assertEquals((long)154, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningLong"); //this cast should succeed - - result = proxy.methodReturningLong((long)164); + long result = proxy.methodReturningLong((long)164); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals((long)167, implementationObject.arg); assertEquals((long)168, result); @@ -882,14 +764,7 @@ public String methodReturningString(String s) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - String result = proxy.methodReturningString("return string"); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals("return string", proxy.arg); - assertEquals("return string", result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningString"); //this cast should succeed - - result = proxy.methodReturningString("override string"); + String result = proxy.methodReturningString("override string"); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals("override string indeed", implementationObject.arg); assertEquals("override string indeed", result); @@ -917,16 +792,8 @@ public Object methodReturningObject(Object s) ImplementationObject implementationObject = new ImplementationObject(); TargetObject proxy = loadProxy(proxyFile, implementationObject); - Object first = new Object(); - Object result = proxy.methodReturningObject(first); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(first, proxy.arg); - assertEquals(first, result); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodReturningObject"); //this cast should succeed - Object second = new Object(); - result = proxy.methodReturningObject(second); + Object result = proxy.methodReturningObject(second); assertTrue("Override should be called", implementationObject.overrideCalled == true); assertEquals(second, implementationObject.arg); assertEquals(overrideResult, result); @@ -1098,66 +965,23 @@ public void methodWithAllTypesOfArgs( TargetObject proxy = loadProxy(proxyFile, implementationObject); Object param0 = new Object(); - int param1 = 42; - Integer param2 = 43; - char param3 = 'p'; - Character param4 = 'j'; - byte param5 = 3; - Byte param6 = 4; - short param7 = 60; - Short param8 = 61; + int param1 = 43; + Integer param2 = 44; + char param3 = 'a'; + Character param4 = 'c'; + byte param5 = 4; + Byte param6 = 5; + short param7 = 61; + Short param8 = 62; boolean param9 = true; Boolean param10 = true; - long param11 = 123456L; - Long param12 = 1234567L; - float param13 = 45.0F; - Float param14 = 46.0F; - double param15 = 456.45; - Double param16 = 456.47; - String param17 = "the string"; - - - proxy.methodWithAllTypesOfArgs(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17); - assertTrue("Override should NOT be called", implementationObject.overrideCalled == false); - assertEquals(param0, proxy.arg0); - assertEquals(param1, proxy.arg1); - assertEquals(param2, proxy.arg2); - assertEquals(param3, proxy.arg3); - assertEquals(param4, proxy.arg4); - assertEquals(param5, proxy.arg5); - assertEquals(param6, proxy.arg6); - assertEquals(param7, proxy.arg7); - assertEquals(param8, proxy.arg8); - assertEquals(param9, proxy.arg9); - assertEquals(param10, proxy.arg10); - assertEquals(param11, proxy.arg11); - assertEquals(param12, proxy.arg12); - assertEquals(param13, proxy.arg13); - assertEquals(param14, proxy.arg14); - assertEquals(param15, proxy.arg15); - assertEquals(param16, proxy.arg16); - assertEquals(param17, proxy.arg17); - - ((NativeScriptHashCodeProvider)proxy).setNativeScriptOverride("methodWithAllTypesOfArgs"); //this cast should succeed - - param0 = new Object(); - param1 = 43; - param2 = 44; - param3 = 'a'; - param4 = 'c'; - param5 = 4; - param6 = 5; - param7 = 61; - param8 = 62; - param9 = true; - param10 = true; - param11 = 1123456L; - param12 = 11234567L; - param13 = 46.0F; - param14 = 47.0F; - param15 = 1456.45; - param16 = 1456.47; - param17 = "overriden string"; + long param11 = 1123456L; + Long param12 = 11234567L; + float param13 = 46.0F; + Float param14 = 47.0F; + double param15 = 1456.45; + Double param16 = 1456.47; + String param17 = "overriden string"; proxy.methodWithAllTypesOfArgs(param0, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17); assertTrue("Override should be called", implementationObject.overrideCalled == true); @@ -1221,7 +1045,7 @@ public void test_When_generating_prox_for_every_cuttenessio_class() throws Throw Dump dump = new Dump(); Class classForName = Class.forName(clazz); //Log.d("Binding.Gen.Test", "Generating Class " + classForName.getName()); - dump.generateProxy(aw, classForName); + dump.generateProxy(aw, classForName, new String[0], 0); aw.visitEnd(); byte[] generatedBytes = aw.toByteArray(); File proxyFile = saveProxy(classForName.getName().replace('$', '_'), generatedBytes); diff --git a/src/src/com/tns/NativeScriptActivity.java b/src/src/com/tns/NativeScriptActivity.java index f9506713e..da7e6dc0f 100644 --- a/src/src/com/tns/NativeScriptActivity.java +++ b/src/src/com/tns/NativeScriptActivity.java @@ -4,3287 +4,43 @@ public class NativeScriptActivity extends android.app.Activity implements com.tns.NativeScriptHashCodeProvider { public NativeScriptActivity() { - super(); - if (__ctorOverridden) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "init", true, params); - } - } - - public void addContentView(android.view.View param_0, android.view.ViewGroup.LayoutParams param_1) { - if ((__ho0 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "addContentView", params); - } else { - super.addContentView(param_0, param_1); - } - } - - public void applyOverrideConfiguration(android.content.res.Configuration param_0) { - if ((__ho0 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "applyOverrideConfiguration", params); - } else { - super.applyOverrideConfiguration(param_0); - } - } - - protected void attachBaseContext(android.content.Context param_0) { - if ((__ho0 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "attachBaseContext", params); - } else { - super.attachBaseContext(param_0); - } - } - - public boolean bindService(android.content.Intent param_0, android.content.ServiceConnection param_1, int param_2) { - if ((__ho0 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (Boolean)com.tns.Platform.callJSMethod(this, "bindService", params); - } else { - return super.bindService(param_0, param_1, param_2); - } - } - - public int checkCallingOrSelfPermission(java.lang.String param_0) { - if ((__ho0 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingOrSelfPermission", params); - } else { - return super.checkCallingOrSelfPermission(param_0); - } - } - - public int checkCallingOrSelfUriPermission(android.net.Uri param_0, int param_1) { - if ((__ho0 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingOrSelfUriPermission", params); - } else { - return super.checkCallingOrSelfUriPermission(param_0, param_1); - } - } - - public int checkCallingPermission(java.lang.String param_0) { - if ((__ho0 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingPermission", params); - } else { - return super.checkCallingPermission(param_0); - } - } - - public int checkCallingUriPermission(android.net.Uri param_0, int param_1) { - if ((__ho0 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingUriPermission", params); - } else { - return super.checkCallingUriPermission(param_0, param_1); - } - } - - public int checkPermission(java.lang.String param_0, int param_1, int param_2) { - if ((__ho1 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (Integer)com.tns.Platform.callJSMethod(this, "checkPermission", params); - } else { - return super.checkPermission(param_0, param_1, param_2); - } - } - - public int checkUriPermission(android.net.Uri param_0, int param_1, int param_2, int param_3) { - - if ((__ho1 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - return (Integer)com.tns.Platform.callJSMethod(this, "checkUriPermission", params); - } else { - return super.checkUriPermission(param_0, param_1, param_2, param_3); - } - } - - public int checkUriPermission(android.net.Uri param_0, java.lang.String param_1, java.lang.String param_2, int param_3, int param_4, int param_5) { - - if ((__ho1 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[6]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - return (Integer)com.tns.Platform.callJSMethod(this, "checkUriPermission", params); - } else { - return super.checkUriPermission(param_0, param_1, param_2, param_3, param_4, param_5); - } - } - - public void clearWallpaper() throws java.io.IOException { - - if ((__ho1 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "clearWallpaper", params); - } else { - super.clearWallpaper(); - } - } - - protected java.lang.Object clone() throws java.lang.CloneNotSupportedException { - - if ((__ho1 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (java.lang.Object)com.tns.Platform.callJSMethod(this, "clone", params); - } else { - return super.clone(); - } - } - - public void closeContextMenu() { - - if ((__ho1 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "closeContextMenu", params); - } else { - super.closeContextMenu(); - } - } - - public void closeOptionsMenu() { - - if ((__ho1 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "closeOptionsMenu", params); - } else { - super.closeOptionsMenu(); - } - } - - public android.content.Context createConfigurationContext(android.content.res.Configuration param_0) { - - if ((__ho1 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.content.Context)com.tns.Platform.callJSMethod(this, "createConfigurationContext", params); - } else { - return super.createConfigurationContext(param_0); - } - } - - public android.content.Context createDisplayContext(android.view.Display param_0) { - - if ((__ho1 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.content.Context)com.tns.Platform.callJSMethod(this, "createDisplayContext", params); - } else { - return super.createDisplayContext(param_0); - } - } - - public android.content.Context createPackageContext(java.lang.String param_0, int param_1) throws android.content.pm.PackageManager.NameNotFoundException { - - if ((__ho2 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (android.content.Context)com.tns.Platform.callJSMethod(this, "createPackageContext", params); - } else { - return super.createPackageContext(param_0, param_1); - } - } - - public android.app.PendingIntent createPendingResult(int param_0, android.content.Intent param_1, int param_2) { - - if ((__ho2 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (android.app.PendingIntent)com.tns.Platform.callJSMethod(this, "createPendingResult", params); - } else { - return super.createPendingResult(param_0, param_1, param_2); - } - } - - public java.lang.String[] databaseList() { - - if ((__ho2 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String[])com.tns.Platform.callJSMethod(this, "databaseList", params); - } else { - return super.databaseList(); - } - } - - public boolean deleteDatabase(java.lang.String param_0) { - - if ((__ho2 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "deleteDatabase", params); - } else { - return super.deleteDatabase(param_0); - } - } - - public boolean deleteFile(java.lang.String param_0) { - - if ((__ho2 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "deleteFile", params); - } else { - return super.deleteFile(param_0); - } - } - - public boolean dispatchGenericMotionEvent(android.view.MotionEvent param_0) { - - if ((__ho2 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchGenericMotionEvent", params); - } else { - return super.dispatchGenericMotionEvent(param_0); - } - } - - public boolean dispatchKeyEvent(android.view.KeyEvent param_0) { - - if ((__ho2 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchKeyEvent", params); - } else { - return super.dispatchKeyEvent(param_0); - } - } - - public boolean dispatchKeyShortcutEvent(android.view.KeyEvent param_0) { - - if ((__ho2 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchKeyShortcutEvent", params); - } else { - return super.dispatchKeyShortcutEvent(param_0); - } - } - - public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent param_0) { - - if ((__ho3 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchPopulateAccessibilityEvent", params); - } else { - return super.dispatchPopulateAccessibilityEvent(param_0); - } - } - - public boolean dispatchTouchEvent(android.view.MotionEvent param_0) { - - if ((__ho3 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchTouchEvent", params); - } else { - return super.dispatchTouchEvent(param_0); - } - } - - public boolean dispatchTrackballEvent(android.view.MotionEvent param_0) { - - if ((__ho3 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchTrackballEvent", params); - } else { - return super.dispatchTrackballEvent(param_0); - } - } - - public void dump(java.lang.String param_0, java.io.FileDescriptor param_1, java.io.PrintWriter param_2, java.lang.String[] param_3) { - - if ((__ho3 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - com.tns.Platform.callJSMethod(this, "dump", params); - } else { - super.dump(param_0, param_1, param_2, param_3); - } - } - - public void enforceCallingOrSelfPermission(java.lang.String param_0, java.lang.String param_1) { - - if ((__ho3 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "enforceCallingOrSelfPermission", params); - } else { - super.enforceCallingOrSelfPermission(param_0, param_1); - } - } - - public void enforceCallingOrSelfUriPermission(android.net.Uri param_0, int param_1, java.lang.String param_2) { - - if ((__ho3 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "enforceCallingOrSelfUriPermission", params); - } else { - super.enforceCallingOrSelfUriPermission(param_0, param_1, param_2); - } - } - - public void enforceCallingPermission(java.lang.String param_0, java.lang.String param_1) { - - if ((__ho3 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "enforceCallingPermission", params); - } else { - super.enforceCallingPermission(param_0, param_1); - } - } - - public void enforceCallingUriPermission(android.net.Uri param_0, int param_1, java.lang.String param_2) { - - if ((__ho3 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "enforceCallingUriPermission", params); - } else { - super.enforceCallingUriPermission(param_0, param_1, param_2); - } - } - - public void enforcePermission(java.lang.String param_0, int param_1, int param_2, java.lang.String param_3) { - - if ((__ho4 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - com.tns.Platform.callJSMethod(this, "enforcePermission", params); - } else { - super.enforcePermission(param_0, param_1, param_2, param_3); - } - } - - public void enforceUriPermission(android.net.Uri param_0, int param_1, int param_2, int param_3, java.lang.String param_4) { - - if ((__ho4 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[5]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - com.tns.Platform.callJSMethod(this, "enforceUriPermission", params); - } else { - super.enforceUriPermission(param_0, param_1, param_2, param_3, param_4); - } - } - - public void enforceUriPermission(android.net.Uri param_0, java.lang.String param_1, java.lang.String param_2, int param_3, int param_4, int param_5, java.lang.String param_6) { - - if ((__ho4 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[7]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - com.tns.Platform.callJSMethod(this, "enforceUriPermission", params); - } else { - super.enforceUriPermission(param_0, param_1, param_2, param_3, param_4, param_5, param_6); - } - } - - public boolean equals(java.lang.Object param_0) { - - if ((__ho4 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "equals", params); - } else { - return super.equals(param_0); - } - } - - public java.lang.String[] fileList() { - - if ((__ho4 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String[])com.tns.Platform.callJSMethod(this, "fileList", params); - } else { - return super.fileList(); - } - } - - protected void finalize() throws java.lang.Throwable { - - if ((__ho4 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "finalize", params); - } else { - super.finalize(); - } - } - - public android.view.View findViewById(int param_0) { - - if ((__ho4 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.view.View)com.tns.Platform.callJSMethod(this, "findViewById", params); - } else { - return super.findViewById(param_0); - } - } - - public void finish() { - - if ((__ho4 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "finish", params); - } else { - super.finish(); - } - } - - public void finishActivity(int param_0) { - - if ((__ho4 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "finishActivity", params); - } else { - super.finishActivity(param_0); - } - } - - public void finishActivityFromChild(android.app.Activity param_0, int param_1) { - - if ((__ho5 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "finishActivityFromChild", params); - } else { - super.finishActivityFromChild(param_0, param_1); - } - } - - public void finishAffinity() { - - if ((__ho5 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "finishAffinity", params); - } else { - super.finishAffinity(); - } - } - - public void finishFromChild(android.app.Activity param_0) { - - if ((__ho5 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "finishFromChild", params); - } else { - super.finishFromChild(param_0); - } - } - - public android.app.ActionBar getActionBar() { - - if ((__ho5 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (android.app.ActionBar)com.tns.Platform.callJSMethod(this, "getActionBar", params); - } else { - return super.getActionBar(); - } - } - - public android.content.Context getApplicationContext() { - - if ((__ho5 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - return (android.content.Context)com.tns.Platform.callJSMethod(this, "getApplicationContext", params); - } else { - return super.getApplicationContext(); - } - } - - public android.content.pm.ApplicationInfo getApplicationInfo() { - if ((__ho5 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (android.content.pm.ApplicationInfo)com.tns.Platform.callJSMethod(this, "getApplicationInfo", params); - } else { - return super.getApplicationInfo(); - } - } - - public android.content.res.AssetManager getAssets() { - - if ((__ho5 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (android.content.res.AssetManager)com.tns.Platform.callJSMethod(this, "getAssets", params); - } else { - return super.getAssets(); - } - } - - public android.content.Context getBaseContext() { - if ((__ho5 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (android.content.Context)com.tns.Platform.callJSMethod(this, "getBaseContext", params); - } else { - return super.getBaseContext(); - } - } - - public java.io.File getCacheDir() { - - if ((__ho6 & (1 << 0)) > 0) { - java.lang.Object[] params = null; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getCacheDir", params); - } else { - return super.getCacheDir(); - } - } - - public android.content.ComponentName getCallingActivity() { - - if ((__ho6 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - return (android.content.ComponentName)com.tns.Platform.callJSMethod(this, "getCallingActivity", params); - } else { - return super.getCallingActivity(); - } - } - - public java.lang.String getCallingPackage() { - - if ((__ho6 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String)com.tns.Platform.callJSMethod(this, "getCallingPackage", params); - } else { - return super.getCallingPackage(); - } - } - - public int getChangingConfigurations() { - - if ((__ho6 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (Integer)com.tns.Platform.callJSMethod(this, "getChangingConfigurations", params); - } else { - return super.getChangingConfigurations(); - } - } - - public java.lang.ClassLoader getClassLoader() { - - if ((__ho6 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - return (java.lang.ClassLoader)com.tns.Platform.callJSMethod(this, "getClassLoader", params); - } else { - return super.getClassLoader(); - } - } - - public android.content.ComponentName getComponentName() { - - if ((__ho6 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (android.content.ComponentName)com.tns.Platform.callJSMethod(this, "getComponentName", params); - } else { - return super.getComponentName(); - } - } - - public android.content.ContentResolver getContentResolver() { - - if ((__ho6 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (android.content.ContentResolver)com.tns.Platform.callJSMethod(this, "getContentResolver", params); - } else { - return super.getContentResolver(); - } - } - - public android.view.View getCurrentFocus() { - - if ((__ho6 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (android.view.View)com.tns.Platform.callJSMethod(this, "getCurrentFocus", params); - } else { - return super.getCurrentFocus(); - } - } - - public java.io.File getDatabasePath(java.lang.String param_0) { - - if ((__ho7 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getDatabasePath", params); - } else { - return super.getDatabasePath(param_0); - } - } - - public java.io.File getDir(java.lang.String param_0, int param_1) { - - if ((__ho7 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getDir", params); - } else { - return super.getDir(param_0, param_1); - } - } - - public java.io.File getExternalCacheDir() { - - if ((__ho7 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getExternalCacheDir", params); - } else { - return super.getExternalCacheDir(); - } - } - - public java.io.File getExternalFilesDir(java.lang.String param_0) { - - if ((__ho7 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getExternalFilesDir", params); - } else { - return super.getExternalFilesDir(param_0); - } - } - - public java.io.File getFileStreamPath(java.lang.String param_0) { - - if ((__ho7 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getFileStreamPath", params); - } else { - return super.getFileStreamPath(param_0); - } - } - - public java.io.File getFilesDir() { - - if ((__ho7 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getFilesDir", params); - } else { - return super.getFilesDir(); - } - } - - public android.app.FragmentManager getFragmentManager() { - - if ((__ho7 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (android.app.FragmentManager)com.tns.Platform.callJSMethod(this, "getFragmentManager", params); - } else { - return super.getFragmentManager(); - } - } - - public android.content.Intent getIntent() { - - if ((__ho7 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (android.content.Intent)com.tns.Platform.callJSMethod(this, "getIntent", params); - } else { - return super.getIntent(); - } - } - - public java.lang.Object getLastNonConfigurationInstance() { - - if ((__ho8 & (1 << 0)) > 0) { - java.lang.Object[] params = null; - return (java.lang.Object)com.tns.Platform.callJSMethod(this, "getLastNonConfigurationInstance", params); - } else { - return super.getLastNonConfigurationInstance(); - } - } - - public android.view.LayoutInflater getLayoutInflater() { - - if ((__ho8 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - return (android.view.LayoutInflater)com.tns.Platform.callJSMethod(this, "getLayoutInflater", params); - } else { - return super.getLayoutInflater(); - } - } - - public android.app.LoaderManager getLoaderManager() { - - if ((__ho8 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (android.app.LoaderManager)com.tns.Platform.callJSMethod(this, "getLoaderManager", params); - } else { - return super.getLoaderManager(); - } - } - - public java.lang.String getLocalClassName() { - - if ((__ho8 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String)com.tns.Platform.callJSMethod(this, "getLocalClassName", params); - } else { - return super.getLocalClassName(); - } - } - - public android.os.Looper getMainLooper() { - - if ((__ho8 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - return (android.os.Looper)com.tns.Platform.callJSMethod(this, "getMainLooper", params); - } else { - return super.getMainLooper(); - } - } - - public android.view.MenuInflater getMenuInflater() { - - if ((__ho8 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (android.view.MenuInflater)com.tns.Platform.callJSMethod(this, "getMenuInflater", params); - } else { - return super.getMenuInflater(); - } - } - - public java.io.File getObbDir() { - - if ((__ho8 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (java.io.File)com.tns.Platform.callJSMethod(this, "getObbDir", params); - } else { - return super.getObbDir(); - } - } - - public java.lang.String getPackageCodePath() { - - if ((__ho8 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String)com.tns.Platform.callJSMethod(this, "getPackageCodePath", params); - } else { - return super.getPackageCodePath(); - } - } - - public android.content.pm.PackageManager getPackageManager() { - - if ((__ho9 & (1 << 0)) > 0) { - java.lang.Object[] params = null; - return (android.content.pm.PackageManager)com.tns.Platform.callJSMethod(this, "getPackageManager", params); - } else { - return super.getPackageManager(); - } - } - - public java.lang.String getPackageName() { - - if ((__ho9 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String)com.tns.Platform.callJSMethod(this, "getPackageName", params); - } else { - return super.getPackageName(); - } - } - - public java.lang.String getPackageResourcePath() { - - if ((__ho9 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String)com.tns.Platform.callJSMethod(this, "getPackageResourcePath", params); - } else { - return super.getPackageResourcePath(); - } - } - - public android.content.Intent getParentActivityIntent() { - - if ((__ho9 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (android.content.Intent)com.tns.Platform.callJSMethod(this, "getParentActivityIntent", params); - } else { - return super.getParentActivityIntent(); - } - } - - public android.content.SharedPreferences getPreferences(int param_0) { - - if ((__ho9 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.content.SharedPreferences)com.tns.Platform.callJSMethod(this, "getPreferences", params); - } else { - return super.getPreferences(param_0); - } - } - - public int getRequestedOrientation() { - - if ((__ho9 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (Integer)com.tns.Platform.callJSMethod(this, "getRequestedOrientation", params); - } else { - return super.getRequestedOrientation(); - } - } - - public android.content.res.Resources getResources() { - if ((__ho9 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (android.content.res.Resources)com.tns.Platform.callJSMethod(this, "getResources", params); - } else { - return super.getResources(); - } - } - - public android.content.SharedPreferences getSharedPreferences(java.lang.String param_0, int param_1) { - - if ((__ho9 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (android.content.SharedPreferences)com.tns.Platform.callJSMethod(this, "getSharedPreferences", params); - } else { - return super.getSharedPreferences(param_0, param_1); - } - } - - public java.lang.Object getSystemService(java.lang.String param_0) { - if ((__ho10 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (java.lang.Object)com.tns.Platform.callJSMethod(this, "getSystemService", params); - } else { - return super.getSystemService(param_0); - } - } - - public int getTaskId() { - - if ((__ho10 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - return (Integer)com.tns.Platform.callJSMethod(this, "getTaskId", params); - } else { - return super.getTaskId(); - } - } - - public android.content.res.Resources.Theme getTheme() { - - if ((__ho10 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (android.content.res.Resources.Theme)com.tns.Platform.callJSMethod(this, "getTheme", params); - } else { - return super.getTheme(); - } - } - - public android.graphics.drawable.Drawable getWallpaper() { - - if ((__ho10 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - return (android.graphics.drawable.Drawable)com.tns.Platform.callJSMethod(this, "getWallpaper", params); - } else { - return super.getWallpaper(); - } - } - - public int getWallpaperDesiredMinimumHeight() { - - if ((__ho10 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - return (Integer)com.tns.Platform.callJSMethod(this, "getWallpaperDesiredMinimumHeight", params); - } else { - return super.getWallpaperDesiredMinimumHeight(); - } - } - - public int getWallpaperDesiredMinimumWidth() { - - if ((__ho10 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (Integer)com.tns.Platform.callJSMethod(this, "getWallpaperDesiredMinimumWidth", params); - } else { - return super.getWallpaperDesiredMinimumWidth(); - } - } - - public android.view.Window getWindow() { - - if ((__ho10 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (android.view.Window)com.tns.Platform.callJSMethod(this, "getWindow", params); - } else { - return super.getWindow(); - } - } - - public android.view.WindowManager getWindowManager() { - - if ((__ho10 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (android.view.WindowManager)com.tns.Platform.callJSMethod(this, "getWindowManager", params); - } else { - return super.getWindowManager(); - } - } - - public void grantUriPermission(java.lang.String param_0, android.net.Uri param_1, int param_2) { - - if ((__ho11 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "grantUriPermission", params); - } else { - super.grantUriPermission(param_0, param_1, param_2); - } - } - - public boolean hasWindowFocus() { - - if ((__ho11 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "hasWindowFocus", params); - } else { - return super.hasWindowFocus(); - } - } - - public int hashCode() { - - if ((__ho11 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (Integer)com.tns.Platform.callJSMethod(this, "hashCode", params); - } else { - return super.hashCode(); - } - } - - public void invalidateOptionsMenu() { - - if ((__ho11 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "invalidateOptionsMenu", params); - } else { - super.invalidateOptionsMenu(); - } - } - - public boolean isChangingConfigurations() { - - if ((__ho11 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "isChangingConfigurations", params); - } else { - return super.isChangingConfigurations(); - } - } - - public boolean isDestroyed() { - - if ((__ho11 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "isDestroyed", params); - } else { - return super.isDestroyed(); - } - } - - public boolean isFinishing() { - - if ((__ho11 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "isFinishing", params); - } else { - return super.isFinishing(); - } - } - - public boolean isRestricted() { - - if ((__ho11 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "isRestricted", params); - } else { - return super.isRestricted(); - } - } - - public boolean isTaskRoot() { - - if ((__ho12 & (1 << 0)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "isTaskRoot", params); - } else { - return super.isTaskRoot(); - } - } - - public boolean moveTaskToBack(boolean param_0) { - - if ((__ho12 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "moveTaskToBack", params); - } else { - return super.moveTaskToBack(param_0); - } - } - - public boolean navigateUpTo(android.content.Intent param_0) { - - if ((__ho12 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "navigateUpTo", params); - } else { - return super.navigateUpTo(param_0); - } - } - - public boolean navigateUpToFromChild(android.app.Activity param_0, android.content.Intent param_1) { - - if ((__ho12 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "navigateUpToFromChild", params); - } else { - return super.navigateUpToFromChild(param_0, param_1); - } - } - - public void onActionModeFinished(android.view.ActionMode param_0) { - - if ((__ho12 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onActionModeFinished", params); - } else { - super.onActionModeFinished(param_0); - } - } - - public void onActionModeStarted(android.view.ActionMode param_0) { - - if ((__ho12 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onActionModeStarted", params); - } else { - super.onActionModeStarted(param_0); - } - } - - protected void onActivityResult(int param_0, int param_1, android.content.Intent param_2) { - - if ((__ho12 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "onActivityResult", params); - } else { - super.onActivityResult(param_0, param_1, param_2); - } - } - - protected void onApplyThemeResource(android.content.res.Resources.Theme param_0, int param_1, boolean param_2) { - if ((__ho12 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "onApplyThemeResource", params); - } else { - super.onApplyThemeResource(param_0, param_1, param_2); - } - } - - public void onAttachFragment(android.app.Fragment param_0) { - - if ((__ho13 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onAttachFragment", params); - } else { - super.onAttachFragment(param_0); - } - } - - public void onAttachedToWindow() { - - if ((__ho13 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onAttachedToWindow", params); - } else { - super.onAttachedToWindow(); - } - } - - public void onBackPressed() { - - if ((__ho13 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onBackPressed", params); - } else { - super.onBackPressed(); - } - } - - protected void onChildTitleChanged(android.app.Activity param_0, java.lang.CharSequence param_1) { - - if ((__ho13 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "onChildTitleChanged", params); - } else { - super.onChildTitleChanged(param_0, param_1); - } - } - - public void onConfigurationChanged(android.content.res.Configuration param_0) { - - if ((__ho13 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onConfigurationChanged", params); - } else { - super.onConfigurationChanged(param_0); - } - } - - public void onContentChanged() { - - if ((__ho13 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onContentChanged", params); - } else { - super.onContentChanged(); - } - } - - public boolean onContextItemSelected(android.view.MenuItem param_0) { - - if ((__ho13 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onContextItemSelected", params); - } else { - return super.onContextItemSelected(param_0); - } - } - - public void onContextMenuClosed(android.view.Menu param_0) { - - if ((__ho13 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onContextMenuClosed", params); - } else { - super.onContextMenuClosed(param_0); - } - } - - protected void onCreate(android.os.Bundle param_0) { - if(ErrorReport.HasApplicationCreateError) - { - super.onCreate(param_0); - this.finish(); - return; - } - - if (!__initialized) { - __initialized = true; - - Log.d(Platform.DEFAULT_LOG_TAG, "Creating Activity with intent: " + super.getIntent().toString() + " action:" + super.getIntent().getAction()); - - if (BuildConfig.DEBUG && super.getIntent().getAction() == null) - { - super.getIntent().setAction(android.content.Intent.ACTION_MAIN); - } - com.tns.Platform.initInstance(this, super.getIntent()); - } - if ((__ho14 & (1 << 0)) > 0) { - boolean isErrorReport = ErrorReport.hasIntent(this.getIntent()); - if (isErrorReport) - { - super.onCreate(param_0); - new ErrorReport(this).buildUI(); - } - else - { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onCreate", params); - } - } else { - super.onCreate(param_0); - } - - } - - public void onCreateContextMenu(android.view.ContextMenu param_0, android.view.View param_1, android.view.ContextMenu.ContextMenuInfo param_2) { - - if ((__ho14 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "onCreateContextMenu", params); - } else { - super.onCreateContextMenu(param_0, param_1, param_2); - } - } - - public java.lang.CharSequence onCreateDescription() { - - if ((__ho14 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - return (java.lang.CharSequence)com.tns.Platform.callJSMethod(this, "onCreateDescription", params); - } else { - return super.onCreateDescription(); - } - } - - protected android.app.Dialog onCreateDialog(int param_0) { - - if ((__ho14 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.app.Dialog)com.tns.Platform.callJSMethod(this, "onCreateDialog", params); - } else { - return super.onCreateDialog(param_0); - } - } - - protected android.app.Dialog onCreateDialog(int param_0, android.os.Bundle param_1) { - - if ((__ho14 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (android.app.Dialog)com.tns.Platform.callJSMethod(this, "onCreateDialog", params); - } else { - return super.onCreateDialog(param_0, param_1); - } - } - - public void onCreateNavigateUpTaskStack(android.app.TaskStackBuilder param_0) { - - if ((__ho14 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onCreateNavigateUpTaskStack", params); - } else { - super.onCreateNavigateUpTaskStack(param_0); - } - } - - public boolean onCreateOptionsMenu(android.view.Menu param_0) { - - if ((__ho14 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onCreateOptionsMenu", params); - } else { - return super.onCreateOptionsMenu(param_0); - } - } - - public boolean onCreatePanelMenu(int param_0, android.view.Menu param_1) { - - if ((__ho14 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onCreatePanelMenu", params); - } else { - return super.onCreatePanelMenu(param_0, param_1); - } - } - - public android.view.View onCreatePanelView(int param_0) { - - if ((__ho14 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.view.View)com.tns.Platform.callJSMethod(this, "onCreatePanelView", params); - } else { - return super.onCreatePanelView(param_0); - } - } - - public boolean onCreateThumbnail(android.graphics.Bitmap param_0, android.graphics.Canvas param_1) { - - if ((__ho15 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onCreateThumbnail", params); - } else { - return super.onCreateThumbnail(param_0, param_1); - } - } - - public android.view.View onCreateView(java.lang.String param_0, android.content.Context param_1, android.util.AttributeSet param_2) { - - if ((__ho15 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (android.view.View)com.tns.Platform.callJSMethod(this, "onCreateView", params); - } else { - return super.onCreateView(param_0, param_1, param_2); - } - } - - public android.view.View onCreateView(android.view.View param_0, java.lang.String param_1, android.content.Context param_2, android.util.AttributeSet param_3) { - - if ((__ho15 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - return (android.view.View)com.tns.Platform.callJSMethod(this, "onCreateView", params); - } else { - return super.onCreateView(param_0, param_1, param_2, param_3); - } - } - - protected void onDestroy() { - - if ((__ho15 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onDestroy", params); - } else { - super.onDestroy(); - } - } - - public void onDetachedFromWindow() { - - if ((__ho15 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onDetachedFromWindow", params); - } else { - super.onDetachedFromWindow(); - } - } - - public boolean onGenericMotionEvent(android.view.MotionEvent param_0) { - - if ((__ho15 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onGenericMotionEvent", params); - } else { - return super.onGenericMotionEvent(param_0); - } - } - - public boolean onKeyDown(int param_0, android.view.KeyEvent param_1) { - - if ((__ho15 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyDown", params); - } else { - return super.onKeyDown(param_0, param_1); - } - } - - public boolean onKeyLongPress(int param_0, android.view.KeyEvent param_1) { - - if ((__ho15 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyLongPress", params); - } else { - return super.onKeyLongPress(param_0, param_1); - } - } - - public boolean onKeyMultiple(int param_0, int param_1, android.view.KeyEvent param_2) { - - if ((__ho15 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyMultiple", params); - } else { - return super.onKeyMultiple(param_0, param_1, param_2); - } - } - - public boolean onKeyShortcut(int param_0, android.view.KeyEvent param_1) { - - if ((__ho16 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyShortcut", params); - } else { - return super.onKeyShortcut(param_0, param_1); - } - } - - public boolean onKeyUp(int param_0, android.view.KeyEvent param_1) { - - if ((__ho16 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyUp", params); - } else { - return super.onKeyUp(param_0, param_1); - } - } - - public void onLowMemory() { - - if ((__ho16 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onLowMemory", params); - } else { - super.onLowMemory(); - } - } - - public boolean onMenuItemSelected(int param_0, android.view.MenuItem param_1) { - - if ((__ho16 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onMenuItemSelected", params); - } else { - return super.onMenuItemSelected(param_0, param_1); - } - } - - public boolean onMenuOpened(int param_0, android.view.Menu param_1) { - - if ((__ho16 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "onMenuOpened", params); - } else { - return super.onMenuOpened(param_0, param_1); - } - } - - public boolean onNavigateUp() { - - if ((__ho16 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "onNavigateUp", params); - } else { - return super.onNavigateUp(); - } - } - - public boolean onNavigateUpFromChild(android.app.Activity param_0) { - - if ((__ho16 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onNavigateUpFromChild", params); - } else { - return super.onNavigateUpFromChild(param_0); - } - } - - protected void onNewIntent(android.content.Intent param_0) { - - if ((__ho16 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onNewIntent", params); - } else { - super.onNewIntent(param_0); - } - } - - public boolean onOptionsItemSelected(android.view.MenuItem param_0) { - - if ((__ho17 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onOptionsItemSelected", params); - } else { - return super.onOptionsItemSelected(param_0); - } - } - - public void onOptionsMenuClosed(android.view.Menu param_0) { - - if ((__ho17 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onOptionsMenuClosed", params); - } else { - super.onOptionsMenuClosed(param_0); - } - } - - public void onPanelClosed(int param_0, android.view.Menu param_1) { - - if ((__ho17 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "onPanelClosed", params); - } else { - super.onPanelClosed(param_0, param_1); - } - } - - protected void onPause() { - - if ((__ho17 & (1 << 3)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onPause", params); - } else { - super.onPause(); - } - } - - protected void onPostCreate(android.os.Bundle param_0) { - - if ((__ho17 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onPostCreate", params); - } else { - super.onPostCreate(param_0); - } - } - - protected void onPostResume() { - - if ((__ho17 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onPostResume", params); - } else { - super.onPostResume(); - } - } - - protected void onPrepareDialog(int param_0, android.app.Dialog param_1, android.os.Bundle param_2) { - - if ((__ho17 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "onPrepareDialog", params); - } else { - super.onPrepareDialog(param_0, param_1, param_2); - } - } - - protected void onPrepareDialog(int param_0, android.app.Dialog param_1) { - - if ((__ho17 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "onPrepareDialog", params); - } else { - super.onPrepareDialog(param_0, param_1); - } - } - - public void onPrepareNavigateUpTaskStack(android.app.TaskStackBuilder param_0) { - - if ((__ho17 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onPrepareNavigateUpTaskStack", params); - } else { - super.onPrepareNavigateUpTaskStack(param_0); - } - } - - public boolean onPrepareOptionsMenu(android.view.Menu param_0) { - - if ((__ho18 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onPrepareOptionsMenu", params); - } else { - return super.onPrepareOptionsMenu(param_0); - } - } - - public boolean onPreparePanel(int param_0, android.view.View param_1, android.view.Menu param_2) { - - if ((__ho18 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (Boolean)com.tns.Platform.callJSMethod(this, "onPreparePanel", params); - } else { - return super.onPreparePanel(param_0, param_1, param_2); - } - } - - protected void onRestart() { - - if ((__ho18 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onRestart", params); - } else { - super.onRestart(); - } - } - - protected void onRestoreInstanceState(android.os.Bundle param_0) { - - if ((__ho18 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onRestoreInstanceState", params); - } else { - super.onRestoreInstanceState(param_0); - } - } - - protected void onResume() { - - if ((__ho18 & (1 << 4)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onResume", params); - } else { - super.onResume(); - } - } - - public java.lang.Object onRetainNonConfigurationInstance() { - - if ((__ho18 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (java.lang.Object)com.tns.Platform.callJSMethod(this, "onRetainNonConfigurationInstance", params); - } else { - return super.onRetainNonConfigurationInstance(); - } - } - - protected void onSaveInstanceState(android.os.Bundle param_0) { - - if ((__ho18 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onSaveInstanceState", params); - } else { - super.onSaveInstanceState(param_0); - } - } - - public boolean onSearchRequested() { - - if ((__ho18 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - return (Boolean)com.tns.Platform.callJSMethod(this, "onSearchRequested", params); - } else { - return super.onSearchRequested(); - } - } - - protected void onStart() { - - if ((__ho19 & (1 << 0)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onStart", params); - } else { - super.onStart(); - } - } - - protected void onStop() { - - if ((__ho19 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onStop", params); - } else { - super.onStop(); - } - } - - protected void onTitleChanged(java.lang.CharSequence param_0, int param_1) { - - if ((__ho19 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "onTitleChanged", params); - } else { - super.onTitleChanged(param_0, param_1); - } - } - - public boolean onTouchEvent(android.view.MotionEvent param_0) { - - if ((__ho19 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onTouchEvent", params); - } else { - return super.onTouchEvent(param_0); - } - } - - public boolean onTrackballEvent(android.view.MotionEvent param_0) { - - if ((__ho19 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "onTrackballEvent", params); - } else { - return super.onTrackballEvent(param_0); - } - } - - public void onTrimMemory(int param_0) { - - if ((__ho19 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onTrimMemory", params); - } else { - super.onTrimMemory(param_0); - } - } - - public void onUserInteraction() { - - if ((__ho19 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onUserInteraction", params); - } else { - super.onUserInteraction(); - } - } - - protected void onUserLeaveHint() { - - if ((__ho19 & (1 << 7)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "onUserLeaveHint", params); - } else { - super.onUserLeaveHint(); - } - } - - public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams param_0) { - - if ((__ho20 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onWindowAttributesChanged", params); - } else { - super.onWindowAttributesChanged(param_0); - } - } - - public void onWindowFocusChanged(boolean param_0) { - - if ((__ho20 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onWindowFocusChanged", params); - } else { - super.onWindowFocusChanged(param_0); - } - } - - public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback param_0) { - - if ((__ho20 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.view.ActionMode)com.tns.Platform.callJSMethod(this, "onWindowStartingActionMode", params); - } else { - return super.onWindowStartingActionMode(param_0); - } - } - - public void openContextMenu(android.view.View param_0) { - - if ((__ho20 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "openContextMenu", params); - } else { - super.openContextMenu(param_0); - } - } - - public java.io.FileInputStream openFileInput(java.lang.String param_0) throws java.io.FileNotFoundException { - - if ((__ho20 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (java.io.FileInputStream)com.tns.Platform.callJSMethod(this, "openFileInput", params); - } else { - return super.openFileInput(param_0); - } - } - - public java.io.FileOutputStream openFileOutput(java.lang.String param_0, int param_1) throws java.io.FileNotFoundException { - - if ((__ho20 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (java.io.FileOutputStream)com.tns.Platform.callJSMethod(this, "openFileOutput", params); - } else { - return super.openFileOutput(param_0, param_1); - } - } - - public void openOptionsMenu() { - - if ((__ho20 & (1 << 6)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "openOptionsMenu", params); - } else { - super.openOptionsMenu(); - } - } - - public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String param_0, int param_1, android.database.sqlite.SQLiteDatabase.CursorFactory param_2, android.database.DatabaseErrorHandler param_3) { - - if ((__ho20 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - return (android.database.sqlite.SQLiteDatabase)com.tns.Platform.callJSMethod(this, "openOrCreateDatabase", params); - } else { - return super.openOrCreateDatabase(param_0, param_1, param_2, param_3); - } - } - - public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String param_0, int param_1, android.database.sqlite.SQLiteDatabase.CursorFactory param_2) { - - if ((__ho20 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (android.database.sqlite.SQLiteDatabase)com.tns.Platform.callJSMethod(this, "openOrCreateDatabase", params); - } else { - return super.openOrCreateDatabase(param_0, param_1, param_2); - } - } - - public void overridePendingTransition(int param_0, int param_1) { - - if ((__ho21 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "overridePendingTransition", params); - } else { - super.overridePendingTransition(param_0, param_1); - } - } - - public android.graphics.drawable.Drawable peekWallpaper() { - - if ((__ho21 & (1 << 1)) > 0) { - java.lang.Object[] params = null; - return (android.graphics.drawable.Drawable)com.tns.Platform.callJSMethod(this, "peekWallpaper", params); - } else { - return super.peekWallpaper(); - } - } - - public void recreate() { - - if ((__ho21 & (1 << 2)) > 0) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "recreate", params); - } else { - super.recreate(); - } - } - - public void registerComponentCallbacks(android.content.ComponentCallbacks param_0) { - - if ((__ho21 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "registerComponentCallbacks", params); - } else { - super.registerComponentCallbacks(param_0); - } - } - - public void registerForContextMenu(android.view.View param_0) { - - if ((__ho21 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "registerForContextMenu", params); - } else { - super.registerForContextMenu(param_0); - } - } - - public android.content.Intent registerReceiver(android.content.BroadcastReceiver param_0, android.content.IntentFilter param_1, java.lang.String param_2, android.os.Handler param_3) { - - if ((__ho21 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - return (android.content.Intent)com.tns.Platform.callJSMethod(this, "registerReceiver", params); - } else { - return super.registerReceiver(param_0, param_1, param_2, param_3); - } - } - - public android.content.Intent registerReceiver(android.content.BroadcastReceiver param_0, android.content.IntentFilter param_1) { - - if ((__ho21 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (android.content.Intent)com.tns.Platform.callJSMethod(this, "registerReceiver", params); - } else { - return super.registerReceiver(param_0, param_1); - } - } - - public void removeStickyBroadcast(android.content.Intent param_0) { - - if ((__ho21 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "removeStickyBroadcast", params); - } else { - super.removeStickyBroadcast(param_0); - } - } - - public void removeStickyBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1) { - - if ((__ho21 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "removeStickyBroadcastAsUser", params); - } else { - super.removeStickyBroadcastAsUser(param_0, param_1); - } - } - - public void revokeUriPermission(android.net.Uri param_0, int param_1) { - - if ((__ho22 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "revokeUriPermission", params); - } else { - super.revokeUriPermission(param_0, param_1); - } - } - - public void sendBroadcast(android.content.Intent param_0, java.lang.String param_1) { - - if ((__ho22 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "sendBroadcast", params); - } else { - super.sendBroadcast(param_0, param_1); - } - } - - public void sendBroadcast(android.content.Intent param_0) { - - if ((__ho22 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "sendBroadcast", params); - } else { - super.sendBroadcast(param_0); - } - } - - public void sendBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1) { - - if ((__ho22 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "sendBroadcastAsUser", params); - } else { - super.sendBroadcastAsUser(param_0, param_1); - } - } - - public void sendBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1, java.lang.String param_2) { - - if ((__ho22 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "sendBroadcastAsUser", params); - } else { - super.sendBroadcastAsUser(param_0, param_1, param_2); - } - } - - public void sendOrderedBroadcast(android.content.Intent param_0, java.lang.String param_1) { - - if ((__ho22 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "sendOrderedBroadcast", params); - } else { - super.sendOrderedBroadcast(param_0, param_1); - } - } - - public void sendOrderedBroadcast(android.content.Intent param_0, java.lang.String param_1, android.content.BroadcastReceiver param_2, android.os.Handler param_3, int param_4, java.lang.String param_5, android.os.Bundle param_6) { - - if ((__ho22 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[7]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - com.tns.Platform.callJSMethod(this, "sendOrderedBroadcast", params); - } else { - super.sendOrderedBroadcast(param_0, param_1, param_2, param_3, param_4, param_5, param_6); - } - } - - public void sendOrderedBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1, java.lang.String param_2, android.content.BroadcastReceiver param_3, android.os.Handler param_4, int param_5, java.lang.String param_6, android.os.Bundle param_7) { - - if ((__ho22 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[8]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - params[7] = param_7; - com.tns.Platform.callJSMethod(this, "sendOrderedBroadcastAsUser", params); - } else { - super.sendOrderedBroadcastAsUser(param_0, param_1, param_2, param_3, param_4, param_5, param_6, param_7); - } - } - - public void sendStickyBroadcast(android.content.Intent param_0) { - - if ((__ho22 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "sendStickyBroadcast", params); - } else { - super.sendStickyBroadcast(param_0); - } - } - - public void sendStickyBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1) { - - if ((__ho22 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "sendStickyBroadcastAsUser", params); - } else { - super.sendStickyBroadcastAsUser(param_0, param_1); - } - } - - public void sendStickyOrderedBroadcast(android.content.Intent param_0, android.content.BroadcastReceiver param_1, android.os.Handler param_2, int param_3, java.lang.String param_4, android.os.Bundle param_5) { - - if ((__ho22 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[6]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - com.tns.Platform.callJSMethod(this, "sendStickyOrderedBroadcast", params); - } else { - super.sendStickyOrderedBroadcast(param_0, param_1, param_2, param_3, param_4, param_5); - } - } - - public void sendStickyOrderedBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1, android.content.BroadcastReceiver param_2, android.os.Handler param_3, int param_4, java.lang.String param_5, android.os.Bundle param_6) { - - if ((__ho23 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[7]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - com.tns.Platform.callJSMethod(this, "sendStickyOrderedBroadcastAsUser", params); - } else { - super.sendStickyOrderedBroadcastAsUser(param_0, param_1, param_2, param_3, param_4, param_5, param_6); - } - } - - public void setContentView(android.view.View param_0) { - - if ((__ho23 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setContentView", params); - } else { - super.setContentView(param_0); - } - } - - public void setContentView(android.view.View param_0, android.view.ViewGroup.LayoutParams param_1) { - - if ((__ho23 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "setContentView", params); - } else { - super.setContentView(param_0, param_1); - } - } - - public void setContentView(int param_0) { - - if ((__ho23 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setContentView", params); - } else { - super.setContentView(param_0); - } - } - - public void setFinishOnTouchOutside(boolean param_0) { - - if ((__ho23 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setFinishOnTouchOutside", params); - } else { - super.setFinishOnTouchOutside(param_0); - } - } - - public void setIntent(android.content.Intent param_0) { - - if ((__ho23 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setIntent", params); - } else { - super.setIntent(param_0); - } - } - - public void setRequestedOrientation(int param_0) { - - if ((__ho23 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setRequestedOrientation", params); - } else { - super.setRequestedOrientation(param_0); - } - } - - public void setTheme(int param_0) { - if ((__ho23 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setTheme", params); - } else { - super.setTheme(param_0); - } - } - - public void setTitle(java.lang.CharSequence param_0) { - - if ((__ho23 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setTitle", params); - } else { - super.setTitle(param_0); - } - } - - public void setTitle(int param_0) { - - if ((__ho23 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setTitle", params); - } else { - super.setTitle(param_0); - } - } - - public void setTitleColor(int param_0) { - - if ((__ho23 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setTitleColor", params); - } else { - super.setTitleColor(param_0); - } - } - - public void setVisible(boolean param_0) { - - if ((__ho24 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setVisible", params); - } else { - super.setVisible(param_0); - } - } - - public void setWallpaper(android.graphics.Bitmap param_0) throws java.io.IOException { - - if ((__ho24 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setWallpaper", params); - } else { - super.setWallpaper(param_0); - } - } - - public void setWallpaper(java.io.InputStream param_0) throws java.io.IOException { - - if ((__ho24 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "setWallpaper", params); - } else { - super.setWallpaper(param_0); - } - } - - public boolean shouldUpRecreateTask(android.content.Intent param_0) { - - if ((__ho24 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "shouldUpRecreateTask", params); - } else { - return super.shouldUpRecreateTask(param_0); - } - } - - public android.view.ActionMode startActionMode(android.view.ActionMode.Callback param_0) { - - if ((__ho24 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.view.ActionMode)com.tns.Platform.callJSMethod(this, "startActionMode", params); - } else { - return super.startActionMode(param_0); - } - } - - public void startActivities(android.content.Intent[] param_0, android.os.Bundle param_1) { - - if ((__ho24 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "startActivities", params); - } else { - super.startActivities(param_0, param_1); - } - } - - public void startActivities(android.content.Intent[] param_0) { - - if ((__ho24 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "startActivities", params); - } else { - super.startActivities(param_0); - } - } - - public void startActivity(android.content.Intent param_0) { - - if ((__ho24 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "startActivity", params); - } else { - super.startActivity(param_0); - } - } - - public void startActivity(android.content.Intent param_0, android.os.Bundle param_1) { - - if ((__ho24 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "startActivity", params); - } else { - super.startActivity(param_0, param_1); - } - } - - public void startActivityForResult(android.content.Intent param_0, int param_1, android.os.Bundle param_2) { - - if ((__ho24 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "startActivityForResult", params); - } else { - super.startActivityForResult(param_0, param_1, param_2); - } - } - - public void startActivityForResult(android.content.Intent param_0, int param_1) { - - if ((__ho24 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "startActivityForResult", params); - } else { - super.startActivityForResult(param_0, param_1); - } - } - - public void startActivityFromChild(android.app.Activity param_0, android.content.Intent param_1, int param_2) { - - if ((__ho24 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "startActivityFromChild", params); - } else { - super.startActivityFromChild(param_0, param_1, param_2); - } - } - - public void startActivityFromChild(android.app.Activity param_0, android.content.Intent param_1, int param_2, android.os.Bundle param_3) { - - if ((__ho24 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - com.tns.Platform.callJSMethod(this, "startActivityFromChild", params); - } else { - super.startActivityFromChild(param_0, param_1, param_2, param_3); - } - } - - public void startActivityFromFragment(android.app.Fragment param_0, android.content.Intent param_1, int param_2) { - - if ((__ho25 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - com.tns.Platform.callJSMethod(this, "startActivityFromFragment", params); - } else { - super.startActivityFromFragment(param_0, param_1, param_2); - } - } - - public void startActivityFromFragment(android.app.Fragment param_0, android.content.Intent param_1, int param_2, android.os.Bundle param_3) { - - if ((__ho25 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - com.tns.Platform.callJSMethod(this, "startActivityFromFragment", params); - } else { - super.startActivityFromFragment(param_0, param_1, param_2, param_3); - } - } - - public boolean startActivityIfNeeded(android.content.Intent param_0, int param_1) { - - if ((__ho25 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "startActivityIfNeeded", params); - } else { - return super.startActivityIfNeeded(param_0, param_1); - } - } - - public boolean startActivityIfNeeded(android.content.Intent param_0, int param_1, android.os.Bundle param_2) { - - if ((__ho25 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (Boolean)com.tns.Platform.callJSMethod(this, "startActivityIfNeeded", params); - } else { - return super.startActivityIfNeeded(param_0, param_1, param_2); - } - } - - public boolean startInstrumentation(android.content.ComponentName param_0, java.lang.String param_1, android.os.Bundle param_2) { - - if ((__ho25 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[3]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - return (Boolean)com.tns.Platform.callJSMethod(this, "startInstrumentation", params); - } else { - return super.startInstrumentation(param_0, param_1, param_2); - } - } - - public void startIntentSender(android.content.IntentSender param_0, android.content.Intent param_1, int param_2, int param_3, int param_4) throws android.content.IntentSender.SendIntentException { - - if ((__ho25 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[5]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - com.tns.Platform.callJSMethod(this, "startIntentSender", params); - } else { - super.startIntentSender(param_0, param_1, param_2, param_3, param_4); - } - } - - public void startIntentSender(android.content.IntentSender param_0, android.content.Intent param_1, int param_2, int param_3, int param_4, android.os.Bundle param_5) throws android.content.IntentSender.SendIntentException { - - if ((__ho25 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[6]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - com.tns.Platform.callJSMethod(this, "startIntentSender", params); - } else { - super.startIntentSender(param_0, param_1, param_2, param_3, param_4, param_5); - } - } - - public void startIntentSenderForResult(android.content.IntentSender param_0, int param_1, android.content.Intent param_2, int param_3, int param_4, int param_5, android.os.Bundle param_6) throws android.content.IntentSender.SendIntentException { - - if ((__ho25 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[7]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - com.tns.Platform.callJSMethod(this, "startIntentSenderForResult", params); - } else { - super.startIntentSenderForResult(param_0, param_1, param_2, param_3, param_4, param_5, param_6); - } - } - - public void startIntentSenderForResult(android.content.IntentSender param_0, int param_1, android.content.Intent param_2, int param_3, int param_4, int param_5) throws android.content.IntentSender.SendIntentException { - - if ((__ho25 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[6]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - com.tns.Platform.callJSMethod(this, "startIntentSenderForResult", params); - } else { - super.startIntentSenderForResult(param_0, param_1, param_2, param_3, param_4, param_5); - } - } - - public void startIntentSenderFromChild(android.app.Activity param_0, android.content.IntentSender param_1, int param_2, android.content.Intent param_3, int param_4, int param_5, int param_6) throws android.content.IntentSender.SendIntentException { - - if ((__ho25 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[7]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - com.tns.Platform.callJSMethod(this, "startIntentSenderFromChild", params); - } else { - super.startIntentSenderFromChild(param_0, param_1, param_2, param_3, param_4, param_5, param_6); - } - } - - public void startIntentSenderFromChild(android.app.Activity param_0, android.content.IntentSender param_1, int param_2, android.content.Intent param_3, int param_4, int param_5, int param_6, android.os.Bundle param_7) throws android.content.IntentSender.SendIntentException { - - if ((__ho25 & (1 << 5)) > 0) { - java.lang.Object[] params = new Object[8]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - params[4] = param_4; - params[5] = param_5; - params[6] = param_6; - params[7] = param_7; - com.tns.Platform.callJSMethod(this, "startIntentSenderFromChild", params); - } else { - super.startIntentSenderFromChild(param_0, param_1, param_2, param_3, param_4, param_5, param_6, param_7); - } - } - - public void startManagingCursor(android.database.Cursor param_0) { - - if ((__ho25 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "startManagingCursor", params); - } else { - super.startManagingCursor(param_0); - } - } - - public boolean startNextMatchingActivity(android.content.Intent param_0) { - - if ((__ho25 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "startNextMatchingActivity", params); - } else { - return super.startNextMatchingActivity(param_0); - } - } - - public boolean startNextMatchingActivity(android.content.Intent param_0, android.os.Bundle param_1) { - - if ((__ho25 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - return (Boolean)com.tns.Platform.callJSMethod(this, "startNextMatchingActivity", params); - } else { - return super.startNextMatchingActivity(param_0, param_1); - } - } - - public void startSearch(java.lang.String param_0, boolean param_1, android.os.Bundle param_2, boolean param_3) { - - if ((__ho26 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[4]; - params[0] = param_0; - params[1] = param_1; - params[2] = param_2; - params[3] = param_3; - com.tns.Platform.callJSMethod(this, "startSearch", params); - } else { - super.startSearch(param_0, param_1, param_2, param_3); - } - } - - public android.content.ComponentName startService(android.content.Intent param_0) { - - if ((__ho26 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (android.content.ComponentName)com.tns.Platform.callJSMethod(this, "startService", params); - } else { - return super.startService(param_0); - } } - - public void stopManagingCursor(android.database.Cursor param_0) { - - if ((__ho26 & (1 << 2)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "stopManagingCursor", params); - } else { - super.stopManagingCursor(param_0); - } - } - - public boolean stopService(android.content.Intent param_0) { - - if ((__ho26 & (1 << 3)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - return (Boolean)com.tns.Platform.callJSMethod(this, "stopService", params); - } else { - return super.stopService(param_0); - } - } - - public void takeKeyEvents(boolean param_0) { - - if ((__ho26 & (1 << 4)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "takeKeyEvents", params); - } else { - super.takeKeyEvents(param_0); - } + + public int hashCode__super() { + return super.hashCode(); } - - public java.lang.String toString() { - - if ((__ho26 & (1 << 5)) > 0) { - java.lang.Object[] params = null; - return (java.lang.String)com.tns.Platform.callJSMethod(this, "toString", params); - } else { - return super.toString(); - } + + public boolean equals__super(Object other) { + return super.equals(other); } - public void triggerSearch(java.lang.String param_0, android.os.Bundle param_1) { - - if ((__ho26 & (1 << 6)) > 0) { - java.lang.Object[] params = new Object[2]; - params[0] = param_0; - params[1] = param_1; - com.tns.Platform.callJSMethod(this, "triggerSearch", params); - } else { - super.triggerSearch(param_0, param_1); + protected void onCreate(android.os.Bundle param_0) { + if(ErrorReport.HasApplicationCreateError) + { + super.onCreate(param_0); + this.finish(); + return; } - } - - public void unbindService(android.content.ServiceConnection param_0) { - if ((__ho26 & (1 << 7)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "unbindService", params); - } else { - super.unbindService(param_0); - } - } - - public void unregisterComponentCallbacks(android.content.ComponentCallbacks param_0) { + Log.d(Platform.DEFAULT_LOG_TAG, "Creating Activity with intent: " + super.getIntent().toString() + " action:" + super.getIntent().getAction()); - if ((__ho27 & (1 << 0)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "unregisterComponentCallbacks", params); - } else { - super.unregisterComponentCallbacks(param_0); + if (BuildConfig.DEBUG && super.getIntent().getAction() == null) + { + super.getIntent().setAction(android.content.Intent.ACTION_MAIN); } - } + com.tns.Platform.initInstance(this, super.getIntent()); - public void unregisterForContextMenu(android.view.View param_0) { - - if ((__ho27 & (1 << 1)) > 0) { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "unregisterForContextMenu", params); - } else { - super.unregisterForContextMenu(param_0); + boolean isErrorReport = ErrorReport.hasIntent(this.getIntent()); + if (isErrorReport) + { + super.onCreate(param_0); + new ErrorReport(this).buildUI(); } - } - - public void unregisterReceiver(android.content.BroadcastReceiver param_0) { - - if ((__ho27 & (1 << 2)) > 0) { + else + { java.lang.Object[] params = new Object[1]; params[0] = param_0; - com.tns.Platform.callJSMethod(this, "unregisterReceiver", params); - } else { - super.unregisterReceiver(param_0); - } - } - - public boolean equals__super(java.lang.Object other) { - return super.equals(other); - } - public int hashCode__super() { - return super.hashCode(); - } - public void setNativeScriptOverrides(java.lang.String[] overrides) { - for (java.lang.String name: overrides) { - setNativeScriptOverride(name); + com.tns.Platform.callJSMethod(this, "onCreate", params); } } - - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("init")) { - __ctorOverridden = true; - } - if (name.equals("addContentView")) { - __ho0 |= (1 << 0); - } else if (name.equals("applyOverrideConfiguration")) { - __ho0 |= (1 << 1); - } else if (name.equals("attachBaseContext")) { - __ho0 |= (1 << 2); - } else if (name.equals("bindService")) { - __ho0 |= (1 << 3); - } else if (name.equals("checkCallingOrSelfPermission")) { - __ho0 |= (1 << 4); - } else if (name.equals("checkCallingOrSelfUriPermission")) { - __ho0 |= (1 << 5); - } else if (name.equals("checkCallingPermission")) { - __ho0 |= (1 << 6); - } else if (name.equals("checkCallingUriPermission")) { - __ho0 |= (1 << 7); - } else if (name.equals("checkPermission")) { - __ho1 |= (1 << 0); - } else if (name.equals("checkUriPermission")) { - __ho1 |= (1 << 1); - } else if (name.equals("clearWallpaper")) { - __ho1 |= (1 << 2); - } else if (name.equals("clone")) { - __ho1 |= (1 << 3); - } else if (name.equals("closeContextMenu")) { - __ho1 |= (1 << 4); - } else if (name.equals("closeOptionsMenu")) { - __ho1 |= (1 << 5); - } else if (name.equals("createConfigurationContext")) { - __ho1 |= (1 << 6); - } else if (name.equals("createDisplayContext")) { - __ho1 |= (1 << 7); - } else if (name.equals("createPackageContext")) { - __ho2 |= (1 << 0); - } else if (name.equals("createPendingResult")) { - __ho2 |= (1 << 1); - } else if (name.equals("databaseList")) { - __ho2 |= (1 << 2); - } else if (name.equals("deleteDatabase")) { - __ho2 |= (1 << 3); - } else if (name.equals("deleteFile")) { - __ho2 |= (1 << 4); - } else if (name.equals("dispatchGenericMotionEvent")) { - __ho2 |= (1 << 5); - } else if (name.equals("dispatchKeyEvent")) { - __ho2 |= (1 << 6); - } else if (name.equals("dispatchKeyShortcutEvent")) { - __ho2 |= (1 << 7); - } else if (name.equals("dispatchPopulateAccessibilityEvent")) { - __ho3 |= (1 << 0); - } else if (name.equals("dispatchTouchEvent")) { - __ho3 |= (1 << 1); - } else if (name.equals("dispatchTrackballEvent")) { - __ho3 |= (1 << 2); - } else if (name.equals("dump")) { - __ho3 |= (1 << 3); - } else if (name.equals("enforceCallingOrSelfPermission")) { - __ho3 |= (1 << 4); - } else if (name.equals("enforceCallingOrSelfUriPermission")) { - __ho3 |= (1 << 5); - } else if (name.equals("enforceCallingPermission")) { - __ho3 |= (1 << 6); - } else if (name.equals("enforceCallingUriPermission")) { - __ho3 |= (1 << 7); - } else if (name.equals("enforcePermission")) { - __ho4 |= (1 << 0); - } else if (name.equals("enforceUriPermission")) { - __ho4 |= (1 << 1); - } else if (name.equals("equals")) { - __ho4 |= (1 << 2); - } else if (name.equals("fileList")) { - __ho4 |= (1 << 3); - } else if (name.equals("finalize")) { - __ho4 |= (1 << 4); - } else if (name.equals("findViewById")) { - __ho4 |= (1 << 5); - } else if (name.equals("finish")) { - __ho4 |= (1 << 6); - } else if (name.equals("finishActivity")) { - __ho4 |= (1 << 7); - } else if (name.equals("finishActivityFromChild")) { - __ho5 |= (1 << 0); - } else if (name.equals("finishAffinity")) { - __ho5 |= (1 << 1); - } else if (name.equals("finishFromChild")) { - __ho5 |= (1 << 2); - } else if (name.equals("getActionBar")) { - __ho5 |= (1 << 3); - } else if (name.equals("getApplicationContext")) { - __ho5 |= (1 << 4); - } else if (name.equals("getApplicationInfo")) { - __ho5 |= (1 << 5); - } else if (name.equals("getAssets")) { - __ho5 |= (1 << 6); - } else if (name.equals("getBaseContext")) { - __ho5 |= (1 << 7); - } else if (name.equals("getCacheDir")) { - __ho6 |= (1 << 0); - } else if (name.equals("getCallingActivity")) { - __ho6 |= (1 << 1); - } else if (name.equals("getCallingPackage")) { - __ho6 |= (1 << 2); - } else if (name.equals("getChangingConfigurations")) { - __ho6 |= (1 << 3); - } else if (name.equals("getClassLoader")) { - __ho6 |= (1 << 4); - } else if (name.equals("getComponentName")) { - __ho6 |= (1 << 5); - } else if (name.equals("getContentResolver")) { - __ho6 |= (1 << 6); - } else if (name.equals("getCurrentFocus")) { - __ho6 |= (1 << 7); - } else if (name.equals("getDatabasePath")) { - __ho7 |= (1 << 0); - } else if (name.equals("getDir")) { - __ho7 |= (1 << 1); - } else if (name.equals("getExternalCacheDir")) { - __ho7 |= (1 << 2); - } else if (name.equals("getExternalFilesDir")) { - __ho7 |= (1 << 3); - } else if (name.equals("getFileStreamPath")) { - __ho7 |= (1 << 4); - } else if (name.equals("getFilesDir")) { - __ho7 |= (1 << 5); - } else if (name.equals("getFragmentManager")) { - __ho7 |= (1 << 6); - } else if (name.equals("getIntent")) { - __ho7 |= (1 << 7); - } else if (name.equals("getLastNonConfigurationInstance")) { - __ho8 |= (1 << 0); - } else if (name.equals("getLayoutInflater")) { - __ho8 |= (1 << 1); - } else if (name.equals("getLoaderManager")) { - __ho8 |= (1 << 2); - } else if (name.equals("getLocalClassName")) { - __ho8 |= (1 << 3); - } else if (name.equals("getMainLooper")) { - __ho8 |= (1 << 4); - } else if (name.equals("getMenuInflater")) { - __ho8 |= (1 << 5); - } else if (name.equals("getObbDir")) { - __ho8 |= (1 << 6); - } else if (name.equals("getPackageCodePath")) { - __ho8 |= (1 << 7); - } else if (name.equals("getPackageManager")) { - __ho9 |= (1 << 0); - } else if (name.equals("getPackageName")) { - __ho9 |= (1 << 1); - } else if (name.equals("getPackageResourcePath")) { - __ho9 |= (1 << 2); - } else if (name.equals("getParentActivityIntent")) { - __ho9 |= (1 << 3); - } else if (name.equals("getPreferences")) { - __ho9 |= (1 << 4); - } else if (name.equals("getRequestedOrientation")) { - __ho9 |= (1 << 5); - } else if (name.equals("getResources")) { - __ho9 |= (1 << 6); - } else if (name.equals("getSharedPreferences")) { - __ho9 |= (1 << 7); - } else if (name.equals("getSystemService")) { - __ho10 |= (1 << 0); - } else if (name.equals("getTaskId")) { - __ho10 |= (1 << 1); - } else if (name.equals("getTheme")) { - __ho10 |= (1 << 2); - } else if (name.equals("getWallpaper")) { - __ho10 |= (1 << 3); - } else if (name.equals("getWallpaperDesiredMinimumHeight")) { - __ho10 |= (1 << 4); - } else if (name.equals("getWallpaperDesiredMinimumWidth")) { - __ho10 |= (1 << 5); - } else if (name.equals("getWindow")) { - __ho10 |= (1 << 6); - } else if (name.equals("getWindowManager")) { - __ho10 |= (1 << 7); - } else if (name.equals("grantUriPermission")) { - __ho11 |= (1 << 0); - } else if (name.equals("hasWindowFocus")) { - __ho11 |= (1 << 1); - } else if (name.equals("hashCode")) { - __ho11 |= (1 << 2); - } else if (name.equals("invalidateOptionsMenu")) { - __ho11 |= (1 << 3); - } else if (name.equals("isChangingConfigurations")) { - __ho11 |= (1 << 4); - } else if (name.equals("isDestroyed")) { - __ho11 |= (1 << 5); - } else if (name.equals("isFinishing")) { - __ho11 |= (1 << 6); - } else if (name.equals("isRestricted")) { - __ho11 |= (1 << 7); - } else if (name.equals("isTaskRoot")) { - __ho12 |= (1 << 0); - } else if (name.equals("moveTaskToBack")) { - __ho12 |= (1 << 1); - } else if (name.equals("navigateUpTo")) { - __ho12 |= (1 << 2); - } else if (name.equals("navigateUpToFromChild")) { - __ho12 |= (1 << 3); - } else if (name.equals("onActionModeFinished")) { - __ho12 |= (1 << 4); - } else if (name.equals("onActionModeStarted")) { - __ho12 |= (1 << 5); - } else if (name.equals("onActivityResult")) { - __ho12 |= (1 << 6); - } else if (name.equals("onApplyThemeResource")) { - __ho12 |= (1 << 7); - } else if (name.equals("onAttachFragment")) { - __ho13 |= (1 << 0); - } else if (name.equals("onAttachedToWindow")) { - __ho13 |= (1 << 1); - } else if (name.equals("onBackPressed")) { - __ho13 |= (1 << 2); - } else if (name.equals("onChildTitleChanged")) { - __ho13 |= (1 << 3); - } else if (name.equals("onConfigurationChanged")) { - __ho13 |= (1 << 4); - } else if (name.equals("onContentChanged")) { - __ho13 |= (1 << 5); - } else if (name.equals("onContextItemSelected")) { - __ho13 |= (1 << 6); - } else if (name.equals("onContextMenuClosed")) { - __ho13 |= (1 << 7); - } else if (name.equals("onCreate")) { - __ho14 |= (1 << 0); - } else if (name.equals("onCreateContextMenu")) { - __ho14 |= (1 << 1); - } else if (name.equals("onCreateDescription")) { - __ho14 |= (1 << 2); - } else if (name.equals("onCreateDialog")) { - __ho14 |= (1 << 3); - } else if (name.equals("onCreateNavigateUpTaskStack")) { - __ho14 |= (1 << 4); - } else if (name.equals("onCreateOptionsMenu")) { - __ho14 |= (1 << 5); - } else if (name.equals("onCreatePanelMenu")) { - __ho14 |= (1 << 6); - } else if (name.equals("onCreatePanelView")) { - __ho14 |= (1 << 7); - } else if (name.equals("onCreateThumbnail")) { - __ho15 |= (1 << 0); - } else if (name.equals("onCreateView")) { - __ho15 |= (1 << 1); - } else if (name.equals("onDestroy")) { - __ho15 |= (1 << 2); - } else if (name.equals("onDetachedFromWindow")) { - __ho15 |= (1 << 3); - } else if (name.equals("onGenericMotionEvent")) { - __ho15 |= (1 << 4); - } else if (name.equals("onKeyDown")) { - __ho15 |= (1 << 5); - } else if (name.equals("onKeyLongPress")) { - __ho15 |= (1 << 6); - } else if (name.equals("onKeyMultiple")) { - __ho15 |= (1 << 7); - } else if (name.equals("onKeyShortcut")) { - __ho16 |= (1 << 0); - } else if (name.equals("onKeyUp")) { - __ho16 |= (1 << 1); - } else if (name.equals("onLowMemory")) { - __ho16 |= (1 << 2); - } else if (name.equals("onMenuItemSelected")) { - __ho16 |= (1 << 3); - } else if (name.equals("onMenuOpened")) { - __ho16 |= (1 << 4); - } else if (name.equals("onNavigateUp")) { - __ho16 |= (1 << 5); - } else if (name.equals("onNavigateUpFromChild")) { - __ho16 |= (1 << 6); - } else if (name.equals("onNewIntent")) { - __ho16 |= (1 << 7); - } else if (name.equals("onOptionsItemSelected")) { - __ho17 |= (1 << 0); - } else if (name.equals("onOptionsMenuClosed")) { - __ho17 |= (1 << 1); - } else if (name.equals("onPanelClosed")) { - __ho17 |= (1 << 2); - } else if (name.equals("onPause")) { - __ho17 |= (1 << 3); - } else if (name.equals("onPostCreate")) { - __ho17 |= (1 << 4); - } else if (name.equals("onPostResume")) { - __ho17 |= (1 << 5); - } else if (name.equals("onPrepareDialog")) { - __ho17 |= (1 << 6); - } else if (name.equals("onPrepareNavigateUpTaskStack")) { - __ho17 |= (1 << 7); - } else if (name.equals("onPrepareOptionsMenu")) { - __ho18 |= (1 << 0); - } else if (name.equals("onPreparePanel")) { - __ho18 |= (1 << 1); - } else if (name.equals("onRestart")) { - __ho18 |= (1 << 2); - } else if (name.equals("onRestoreInstanceState")) { - __ho18 |= (1 << 3); - } else if (name.equals("onResume")) { - __ho18 |= (1 << 4); - } else if (name.equals("onRetainNonConfigurationInstance")) { - __ho18 |= (1 << 5); - } else if (name.equals("onSaveInstanceState")) { - __ho18 |= (1 << 6); - } else if (name.equals("onSearchRequested")) { - __ho18 |= (1 << 7); - } else if (name.equals("onStart")) { - __ho19 |= (1 << 0); - } else if (name.equals("onStop")) { - __ho19 |= (1 << 1); - } else if (name.equals("onTitleChanged")) { - __ho19 |= (1 << 2); - } else if (name.equals("onTouchEvent")) { - __ho19 |= (1 << 3); - } else if (name.equals("onTrackballEvent")) { - __ho19 |= (1 << 4); - } else if (name.equals("onTrimMemory")) { - __ho19 |= (1 << 5); - } else if (name.equals("onUserInteraction")) { - __ho19 |= (1 << 6); - } else if (name.equals("onUserLeaveHint")) { - __ho19 |= (1 << 7); - } else if (name.equals("onWindowAttributesChanged")) { - __ho20 |= (1 << 0); - } else if (name.equals("onWindowFocusChanged")) { - __ho20 |= (1 << 1); - } else if (name.equals("onWindowStartingActionMode")) { - __ho20 |= (1 << 2); - } else if (name.equals("openContextMenu")) { - __ho20 |= (1 << 3); - } else if (name.equals("openFileInput")) { - __ho20 |= (1 << 4); - } else if (name.equals("openFileOutput")) { - __ho20 |= (1 << 5); - } else if (name.equals("openOptionsMenu")) { - __ho20 |= (1 << 6); - } else if (name.equals("openOrCreateDatabase")) { - __ho20 |= (1 << 7); - } else if (name.equals("overridePendingTransition")) { - __ho21 |= (1 << 0); - } else if (name.equals("peekWallpaper")) { - __ho21 |= (1 << 1); - } else if (name.equals("recreate")) { - __ho21 |= (1 << 2); - } else if (name.equals("registerComponentCallbacks")) { - __ho21 |= (1 << 3); - } else if (name.equals("registerForContextMenu")) { - __ho21 |= (1 << 4); - } else if (name.equals("registerReceiver")) { - __ho21 |= (1 << 5); - } else if (name.equals("removeStickyBroadcast")) { - __ho21 |= (1 << 6); - } else if (name.equals("removeStickyBroadcastAsUser")) { - __ho21 |= (1 << 7); - } else if (name.equals("revokeUriPermission")) { - __ho22 |= (1 << 0); - } else if (name.equals("sendBroadcast")) { - __ho22 |= (1 << 1); - } else if (name.equals("sendBroadcastAsUser")) { - __ho22 |= (1 << 2); - } else if (name.equals("sendOrderedBroadcast")) { - __ho22 |= (1 << 3); - } else if (name.equals("sendOrderedBroadcastAsUser")) { - __ho22 |= (1 << 4); - } else if (name.equals("sendStickyBroadcast")) { - __ho22 |= (1 << 5); - } else if (name.equals("sendStickyBroadcastAsUser")) { - __ho22 |= (1 << 6); - } else if (name.equals("sendStickyOrderedBroadcast")) { - __ho22 |= (1 << 7); - } else if (name.equals("sendStickyOrderedBroadcastAsUser")) { - __ho23 |= (1 << 0); - } else if (name.equals("setContentView")) { - __ho23 |= (1 << 1); - } else if (name.equals("setFinishOnTouchOutside")) { - __ho23 |= (1 << 2); - } else if (name.equals("setIntent")) { - __ho23 |= (1 << 3); - } else if (name.equals("setRequestedOrientation")) { - __ho23 |= (1 << 4); - } else if (name.equals("setTheme")) { - __ho23 |= (1 << 5); - } else if (name.equals("setTitle")) { - __ho23 |= (1 << 6); - } else if (name.equals("setTitleColor")) { - __ho23 |= (1 << 7); - } else if (name.equals("setVisible")) { - __ho24 |= (1 << 0); - } else if (name.equals("setWallpaper")) { - __ho24 |= (1 << 1); - } else if (name.equals("shouldUpRecreateTask")) { - __ho24 |= (1 << 2); - } else if (name.equals("startActionMode")) { - __ho24 |= (1 << 3); - } else if (name.equals("startActivities")) { - __ho24 |= (1 << 4); - } else if (name.equals("startActivity")) { - __ho24 |= (1 << 5); - } else if (name.equals("startActivityForResult")) { - __ho24 |= (1 << 6); - } else if (name.equals("startActivityFromChild")) { - __ho24 |= (1 << 7); - } else if (name.equals("startActivityFromFragment")) { - __ho25 |= (1 << 0); - } else if (name.equals("startActivityIfNeeded")) { - __ho25 |= (1 << 1); - } else if (name.equals("startInstrumentation")) { - __ho25 |= (1 << 2); - } else if (name.equals("startIntentSender")) { - __ho25 |= (1 << 3); - } else if (name.equals("startIntentSenderForResult")) { - __ho25 |= (1 << 4); - } else if (name.equals("startIntentSenderFromChild")) { - __ho25 |= (1 << 5); - } else if (name.equals("startManagingCursor")) { - __ho25 |= (1 << 6); - } else if (name.equals("startNextMatchingActivity")) { - __ho25 |= (1 << 7); - } else if (name.equals("startSearch")) { - __ho26 |= (1 << 0); - } else if (name.equals("startService")) { - __ho26 |= (1 << 1); - } else if (name.equals("stopManagingCursor")) { - __ho26 |= (1 << 2); - } else if (name.equals("stopService")) { - __ho26 |= (1 << 3); - } else if (name.equals("takeKeyEvents")) { - __ho26 |= (1 << 4); - } else if (name.equals("toString")) { - __ho26 |= (1 << 5); - } else if (name.equals("triggerSearch")) { - __ho26 |= (1 << 6); - } else if (name.equals("unbindService")) { - __ho26 |= (1 << 7); - } else if (name.equals("unregisterComponentCallbacks")) { - __ho27 |= (1 << 0); - } else if (name.equals("unregisterForContextMenu")) { - __ho27 |= (1 << 1); - } else if (name.equals("unregisterReceiver")) { - __ho27 |= (1 << 2); - } - - } - private boolean __initialized; - private boolean __ctorOverridden; - private byte __ho0; - private byte __ho1; - private byte __ho2; - private byte __ho3; - private byte __ho4; - private byte __ho5; - private byte __ho6; - private byte __ho7; - private byte __ho8; - private byte __ho9; - private byte __ho10; - private byte __ho11; - private byte __ho12; - private byte __ho13; - private byte __ho14; - private byte __ho15; - private byte __ho16; - private byte __ho17; - private byte __ho18; - private byte __ho19; - private byte __ho20; - private byte __ho21; - private byte __ho22; - private byte __ho23; - private byte __ho24; - private byte __ho25; - private byte __ho26; - private byte __ho27; - private byte __ho28; } diff --git a/src/src/com/tns/NativeScriptApplication.java b/src/src/com/tns/NativeScriptApplication.java index dd2647d54..e2468dd67 100644 --- a/src/src/com/tns/NativeScriptApplication.java +++ b/src/src/com/tns/NativeScriptApplication.java @@ -72,10 +72,6 @@ public int hashCode__super() { } public void setNativeScriptOverrides(java.lang.String[] overrides) { } - @Override - public void setNativeScriptOverride(String override) - { - } } public NativeScriptApplication() { super(); @@ -1302,13 +1298,13 @@ public boolean equals__super(java.lang.Object other) { public int hashCode__super() { return super.hashCode(); } -public void setNativeScriptOverrides(java.lang.String[] overrides) { + + public void setNativeScriptOverrides(java.lang.String[] overrides) { for (java.lang.String name: overrides) { setNativeScriptOverride(name); } } - @Override public void setNativeScriptOverride(String name) { if (name.equals("init")) { diff --git a/src/src/com/tns/Platform.java b/src/src/com/tns/Platform.java index bd3970f2b..b24b01a2c 100644 --- a/src/src/com/tns/Platform.java +++ b/src/src/com/tns/Platform.java @@ -283,15 +283,6 @@ public static void initInstance(Object instance, Object... args) methodOverrides = createJSInstance(instance, args); } - if (instance instanceof NativeScriptHashCodeProvider) - { - NativeScriptHashCodeProvider obj = (NativeScriptHashCodeProvider) instance; - for (String name: methodOverrides) - { - obj.setNativeScriptOverride(name); - } - } - int objectId = Platform.currentObjectId; if (objectId != -1) diff --git a/test-app/src/com/tns/com/tns/tests/AbsClassImpl.java b/test-app/src/com/tns/com/tns/tests/AbsClassImpl.java deleted file mode 100644 index 9dba6dd6a..000000000 --- a/test-app/src/com/tns/com/tns/tests/AbsClassImpl.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.tns.com.tns.tests; - -public class AbsClassImpl extends com.tns.tests.AbsClassImpl implements com.tns.NativeScriptHashCodeProvider -{ - public AbsClassImpl() - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - } - - protected String echoString(String s) - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__echoString) - { - Object[] params = new Object[1]; - params[0] = s; - return (String)com.tns.Platform.callJSMethod(this, "echoString", params); - } - else - { - return super.echoString(s); - } - } - - public int hashCode__super() - { - return super.hashCode(); - } - - public boolean equals__super(Object other) - { - return super.equals(other); - } - - public void setNativeScriptOverrides(String[] overrides) - { - for (String name: overrides) - { - setNativeScriptOverride(name); - } - } - - private boolean __initialized; - private boolean __echoString; - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("echoString")) - { - __echoString = true; - } - } -} \ No newline at end of file diff --git a/test-app/src/com/tns/com/tns/tests/Button1.java b/test-app/src/com/tns/com/tns/tests/Button1.java deleted file mode 100644 index e42f6a588..000000000 --- a/test-app/src/com/tns/com/tns/tests/Button1.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.tns.com.tns.tests; - -import com.tns.Platform; - -import android.util.Log; - - -/* -public class Button1 extends com.tns.tests.Button1 implements com.tns.NativeScriptHashCodeProvider -{ - public Button1() - { - super(); - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ctorOverriden) - { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "init", true, params); - } - } - - public Button1(int value) - { - super(value); - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ctorOverriden) - { - java.lang.Object[] params = new java.lang.Object[1]; - params[0] = value; - com.tns.Platform.callJSMethod(this, "init", true, params); - } - } - - public String echo(String s) throws Throwable - { - if (__isEchoOverriden) - { - try - { - Object[] params = { s }; - return (java.lang.String) com.tns.Platform.callJSMethod(this, "echo", params); - } - catch (Throwable throwable) - { - Log.d(Platform.DEFAULT_LOG_TAG, "Button1.echo ex=" + throwable.getMessage()); - throw throwable; - } - } - else - { - return super.echo(s); - } - } - - public void methodDummyClassAsObjectInArgs(Object arg) - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - com.tns.Platform.callJSMethod(this, "methodDummyClassAsObjectInArgs", arg); - } - - public String getIMAGE_ID_PROP() - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__getIMAGE_ID_PROP) - { - Object[] params = null; - return (String)com.tns.Platform.callJSMethod(this, "getIMAGE_ID_PROP", params); - } - else - { - return super.getIMAGE_ID_PROP(); - } - } - - public java.lang.String toString() - { - if (__toString) - { - Log.w(Platform.DEFAULT_LOG_TAG, "Make sure Button1 you create in js has toString always overriden"); - return (java.lang.String) com.tns.Platform.callJSMethod(this, "toString", null); - } - else - { - return super.toString(); - } - } - - - public int hashCode__super() - { - return super.hashCode(); - } - - public boolean equals__super(Object other) - { - return super.equals(other); - } - -public void setNativeScriptOverrides(String[] overrides) - { - for (String name: overrides) - { - setNativeScriptOverride(name); - } - } - - private boolean __initialized; - private boolean __ctorOverriden; - private boolean __getIMAGE_ID_PROP; - private boolean __toString; - private boolean __isEchoOverriden; - - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("init")) - { - __ctorOverriden = true; - } - else if (name.equals("echoString")) - { - __getIMAGE_ID_PROP = true; - } - else if (name.equals("toString")) - { - __toString = true; - } - else if (name.equals("echo")) - { - __isEchoOverriden = true; - } - - } - -} -*/ \ No newline at end of file diff --git a/test-app/src/com/tns/com/tns/tests/Class1.java b/test-app/src/com/tns/com/tns/tests/Class1.java deleted file mode 100644 index 3641b0e19..000000000 --- a/test-app/src/com/tns/com/tns/tests/Class1.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.tns.com.tns.tests; - -public class Class1 -{ - public static class Callback1 implements com.tns.tests.Class1.Callback1 - { - public Callback1() - { - } - - public String getMessage() - { - java.lang.Object[] params = null; - return (String)com.tns.Platform.callJSMethod(this, "getMessage", params); - } - } - -} diff --git a/test-app/src/com/tns/com/tns/tests/DispatchAsyncOpOnUIThreadTest.java b/test-app/src/com/tns/com/tns/tests/DispatchAsyncOpOnUIThreadTest.java deleted file mode 100644 index 800a7e63d..000000000 --- a/test-app/src/com/tns/com/tns/tests/DispatchAsyncOpOnUIThreadTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.tns.com.tns.tests; - -public class DispatchAsyncOpOnUIThreadTest extends com.tns.tests.DispatchAsyncOpOnUIThreadTest implements com.tns.NativeScriptHashCodeProvider -{ - public DispatchAsyncOpOnUIThreadTest() - { - super(); - if (!__initialized) { - __initialized = true; - com.tns.Platform.initInstance(this); - } - } - - public void processData(int index, int data) - { - if (isDoAsyncOverriden) - { - java.lang.Object[] params = { index, data }; - com.tns.Platform.callJSMethod(this, "processData", params); - } - else - { - super.processData(index, data); - } - } - - - @Override - public int hashCode__super() - { - return super.hashCode(); - } - - @Override - public boolean equals__super(Object other) - { - return super.equals(other); - } - - private boolean __initialized; - private boolean isDoAsyncOverriden; - - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("processData")) - { - isDoAsyncOverriden = true; - } - - } -} diff --git a/test-app/src/com/tns/com/tns/tests/DummyClass.java b/test-app/src/com/tns/com/tns/tests/DummyClass.java deleted file mode 100644 index 7c6902ce0..000000000 --- a/test-app/src/com/tns/com/tns/tests/DummyClass.java +++ /dev/null @@ -1,106 +0,0 @@ -package com.tns.com.tns.tests; - -import android.util.Log; - -import com.tns.NativeScriptHashCodeProvider; -import com.tns.Platform; - -public class DummyClass -{ - public static class MyInterface implements com.tns.tests.DummyClass.MyInterface, NativeScriptHashCodeProvider - { - public MyInterface() - { - Log.d(Platform.DEFAULT_LOG_TAG, "MyInterfaceImpl ctor"); - } - - public int echoInt(int i) - { - java.lang.Object[] params = { i }; - return (Integer) com.tns.Platform.callJSMethod(this, "echoInt", params); - } - - public void doSomething() - { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "doSomething", params); - } - - public int hashCode__super() - { - return super.hashCode(); - } - - public boolean equals__super(Object other) - { - return super.equals(other); - } - - public void setNativeScriptOverrides(String[] overrides) - { - } - @Override - public void setNativeScriptOverride(String override) - { - } - } - - public static class DummyDerivedClass extends com.tns.tests.DummyClass.DummyDerivedClass implements NativeScriptHashCodeProvider - { - private boolean __initialized; - private boolean __ctorOverridden; - private boolean __ho0; - - public DummyDerivedClass() - { - super(); - if (!__initialized) { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ctorOverridden) { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "AccessibilityService", params); - } - } - - @Override - public int hashCode__super() - { - return super.hashCode(); - } - - @Override - public boolean equals__super(Object other) - { - return super.equals(other); - } - - - @Override - public String dummyMethod(com.tns.tests.DummyClass dummy) - { - if (!__initialized) { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ho0) { - java.lang.Object[] params = new Object[1]; - params[0] = dummy; - return (String)com.tns.Platform.callJSMethod(this, "dummyMethod", params); - } else { - return super.dummyMethod(dummy); - } - } - - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("dummyMethod")) - { - __ho0 = true; - } - - } - } -} diff --git a/test-app/src/com/tns/com/tns/tests/DummyClassWithInit.java b/test-app/src/com/tns/com/tns/tests/DummyClassWithInit.java deleted file mode 100644 index e9209fba2..000000000 --- a/test-app/src/com/tns/com/tns/tests/DummyClassWithInit.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.tns.com.tns.tests; - -public class DummyClassWithInit extends com.tns.tests.DummyClassWithInit implements com.tns.NativeScriptHashCodeProvider -{ - public DummyClassWithInit() - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ctorOverriden) - { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "init", true, params); - } - } - - public void init() - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ho1) - { - Object[] params = null; - com.tns.Platform.callJSMethod(this, "init", false, params); - } - else - { - super.init(); - } - } - - - @Override - public int hashCode__super() - { - return super.hashCode(); - } - - @Override - public boolean equals__super(Object other) - { - return super.equals(other); - } - - private boolean __initialized; - private boolean __ctorOverriden; - private boolean __ho1; - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("init")) - { - __ctorOverriden = true; - } - - if (name.equals("init")) - { - __ho1 = true; - } - - } - -} \ No newline at end of file diff --git a/test-app/src/com/tns/com/tns/tests/ExceptionHandlingTest.java b/test-app/src/com/tns/com/tns/tests/ExceptionHandlingTest.java deleted file mode 100644 index f1c0d72f1..000000000 --- a/test-app/src/com/tns/com/tns/tests/ExceptionHandlingTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.tns.com.tns.tests; - - -public class ExceptionHandlingTest extends com.tns.tests.ExceptionHandlingTest implements com.tns.NativeScriptHashCodeProvider -{ - private boolean __initialized; - private boolean __ctorOverriden; - private boolean isOnEvent1Overriden; - - public ExceptionHandlingTest() - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (__ctorOverriden) - { - java.lang.Object[] params = null; - com.tns.Platform.callJSMethod(this, "init", true, params); - } - } - - public void onEvent1(String s) - { - if (isOnEvent1Overriden) - { - Object[] params = { s }; - com.tns.Platform.callJSMethod(this, "onEvent1", params); - } - else - { - super.onEvent1(s); - } - } - - @Override - public int hashCode__super() - { - return super.hashCode(); - } - - @Override - public boolean equals__super(Object other) - { - return super.equals(other); - } - - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("init")) - { - __ctorOverriden = true; - } - else if (name.equals("onEvent1")) - { - isOnEvent1Overriden = true; - } - - } - -} diff --git a/test-app/src/com/tns/com/tns/tests/StringConversionTest.java b/test-app/src/com/tns/com/tns/tests/StringConversionTest.java deleted file mode 100644 index d85a01dbb..000000000 --- a/test-app/src/com/tns/com/tns/tests/StringConversionTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.tns.com.tns.tests; - -public class StringConversionTest extends com.tns.tests.StringConversionTest implements com.tns.NativeScriptHashCodeProvider -{ - public StringConversionTest() throws Exception - { - super(); - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - } - - public void callback(String str) - { - if (!__initialized) - { - __initialized = true; - com.tns.Platform.initInstance(this); - } - if (isCallabackOverriden) - { - Object[] params = { str }; - com.tns.Platform.callJSMethod(this, "callback", params); - } - else - { - super.callback(str); - } - } - - - @Override - public int hashCode__super() - { - return super.hashCode(); - } - - @Override - public boolean equals__super(Object other) - { - return super.equals(other); - } - - private boolean __initialized; - private boolean isCallabackOverriden; - @Override - public void setNativeScriptOverride(String name) - { - if (name.equals("callback")) - { - isCallabackOverriden = true; - } - } - -} diff --git a/test-app/src/com/tns/com/tns/tests/UseCallbackTest.java b/test-app/src/com/tns/com/tns/tests/UseCallbackTest.java deleted file mode 100644 index 6f74f4ff6..000000000 --- a/test-app/src/com/tns/com/tns/tests/UseCallbackTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.tns.com.tns.tests; - -public class UseCallbackTest extends com.tns.tests.UseCallbackTest -{ - public UseCallbackTest(int data) - { - super(data); - } - - public static class DataCallback implements com.tns.tests.UseCallbackTest.DataCallback - { - public void onData(com.tns.tests.UseCallbackTest.Data data, long delay) - { - java.lang.Object[] params = { data, delay }; - com.tns.Platform.callJSMethodWithDelay(this, "onData", delay, params); - } - } - - public static class CleanCallback implements com.tns.tests.UseCallbackTest.CleanCallback - { - public void onClean(long delay) - { - java.lang.Object[] params = { delay }; - com.tns.Platform.callJSMethodWithDelay(this, "onClean", delay, params); - } - } -} From 86b68161dab78cd30804240e263cd26f51865e68 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Tue, 26 May 2015 19:15:51 +0300 Subject: [PATCH 31/46] revert changes --- src/jni/MetadataNode.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/jni/MetadataNode.cpp b/src/jni/MetadataNode.cpp index 6ef92ddfe..e26d5ab27 100644 --- a/src/jni/MetadataNode.cpp +++ b/src/jni/MetadataNode.cpp @@ -58,10 +58,10 @@ MetadataNode::MetadataNode(MetadataTreeNode *treeNode) : if (!m_isArray && isInterface) { bool isPrefix; - TNS_PREFIX = s_metadataReader.ReadInterfaceImplementationTypeName(m_treeNode, isPrefix); + auto impTypeName = s_metadataReader.ReadInterfaceImplementationTypeName(m_treeNode, isPrefix); m_implType = isPrefix - ? (TNS_PREFIX + m_name) - : TNS_PREFIX; + ? (impTypeName + m_name) + : impTypeName; } } @@ -1262,7 +1262,7 @@ void MetadataNode::CreateTopLevelNamespaces(const Handle& global) } -string MetadataNode::TNS_PREFIX; +string MetadataNode::TNS_PREFIX = "com/tns/gen/"; std::map MetadataNode::s_name2NodeCache; std::map MetadataNode::s_name2TreeNodeCache; std::map MetadataNode::s_treeNode2NodeCache; From 44d34aac34bd87f7c9e76b38c07cf6890d3cd252 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Tue, 26 May 2015 19:18:19 +0300 Subject: [PATCH 32/46] generate args array for constructors as well --- .../Generator/src/com/tns/bindings/Dump.java | 64 ++----------------- 1 file changed, 5 insertions(+), 59 deletions(-) diff --git a/binding-generator/Generator/src/com/tns/bindings/Dump.java b/binding-generator/Generator/src/com/tns/bindings/Dump.java index 1553225a9..a2ff7eef6 100644 --- a/binding-generator/Generator/src/com/tns/bindings/Dump.java +++ b/binding-generator/Generator/src/com/tns/bindings/Dump.java @@ -475,7 +475,7 @@ private void generateCtor(ClassVisitor cv, Class classTo, Constructor ctor generateInitializedBlock(mv, thisRegister, classSignature, tnsClassSignature); if (hasOverridenCtor) { - generateCtorOverridenBlock(mv, thisRegister, classSignature, tnsClassSignature); + generateCtorOverridenBlock(mv, thisRegister, ctor, classSignature, tnsClassSignature); } generateReturnVoid(mv); } @@ -486,17 +486,13 @@ private void generateReturnVoid(MethodVisitor mv) mv.visitEnd(); } - private void generateCtorOverridenBlock(MethodVisitor mv, int thisRegister, String classSignature, String tnsClassSignature) + private void generateCtorOverridenBlock(MethodVisitor mv, int thisRegister, Constructor ctor, String classSignature, String tnsClassSignature) { - mv.visitFieldInsn(org.ow2.asmdex.Opcodes.INSN_IGET_BOOLEAN, tnsClassSignature, "__ctorOverridden", "Z", 1, thisRegister); - Label label = new Label(); - mv.visitJumpInsn(org.ow2.asmdex.Opcodes.INSN_IF_EQZ, label, 1, 0); - mv.visitVarInsn(org.ow2.asmdex.Opcodes.INSN_CONST_4, 0, 0); //put null in register 0 //support creation of params array for callJSMethod invokation + int argCount = generateArrayForCallJsArguments(mv, ctor.getParameterTypes(), thisRegister, classSignature, tnsClassSignature); mv.visitStringInsn(org.ow2.asmdex.Opcodes.INSN_CONST_STRING, 1, "init"); //put "init" in register 1 mv.visitVarInsn(org.ow2.asmdex.Opcodes.INSN_CONST_4, 2, 1); //put true to register 2 == isConstructor argument mv.visitMethodInsn(org.ow2.asmdex.Opcodes.INSN_INVOKE_STATIC, LCOM_TNS_PLATFORM, "callJSMethod", callJsMethodSignatureCtor, new int[] { 3, 1, 2, 0 }); //invoke callJSMethod(this, "init", true, params) - mv.visitLabel(label); } private void generateInitializedBlock(MethodVisitor mv, int thisRegister, String classSignature, String tnsClassSignature) @@ -653,7 +649,7 @@ else if (paramType == Long.TYPE || paramType == Double.TYPE) private void generateCallOverrideBlock(MethodVisitor mv, Method method, int thisRegister, String classSignature, String tnsClassSignature, String methodDexSignature, int fieldBit) { //call the override - int argCount = generateArrayForCallJsArguments(mv, method, thisRegister, classSignature, tnsClassSignature, methodDexSignature); + int argCount = generateArrayForCallJsArguments(mv, method.getParameterTypes() , thisRegister, classSignature, tnsClassSignature); mv.visitStringInsn(org.ow2.asmdex.Opcodes.INSN_CONST_STRING, 1, method.getName()); mv.visitMethodInsn(org.ow2.asmdex.Opcodes.INSN_INVOKE_STATIC, platformClass, callJSMethodName, callJsMethodSignatureMethod, new int[] { thisRegister, 1, 0 }); @@ -704,54 +700,11 @@ else if (paramType == Long.TYPE || paramType == Double.TYPE) return Arrays.copyOf(argsForSuper, argsForSuperIndex); } - private int[] generateArgsArray(int thisRegister, int argCount, Method method) - { - Class[] paramTypes = method.getParameterTypes(); - int argumentsCount = paramTypes.length; - int[] argsForSuper = new int[1 + argumentsCount*2]; //thisRegister + argCount * 2 since it long and double take 2 registers - - int argsForSuperIndex = 0; - argsForSuper[argsForSuperIndex] = thisRegister; - argsForSuperIndex++; - - int arrayIndex = 0; - while (arrayIndex < argumentsCount) - { - Class paramType = paramTypes[arrayIndex]; - if (paramType.isPrimitive()) - { - if (paramType == Integer.TYPE || paramType == Character.TYPE || paramType == Byte.TYPE || paramType == Short.TYPE || - paramType == Boolean.TYPE || paramType == Float.TYPE) - { - argsForSuper[argsForSuperIndex] = thisRegister + arrayIndex + 1; - argsForSuperIndex++; - } - else if (paramType == Long.TYPE || paramType == Double.TYPE) - { - argsForSuper[argsForSuperIndex] = thisRegister + arrayIndex + 1; - argsForSuperIndex++; - argsForSuper[argsForSuperIndex] = thisRegister + arrayIndex + 2; - argsForSuperIndex++; - } - } - else - { - argsForSuper[argsForSuperIndex] = thisRegister + arrayIndex + 1; - argsForSuperIndex++; - } - - arrayIndex++; - } - - return Arrays.copyOf(argsForSuper, argsForSuperIndex); - } - /** * Creates new Object[] or null value (when no arguments) and puts it in register 0 */ - private int generateArrayForCallJsArguments(MethodVisitor mv, Method method, int thisRegister, String classSignature, String tnsClassSignature, String methodDexSignature) + private int generateArrayForCallJsArguments(MethodVisitor mv, Class[] paramTypes, int thisRegister, String classSignature, String tnsClassSignature) { - Class[] paramTypes = method.getParameterTypes(); int argumentsCount = paramTypes.length; if (argumentsCount == 0) @@ -1024,7 +977,6 @@ else if (targetReturnType.isPrimitive() && (targetReturnType == Double.TYPE || t private void generateFields(ClassVisitor cv) { - generateCtorOverridenField(cv); generateInitializedField(cv); } @@ -1034,12 +986,6 @@ private void generateInitializedField(ClassVisitor cv) fv.visitEnd(); } - private void generateCtorOverridenField(ClassVisitor cv) - { - FieldVisitor fv = cv.visitField(org.ow2.asmdex.Opcodes.ACC_PRIVATE, "__ctorOverridden", "Z", null, null); - fv.visitEnd(); - } - static final String[] classImplentedInterfaces = new String[] { "Lcom/tns/NativeScriptHashCodeProvider;" }; static final String[] interfaceImplementedInterfaces = new String[] { "Lcom/tns/NativeScriptHashCodeProvider;", "" }; private ClassVisitor generateClass(ApplicationWriter aw, Class classTo, String classSignature, String tnsClassSignature) From 52035ffe411b7d1c15ed48f94b174dff4e672c2b Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Wed, 27 May 2015 09:58:26 +0300 Subject: [PATCH 33/46] remove methodOverrides parameter as it not used anymore --- src/jni/NativeScriptRuntime.cpp | 10 ++++------ src/jni/NativeScriptRuntime.h | 2 +- src/src/com/tns/Platform.java | 35 +++++++++------------------------ 3 files changed, 14 insertions(+), 33 deletions(-) diff --git a/src/jni/NativeScriptRuntime.cpp b/src/jni/NativeScriptRuntime.cpp index 009cd5389..7a4f6ffc3 100644 --- a/src/jni/NativeScriptRuntime.cpp +++ b/src/jni/NativeScriptRuntime.cpp @@ -44,7 +44,7 @@ void NativeScriptRuntime::Init(JavaVM *jvm, ObjectManager *objectManager) MAKE_CLASS_INSTANCE_OF_TYPE_STRONG = env.GetStaticMethodID(PlatformClass, "makeClassInstanceOfTypeStrong", "(Ljava/lang/String;)I"); assert(MAKE_CLASS_INSTANCE_OF_TYPE_STRONG != nullptr); - CREATE_INSTANCE_METHOD_ID = env.GetStaticMethodID(PlatformClass, "createInstance", "([Ljava/lang/Object;[Ljava/lang/String;II)Ljava/lang/Object;"); + CREATE_INSTANCE_METHOD_ID = env.GetStaticMethodID(PlatformClass, "createInstance", "([Ljava/lang/Object;II)Ljava/lang/Object;"); assert(CREATE_INSTANCE_METHOD_ID != nullptr); CACHE_CONSTRUCTOR_METHOD_ID = env.GetStaticMethodID(PlatformClass, "cacheConstructor", "(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/String;)I"); @@ -549,16 +549,13 @@ jobject NativeScriptRuntime::CreateJavaInstance(int objectID, const std::string& if (argConverter.IsValid()) { - jobjectArray methodOverrides = GetMethodOverrides(env, implementationObject); - jobjectArray javaArgs = argConverter.ToJavaArray(); - int ctorId = GetCachedConstructorId(env, args, name, className, javaArgs, methodOverrides); + int ctorId = GetCachedConstructorId(env, args, name, className, javaArgs, implementationObject); jobject obj = env.CallStaticObjectMethod(PlatformClass, CREATE_INSTANCE_METHOD_ID, javaArgs, - methodOverrides, (jint) objectID, ctorId); @@ -579,7 +576,7 @@ jobject NativeScriptRuntime::CreateJavaInstance(int objectID, const std::string& return instance; } -int NativeScriptRuntime::GetCachedConstructorId(JEnv& env, const FunctionCallbackInfo& args, const string& name, const string& className, jobjectArray javaArgs, jobjectArray methodOverrides) +int NativeScriptRuntime::GetCachedConstructorId(JEnv& env, const FunctionCallbackInfo& args, const string& name, const string& className, jobjectArray javaArgs, const Handle& implementationObject) { int ctorId = -1; string fullClassName = className + '-' + name; @@ -595,6 +592,7 @@ int NativeScriptRuntime::GetCachedConstructorId(JEnv& env, const FunctionCallbac { JniLocalRef javaName(env.NewStringUTF(name.c_str())); JniLocalRef javaClassName(env.NewStringUTF(className.c_str())); + jobjectArray methodOverrides = GetMethodOverrides(env, implementationObject); jint id = env.CallStaticIntMethod(PlatformClass, CACHE_CONSTRUCTOR_METHOD_ID, (jstring)javaName, (jstring)javaClassName, javaArgs, methodOverrides); diff --git a/src/jni/NativeScriptRuntime.h b/src/jni/NativeScriptRuntime.h index 3e3513ad6..6bd94a9b8 100644 --- a/src/jni/NativeScriptRuntime.h +++ b/src/jni/NativeScriptRuntime.h @@ -104,7 +104,7 @@ namespace tns private: NativeScriptRuntime() {} - static int GetCachedConstructorId(JEnv& env, const v8::FunctionCallbackInfo& args, const std::string& name, const std::string& className, jobjectArray javaArgs, jobjectArray methodOverrides); + static int GetCachedConstructorId(JEnv& env, const v8::FunctionCallbackInfo& args, const std::string& name, const std::string& className, jobjectArray javaArgs, const v8::Handle& implementationObject); static v8::Handle FindClass(const std::string& className); diff --git a/src/src/com/tns/Platform.java b/src/src/com/tns/Platform.java index b24b01a2c..5a0490b0f 100644 --- a/src/src/com/tns/Platform.java +++ b/src/src/com/tns/Platform.java @@ -37,7 +37,7 @@ public class Platform private static native Object callJSMethodNative(int javaObjectID, String methodName, boolean isConstructor, Object... packagedArgs) throws NativeScriptException; - private static native String[] createJSInstanceNative(Object javaObject, int javaObjectID, String canonicalName, boolean createActivity, Object[] packagedCreationArgs); + private static native void createJSInstanceNative(Object javaObject, int javaObjectID, String canonicalName, boolean createActivity, Object[] packagedCreationArgs); private static native int generateNewObjectId(); @@ -67,7 +67,6 @@ public class Platform private final static Object keyNotFoundObject = new Object(); public final static String ApplicationAssetsPath = "app/"; private static Object[] empty = new Object[0]; - private static String[] methodOverrides; private static int currentObjectId = -1; private static ExtractPolicy extractPolicy; @@ -208,7 +207,7 @@ private static int cacheConstructor(String name, String className, Object[] args return ctorId; } - private static Object createInstance(Object[] args, String[] methodOverrides, int objectId, int constructorId) throws InstantiationException, IllegalAccessException, ClassNotFoundException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException, IOException + private static Object createInstance(Object[] args, int objectId, int constructorId) throws InstantiationException, IllegalAccessException, ClassNotFoundException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException, IOException { Constructor ctor = ctorCache.get(constructorId); boolean success = MethodResolver.convertConstructorArgs(ctor, args); @@ -237,14 +236,12 @@ private static Object createInstance(Object[] args, String[] methodOverrides, in try { Platform.currentObjectId = objectId; - Platform.methodOverrides = methodOverrides; instance = ctor.newInstance(args); makeInstanceStrong(instance, objectId); } finally { - Platform.methodOverrides = null; Platform.currentObjectId = -1; } @@ -276,24 +273,19 @@ public static void initInstance(Object instance) public static void initInstance(Object instance, Object... args) { - String[] methodOverrides = Platform.methodOverrides; - - if (methodOverrides == null) - { - methodOverrides = createJSInstance(instance, args); - } - int objectId = Platform.currentObjectId; if (objectId != -1) { makeInstanceStrong(instance, objectId); - - Platform.currentObjectId = -1; + } + else + { + createJSInstance(instance, args); } } - private static String[] createJSInstance(Object instance, Object... args) + private static void createJSInstance(Object instance, Object... args) { int javaObjectID = generateNewObjectId(); @@ -309,18 +301,9 @@ private static String[] createJSInstance(Object instance, Object... args) className = instance.getClass().getSuperclass().getName(); } - String[] methodOverrides = createJSInstanceNative(instance, javaObjectID, className, createActivity, packagedArgs); - - if (IsLogEnabled) - { - Log.d(DEFAULT_LOG_TAG, "JSInstance for " + instance.getClass().toString() + " created with overrides"); - for (Object methodOverride : methodOverrides) - { - Log.d(DEFAULT_LOG_TAG, methodOverride.toString()); - } - } + createJSInstanceNative(instance, javaObjectID, className, createActivity, packagedArgs); - return methodOverrides; + if (IsLogEnabled) Log.d(DEFAULT_LOG_TAG, "JSInstance for " + instance.getClass().toString() + " created with overrides"); } private static String[] getTypeMetadata(String className, int index) throws ClassNotFoundException From 8c72d96e99f2583f741ce5ce4f45a4df3d0a4fcd Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Fri, 29 May 2015 10:10:07 +0300 Subject: [PATCH 34/46] fix android activity life cycle --- src/jni/Android.mk | 2 +- src/jni/MetadataNode.cpp | 9 + src/jni/MetadataNode.h | 2 + src/jni/NativeScriptRuntime.cpp | 30 +- src/jni/NativeScriptRuntime.h | 6 +- src/jni/com_tns_NativeScriptActity.cpp | 73 + src/jni/com_tns_Platform.cpp | 134 +- src/src/com/tns/NativeScriptActivity.java | 3930 ++++++++++++++++++++- src/src/com/tns/Platform.java | 34 +- test-app/assets/app/mainpage.js | 18 +- 10 files changed, 4018 insertions(+), 220 deletions(-) create mode 100644 src/jni/com_tns_NativeScriptActity.cpp diff --git a/src/jni/Android.mk b/src/jni/Android.mk index b59d1422a..92850f5ef 100644 --- a/src/jni/Android.mk +++ b/src/jni/Android.mk @@ -62,7 +62,7 @@ include $(PREBUILT_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_CPPFLAGS += -std=c++11 LOCAL_MODULE := NativeScript -LOCAL_SRC_FILES := com_tns_Platform.cpp com_tns_JsDebugger.cpp com_tns_AssetExtractor.cpp \ +LOCAL_SRC_FILES := com_tns_Platform.cpp com_tns_JsDebugger.cpp com_tns_AssetExtractor.cpp com_tns_NativeScriptActity.cpp \ JEnv.cpp DirectBuffer.cpp \ JsDebugger.cpp \ NativeScriptRuntime.cpp MetadataNode.cpp MetadataTreeNode.cpp MetadataReader.cpp \ diff --git a/src/jni/MetadataNode.cpp b/src/jni/MetadataNode.cpp index e26d5ab27..063320258 100644 --- a/src/jni/MetadataNode.cpp +++ b/src/jni/MetadataNode.cpp @@ -1261,6 +1261,15 @@ void MetadataNode::CreateTopLevelNamespaces(const Handle& global) } } +void MetadataNode::InjectPrototype(Handle& target, Handle& implementationObject) +{ + auto isolate = Isolate::GetCurrent(); + + implementationObject->SetAccessor(ConvertToV8String("super"), SuperAccessorGetterCallback, nullptr, implementationObject); + implementationObject->SetPrototype(target->GetPrototype()); + target->SetPrototype(implementationObject); +} + string MetadataNode::TNS_PREFIX = "com/tns/gen/"; std::map MetadataNode::s_name2NodeCache; diff --git a/src/jni/MetadataNode.h b/src/jni/MetadataNode.h index 2a0b6d4bb..8e25aed49 100644 --- a/src/jni/MetadataNode.h +++ b/src/jni/MetadataNode.h @@ -86,6 +86,8 @@ namespace tns static void BuildMetadata(uint32_t nodesLength, uint8_t *nodeData, uint32_t nameLength, uint8_t *nameData, uint32_t valueLength, uint8_t *valueData); + static void InjectPrototype(v8::Handle& target, v8::Handle& implementationObject); + private: struct MethodCallbackData diff --git a/src/jni/NativeScriptRuntime.cpp b/src/jni/NativeScriptRuntime.cpp index 7a4f6ffc3..3210df4d3 100644 --- a/src/jni/NativeScriptRuntime.cpp +++ b/src/jni/NativeScriptRuntime.cpp @@ -41,9 +41,6 @@ void NativeScriptRuntime::Init(JavaVM *jvm, ObjectManager *objectManager) RequireClass = env.FindClass("com/tns/Require"); assert(RequireClass != nullptr); - MAKE_CLASS_INSTANCE_OF_TYPE_STRONG = env.GetStaticMethodID(PlatformClass, "makeClassInstanceOfTypeStrong", "(Ljava/lang/String;)I"); - assert(MAKE_CLASS_INSTANCE_OF_TYPE_STRONG != nullptr); - CREATE_INSTANCE_METHOD_ID = env.GetStaticMethodID(PlatformClass, "createInstance", "([Ljava/lang/Object;II)Ljava/lang/Object;"); assert(CREATE_INSTANCE_METHOD_ID != nullptr); @@ -126,17 +123,6 @@ bool NativeScriptRuntime::RegisterInstance(const Handle& jsObject, const return success; } -void NativeScriptRuntime::MakeClassInstanceOfTypeStrong(const string& className, const Handle& classObj) -{ - JEnv env; - - JniLocalRef param(env.NewStringUTF(className.c_str())); - jint javaObjectID = env.CallStaticIntMethod(PlatformClass, MAKE_CLASS_INSTANCE_OF_TYPE_STRONG, (jstring)param); - - jclass clazz = env.FindClass(className); - objectManager->Link(classObj, javaObjectID, clazz); -} - Handle NativeScriptRuntime::GetArrayElement(const Handle& array, uint32_t index, const string& arraySignature) { return arrayElementAccessor.GetArrayElement(array, index, arraySignature); @@ -925,7 +911,7 @@ void NativeScriptRuntime::CreateTopLevelNamespaces(const Handle& global) MetadataNode::CreateTopLevelNamespaces(global); } -Handle NativeScriptRuntime::CallJSMethod(JNIEnv *_env, const Handle& jsObject, jstring methodName, jobjectArray args, TryCatch& tc) +Handle NativeScriptRuntime::CallJSMethod(JNIEnv *_env, const Handle& jsObject, const string& methodName, jobjectArray args, TryCatch& tc) { SET_PROFILER_FRAME(); @@ -936,18 +922,13 @@ Handle NativeScriptRuntime::CallJSMethod(JNIEnv *_env, const HandleGet(ConvertToV8String(name2)); + auto method = jsObject->Get(ConvertToV8String(methodName)); if (method.IsEmpty() || method->IsUndefined()) { - string name = ConvertToString(jsMethodName); - stringstream ss; - ss << "Cannot find method '" << name << "' implementation"; + ss << "Cannot find method '" << methodName << "' implementation"; ExceptionUtil::GetInstance()->ThrowExceptionToJs(ss.str()); @@ -955,10 +936,8 @@ Handle NativeScriptRuntime::CallJSMethod(JNIEnv *_env, const HandleIsFunction()) { - string name = ConvertToString(jsMethodName); - stringstream ss; - ss << "Property '" << name << "' is not a function"; + ss << "Property '" << methodName << "' is not a function"; ExceptionUtil::GetInstance()->ThrowExceptionToJs(ss.str()); @@ -1039,7 +1018,6 @@ JavaVM* NativeScriptRuntime::jvm = nullptr; jclass NativeScriptRuntime::PlatformClass = nullptr; jclass NativeScriptRuntime::RequireClass = nullptr; jclass NativeScriptRuntime::JAVA_LANG_STRING = nullptr; -jmethodID NativeScriptRuntime::MAKE_CLASS_INSTANCE_OF_TYPE_STRONG = nullptr; jmethodID NativeScriptRuntime::CREATE_INSTANCE_METHOD_ID = nullptr; jmethodID NativeScriptRuntime::CACHE_CONSTRUCTOR_METHOD_ID = nullptr; jmethodID NativeScriptRuntime::APP_FAIL_METHOD_ID = nullptr; diff --git a/src/jni/NativeScriptRuntime.h b/src/jni/NativeScriptRuntime.h index 6bd94a9b8..a115d8a9a 100644 --- a/src/jni/NativeScriptRuntime.h +++ b/src/jni/NativeScriptRuntime.h @@ -33,8 +33,6 @@ namespace tns static bool RegisterInstance(const v8::Handle& jsObject, const std::string& name, const std::string& className, const ArgsWrapper& argWrapper, const v8::Handle& implementationObject, bool isInterface); - static void MakeClassInstanceOfTypeStrong(const std::string& className, const v8::Handle& classObj); - // static v8::Handle GetArrayElement(const v8::Handle& array, uint32_t index, const std::string& arraySignature); @@ -45,7 +43,7 @@ namespace tns static void CallJavaMethod(const v8::Handle& caller, const std::string& className, const std::string& methodName, MetadataEntry *entry, bool isStatic, bool isSuper, const v8::FunctionCallbackInfo& args); - static v8::Handle CallJSMethod(JNIEnv *_env, const v8::Handle& jsObject, jstring methodName, jobjectArray args, v8::TryCatch& tc); + static v8::Handle CallJSMethod(JNIEnv *_env, const v8::Handle& jsObject, const std::string& methodName, jobjectArray args, v8::TryCatch& tc); // @@ -118,8 +116,6 @@ namespace tns static JavaVM *jvm; - static jmethodID MAKE_CLASS_INSTANCE_OF_TYPE_STRONG; - static jmethodID CREATE_INSTANCE_METHOD_ID; static jmethodID CACHE_CONSTRUCTOR_METHOD_ID; diff --git a/src/jni/com_tns_NativeScriptActity.cpp b/src/jni/com_tns_NativeScriptActity.cpp new file mode 100644 index 000000000..cb91bcb6a --- /dev/null +++ b/src/jni/com_tns_NativeScriptActity.cpp @@ -0,0 +1,73 @@ +#include "NativeScriptRuntime.h" +#include "MetadataNode.h" +#include "JniLocalRef.h" +#include "JsArgConverter.h" +#include "JsArgToArrayConverter.h" +#include "ArgConverter.h" +#include "Util.h" +#include "V8GlobalHelpers.h" +#include "V8StringConstants.h" +#include "ExceptionUtil.h" +#include "v8.h" +#include "JEnv.h" +#include "NativeScriptAssert.h" +#include +#include +#include +#include + +using namespace v8; +using namespace std; +using namespace tns; + +extern Isolate *g_isolate; +extern ObjectManager *g_objectManager; +extern int AppJavaObjectID; + + +jobject ConvertJsValueToJavaObject(JEnv& env, const Handle& value); + +extern "C" jobjectArray Java_com_tns_NativeScriptActivity_getMethodOverrides(JNIEnv *_env, jobject obj, jint objectId, jobjectArray packagedArgs) +{ + DEBUG_WRITE("getMethodOverrides called"); + + auto isolate = g_isolate; + Isolate::Scope isolate_scope(isolate); + + JEnv env(_env); + + HandleScope handleScope(isolate); + + TryCatch tc; + + auto appInstance = g_objectManager->GetJsObjectByJavaObject(AppJavaObjectID); + if (appInstance.IsEmpty()) + { + ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. Missing the global app object initialization."); + return nullptr; + } + + string createActivityMethodName = "getActivity"; + auto createActivityFunction = appInstance->Get(ConvertToV8String(createActivityMethodName.c_str())); + + if (createActivityFunction.IsEmpty() || !createActivityFunction->IsFunction()) + { + ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. No function 'createActivity' found on the application object."); + return nullptr; + } + + auto jsResult = NativeScriptRuntime::CallJSMethod(env, appInstance, createActivityMethodName, packagedArgs, tc); + auto jsInstance = jsResult.As(); + if (jsInstance.IsEmpty() || jsInstance->IsNull() || jsInstance->IsUndefined()) + { + ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. getActivity method returned invalid value."); + return nullptr; + } + + auto jsActivity = g_objectManager->GetJsObjectByJavaObject(objectId); + + MetadataNode::InjectPrototype(jsActivity, jsInstance); + + jobjectArray methodOverrides = NativeScriptRuntime::GetMethodOverrides(env, jsInstance); + return methodOverrides; +} diff --git a/src/jni/com_tns_Platform.cpp b/src/jni/com_tns_Platform.cpp index 71cb20134..ec6c358d9 100644 --- a/src/jni/com_tns_Platform.cpp +++ b/src/jni/com_tns_Platform.cpp @@ -341,7 +341,7 @@ extern "C" jobject Java_com_tns_Platform_callJSMethodNative(JNIEnv *_env, jobjec string method_name = ArgConverter::jstringToString(methodName); - auto jsResult = NativeScriptRuntime::CallJSMethod(env, jsObject, methodName, packagedArgs, tc); + auto jsResult = NativeScriptRuntime::CallJSMethod(env, jsObject, method_name, packagedArgs, tc); stringstream ss; ss << "Calling js method " << method_name << " failed"; @@ -355,7 +355,7 @@ extern "C" jobject Java_com_tns_Platform_callJSMethodNative(JNIEnv *_env, jobjec return javaObject; } -extern "C" jobjectArray Java_com_tns_Platform_createJSInstanceNative(JNIEnv *_env, jobject obj, jobject javaObject, jint javaObjectID, jstring className, jboolean createActivity, jobjectArray packagedCreationArgs) +extern "C" void Java_com_tns_Platform_createJSInstanceNative(JNIEnv *_env, jobject obj, jobject javaObject, jint javaObjectID, jstring className) { SET_PROFILER_FRAME(); @@ -375,139 +375,31 @@ extern "C" jobjectArray Java_com_tns_Platform_createJSInstanceNative(JNIEnv *_en Handle jsInstance; Handle implementationObject; - bool isActivity = createActivity == JNI_TRUE; - - if (isActivity) + auto proxyClassName = g_objectManager->GetClassName(javaObject); + // + if (proxyClassName == "com/tns/NativeScriptActivity") { - auto appInstance = g_objectManager->GetJsObjectByJavaObject(AppJavaObjectID); - if (appInstance.IsEmpty()) - { - ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. Missing the global app object initialization."); - return nullptr; - } - - string createActivityMethodName = "getActivity"; - auto createActivityFunction = appInstance->Get(ConvertToV8String(createActivityMethodName.c_str())); - - if (createActivityFunction.IsEmpty() || !createActivityFunction->IsFunction()) - { - ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. No function 'createActivity' found on the application object."); - return nullptr; - } - - JniLocalRef jMethodName(env.NewStringUTF(createActivityMethodName.c_str())); - TryCatch tc; - auto jsResult = NativeScriptRuntime::CallJSMethod(env, appInstance, jMethodName, packagedCreationArgs, tc); - jsInstance = jsResult.As(); - if (jsInstance.IsEmpty() || jsInstance->IsNull() || jsInstance->IsUndefined()) - { - ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. getActivity method returned invalid value."); - return nullptr; - } - -//@@@ -// auto node = MetadataNode::GetNodeFromHandle(jsInstance); -// string nodeName = node->GetName(); -// -// if (nodeName != jniName) -// { -// ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. createActivity returned wrong type."); -// return nullptr; -// } + return; } - else + // + DEBUG_WRITE("createJSInstanceNative class %s", proxyClassName.c_str()); + jsInstance = MetadataNode::CreateExtendedJSWrapper(isolate, proxyClassName); + if (jsInstance.IsEmpty()) { - auto proxyClassName = g_objectManager->GetClassName(javaObject); - DEBUG_WRITE("createJSInstanceNative class %s", proxyClassName.c_str()); - jsInstance = MetadataNode::CreateExtendedJSWrapper(isolate, proxyClassName); - if (jsInstance.IsEmpty()) - { - ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. Cannot create extended JS wrapper."); - return nullptr; - } + ExceptionUtil::GetInstance()->ThrowExceptionToJava(tc, "NativeScript application not initialized correctly. Cannot create extended JS wrapper."); + return; } implementationObject = MetadataNode::GetImplementationObject(jsInstance); if (implementationObject.IsEmpty()) { NativeScriptRuntime::APP_FAIL("createJSInstanceNative: implementationObject is empty"); - return nullptr; + return; } DEBUG_WRITE("createJSInstanceNative: implementationObject :%d", implementationObject->GetIdentityHash()); - bool createTypeScriptActivity = isActivity && jsInstance->HasOwnProperty(V8StringConstants::GetIsPrototypeImplementationObject()); - - if (isActivity && !createTypeScriptActivity) - { - DEBUG_WRITE("createJSInstanceNative: creating js activity with classProxy: %d", jsInstance->GetIdentityHash()); - } - - if (createTypeScriptActivity) - { - DEBUG_WRITE("createJSInstanceNative: creating typescript activity with classProxy: %d", jsInstance->GetIdentityHash()); - - auto node = MetadataNode::GetNodeFromHandle(jsInstance); - - //call extends function on the prototype which must the be Parent function - auto parent = jsInstance->GetPrototype().As(); - auto extendsFunc = parent->Get(String::NewFromUtf8(isolate, "__activityExtend")).As(); - ASSERT_MESSAGE(!extendsFunc.IsEmpty(), "__activityExtend support function not found on activity parent"); - - - Handle arguments[3]; - arguments[0] = parent; - arguments[1] = jsInstance.As()->GetName(); - arguments[2] = implementationObject; - auto extended = extendsFunc->Call(parent, 3, arguments).As(); - ASSERT_MESSAGE(!extended.IsEmpty(), "extend result is not an function"); - - extended->SetHiddenValue(ConvertToV8String("t::TypescriptActivity::DonNotRegisterInstance"), Boolean::New(isolate, true)); - auto extendedObject = extended->CallAsConstructor(0, nullptr).As(); - DEBUG_WRITE("createJSInstanceNative: typescript activity extendedObject's prototype : %d", extendedObject->GetPrototype().As()->GetIdentityHash()); - - - extendedObject->SetPrototype(implementationObject); - //@@@ - //extendedObject->SetHiddenValue(ConvertToV8String(MetadataNode::METADATA_NODE_KEY_NAME), External::New(isolate, node)); - - bool success = extendedObject->SetHiddenValue(ConvertToV8String("t::ActivityImplementationObject"), implementationObject); - ASSERT_MESSAGE(success == true, "Setting up the typescript activity implementation object failed"); - - //This will cause the Link to link the extendedObject not the empty object instance. This is on par with all typescript objects created through JS - jsInstance = extendedObject; - g_objectManager->Unlink(jsInstance); - } - -//@@@ jclass clazz = env.FindClass(jniName); g_objectManager->Link(jsInstance, javaObjectID, clazz); - - vector methods; - - auto propNames = implementationObject->GetOwnPropertyNames(); - auto propsLen = propNames->Length(); - for (auto i = 0; i < propsLen; i++) - { - auto name = propNames->Get(i).As(); - auto method = implementationObject->Get(name); - - if (method->IsFunction()) - { - String::Utf8Value stringValue(name); - jstring value = env.NewStringUTF(*stringValue); - - methods.push_back(value); - } - } - - jclass stringClass = env.FindClass("java/lang/String"); - jobjectArray methodOverrides = env.NewObjectArray(methods.size(), stringClass, nullptr); - for (int i = 0; i < methods.size(); i++) - { - env.SetObjectArrayElement(methodOverrides, i, methods[i]); - } - - return methodOverrides; } extern "C" jint Java_com_tns_Platform_generateNewObjectId(JNIEnv *env, jobject obj) diff --git a/src/src/com/tns/NativeScriptActivity.java b/src/src/com/tns/NativeScriptActivity.java index da7e6dc0f..ea3c212d5 100644 --- a/src/src/com/tns/NativeScriptActivity.java +++ b/src/src/com/tns/NativeScriptActivity.java @@ -1,46 +1,3922 @@ package com.tns; -import android.util.Log; +public class NativeScriptActivity extends android.app.Activity +{ + private final int objectId; + + public NativeScriptActivity() + { + com.tns.Platform.initInstance(this); + objectId = com.tns.Platform.getorCreateJavaObjectID(this); + } + + public void addContentView(android.view.View param_0, android.view.ViewGroup.LayoutParams param_1) + { + if (__ho0) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "addContentView", args); + } + else + { + super.addContentView(param_0, param_1); + } + } + + public void applyOverrideConfiguration(android.content.res.Configuration param_0) + { + if (__ho1) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "applyOverrideConfiguration", args); + } + else + { + super.applyOverrideConfiguration(param_0); + } + } + + public boolean bindService(android.content.Intent param_0, android.content.ServiceConnection param_1, int param_2) + { + if (__ho2) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (boolean)com.tns.Platform.callJSMethod(this, "bindService", args); + } + else + { + return super.bindService(param_0, param_1, param_2); + } + } + + public int checkCallingOrSelfPermission(java.lang.String param_0) + { + if (__ho3) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (int)com.tns.Platform.callJSMethod(this, "checkCallingOrSelfPermission", args); + } + else + { + return super.checkCallingOrSelfPermission(param_0); + } + } + + public int checkCallingOrSelfUriPermission(android.net.Uri param_0, int param_1) + { + if (__ho4) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (int)com.tns.Platform.callJSMethod(this, "checkCallingOrSelfUriPermission", args); + } + else + { + return super.checkCallingOrSelfUriPermission(param_0, param_1); + } + } + + public int checkCallingPermission(java.lang.String param_0) + { + if (__ho5) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (int)com.tns.Platform.callJSMethod(this, "checkCallingPermission", args); + } + else + { + return super.checkCallingPermission(param_0); + } + } + + public int checkCallingUriPermission(android.net.Uri param_0, int param_1) + { + if (__ho6) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (int)com.tns.Platform.callJSMethod(this, "checkCallingUriPermission", args); + } + else + { + return super.checkCallingUriPermission(param_0, param_1); + } + } + + public int checkPermission(java.lang.String param_0, int param_1, int param_2) + { + if (__ho7) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (int)com.tns.Platform.callJSMethod(this, "checkPermission", args); + } + else + { + return super.checkPermission(param_0, param_1, param_2); + } + } + + public int checkUriPermission(android.net.Uri param_0, int param_1, int param_2, int param_3) + { + if (__ho8) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + return (int)com.tns.Platform.callJSMethod(this, "checkUriPermission", args); + } + else + { + return super.checkUriPermission(param_0, param_1, param_2, param_3); + } + } + + public int checkUriPermission(android.net.Uri param_0, java.lang.String param_1, java.lang.String param_2, int param_3, int param_4, int param_5) + { + if (__ho8) + { + Object[] args = new Object[6]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + return (int)com.tns.Platform.callJSMethod(this, "checkUriPermission", args); + } + else + { + return super.checkUriPermission(param_0, param_1, param_2, param_3, param_4, param_5); + } + } + + public void clearWallpaper() throws java.io.IOException + { + if (__ho9) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "clearWallpaper", args); + } + else + { + super.clearWallpaper(); + } + } + + public void closeContextMenu() + { + if (__ho10) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "closeContextMenu", args); + } + else + { + super.closeContextMenu(); + } + } + + public void closeOptionsMenu() + { + if (__ho11) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "closeOptionsMenu", args); + } + else + { + super.closeOptionsMenu(); + } + } + + public android.content.Context createConfigurationContext(android.content.res.Configuration param_0) + { + if (__ho12) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.content.Context)com.tns.Platform.callJSMethod(this, "createConfigurationContext", args); + } + else + { + return super.createConfigurationContext(param_0); + } + } + + public android.content.Context createDisplayContext(android.view.Display param_0) + { + if (__ho13) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.content.Context)com.tns.Platform.callJSMethod(this, "createDisplayContext", args); + } + else + { + return super.createDisplayContext(param_0); + } + } + + public android.content.Context createPackageContext(java.lang.String param_0, int param_1) throws android.content.pm.PackageManager.NameNotFoundException + { + if (__ho14) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (android.content.Context)com.tns.Platform.callJSMethod(this, "createPackageContext", args); + } + else + { + return super.createPackageContext(param_0, param_1); + } + } + + public android.app.PendingIntent createPendingResult(int param_0, android.content.Intent param_1, int param_2) + { + if (__ho15) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (android.app.PendingIntent)com.tns.Platform.callJSMethod(this, "createPendingResult", args); + } + else + { + return super.createPendingResult(param_0, param_1, param_2); + } + } + + public java.lang.String[] databaseList() + { + if (__ho16) + { + Object[] args = null; + return (java.lang.String[])com.tns.Platform.callJSMethod(this, "databaseList", args); + } + else + { + return super.databaseList(); + } + } + + public boolean deleteDatabase(java.lang.String param_0) + { + if (__ho17) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "deleteDatabase", args); + } + else + { + return super.deleteDatabase(param_0); + } + } + + public boolean deleteFile(java.lang.String param_0) + { + if (__ho18) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "deleteFile", args); + } + else + { + return super.deleteFile(param_0); + } + } + + public boolean dispatchGenericMotionEvent(android.view.MotionEvent param_0) + { + if (__ho19) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "dispatchGenericMotionEvent", args); + } + else + { + return super.dispatchGenericMotionEvent(param_0); + } + } + + public boolean dispatchKeyEvent(android.view.KeyEvent param_0) + { + if (__ho20) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "dispatchKeyEvent", args); + } + else + { + return super.dispatchKeyEvent(param_0); + } + } + + public boolean dispatchKeyShortcutEvent(android.view.KeyEvent param_0) + { + if (__ho21) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "dispatchKeyShortcutEvent", args); + } + else + { + return super.dispatchKeyShortcutEvent(param_0); + } + } + + public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent param_0) + { + if (__ho22) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "dispatchPopulateAccessibilityEvent", args); + } + else + { + return super.dispatchPopulateAccessibilityEvent(param_0); + } + } + + public boolean dispatchTouchEvent(android.view.MotionEvent param_0) + { + if (__ho23) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "dispatchTouchEvent", args); + } + else + { + return super.dispatchTouchEvent(param_0); + } + } + + public boolean dispatchTrackballEvent(android.view.MotionEvent param_0) + { + if (__ho24) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "dispatchTrackballEvent", args); + } + else + { + return super.dispatchTrackballEvent(param_0); + } + } + + public void dump(java.lang.String param_0, java.io.FileDescriptor param_1, java.io.PrintWriter param_2, java.lang.String[] param_3) + { + if (__ho25) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + com.tns.Platform.callJSMethod(this, "dump", args); + } + else + { + super.dump(param_0, param_1, param_2, param_3); + } + } + + public void enforceCallingOrSelfPermission(java.lang.String param_0, java.lang.String param_1) + { + if (__ho26) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "enforceCallingOrSelfPermission", args); + } + else + { + super.enforceCallingOrSelfPermission(param_0, param_1); + } + } + + public void enforceCallingOrSelfUriPermission(android.net.Uri param_0, int param_1, java.lang.String param_2) + { + if (__ho27) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "enforceCallingOrSelfUriPermission", args); + } + else + { + super.enforceCallingOrSelfUriPermission(param_0, param_1, param_2); + } + } + + public void enforceCallingPermission(java.lang.String param_0, java.lang.String param_1) + { + if (__ho28) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "enforceCallingPermission", args); + } + else + { + super.enforceCallingPermission(param_0, param_1); + } + } + + public void enforceCallingUriPermission(android.net.Uri param_0, int param_1, java.lang.String param_2) + { + if (__ho29) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "enforceCallingUriPermission", args); + } + else + { + super.enforceCallingUriPermission(param_0, param_1, param_2); + } + } + + public void enforcePermission(java.lang.String param_0, int param_1, int param_2, java.lang.String param_3) + { + if (__ho30) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + com.tns.Platform.callJSMethod(this, "enforcePermission", args); + } + else + { + super.enforcePermission(param_0, param_1, param_2, param_3); + } + } + + public void enforceUriPermission(android.net.Uri param_0, java.lang.String param_1, java.lang.String param_2, int param_3, int param_4, int param_5, java.lang.String param_6) + { + if (__ho31) + { + Object[] args = new Object[7]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + com.tns.Platform.callJSMethod(this, "enforceUriPermission", args); + } + else + { + super.enforceUriPermission(param_0, param_1, param_2, param_3, param_4, param_5, param_6); + } + } + + public void enforceUriPermission(android.net.Uri param_0, int param_1, int param_2, int param_3, java.lang.String param_4) + { + if (__ho31) + { + Object[] args = new Object[5]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + com.tns.Platform.callJSMethod(this, "enforceUriPermission", args); + } + else + { + super.enforceUriPermission(param_0, param_1, param_2, param_3, param_4); + } + } + + public boolean equals(java.lang.Object param_0) + { + if (__ho32) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "equals", args); + } + else + { + return super.equals(param_0); + } + } + + public java.lang.String[] fileList() + { + if (__ho33) + { + Object[] args = null; + return (java.lang.String[])com.tns.Platform.callJSMethod(this, "fileList", args); + } + else + { + return super.fileList(); + } + } + + public android.view.View findViewById(int param_0) + { + if (__ho34) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.view.View)com.tns.Platform.callJSMethod(this, "findViewById", args); + } + else + { + return super.findViewById(param_0); + } + } + + public void finish() + { + if (__ho35) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "finish", args); + } + else + { + super.finish(); + } + } + + public void finishActivity(int param_0) + { + if (__ho36) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "finishActivity", args); + } + else + { + super.finishActivity(param_0); + } + } + + public void finishActivityFromChild(android.app.Activity param_0, int param_1) + { + if (__ho37) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "finishActivityFromChild", args); + } + else + { + super.finishActivityFromChild(param_0, param_1); + } + } + + public void finishAffinity() + { + if (__ho38) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "finishAffinity", args); + } + else + { + super.finishAffinity(); + } + } + + public void finishFromChild(android.app.Activity param_0) + { + if (__ho39) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "finishFromChild", args); + } + else + { + super.finishFromChild(param_0); + } + } + + public android.app.ActionBar getActionBar() + { + if (__ho40) + { + Object[] args = null; + return (android.app.ActionBar)com.tns.Platform.callJSMethod(this, "getActionBar", args); + } + else + { + return super.getActionBar(); + } + } + + public android.content.Context getApplicationContext() + { + if (__ho41) + { + Object[] args = null; + return (android.content.Context)com.tns.Platform.callJSMethod(this, "getApplicationContext", args); + } + else + { + return super.getApplicationContext(); + } + } + + public android.content.pm.ApplicationInfo getApplicationInfo() + { + if (__ho42) + { + Object[] args = null; + return (android.content.pm.ApplicationInfo)com.tns.Platform.callJSMethod(this, "getApplicationInfo", args); + } + else + { + return super.getApplicationInfo(); + } + } + + public android.content.res.AssetManager getAssets() + { + if (__ho43) + { + Object[] args = null; + return (android.content.res.AssetManager)com.tns.Platform.callJSMethod(this, "getAssets", args); + } + else + { + return super.getAssets(); + } + } + + public android.content.Context getBaseContext() + { + if (__ho44) + { + Object[] args = null; + return (android.content.Context)com.tns.Platform.callJSMethod(this, "getBaseContext", args); + } + else + { + return super.getBaseContext(); + } + } + + public java.io.File getCacheDir() + { + if (__ho45) + { + Object[] args = null; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getCacheDir", args); + } + else + { + return super.getCacheDir(); + } + } + + public android.content.ComponentName getCallingActivity() + { + if (__ho46) + { + Object[] args = null; + return (android.content.ComponentName)com.tns.Platform.callJSMethod(this, "getCallingActivity", args); + } + else + { + return super.getCallingActivity(); + } + } + + public java.lang.String getCallingPackage() + { + if (__ho47) + { + Object[] args = null; + return (java.lang.String)com.tns.Platform.callJSMethod(this, "getCallingPackage", args); + } + else + { + return super.getCallingPackage(); + } + } + + public int getChangingConfigurations() + { + if (__ho48) + { + Object[] args = null; + return (int)com.tns.Platform.callJSMethod(this, "getChangingConfigurations", args); + } + else + { + return super.getChangingConfigurations(); + } + } + + public java.lang.ClassLoader getClassLoader() + { + if (__ho49) + { + Object[] args = null; + return (java.lang.ClassLoader)com.tns.Platform.callJSMethod(this, "getClassLoader", args); + } + else + { + return super.getClassLoader(); + } + } + + public android.content.ComponentName getComponentName() + { + if (__ho50) + { + Object[] args = null; + return (android.content.ComponentName)com.tns.Platform.callJSMethod(this, "getComponentName", args); + } + else + { + return super.getComponentName(); + } + } + + public android.content.ContentResolver getContentResolver() + { + if (__ho51) + { + Object[] args = null; + return (android.content.ContentResolver)com.tns.Platform.callJSMethod(this, "getContentResolver", args); + } + else + { + return super.getContentResolver(); + } + } + + public android.view.View getCurrentFocus() + { + if (__ho52) + { + Object[] args = null; + return (android.view.View)com.tns.Platform.callJSMethod(this, "getCurrentFocus", args); + } + else + { + return super.getCurrentFocus(); + } + } + + public java.io.File getDatabasePath(java.lang.String param_0) + { + if (__ho53) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getDatabasePath", args); + } + else + { + return super.getDatabasePath(param_0); + } + } + + public java.io.File getDir(java.lang.String param_0, int param_1) + { + if (__ho54) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getDir", args); + } + else + { + return super.getDir(param_0, param_1); + } + } + + public java.io.File getExternalCacheDir() + { + if (__ho55) + { + Object[] args = null; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getExternalCacheDir", args); + } + else + { + return super.getExternalCacheDir(); + } + } + + public java.io.File getExternalFilesDir(java.lang.String param_0) + { + if (__ho56) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getExternalFilesDir", args); + } + else + { + return super.getExternalFilesDir(param_0); + } + } + + public java.io.File getFileStreamPath(java.lang.String param_0) + { + if (__ho57) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getFileStreamPath", args); + } + else + { + return super.getFileStreamPath(param_0); + } + } + + public java.io.File getFilesDir() + { + if (__ho58) + { + Object[] args = null; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getFilesDir", args); + } + else + { + return super.getFilesDir(); + } + } + + public android.app.FragmentManager getFragmentManager() + { + if (__ho59) + { + Object[] args = null; + return (android.app.FragmentManager)com.tns.Platform.callJSMethod(this, "getFragmentManager", args); + } + else + { + return super.getFragmentManager(); + } + } + + public android.content.Intent getIntent() + { + if (__ho60) + { + Object[] args = null; + return (android.content.Intent)com.tns.Platform.callJSMethod(this, "getIntent", args); + } + else + { + return super.getIntent(); + } + } + + public java.lang.Object getLastNonConfigurationInstance() + { + if (__ho61) + { + Object[] args = null; + return (java.lang.Object)com.tns.Platform.callJSMethod(this, "getLastNonConfigurationInstance", args); + } + else + { + return super.getLastNonConfigurationInstance(); + } + } + + public android.view.LayoutInflater getLayoutInflater() + { + if (__ho62) + { + Object[] args = null; + return (android.view.LayoutInflater)com.tns.Platform.callJSMethod(this, "getLayoutInflater", args); + } + else + { + return super.getLayoutInflater(); + } + } + + public android.app.LoaderManager getLoaderManager() + { + if (__ho63) + { + Object[] args = null; + return (android.app.LoaderManager)com.tns.Platform.callJSMethod(this, "getLoaderManager", args); + } + else + { + return super.getLoaderManager(); + } + } + + public java.lang.String getLocalClassName() + { + if (__ho64) + { + Object[] args = null; + return (java.lang.String)com.tns.Platform.callJSMethod(this, "getLocalClassName", args); + } + else + { + return super.getLocalClassName(); + } + } + + public android.os.Looper getMainLooper() + { + if (__ho65) + { + Object[] args = null; + return (android.os.Looper)com.tns.Platform.callJSMethod(this, "getMainLooper", args); + } + else + { + return super.getMainLooper(); + } + } + + public android.view.MenuInflater getMenuInflater() + { + if (__ho66) + { + Object[] args = null; + return (android.view.MenuInflater)com.tns.Platform.callJSMethod(this, "getMenuInflater", args); + } + else + { + return super.getMenuInflater(); + } + } + + public java.io.File getObbDir() + { + if (__ho67) + { + Object[] args = null; + return (java.io.File)com.tns.Platform.callJSMethod(this, "getObbDir", args); + } + else + { + return super.getObbDir(); + } + } + + public java.lang.String getPackageCodePath() + { + if (__ho68) + { + Object[] args = null; + return (java.lang.String)com.tns.Platform.callJSMethod(this, "getPackageCodePath", args); + } + else + { + return super.getPackageCodePath(); + } + } + + public android.content.pm.PackageManager getPackageManager() + { + if (__ho69) + { + Object[] args = null; + return (android.content.pm.PackageManager)com.tns.Platform.callJSMethod(this, "getPackageManager", args); + } + else + { + return super.getPackageManager(); + } + } + + public java.lang.String getPackageName() + { + if (__ho70) + { + Object[] args = null; + return (java.lang.String)com.tns.Platform.callJSMethod(this, "getPackageName", args); + } + else + { + return super.getPackageName(); + } + } + + public java.lang.String getPackageResourcePath() + { + if (__ho71) + { + Object[] args = null; + return (java.lang.String)com.tns.Platform.callJSMethod(this, "getPackageResourcePath", args); + } + else + { + return super.getPackageResourcePath(); + } + } + + public android.content.Intent getParentActivityIntent() + { + if (__ho72) + { + Object[] args = null; + return (android.content.Intent)com.tns.Platform.callJSMethod(this, "getParentActivityIntent", args); + } + else + { + return super.getParentActivityIntent(); + } + } + + public android.content.SharedPreferences getPreferences(int param_0) + { + if (__ho73) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.content.SharedPreferences)com.tns.Platform.callJSMethod(this, "getPreferences", args); + } + else + { + return super.getPreferences(param_0); + } + } + + public int getRequestedOrientation() + { + if (__ho74) + { + Object[] args = null; + return (int)com.tns.Platform.callJSMethod(this, "getRequestedOrientation", args); + } + else + { + return super.getRequestedOrientation(); + } + } + + public android.content.res.Resources getResources() + { + if (__ho75) + { + Object[] args = null; + return (android.content.res.Resources)com.tns.Platform.callJSMethod(this, "getResources", args); + } + else + { + return super.getResources(); + } + } + + public android.content.SharedPreferences getSharedPreferences(java.lang.String param_0, int param_1) + { + if (__ho76) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (android.content.SharedPreferences)com.tns.Platform.callJSMethod(this, "getSharedPreferences", args); + } + else + { + return super.getSharedPreferences(param_0, param_1); + } + } + + public java.lang.Object getSystemService(java.lang.String param_0) + { + if (__ho77) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (java.lang.Object)com.tns.Platform.callJSMethod(this, "getSystemService", args); + } + else + { + return super.getSystemService(param_0); + } + } + + public int getTaskId() + { + if (__ho78) + { + Object[] args = null; + return (int)com.tns.Platform.callJSMethod(this, "getTaskId", args); + } + else + { + return super.getTaskId(); + } + } + + public android.content.res.Resources.Theme getTheme() + { + if (__ho79) + { + Object[] args = null; + return (android.content.res.Resources.Theme)com.tns.Platform.callJSMethod(this, "getTheme", args); + } + else + { + return super.getTheme(); + } + } + + public android.graphics.drawable.Drawable getWallpaper() + { + if (__ho80) + { + Object[] args = null; + return (android.graphics.drawable.Drawable)com.tns.Platform.callJSMethod(this, "getWallpaper", args); + } + else + { + return super.getWallpaper(); + } + } + + public int getWallpaperDesiredMinimumHeight() + { + if (__ho81) + { + Object[] args = null; + return (int)com.tns.Platform.callJSMethod(this, "getWallpaperDesiredMinimumHeight", args); + } + else + { + return super.getWallpaperDesiredMinimumHeight(); + } + } + + public int getWallpaperDesiredMinimumWidth() + { + if (__ho82) + { + Object[] args = null; + return (int)com.tns.Platform.callJSMethod(this, "getWallpaperDesiredMinimumWidth", args); + } + else + { + return super.getWallpaperDesiredMinimumWidth(); + } + } + + public android.view.Window getWindow() + { + if (__ho83) + { + Object[] args = null; + return (android.view.Window)com.tns.Platform.callJSMethod(this, "getWindow", args); + } + else + { + return super.getWindow(); + } + } + + public android.view.WindowManager getWindowManager() + { + if (__ho84) + { + Object[] args = null; + return (android.view.WindowManager)com.tns.Platform.callJSMethod(this, "getWindowManager", args); + } + else + { + return super.getWindowManager(); + } + } + + public void grantUriPermission(java.lang.String param_0, android.net.Uri param_1, int param_2) + { + if (__ho85) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "grantUriPermission", args); + } + else + { + super.grantUriPermission(param_0, param_1, param_2); + } + } + + public boolean hasWindowFocus() + { + if (__ho86) + { + Object[] args = null; + return (boolean)com.tns.Platform.callJSMethod(this, "hasWindowFocus", args); + } + else + { + return super.hasWindowFocus(); + } + } + + public int hashCode() + { + if (__ho87) + { + Object[] args = null; + return (int)com.tns.Platform.callJSMethod(this, "hashCode", args); + } + else + { + return super.hashCode(); + } + } + + public void invalidateOptionsMenu() + { + if (__ho88) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "invalidateOptionsMenu", args); + } + else + { + super.invalidateOptionsMenu(); + } + } + + public boolean isChangingConfigurations() + { + if (__ho89) + { + Object[] args = null; + return (boolean)com.tns.Platform.callJSMethod(this, "isChangingConfigurations", args); + } + else + { + return super.isChangingConfigurations(); + } + } + + public boolean isDestroyed() + { + if (__ho90) + { + Object[] args = null; + return (boolean)com.tns.Platform.callJSMethod(this, "isDestroyed", args); + } + else + { + return super.isDestroyed(); + } + } + + public boolean isFinishing() + { + if (__ho91) + { + Object[] args = null; + return (boolean)com.tns.Platform.callJSMethod(this, "isFinishing", args); + } + else + { + return super.isFinishing(); + } + } + + public boolean isRestricted() + { + if (__ho92) + { + Object[] args = null; + return (boolean)com.tns.Platform.callJSMethod(this, "isRestricted", args); + } + else + { + return super.isRestricted(); + } + } + + public boolean isTaskRoot() + { + if (__ho93) + { + Object[] args = null; + return (boolean)com.tns.Platform.callJSMethod(this, "isTaskRoot", args); + } + else + { + return super.isTaskRoot(); + } + } + + public boolean moveTaskToBack(boolean param_0) + { + if (__ho94) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "moveTaskToBack", args); + } + else + { + return super.moveTaskToBack(param_0); + } + } + + public boolean navigateUpTo(android.content.Intent param_0) + { + if (__ho95) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "navigateUpTo", args); + } + else + { + return super.navigateUpTo(param_0); + } + } + + public boolean navigateUpToFromChild(android.app.Activity param_0, android.content.Intent param_1) + { + if (__ho96) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (boolean)com.tns.Platform.callJSMethod(this, "navigateUpToFromChild", args); + } + else + { + return super.navigateUpToFromChild(param_0, param_1); + } + } + + public void onActionModeFinished(android.view.ActionMode param_0) + { + if (__ho97) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onActionModeFinished", args); + } + else + { + super.onActionModeFinished(param_0); + } + } + + public void onActionModeStarted(android.view.ActionMode param_0) + { + if (__ho98) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onActionModeStarted", args); + } + else + { + super.onActionModeStarted(param_0); + } + } + + protected void onActivityResult(int param_0, int param_1, android.content.Intent param_2) + { + if (__ho99) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "onActivityResult", args); + } + else + { + super.onActivityResult(param_0, param_1, param_2); + } + } + + protected void onApplyThemeResource(android.content.res.Resources.Theme param_0, int param_1, boolean param_2) + { + if (__ho100) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "onApplyThemeResource", args); + } + else + { + super.onApplyThemeResource(param_0, param_1, param_2); + } + } + + public void onAttachFragment(android.app.Fragment param_0) + { + if (__ho101) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onAttachFragment", args); + } + else + { + super.onAttachFragment(param_0); + } + } + + public void onAttachedToWindow() + { + if (__ho102) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onAttachedToWindow", args); + } + else + { + super.onAttachedToWindow(); + } + } + + public void onBackPressed() + { + if (__ho103) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onBackPressed", args); + } + else + { + super.onBackPressed(); + } + } + + protected void onChildTitleChanged(android.app.Activity param_0, java.lang.CharSequence param_1) + { + if (__ho104) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "onChildTitleChanged", args); + } + else + { + super.onChildTitleChanged(param_0, param_1); + } + } + + public void onConfigurationChanged(android.content.res.Configuration param_0) + { + if (__ho105) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onConfigurationChanged", args); + } + else + { + super.onConfigurationChanged(param_0); + } + } + + public void onContentChanged() + { + if (__ho106) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onContentChanged", args); + } + else + { + super.onContentChanged(); + } + } + + public boolean onContextItemSelected(android.view.MenuItem param_0) + { + if (__ho107) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "onContextItemSelected", args); + } + else + { + return super.onContextItemSelected(param_0); + } + } + + public void onContextMenuClosed(android.view.Menu param_0) + { + if (__ho108) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onContextMenuClosed", args); + } + else + { + super.onContextMenuClosed(param_0); + } + } + + private native String[] getMethodOverrides(int objectId, Object[] packagesArgs); + + protected void onCreate(android.os.Bundle param_0) + { + Object[] packagesArgs = Platform.packageArgs(this); + String[] methodOverrides = getMethodOverrides(objectId, packagesArgs); + setMethodOverrides(methodOverrides); + + if (__ho109) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onCreate", args); + android.util.Log.d(com.tns.Platform.DEFAULT_LOG_TAG, "NativeScriptActivity.onCreate called"); + } + else + { + super.onCreate(param_0); + } + } + + public void onCreateContextMenu(android.view.ContextMenu param_0, android.view.View param_1, android.view.ContextMenu.ContextMenuInfo param_2) + { + if (__ho110) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "onCreateContextMenu", args); + } + else + { + super.onCreateContextMenu(param_0, param_1, param_2); + } + } + + public java.lang.CharSequence onCreateDescription() + { + if (__ho111) + { + Object[] args = null; + return (java.lang.CharSequence)com.tns.Platform.callJSMethod(this, "onCreateDescription", args); + } + else + { + return super.onCreateDescription(); + } + } + + protected android.app.Dialog onCreateDialog(int param_0, android.os.Bundle param_1) + { + if (__ho112) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (android.app.Dialog)com.tns.Platform.callJSMethod(this, "onCreateDialog", args); + } + else + { + return super.onCreateDialog(param_0, param_1); + } + } + + protected android.app.Dialog onCreateDialog(int param_0) + { + if (__ho112) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.app.Dialog)com.tns.Platform.callJSMethod(this, "onCreateDialog", args); + } + else + { + return super.onCreateDialog(param_0); + } + } + + public void onCreateNavigateUpTaskStack(android.app.TaskStackBuilder param_0) + { + if (__ho113) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onCreateNavigateUpTaskStack", args); + } + else + { + super.onCreateNavigateUpTaskStack(param_0); + } + } + + public boolean onCreateOptionsMenu(android.view.Menu param_0) + { + if (__ho114) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "onCreateOptionsMenu", args); + } + else + { + return super.onCreateOptionsMenu(param_0); + } + } + + public boolean onCreatePanelMenu(int param_0, android.view.Menu param_1) + { + if (__ho115) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (boolean)com.tns.Platform.callJSMethod(this, "onCreatePanelMenu", args); + } + else + { + return super.onCreatePanelMenu(param_0, param_1); + } + } + + public android.view.View onCreatePanelView(int param_0) + { + if (__ho116) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.view.View)com.tns.Platform.callJSMethod(this, "onCreatePanelView", args); + } + else + { + return super.onCreatePanelView(param_0); + } + } + + public boolean onCreateThumbnail(android.graphics.Bitmap param_0, android.graphics.Canvas param_1) + { + if (__ho117) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (boolean)com.tns.Platform.callJSMethod(this, "onCreateThumbnail", args); + } + else + { + return super.onCreateThumbnail(param_0, param_1); + } + } + + public android.view.View onCreateView(java.lang.String param_0, android.content.Context param_1, android.util.AttributeSet param_2) + { + if (__ho118) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (android.view.View)com.tns.Platform.callJSMethod(this, "onCreateView", args); + } + else + { + return super.onCreateView(param_0, param_1, param_2); + } + } + + public android.view.View onCreateView(android.view.View param_0, java.lang.String param_1, android.content.Context param_2, android.util.AttributeSet param_3) + { + if (__ho118) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + return (android.view.View)com.tns.Platform.callJSMethod(this, "onCreateView", args); + } + else + { + return super.onCreateView(param_0, param_1, param_2, param_3); + } + } + + protected void onDestroy() + { + if (__ho119) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onDestroy", args); + } + else + { + super.onDestroy(); + } + // TODO: remove from com.tns.Platform.strongInstances + } + + public void onDetachedFromWindow() + { + if (__ho120) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onDetachedFromWindow", args); + } + else + { + super.onDetachedFromWindow(); + } + } + + public boolean onGenericMotionEvent(android.view.MotionEvent param_0) + { + if (__ho121) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "onGenericMotionEvent", args); + } + else + { + return super.onGenericMotionEvent(param_0); + } + } + + public boolean onKeyDown(int param_0, android.view.KeyEvent param_1) + { + if (__ho122) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (boolean)com.tns.Platform.callJSMethod(this, "onKeyDown", args); + } + else + { + return super.onKeyDown(param_0, param_1); + } + } + + public boolean onKeyLongPress(int param_0, android.view.KeyEvent param_1) + { + if (__ho123) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (boolean)com.tns.Platform.callJSMethod(this, "onKeyLongPress", args); + } + else + { + return super.onKeyLongPress(param_0, param_1); + } + } + + public boolean onKeyMultiple(int param_0, int param_1, android.view.KeyEvent param_2) + { + if (__ho124) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (boolean)com.tns.Platform.callJSMethod(this, "onKeyMultiple", args); + } + else + { + return super.onKeyMultiple(param_0, param_1, param_2); + } + } + + public boolean onKeyShortcut(int param_0, android.view.KeyEvent param_1) + { + if (__ho125) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (boolean)com.tns.Platform.callJSMethod(this, "onKeyShortcut", args); + } + else + { + return super.onKeyShortcut(param_0, param_1); + } + } + + public boolean onKeyUp(int param_0, android.view.KeyEvent param_1) + { + if (__ho126) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (boolean)com.tns.Platform.callJSMethod(this, "onKeyUp", args); + } + else + { + return super.onKeyUp(param_0, param_1); + } + } + + public void onLowMemory() + { + if (__ho127) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onLowMemory", args); + } + else + { + super.onLowMemory(); + } + } + + public boolean onMenuItemSelected(int param_0, android.view.MenuItem param_1) + { + if (__ho128) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (boolean)com.tns.Platform.callJSMethod(this, "onMenuItemSelected", args); + } + else + { + return super.onMenuItemSelected(param_0, param_1); + } + } + + public boolean onMenuOpened(int param_0, android.view.Menu param_1) + { + if (__ho129) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (boolean)com.tns.Platform.callJSMethod(this, "onMenuOpened", args); + } + else + { + return super.onMenuOpened(param_0, param_1); + } + } + + public boolean onNavigateUp() + { + if (__ho130) + { + Object[] args = null; + return (boolean)com.tns.Platform.callJSMethod(this, "onNavigateUp", args); + } + else + { + return super.onNavigateUp(); + } + } + + public boolean onNavigateUpFromChild(android.app.Activity param_0) + { + if (__ho131) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "onNavigateUpFromChild", args); + } + else + { + return super.onNavigateUpFromChild(param_0); + } + } + + protected void onNewIntent(android.content.Intent param_0) + { + if (__ho132) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onNewIntent", args); + } + else + { + super.onNewIntent(param_0); + } + } + + public boolean onOptionsItemSelected(android.view.MenuItem param_0) + { + if (__ho133) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "onOptionsItemSelected", args); + } + else + { + return super.onOptionsItemSelected(param_0); + } + } + + public void onOptionsMenuClosed(android.view.Menu param_0) + { + if (__ho134) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onOptionsMenuClosed", args); + } + else + { + super.onOptionsMenuClosed(param_0); + } + } + + public void onPanelClosed(int param_0, android.view.Menu param_1) + { + if (__ho135) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "onPanelClosed", args); + } + else + { + super.onPanelClosed(param_0, param_1); + } + } + + protected void onPause() + { + if (__ho136) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onPause", args); + } + else + { + super.onPause(); + } + } + + protected void onPostCreate(android.os.Bundle param_0) + { + if (__ho137) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onPostCreate", args); + } + else + { + super.onPostCreate(param_0); + } + } + + protected void onPostResume() + { + if (__ho138) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onPostResume", args); + } + else + { + super.onPostResume(); + } + } + + protected void onPrepareDialog(int param_0, android.app.Dialog param_1) + { + if (__ho139) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "onPrepareDialog", args); + } + else + { + super.onPrepareDialog(param_0, param_1); + } + } + + protected void onPrepareDialog(int param_0, android.app.Dialog param_1, android.os.Bundle param_2) + { + if (__ho139) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "onPrepareDialog", args); + } + else + { + super.onPrepareDialog(param_0, param_1, param_2); + } + } + + public void onPrepareNavigateUpTaskStack(android.app.TaskStackBuilder param_0) + { + if (__ho140) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onPrepareNavigateUpTaskStack", args); + } + else + { + super.onPrepareNavigateUpTaskStack(param_0); + } + } + + public boolean onPrepareOptionsMenu(android.view.Menu param_0) + { + if (__ho141) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "onPrepareOptionsMenu", args); + } + else + { + return super.onPrepareOptionsMenu(param_0); + } + } + + public boolean onPreparePanel(int param_0, android.view.View param_1, android.view.Menu param_2) + { + if (__ho142) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (boolean)com.tns.Platform.callJSMethod(this, "onPreparePanel", args); + } + else + { + return super.onPreparePanel(param_0, param_1, param_2); + } + } + + protected void onRestart() + { + if (__ho143) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onRestart", args); + } + else + { + super.onRestart(); + } + } + + protected void onRestoreInstanceState(android.os.Bundle param_0) + { + if (__ho144) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onRestoreInstanceState", args); + } + else + { + super.onRestoreInstanceState(param_0); + } + } + + protected void onResume() + { + if (__ho145) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onResume", args); + } + else + { + super.onResume(); + } + } + + public java.lang.Object onRetainNonConfigurationInstance() + { + if (__ho146) + { + Object[] args = null; + return (java.lang.Object)com.tns.Platform.callJSMethod(this, "onRetainNonConfigurationInstance", args); + } + else + { + return super.onRetainNonConfigurationInstance(); + } + } + + protected void onSaveInstanceState(android.os.Bundle param_0) + { + if (__ho147) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onSaveInstanceState", args); + } + else + { + super.onSaveInstanceState(param_0); + } + } + + public boolean onSearchRequested() + { + if (__ho148) + { + Object[] args = null; + return (boolean)com.tns.Platform.callJSMethod(this, "onSearchRequested", args); + } + else + { + return super.onSearchRequested(); + } + } + + protected void onStart() + { + if (__ho149) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onStart", args); + } + else + { + super.onStart(); + } + } + + protected void onStop() + { + if (__ho150) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onStop", args); + } + else + { + super.onStop(); + } + } + + protected void onTitleChanged(java.lang.CharSequence param_0, int param_1) + { + if (__ho151) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "onTitleChanged", args); + } + else + { + super.onTitleChanged(param_0, param_1); + } + } + + public boolean onTouchEvent(android.view.MotionEvent param_0) + { + if (__ho152) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "onTouchEvent", args); + } + else + { + return super.onTouchEvent(param_0); + } + } + + public boolean onTrackballEvent(android.view.MotionEvent param_0) + { + if (__ho153) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "onTrackballEvent", args); + } + else + { + return super.onTrackballEvent(param_0); + } + } + + public void onTrimMemory(int param_0) + { + if (__ho154) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onTrimMemory", args); + } + else + { + super.onTrimMemory(param_0); + } + } + + public void onUserInteraction() + { + if (__ho155) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onUserInteraction", args); + } + else + { + super.onUserInteraction(); + } + } + + protected void onUserLeaveHint() + { + if (__ho156) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "onUserLeaveHint", args); + } + else + { + super.onUserLeaveHint(); + } + } + + public void onWindowAttributesChanged(android.view.WindowManager.LayoutParams param_0) + { + if (__ho157) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onWindowAttributesChanged", args); + } + else + { + super.onWindowAttributesChanged(param_0); + } + } + + public void onWindowFocusChanged(boolean param_0) + { + if (__ho158) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "onWindowFocusChanged", args); + } + else + { + super.onWindowFocusChanged(param_0); + } + } + + public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback param_0) + { + if (__ho159) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.view.ActionMode)com.tns.Platform.callJSMethod(this, "onWindowStartingActionMode", args); + } + else + { + return super.onWindowStartingActionMode(param_0); + } + } + + public void openContextMenu(android.view.View param_0) + { + if (__ho160) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "openContextMenu", args); + } + else + { + super.openContextMenu(param_0); + } + } + + public java.io.FileInputStream openFileInput(java.lang.String param_0) throws java.io.FileNotFoundException + { + if (__ho161) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (java.io.FileInputStream)com.tns.Platform.callJSMethod(this, "openFileInput", args); + } + else + { + return super.openFileInput(param_0); + } + } + + public java.io.FileOutputStream openFileOutput(java.lang.String param_0, int param_1) throws java.io.FileNotFoundException + { + if (__ho162) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (java.io.FileOutputStream)com.tns.Platform.callJSMethod(this, "openFileOutput", args); + } + else + { + return super.openFileOutput(param_0, param_1); + } + } + + public void openOptionsMenu() + { + if (__ho163) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "openOptionsMenu", args); + } + else + { + super.openOptionsMenu(); + } + } + + public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String param_0, int param_1, android.database.sqlite.SQLiteDatabase.CursorFactory param_2, android.database.DatabaseErrorHandler param_3) + { + if (__ho164) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + return (android.database.sqlite.SQLiteDatabase)com.tns.Platform.callJSMethod(this, "openOrCreateDatabase", args); + } + else + { + return super.openOrCreateDatabase(param_0, param_1, param_2, param_3); + } + } + + public android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String param_0, int param_1, android.database.sqlite.SQLiteDatabase.CursorFactory param_2) + { + if (__ho164) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (android.database.sqlite.SQLiteDatabase)com.tns.Platform.callJSMethod(this, "openOrCreateDatabase", args); + } + else + { + return super.openOrCreateDatabase(param_0, param_1, param_2); + } + } + + public void overridePendingTransition(int param_0, int param_1) + { + if (__ho165) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "overridePendingTransition", args); + } + else + { + super.overridePendingTransition(param_0, param_1); + } + } + + public android.graphics.drawable.Drawable peekWallpaper() + { + if (__ho166) + { + Object[] args = null; + return (android.graphics.drawable.Drawable)com.tns.Platform.callJSMethod(this, "peekWallpaper", args); + } + else + { + return super.peekWallpaper(); + } + } + + public void recreate() + { + if (__ho167) + { + Object[] args = null; + com.tns.Platform.callJSMethod(this, "recreate", args); + } + else + { + super.recreate(); + } + } + + public void registerComponentCallbacks(android.content.ComponentCallbacks param_0) + { + if (__ho168) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "registerComponentCallbacks", args); + } + else + { + super.registerComponentCallbacks(param_0); + } + } + + public void registerForContextMenu(android.view.View param_0) + { + if (__ho169) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "registerForContextMenu", args); + } + else + { + super.registerForContextMenu(param_0); + } + } + + public android.content.Intent registerReceiver(android.content.BroadcastReceiver param_0, android.content.IntentFilter param_1, java.lang.String param_2, android.os.Handler param_3) + { + if (__ho170) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + return (android.content.Intent)com.tns.Platform.callJSMethod(this, "registerReceiver", args); + } + else + { + return super.registerReceiver(param_0, param_1, param_2, param_3); + } + } + + public android.content.Intent registerReceiver(android.content.BroadcastReceiver param_0, android.content.IntentFilter param_1) + { + if (__ho170) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (android.content.Intent)com.tns.Platform.callJSMethod(this, "registerReceiver", args); + } + else + { + return super.registerReceiver(param_0, param_1); + } + } + + public void removeStickyBroadcast(android.content.Intent param_0) + { + if (__ho171) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "removeStickyBroadcast", args); + } + else + { + super.removeStickyBroadcast(param_0); + } + } + + public void removeStickyBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1) + { + if (__ho172) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "removeStickyBroadcastAsUser", args); + } + else + { + super.removeStickyBroadcastAsUser(param_0, param_1); + } + } + + public void revokeUriPermission(android.net.Uri param_0, int param_1) + { + if (__ho173) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "revokeUriPermission", args); + } + else + { + super.revokeUriPermission(param_0, param_1); + } + } + + public void sendBroadcast(android.content.Intent param_0, java.lang.String param_1) + { + if (__ho174) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "sendBroadcast", args); + } + else + { + super.sendBroadcast(param_0, param_1); + } + } + + public void sendBroadcast(android.content.Intent param_0) + { + if (__ho174) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "sendBroadcast", args); + } + else + { + super.sendBroadcast(param_0); + } + } + + public void sendBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1) + { + if (__ho175) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "sendBroadcastAsUser", args); + } + else + { + super.sendBroadcastAsUser(param_0, param_1); + } + } + + public void sendBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1, java.lang.String param_2) + { + if (__ho175) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "sendBroadcastAsUser", args); + } + else + { + super.sendBroadcastAsUser(param_0, param_1, param_2); + } + } + + public void sendOrderedBroadcast(android.content.Intent param_0, java.lang.String param_1, android.content.BroadcastReceiver param_2, android.os.Handler param_3, int param_4, java.lang.String param_5, android.os.Bundle param_6) + { + if (__ho176) + { + Object[] args = new Object[7]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + com.tns.Platform.callJSMethod(this, "sendOrderedBroadcast", args); + } + else + { + super.sendOrderedBroadcast(param_0, param_1, param_2, param_3, param_4, param_5, param_6); + } + } + + public void sendOrderedBroadcast(android.content.Intent param_0, java.lang.String param_1) + { + if (__ho176) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "sendOrderedBroadcast", args); + } + else + { + super.sendOrderedBroadcast(param_0, param_1); + } + } + + public void sendOrderedBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1, java.lang.String param_2, android.content.BroadcastReceiver param_3, android.os.Handler param_4, int param_5, java.lang.String param_6, android.os.Bundle param_7) + { + if (__ho177) + { + Object[] args = new Object[8]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + args[7] = param_7; + com.tns.Platform.callJSMethod(this, "sendOrderedBroadcastAsUser", args); + } + else + { + super.sendOrderedBroadcastAsUser(param_0, param_1, param_2, param_3, param_4, param_5, param_6, param_7); + } + } + + public void sendStickyBroadcast(android.content.Intent param_0) + { + if (__ho178) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "sendStickyBroadcast", args); + } + else + { + super.sendStickyBroadcast(param_0); + } + } + + public void sendStickyBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1) + { + if (__ho179) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "sendStickyBroadcastAsUser", args); + } + else + { + super.sendStickyBroadcastAsUser(param_0, param_1); + } + } + + public void sendStickyOrderedBroadcast(android.content.Intent param_0, android.content.BroadcastReceiver param_1, android.os.Handler param_2, int param_3, java.lang.String param_4, android.os.Bundle param_5) + { + if (__ho180) + { + Object[] args = new Object[6]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + com.tns.Platform.callJSMethod(this, "sendStickyOrderedBroadcast", args); + } + else + { + super.sendStickyOrderedBroadcast(param_0, param_1, param_2, param_3, param_4, param_5); + } + } + + public void sendStickyOrderedBroadcastAsUser(android.content.Intent param_0, android.os.UserHandle param_1, android.content.BroadcastReceiver param_2, android.os.Handler param_3, int param_4, java.lang.String param_5, android.os.Bundle param_6) + { + if (__ho181) + { + Object[] args = new Object[7]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + com.tns.Platform.callJSMethod(this, "sendStickyOrderedBroadcastAsUser", args); + } + else + { + super.sendStickyOrderedBroadcastAsUser(param_0, param_1, param_2, param_3, param_4, param_5, param_6); + } + } + + public void setContentView(int param_0) + { + if (__ho182) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setContentView", args); + } + else + { + super.setContentView(param_0); + } + } + + public void setContentView(android.view.View param_0, android.view.ViewGroup.LayoutParams param_1) + { + if (__ho182) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "setContentView", args); + } + else + { + super.setContentView(param_0, param_1); + } + } + + public void setContentView(android.view.View param_0) + { + if (__ho182) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setContentView", args); + } + else + { + super.setContentView(param_0); + } + } + + public void setFinishOnTouchOutside(boolean param_0) + { + if (__ho183) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setFinishOnTouchOutside", args); + } + else + { + super.setFinishOnTouchOutside(param_0); + } + } + + public void setIntent(android.content.Intent param_0) + { + if (__ho184) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setIntent", args); + } + else + { + super.setIntent(param_0); + } + } + + public void setRequestedOrientation(int param_0) + { + if (__ho185) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setRequestedOrientation", args); + } + else + { + super.setRequestedOrientation(param_0); + } + } + + public void setTheme(int param_0) + { + if (__ho186) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setTheme", args); + } + else + { + super.setTheme(param_0); + } + } + + public void setTitle(java.lang.CharSequence param_0) + { + if (__ho187) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setTitle", args); + } + else + { + super.setTitle(param_0); + } + } + + public void setTitle(int param_0) + { + if (__ho187) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setTitle", args); + } + else + { + super.setTitle(param_0); + } + } + + public void setTitleColor(int param_0) + { + if (__ho188) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setTitleColor", args); + } + else + { + super.setTitleColor(param_0); + } + } + + public void setVisible(boolean param_0) + { + if (__ho189) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setVisible", args); + } + else + { + super.setVisible(param_0); + } + } -public class NativeScriptActivity extends android.app.Activity implements com.tns.NativeScriptHashCodeProvider { - public NativeScriptActivity() { + public void setWallpaper(java.io.InputStream param_0) throws java.io.IOException + { + if (__ho190) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setWallpaper", args); + } + else + { + super.setWallpaper(param_0); + } } - - public int hashCode__super() { - return super.hashCode(); + + public void setWallpaper(android.graphics.Bitmap param_0) throws java.io.IOException + { + if (__ho190) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "setWallpaper", args); + } + else + { + super.setWallpaper(param_0); + } } - - public boolean equals__super(Object other) { - return super.equals(other); + + public boolean shouldUpRecreateTask(android.content.Intent param_0) + { + if (__ho191) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "shouldUpRecreateTask", args); + } + else + { + return super.shouldUpRecreateTask(param_0); + } } - protected void onCreate(android.os.Bundle param_0) { - if(ErrorReport.HasApplicationCreateError) + public android.view.ActionMode startActionMode(android.view.ActionMode.Callback param_0) + { + if (__ho192) { - super.onCreate(param_0); - this.finish(); - return; + Object[] args = new Object[1]; + args[0] = param_0; + return (android.view.ActionMode)com.tns.Platform.callJSMethod(this, "startActionMode", args); } - - Log.d(Platform.DEFAULT_LOG_TAG, "Creating Activity with intent: " + super.getIntent().toString() + " action:" + super.getIntent().getAction()); - - if (BuildConfig.DEBUG && super.getIntent().getAction() == null) + else { - super.getIntent().setAction(android.content.Intent.ACTION_MAIN); + return super.startActionMode(param_0); } - com.tns.Platform.initInstance(this, super.getIntent()); + } - boolean isErrorReport = ErrorReport.hasIntent(this.getIntent()); - if (isErrorReport) + public void startActivities(android.content.Intent[] param_0, android.os.Bundle param_1) + { + if (__ho193) { - super.onCreate(param_0); - new ErrorReport(this).buildUI(); + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "startActivities", args); + } + else + { + super.startActivities(param_0, param_1); + } + } + + public void startActivities(android.content.Intent[] param_0) + { + if (__ho193) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "startActivities", args); + } + else + { + super.startActivities(param_0); + } + } + + public void startActivity(android.content.Intent param_0, android.os.Bundle param_1) + { + if (__ho194) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "startActivity", args); + } + else + { + super.startActivity(param_0, param_1); + } + } + + public void startActivity(android.content.Intent param_0) + { + if (__ho194) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "startActivity", args); + } + else + { + super.startActivity(param_0); + } + } + + public void startActivityForResult(android.content.Intent param_0, int param_1) + { + if (__ho195) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "startActivityForResult", args); + } + else + { + super.startActivityForResult(param_0, param_1); + } + } + + public void startActivityForResult(android.content.Intent param_0, int param_1, android.os.Bundle param_2) + { + if (__ho195) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "startActivityForResult", args); + } + else + { + super.startActivityForResult(param_0, param_1, param_2); + } + } + + public void startActivityFromChild(android.app.Activity param_0, android.content.Intent param_1, int param_2, android.os.Bundle param_3) + { + if (__ho196) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + com.tns.Platform.callJSMethod(this, "startActivityFromChild", args); + } + else + { + super.startActivityFromChild(param_0, param_1, param_2, param_3); + } + } + + public void startActivityFromChild(android.app.Activity param_0, android.content.Intent param_1, int param_2) + { + if (__ho196) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "startActivityFromChild", args); + } + else + { + super.startActivityFromChild(param_0, param_1, param_2); + } + } + + public void startActivityFromFragment(android.app.Fragment param_0, android.content.Intent param_1, int param_2) + { + if (__ho197) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + com.tns.Platform.callJSMethod(this, "startActivityFromFragment", args); + } + else + { + super.startActivityFromFragment(param_0, param_1, param_2); + } + } + + public void startActivityFromFragment(android.app.Fragment param_0, android.content.Intent param_1, int param_2, android.os.Bundle param_3) + { + if (__ho197) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + com.tns.Platform.callJSMethod(this, "startActivityFromFragment", args); + } + else + { + super.startActivityFromFragment(param_0, param_1, param_2, param_3); + } + } + + public boolean startActivityIfNeeded(android.content.Intent param_0, int param_1) + { + if (__ho198) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (boolean)com.tns.Platform.callJSMethod(this, "startActivityIfNeeded", args); + } + else + { + return super.startActivityIfNeeded(param_0, param_1); + } + } + + public boolean startActivityIfNeeded(android.content.Intent param_0, int param_1, android.os.Bundle param_2) + { + if (__ho198) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (boolean)com.tns.Platform.callJSMethod(this, "startActivityIfNeeded", args); + } + else + { + return super.startActivityIfNeeded(param_0, param_1, param_2); + } + } + + public boolean startInstrumentation(android.content.ComponentName param_0, java.lang.String param_1, android.os.Bundle param_2) + { + if (__ho199) + { + Object[] args = new Object[3]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + return (boolean)com.tns.Platform.callJSMethod(this, "startInstrumentation", args); + } + else + { + return super.startInstrumentation(param_0, param_1, param_2); + } + } + + public void startIntentSender(android.content.IntentSender param_0, android.content.Intent param_1, int param_2, int param_3, int param_4, android.os.Bundle param_5) throws android.content.IntentSender.SendIntentException + { + if (__ho200) + { + Object[] args = new Object[6]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + com.tns.Platform.callJSMethod(this, "startIntentSender", args); + } + else + { + super.startIntentSender(param_0, param_1, param_2, param_3, param_4, param_5); + } + } + + public void startIntentSender(android.content.IntentSender param_0, android.content.Intent param_1, int param_2, int param_3, int param_4) throws android.content.IntentSender.SendIntentException + { + if (__ho200) + { + Object[] args = new Object[5]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + com.tns.Platform.callJSMethod(this, "startIntentSender", args); + } + else + { + super.startIntentSender(param_0, param_1, param_2, param_3, param_4); + } + } + + public void startIntentSenderForResult(android.content.IntentSender param_0, int param_1, android.content.Intent param_2, int param_3, int param_4, int param_5, android.os.Bundle param_6) throws android.content.IntentSender.SendIntentException + { + if (__ho201) + { + Object[] args = new Object[7]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + com.tns.Platform.callJSMethod(this, "startIntentSenderForResult", args); + } + else + { + super.startIntentSenderForResult(param_0, param_1, param_2, param_3, param_4, param_5, param_6); + } + } + + public void startIntentSenderForResult(android.content.IntentSender param_0, int param_1, android.content.Intent param_2, int param_3, int param_4, int param_5) throws android.content.IntentSender.SendIntentException + { + if (__ho201) + { + Object[] args = new Object[6]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + com.tns.Platform.callJSMethod(this, "startIntentSenderForResult", args); + } + else + { + super.startIntentSenderForResult(param_0, param_1, param_2, param_3, param_4, param_5); + } + } + + public void startIntentSenderFromChild(android.app.Activity param_0, android.content.IntentSender param_1, int param_2, android.content.Intent param_3, int param_4, int param_5, int param_6, android.os.Bundle param_7) throws android.content.IntentSender.SendIntentException + { + if (__ho202) + { + Object[] args = new Object[8]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + args[7] = param_7; + com.tns.Platform.callJSMethod(this, "startIntentSenderFromChild", args); + } + else + { + super.startIntentSenderFromChild(param_0, param_1, param_2, param_3, param_4, param_5, param_6, param_7); + } + } + + public void startIntentSenderFromChild(android.app.Activity param_0, android.content.IntentSender param_1, int param_2, android.content.Intent param_3, int param_4, int param_5, int param_6) throws android.content.IntentSender.SendIntentException + { + if (__ho202) + { + Object[] args = new Object[7]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + args[4] = param_4; + args[5] = param_5; + args[6] = param_6; + com.tns.Platform.callJSMethod(this, "startIntentSenderFromChild", args); + } + else + { + super.startIntentSenderFromChild(param_0, param_1, param_2, param_3, param_4, param_5, param_6); + } + } + + public void startManagingCursor(android.database.Cursor param_0) + { + if (__ho203) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "startManagingCursor", args); + } + else + { + super.startManagingCursor(param_0); + } + } + + public boolean startNextMatchingActivity(android.content.Intent param_0) + { + if (__ho204) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "startNextMatchingActivity", args); + } + else + { + return super.startNextMatchingActivity(param_0); + } + } + + public boolean startNextMatchingActivity(android.content.Intent param_0, android.os.Bundle param_1) + { + if (__ho204) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + return (boolean)com.tns.Platform.callJSMethod(this, "startNextMatchingActivity", args); + } + else + { + return super.startNextMatchingActivity(param_0, param_1); + } + } + + public void startSearch(java.lang.String param_0, boolean param_1, android.os.Bundle param_2, boolean param_3) + { + if (__ho205) + { + Object[] args = new Object[4]; + args[0] = param_0; + args[1] = param_1; + args[2] = param_2; + args[3] = param_3; + com.tns.Platform.callJSMethod(this, "startSearch", args); + } + else + { + super.startSearch(param_0, param_1, param_2, param_3); + } + } + + public android.content.ComponentName startService(android.content.Intent param_0) + { + if (__ho206) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (android.content.ComponentName)com.tns.Platform.callJSMethod(this, "startService", args); + } + else + { + return super.startService(param_0); + } + } + + public void stopManagingCursor(android.database.Cursor param_0) + { + if (__ho207) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "stopManagingCursor", args); + } + else + { + super.stopManagingCursor(param_0); + } + } + + public boolean stopService(android.content.Intent param_0) + { + if (__ho208) + { + Object[] args = new Object[1]; + args[0] = param_0; + return (boolean)com.tns.Platform.callJSMethod(this, "stopService", args); + } + else + { + return super.stopService(param_0); + } + } + + public void takeKeyEvents(boolean param_0) + { + if (__ho209) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "takeKeyEvents", args); + } + else + { + super.takeKeyEvents(param_0); + } + } + + public java.lang.String toString() + { + if (__ho210) + { + Object[] args = null; + return (java.lang.String)com.tns.Platform.callJSMethod(this, "toString", args); + } + else + { + return super.toString(); + } + } + + public void triggerSearch(java.lang.String param_0, android.os.Bundle param_1) + { + if (__ho211) + { + Object[] args = new Object[2]; + args[0] = param_0; + args[1] = param_1; + com.tns.Platform.callJSMethod(this, "triggerSearch", args); } else { - java.lang.Object[] params = new Object[1]; - params[0] = param_0; - com.tns.Platform.callJSMethod(this, "onCreate", params); + super.triggerSearch(param_0, param_1); + } + } + + public void unbindService(android.content.ServiceConnection param_0) + { + if (__ho212) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "unbindService", args); + } + else + { + super.unbindService(param_0); + } + } + + public void unregisterComponentCallbacks(android.content.ComponentCallbacks param_0) + { + if (__ho213) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "unregisterComponentCallbacks", args); + } + else + { + super.unregisterComponentCallbacks(param_0); + } + } + + public void unregisterForContextMenu(android.view.View param_0) + { + if (__ho214) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "unregisterForContextMenu", args); + } + else + { + super.unregisterForContextMenu(param_0); + } + } + + public void unregisterReceiver(android.content.BroadcastReceiver param_0) + { + if (__ho215) + { + Object[] args = new Object[1]; + args[0] = param_0; + com.tns.Platform.callJSMethod(this, "unregisterReceiver", args); + } + else + { + super.unregisterReceiver(param_0); + } + } + + private void setMethodOverrides(String[] methodOverrides) + { + for (String m: methodOverrides) + { + if (m.equals("onChildTitleChanged")) __ho104= true; + if (m.equals("getChangingConfigurations")) __ho48= true; + if (m.equals("getObbDir")) __ho67= true; + if (m.equals("onSearchRequested")) __ho148= true; + if (m.equals("navigateUpToFromChild")) __ho96= true; + if (m.equals("deleteDatabase")) __ho17= true; + if (m.equals("checkPermission")) __ho7= true; + if (m.equals("enforceUriPermission")) __ho31= true; + if (m.equals("startActivityFromFragment")) __ho197= true; + if (m.equals("databaseList")) __ho16= true; + if (m.equals("dispatchGenericMotionEvent")) __ho19= true; + if (m.equals("getFilesDir")) __ho58= true; + if (m.equals("sendStickyOrderedBroadcastAsUser")) __ho181= true; + if (m.equals("fileList")) __ho33= true; + if (m.equals("getWallpaper")) __ho80= true; + if (m.equals("onBackPressed")) __ho103= true; + if (m.equals("onRestart")) __ho143= true; + if (m.equals("shouldUpRecreateTask")) __ho191= true; + if (m.equals("finishAffinity")) __ho38= true; + if (m.equals("setIntent")) __ho184= true; + if (m.equals("unregisterComponentCallbacks")) __ho213= true; + if (m.equals("dispatchPopulateAccessibilityEvent")) __ho22= true; + if (m.equals("getLoaderManager")) __ho63= true; + if (m.equals("startIntentSender")) __ho200= true; + if (m.equals("openOrCreateDatabase")) __ho164= true; + if (m.equals("getFileStreamPath")) __ho57= true; + if (m.equals("closeOptionsMenu")) __ho11= true; + if (m.equals("getWallpaperDesiredMinimumHeight")) __ho81= true; + if (m.equals("getCallingActivity")) __ho46= true; + if (m.equals("openOptionsMenu")) __ho163= true; + if (m.equals("onWindowAttributesChanged")) __ho157= true; + if (m.equals("invalidateOptionsMenu")) __ho88= true; + if (m.equals("onCreateNavigateUpTaskStack")) __ho113= true; + if (m.equals("removeStickyBroadcast")) __ho171= true; + if (m.equals("dispatchKeyEvent")) __ho20= true; + if (m.equals("getCurrentFocus")) __ho52= true; + if (m.equals("peekWallpaper")) __ho166= true; + if (m.equals("createConfigurationContext")) __ho12= true; + if (m.equals("getApplicationContext")) __ho41= true; + if (m.equals("sendStickyBroadcast")) __ho178= true; + if (m.equals("getResources")) __ho75= true; + if (m.equals("onOptionsMenuClosed")) __ho134= true; + if (m.equals("getSharedPreferences")) __ho76= true; + if (m.equals("setFinishOnTouchOutside")) __ho183= true; + if (m.equals("onAttachedToWindow")) __ho102= true; + if (m.equals("getWallpaperDesiredMinimumWidth")) __ho82= true; + if (m.equals("startInstrumentation")) __ho199= true; + if (m.equals("onPrepareOptionsMenu")) __ho141= true; + if (m.equals("getComponentName")) __ho50= true; + if (m.equals("sendStickyBroadcastAsUser")) __ho179= true; + if (m.equals("setWallpaper")) __ho190= true; + if (m.equals("stopManagingCursor")) __ho207= true; + if (m.equals("getParentActivityIntent")) __ho72= true; + if (m.equals("onTrimMemory")) __ho154= true; + if (m.equals("onActionModeFinished")) __ho97= true; + if (m.equals("recreate")) __ho167= true; + if (m.equals("sendStickyOrderedBroadcast")) __ho180= true; + if (m.equals("onCreateDialog")) __ho112= true; + if (m.equals("startActivityForResult")) __ho195= true; + if (m.equals("onTitleChanged")) __ho151= true; + if (m.equals("getActionBar")) __ho40= true; + if (m.equals("onCreatePanelView")) __ho116= true; + if (m.equals("onNewIntent")) __ho132= true; + if (m.equals("onKeyMultiple")) __ho124= true; + if (m.equals("toString")) __ho210= true; + if (m.equals("applyOverrideConfiguration")) __ho1= true; + if (m.equals("getFragmentManager")) __ho59= true; + if (m.equals("onPanelClosed")) __ho135= true; + if (m.equals("createDisplayContext")) __ho13= true; + if (m.equals("onKeyShortcut")) __ho125= true; + if (m.equals("dispatchTrackballEvent")) __ho24= true; + if (m.equals("addContentView")) __ho0= true; + if (m.equals("onActivityResult")) __ho99= true; + if (m.equals("openFileInput")) __ho161= true; + if (m.equals("getRequestedOrientation")) __ho74= true; + if (m.equals("getWindowManager")) __ho84= true; + if (m.equals("triggerSearch")) __ho211= true; + if (m.equals("finish")) __ho35= true; + if (m.equals("dispatchKeyShortcutEvent")) __ho21= true; + if (m.equals("setVisible")) __ho189= true; + if (m.equals("isDestroyed")) __ho90= true; + if (m.equals("setTitle")) __ho187= true; + if (m.equals("startActivities")) __ho193= true; + if (m.equals("onKeyLongPress")) __ho123= true; + if (m.equals("onGenericMotionEvent")) __ho121= true; + if (m.equals("getMenuInflater")) __ho66= true; + if (m.equals("isChangingConfigurations")) __ho89= true; + if (m.equals("getPackageName")) __ho70= true; + if (m.equals("setRequestedOrientation")) __ho185= true; + if (m.equals("enforceCallingUriPermission")) __ho29= true; + if (m.equals("getLocalClassName")) __ho64= true; + if (m.equals("getWindow")) __ho83= true; + if (m.equals("onRestoreInstanceState")) __ho144= true; + if (m.equals("checkCallingOrSelfUriPermission")) __ho4= true; + if (m.equals("setTitleColor")) __ho188= true; + if (m.equals("getClassLoader")) __ho49= true; + if (m.equals("closeContextMenu")) __ho10= true; + if (m.equals("createPackageContext")) __ho14= true; + if (m.equals("openFileOutput")) __ho162= true; + if (m.equals("moveTaskToBack")) __ho94= true; + if (m.equals("dispatchTouchEvent")) __ho23= true; + if (m.equals("onActionModeStarted")) __ho98= true; + if (m.equals("onPostCreate")) __ho137= true; + if (m.equals("hashCode")) __ho87= true; + if (m.equals("getMainLooper")) __ho65= true; + if (m.equals("getDir")) __ho54= true; + if (m.equals("deleteFile")) __ho18= true; + if (m.equals("getTaskId")) __ho78= true; + if (m.equals("navigateUpTo")) __ho95= true; + if (m.equals("revokeUriPermission")) __ho173= true; + if (m.equals("finishActivity")) __ho36= true; + if (m.equals("finishFromChild")) __ho39= true; + if (m.equals("takeKeyEvents")) __ho209= true; + if (m.equals("overridePendingTransition")) __ho165= true; + if (m.equals("checkCallingPermission")) __ho5= true; + if (m.equals("enforceCallingPermission")) __ho28= true; + if (m.equals("unregisterForContextMenu")) __ho214= true; + if (m.equals("findViewById")) __ho34= true; + if (m.equals("onNavigateUp")) __ho130= true; + if (m.equals("enforceCallingOrSelfPermission")) __ho26= true; + if (m.equals("removeStickyBroadcastAsUser")) __ho172= true; + if (m.equals("onNavigateUpFromChild")) __ho131= true; + if (m.equals("isTaskRoot")) __ho93= true; + if (m.equals("getContentResolver")) __ho51= true; + if (m.equals("getPackageResourcePath")) __ho71= true; + if (m.equals("isFinishing")) __ho91= true; + if (m.equals("getIntent")) __ho60= true; + if (m.equals("onStop")) __ho150= true; + if (m.equals("onWindowStartingActionMode")) __ho159= true; + if (m.equals("enforceCallingOrSelfUriPermission")) __ho27= true; + if (m.equals("getDatabasePath")) __ho53= true; + if (m.equals("startActivityIfNeeded")) __ho198= true; + if (m.equals("getCacheDir")) __ho45= true; + if (m.equals("getTheme")) __ho79= true; + if (m.equals("checkCallingOrSelfPermission")) __ho3= true; + if (m.equals("setTheme")) __ho186= true; + if (m.equals("sendOrderedBroadcastAsUser")) __ho177= true; + if (m.equals("onCreatePanelMenu")) __ho115= true; + if (m.equals("onPostResume")) __ho138= true; + if (m.equals("bindService")) __ho2= true; + if (m.equals("isRestricted")) __ho92= true; + if (m.equals("onPreparePanel")) __ho142= true; + if (m.equals("checkCallingUriPermission")) __ho6= true; + if (m.equals("getSystemService")) __ho77= true; + if (m.equals("startSearch")) __ho205= true; + if (m.equals("getPackageCodePath")) __ho68= true; + if (m.equals("onContextItemSelected")) __ho107= true; + if (m.equals("onApplyThemeResource")) __ho100= true; + if (m.equals("onPause")) __ho136= true; + if (m.equals("finishActivityFromChild")) __ho37= true; + if (m.equals("startActivity")) __ho194= true; + if (m.equals("getLayoutInflater")) __ho62= true; + if (m.equals("startActionMode")) __ho192= true; + if (m.equals("grantUriPermission")) __ho85= true; + if (m.equals("onRetainNonConfigurationInstance")) __ho146= true; + if (m.equals("getAssets")) __ho43= true; + if (m.equals("onDestroy")) __ho119= true; + if (m.equals("onKeyUp")) __ho126= true; + if (m.equals("onMenuOpened")) __ho129= true; + if (m.equals("getExternalFilesDir")) __ho56= true; + if (m.equals("startManagingCursor")) __ho203= true; + if (m.equals("onPrepareDialog")) __ho139= true; + if (m.equals("openContextMenu")) __ho160= true; + if (m.equals("getCallingPackage")) __ho47= true; + if (m.equals("equals")) __ho32= true; + if (m.equals("onAttachFragment")) __ho101= true; + if (m.equals("hasWindowFocus")) __ho86= true; + if (m.equals("onSaveInstanceState")) __ho147= true; + if (m.equals("onCreateOptionsMenu")) __ho114= true; + if (m.equals("registerComponentCallbacks")) __ho168= true; + if (m.equals("sendOrderedBroadcast")) __ho176= true; + if (m.equals("sendBroadcastAsUser")) __ho175= true; + if (m.equals("getExternalCacheDir")) __ho55= true; + if (m.equals("startIntentSenderForResult")) __ho201= true; + if (m.equals("onLowMemory")) __ho127= true; + if (m.equals("onOptionsItemSelected")) __ho133= true; + if (m.equals("onCreateThumbnail")) __ho117= true; + if (m.equals("onStart")) __ho149= true; + if (m.equals("startNextMatchingActivity")) __ho204= true; + if (m.equals("onUserInteraction")) __ho155= true; + if (m.equals("onTrackballEvent")) __ho153= true; + if (m.equals("onTouchEvent")) __ho152= true; + if (m.equals("onUserLeaveHint")) __ho156= true; + if (m.equals("onResume")) __ho145= true; + if (m.equals("getPreferences")) __ho73= true; + if (m.equals("startService")) __ho206= true; + if (m.equals("onContextMenuClosed")) __ho108= true; + if (m.equals("registerReceiver")) __ho170= true; + if (m.equals("getPackageManager")) __ho69= true; + if (m.equals("onCreateView")) __ho118= true; + if (m.equals("onConfigurationChanged")) __ho105= true; + if (m.equals("onContentChanged")) __ho106= true; + if (m.equals("onCreateContextMenu")) __ho110= true; + if (m.equals("onPrepareNavigateUpTaskStack")) __ho140= true; + if (m.equals("getLastNonConfigurationInstance")) __ho61= true; + if (m.equals("onKeyDown")) __ho122= true; + if (m.equals("sendBroadcast")) __ho174= true; + if (m.equals("unbindService")) __ho212= true; + if (m.equals("createPendingResult")) __ho15= true; + if (m.equals("getBaseContext")) __ho44= true; + if (m.equals("registerForContextMenu")) __ho169= true; + if (m.equals("enforcePermission")) __ho30= true; + if (m.equals("checkUriPermission")) __ho8= true; + if (m.equals("dump")) __ho25= true; + if (m.equals("startIntentSenderFromChild")) __ho202= true; + if (m.equals("onCreate")) __ho109= true; + if (m.equals("clearWallpaper")) __ho9= true; + if (m.equals("onWindowFocusChanged")) __ho158= true; + if (m.equals("startActivityFromChild")) __ho196= true; + if (m.equals("onMenuItemSelected")) __ho128= true; + if (m.equals("onCreateDescription")) __ho111= true; + if (m.equals("getApplicationInfo")) __ho42= true; + if (m.equals("setContentView")) __ho182= true; + if (m.equals("unregisterReceiver")) __ho215= true; + if (m.equals("stopService")) __ho208= true; + if (m.equals("onDetachedFromWindow")) __ho120= true; } } + private boolean __ho0; + private boolean __ho1; + private boolean __ho2; + private boolean __ho3; + private boolean __ho4; + private boolean __ho5; + private boolean __ho6; + private boolean __ho7; + private boolean __ho8; + private boolean __ho9; + private boolean __ho10; + private boolean __ho11; + private boolean __ho12; + private boolean __ho13; + private boolean __ho14; + private boolean __ho15; + private boolean __ho16; + private boolean __ho17; + private boolean __ho18; + private boolean __ho19; + private boolean __ho20; + private boolean __ho21; + private boolean __ho22; + private boolean __ho23; + private boolean __ho24; + private boolean __ho25; + private boolean __ho26; + private boolean __ho27; + private boolean __ho28; + private boolean __ho29; + private boolean __ho30; + private boolean __ho31; + private boolean __ho32; + private boolean __ho33; + private boolean __ho34; + private boolean __ho35; + private boolean __ho36; + private boolean __ho37; + private boolean __ho38; + private boolean __ho39; + private boolean __ho40; + private boolean __ho41; + private boolean __ho42; + private boolean __ho43; + private boolean __ho44; + private boolean __ho45; + private boolean __ho46; + private boolean __ho47; + private boolean __ho48; + private boolean __ho49; + private boolean __ho50; + private boolean __ho51; + private boolean __ho52; + private boolean __ho53; + private boolean __ho54; + private boolean __ho55; + private boolean __ho56; + private boolean __ho57; + private boolean __ho58; + private boolean __ho59; + private boolean __ho60; + private boolean __ho61; + private boolean __ho62; + private boolean __ho63; + private boolean __ho64; + private boolean __ho65; + private boolean __ho66; + private boolean __ho67; + private boolean __ho68; + private boolean __ho69; + private boolean __ho70; + private boolean __ho71; + private boolean __ho72; + private boolean __ho73; + private boolean __ho74; + private boolean __ho75; + private boolean __ho76; + private boolean __ho77; + private boolean __ho78; + private boolean __ho79; + private boolean __ho80; + private boolean __ho81; + private boolean __ho82; + private boolean __ho83; + private boolean __ho84; + private boolean __ho85; + private boolean __ho86; + private boolean __ho87; + private boolean __ho88; + private boolean __ho89; + private boolean __ho90; + private boolean __ho91; + private boolean __ho92; + private boolean __ho93; + private boolean __ho94; + private boolean __ho95; + private boolean __ho96; + private boolean __ho97; + private boolean __ho98; + private boolean __ho99; + private boolean __ho100; + private boolean __ho101; + private boolean __ho102; + private boolean __ho103; + private boolean __ho104; + private boolean __ho105; + private boolean __ho106; + private boolean __ho107; + private boolean __ho108; + private boolean __ho109; + private boolean __ho110; + private boolean __ho111; + private boolean __ho112; + private boolean __ho113; + private boolean __ho114; + private boolean __ho115; + private boolean __ho116; + private boolean __ho117; + private boolean __ho118; + private boolean __ho119; + private boolean __ho120; + private boolean __ho121; + private boolean __ho122; + private boolean __ho123; + private boolean __ho124; + private boolean __ho125; + private boolean __ho126; + private boolean __ho127; + private boolean __ho128; + private boolean __ho129; + private boolean __ho130; + private boolean __ho131; + private boolean __ho132; + private boolean __ho133; + private boolean __ho134; + private boolean __ho135; + private boolean __ho136; + private boolean __ho137; + private boolean __ho138; + private boolean __ho139; + private boolean __ho140; + private boolean __ho141; + private boolean __ho142; + private boolean __ho143; + private boolean __ho144; + private boolean __ho145; + private boolean __ho146; + private boolean __ho147; + private boolean __ho148; + private boolean __ho149; + private boolean __ho150; + private boolean __ho151; + private boolean __ho152; + private boolean __ho153; + private boolean __ho154; + private boolean __ho155; + private boolean __ho156; + private boolean __ho157; + private boolean __ho158; + private boolean __ho159; + private boolean __ho160; + private boolean __ho161; + private boolean __ho162; + private boolean __ho163; + private boolean __ho164; + private boolean __ho165; + private boolean __ho166; + private boolean __ho167; + private boolean __ho168; + private boolean __ho169; + private boolean __ho170; + private boolean __ho171; + private boolean __ho172; + private boolean __ho173; + private boolean __ho174; + private boolean __ho175; + private boolean __ho176; + private boolean __ho177; + private boolean __ho178; + private boolean __ho179; + private boolean __ho180; + private boolean __ho181; + private boolean __ho182; + private boolean __ho183; + private boolean __ho184; + private boolean __ho185; + private boolean __ho186; + private boolean __ho187; + private boolean __ho188; + private boolean __ho189; + private boolean __ho190; + private boolean __ho191; + private boolean __ho192; + private boolean __ho193; + private boolean __ho194; + private boolean __ho195; + private boolean __ho196; + private boolean __ho197; + private boolean __ho198; + private boolean __ho199; + private boolean __ho200; + private boolean __ho201; + private boolean __ho202; + private boolean __ho203; + private boolean __ho204; + private boolean __ho205; + private boolean __ho206; + private boolean __ho207; + private boolean __ho208; + private boolean __ho209; + private boolean __ho210; + private boolean __ho211; + private boolean __ho212; + private boolean __ho213; + private boolean __ho214; + private boolean __ho215; } diff --git a/src/src/com/tns/Platform.java b/src/src/com/tns/Platform.java index 5a0490b0f..b5075c1f7 100644 --- a/src/src/com/tns/Platform.java +++ b/src/src/com/tns/Platform.java @@ -37,7 +37,7 @@ public class Platform private static native Object callJSMethodNative(int javaObjectID, String methodName, boolean isConstructor, Object... packagedArgs) throws NativeScriptException; - private static native void createJSInstanceNative(Object javaObject, int javaObjectID, String canonicalName, boolean createActivity, Object[] packagedCreationArgs); + private static native void createJSInstanceNative(Object javaObject, int javaObjectID, String canonicalName); private static native int generateNewObjectId(); @@ -66,7 +66,6 @@ public class Platform private final static Object keyNotFoundObject = new Object(); public final static String ApplicationAssetsPath = "app/"; - private static Object[] empty = new Object[0]; private static int currentObjectId = -1; private static ExtractPolicy extractPolicy; @@ -267,11 +266,6 @@ private static void adjustAmountOfExternalAllocatedMemory() // TODO: recomplie the bindings to support the args method and remove this // one since it is not needed after bindings recompile. public static void initInstance(Object instance) - { - initInstance(instance, empty); - } - - public static void initInstance(Object instance, Object... args) { int objectId = Platform.currentObjectId; @@ -281,27 +275,19 @@ public static void initInstance(Object instance, Object... args) } else { - createJSInstance(instance, args); + createJSInstance(instance); } } - private static void createJSInstance(Object instance, Object... args) + private static void createJSInstance(Object instance) { int javaObjectID = generateNewObjectId(); makeInstanceStrong(instance, javaObjectID); - Object[] packagedArgs = packageArgs(args); - String className = instance.getClass().getName(); - boolean isGeneratedProxy = instance instanceof NativeScriptHashCodeProvider; - boolean createActivity = instance instanceof Activity; - if (isGeneratedProxy && !createActivity) - { - className = instance.getClass().getSuperclass().getName(); - } - createJSInstanceNative(instance, javaObjectID, className, createActivity, packagedArgs); + createJSInstanceNative(instance, javaObjectID, className); if (IsLogEnabled) Log.d(DEFAULT_LOG_TAG, "JSInstance for " + instance.getClass().toString() + " created with overrides"); } @@ -451,16 +437,6 @@ public int compare(Method lhs, Method rhs) } }; - public static int makeClassInstanceOfTypeStrong(String classPath) throws InstantiationException, IllegalAccessException, ClassNotFoundException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException - { - if (IsLogEnabled) Log.d(DEFAULT_LOG_TAG, "Making Class instance of " + classPath + " strong"); - Class clazz = Class.forName(classPath.replace('/', '.')); - int key = generateNewObjectId(); - makeInstanceStrong(clazz, key); - if (IsLogEnabled) Log.d(DEFAULT_LOG_TAG, "Class of " + classPath + " made strong id:" + key); - return key; - } - private static void makeInstanceStrong(Object instance, int objectId) { if (instance == null) @@ -634,7 +610,7 @@ public static Object callJSMethod(Object javaObject, String methodName, boolean // (typeid, javaObjectID, canonicalName) // if javaObject has no javaObjecID meaning javascript object does not // exists for this object we assign one. - private static Object[] packageArgs(Object... args) + static Object[] packageArgs(Object... args) { int len = (args != null) ? (args.length * 3) : 0; Object[] packagedArgs = new Object[len]; diff --git a/test-app/assets/app/mainpage.js b/test-app/assets/app/mainpage.js index d93799fae..46aee38b4 100644 --- a/test-app/assets/app/mainpage.js +++ b/test-app/assets/app/mainpage.js @@ -18,16 +18,12 @@ require("./tests/extendedClassesTests"); require("./tests/extendClassNameTests"); -var MainActivity = (function (_super) { - __extends(MainActivity, _super); - function MainActivity() { - } - - MainActivity.prototype.onCreate = function () { +var MainActivity = { + onCreate: function (bundle) { __log("onCreate from js"); var k = this.toString(); __log("this.toString " + k); - _super.prototype.onCreate.call(this, null); + this.super.onCreate(bundle); //this.super.onCreate(null); require("./tests/testsWithContext").run(this); @@ -50,13 +46,13 @@ var MainActivity = (function (_super) { __log("onClick called"); button.setText("Hit that sucker one more time " + ++counter); }})); - }; - return MainActivity; -})(com.tns.NativeScriptActivity); + } +}; app.init({ - getActivity: function(intent) { + getActivity: function(activity) { + var intent = activity.getIntent(); __log("intent=" + intent) if (intent.getAction() == android.content.Intent.ACTION_MAIN) { return MainActivity; From cb21c83e49044888879fa578286415cc3ad6d01d Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Fri, 29 May 2015 10:31:40 +0300 Subject: [PATCH 35/46] use ref casts (build server uses Java 1.7) --- src/src/com/tns/NativeScriptActivity.java | 118 +++++++++++----------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/src/src/com/tns/NativeScriptActivity.java b/src/src/com/tns/NativeScriptActivity.java index ea3c212d5..88ff353e2 100644 --- a/src/src/com/tns/NativeScriptActivity.java +++ b/src/src/com/tns/NativeScriptActivity.java @@ -47,7 +47,7 @@ public boolean bindService(android.content.Intent param_0, android.content.Servi args[0] = param_0; args[1] = param_1; args[2] = param_2; - return (boolean)com.tns.Platform.callJSMethod(this, "bindService", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "bindService", args); } else { @@ -61,7 +61,7 @@ public int checkCallingOrSelfPermission(java.lang.String param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (int)com.tns.Platform.callJSMethod(this, "checkCallingOrSelfPermission", args); + return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingOrSelfPermission", args); } else { @@ -76,7 +76,7 @@ public int checkCallingOrSelfUriPermission(android.net.Uri param_0, int param_1) Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (int)com.tns.Platform.callJSMethod(this, "checkCallingOrSelfUriPermission", args); + return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingOrSelfUriPermission", args); } else { @@ -90,7 +90,7 @@ public int checkCallingPermission(java.lang.String param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (int)com.tns.Platform.callJSMethod(this, "checkCallingPermission", args); + return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingPermission", args); } else { @@ -105,7 +105,7 @@ public int checkCallingUriPermission(android.net.Uri param_0, int param_1) Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (int)com.tns.Platform.callJSMethod(this, "checkCallingUriPermission", args); + return (Integer)com.tns.Platform.callJSMethod(this, "checkCallingUriPermission", args); } else { @@ -121,7 +121,7 @@ public int checkPermission(java.lang.String param_0, int param_1, int param_2) args[0] = param_0; args[1] = param_1; args[2] = param_2; - return (int)com.tns.Platform.callJSMethod(this, "checkPermission", args); + return (Integer)com.tns.Platform.callJSMethod(this, "checkPermission", args); } else { @@ -138,7 +138,7 @@ public int checkUriPermission(android.net.Uri param_0, int param_1, int param_2, args[1] = param_1; args[2] = param_2; args[3] = param_3; - return (int)com.tns.Platform.callJSMethod(this, "checkUriPermission", args); + return (Integer)com.tns.Platform.callJSMethod(this, "checkUriPermission", args); } else { @@ -157,7 +157,7 @@ public int checkUriPermission(android.net.Uri param_0, java.lang.String param_1, args[3] = param_3; args[4] = param_4; args[5] = param_5; - return (int)com.tns.Platform.callJSMethod(this, "checkUriPermission", args); + return (Integer)com.tns.Platform.callJSMethod(this, "checkUriPermission", args); } else { @@ -282,7 +282,7 @@ public boolean deleteDatabase(java.lang.String param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "deleteDatabase", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "deleteDatabase", args); } else { @@ -296,7 +296,7 @@ public boolean deleteFile(java.lang.String param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "deleteFile", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "deleteFile", args); } else { @@ -310,7 +310,7 @@ public boolean dispatchGenericMotionEvent(android.view.MotionEvent param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "dispatchGenericMotionEvent", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchGenericMotionEvent", args); } else { @@ -324,7 +324,7 @@ public boolean dispatchKeyEvent(android.view.KeyEvent param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "dispatchKeyEvent", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchKeyEvent", args); } else { @@ -338,7 +338,7 @@ public boolean dispatchKeyShortcutEvent(android.view.KeyEvent param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "dispatchKeyShortcutEvent", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchKeyShortcutEvent", args); } else { @@ -352,7 +352,7 @@ public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.Acc { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "dispatchPopulateAccessibilityEvent", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchPopulateAccessibilityEvent", args); } else { @@ -366,7 +366,7 @@ public boolean dispatchTouchEvent(android.view.MotionEvent param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "dispatchTouchEvent", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchTouchEvent", args); } else { @@ -380,7 +380,7 @@ public boolean dispatchTrackballEvent(android.view.MotionEvent param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "dispatchTrackballEvent", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "dispatchTrackballEvent", args); } else { @@ -528,7 +528,7 @@ public boolean equals(java.lang.Object param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "equals", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "equals", args); } else { @@ -741,7 +741,7 @@ public int getChangingConfigurations() if (__ho48) { Object[] args = null; - return (int)com.tns.Platform.callJSMethod(this, "getChangingConfigurations", args); + return (Integer)com.tns.Platform.callJSMethod(this, "getChangingConfigurations", args); } else { @@ -1085,7 +1085,7 @@ public int getRequestedOrientation() if (__ho74) { Object[] args = null; - return (int)com.tns.Platform.callJSMethod(this, "getRequestedOrientation", args); + return (Integer)com.tns.Platform.callJSMethod(this, "getRequestedOrientation", args); } else { @@ -1140,7 +1140,7 @@ public int getTaskId() if (__ho78) { Object[] args = null; - return (int)com.tns.Platform.callJSMethod(this, "getTaskId", args); + return (Integer)com.tns.Platform.callJSMethod(this, "getTaskId", args); } else { @@ -1179,7 +1179,7 @@ public int getWallpaperDesiredMinimumHeight() if (__ho81) { Object[] args = null; - return (int)com.tns.Platform.callJSMethod(this, "getWallpaperDesiredMinimumHeight", args); + return (Integer)com.tns.Platform.callJSMethod(this, "getWallpaperDesiredMinimumHeight", args); } else { @@ -1192,7 +1192,7 @@ public int getWallpaperDesiredMinimumWidth() if (__ho82) { Object[] args = null; - return (int)com.tns.Platform.callJSMethod(this, "getWallpaperDesiredMinimumWidth", args); + return (Integer)com.tns.Platform.callJSMethod(this, "getWallpaperDesiredMinimumWidth", args); } else { @@ -1247,7 +1247,7 @@ public boolean hasWindowFocus() if (__ho86) { Object[] args = null; - return (boolean)com.tns.Platform.callJSMethod(this, "hasWindowFocus", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "hasWindowFocus", args); } else { @@ -1260,7 +1260,7 @@ public int hashCode() if (__ho87) { Object[] args = null; - return (int)com.tns.Platform.callJSMethod(this, "hashCode", args); + return (Integer)com.tns.Platform.callJSMethod(this, "hashCode", args); } else { @@ -1286,7 +1286,7 @@ public boolean isChangingConfigurations() if (__ho89) { Object[] args = null; - return (boolean)com.tns.Platform.callJSMethod(this, "isChangingConfigurations", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "isChangingConfigurations", args); } else { @@ -1299,7 +1299,7 @@ public boolean isDestroyed() if (__ho90) { Object[] args = null; - return (boolean)com.tns.Platform.callJSMethod(this, "isDestroyed", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "isDestroyed", args); } else { @@ -1312,7 +1312,7 @@ public boolean isFinishing() if (__ho91) { Object[] args = null; - return (boolean)com.tns.Platform.callJSMethod(this, "isFinishing", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "isFinishing", args); } else { @@ -1325,7 +1325,7 @@ public boolean isRestricted() if (__ho92) { Object[] args = null; - return (boolean)com.tns.Platform.callJSMethod(this, "isRestricted", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "isRestricted", args); } else { @@ -1338,7 +1338,7 @@ public boolean isTaskRoot() if (__ho93) { Object[] args = null; - return (boolean)com.tns.Platform.callJSMethod(this, "isTaskRoot", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "isTaskRoot", args); } else { @@ -1352,7 +1352,7 @@ public boolean moveTaskToBack(boolean param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "moveTaskToBack", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "moveTaskToBack", args); } else { @@ -1366,7 +1366,7 @@ public boolean navigateUpTo(android.content.Intent param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "navigateUpTo", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "navigateUpTo", args); } else { @@ -1381,7 +1381,7 @@ public boolean navigateUpToFromChild(android.app.Activity param_0, android.conte Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (boolean)com.tns.Platform.callJSMethod(this, "navigateUpToFromChild", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "navigateUpToFromChild", args); } else { @@ -1537,7 +1537,7 @@ public boolean onContextItemSelected(android.view.MenuItem param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "onContextItemSelected", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onContextItemSelected", args); } else { @@ -1658,7 +1658,7 @@ public boolean onCreateOptionsMenu(android.view.Menu param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "onCreateOptionsMenu", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onCreateOptionsMenu", args); } else { @@ -1673,7 +1673,7 @@ public boolean onCreatePanelMenu(int param_0, android.view.Menu param_1) Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (boolean)com.tns.Platform.callJSMethod(this, "onCreatePanelMenu", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onCreatePanelMenu", args); } else { @@ -1702,7 +1702,7 @@ public boolean onCreateThumbnail(android.graphics.Bitmap param_0, android.graphi Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (boolean)com.tns.Platform.callJSMethod(this, "onCreateThumbnail", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onCreateThumbnail", args); } else { @@ -1776,7 +1776,7 @@ public boolean onGenericMotionEvent(android.view.MotionEvent param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "onGenericMotionEvent", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onGenericMotionEvent", args); } else { @@ -1791,7 +1791,7 @@ public boolean onKeyDown(int param_0, android.view.KeyEvent param_1) Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (boolean)com.tns.Platform.callJSMethod(this, "onKeyDown", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyDown", args); } else { @@ -1806,7 +1806,7 @@ public boolean onKeyLongPress(int param_0, android.view.KeyEvent param_1) Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (boolean)com.tns.Platform.callJSMethod(this, "onKeyLongPress", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyLongPress", args); } else { @@ -1822,7 +1822,7 @@ public boolean onKeyMultiple(int param_0, int param_1, android.view.KeyEvent par args[0] = param_0; args[1] = param_1; args[2] = param_2; - return (boolean)com.tns.Platform.callJSMethod(this, "onKeyMultiple", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyMultiple", args); } else { @@ -1837,7 +1837,7 @@ public boolean onKeyShortcut(int param_0, android.view.KeyEvent param_1) Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (boolean)com.tns.Platform.callJSMethod(this, "onKeyShortcut", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyShortcut", args); } else { @@ -1852,7 +1852,7 @@ public boolean onKeyUp(int param_0, android.view.KeyEvent param_1) Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (boolean)com.tns.Platform.callJSMethod(this, "onKeyUp", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onKeyUp", args); } else { @@ -1880,7 +1880,7 @@ public boolean onMenuItemSelected(int param_0, android.view.MenuItem param_1) Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (boolean)com.tns.Platform.callJSMethod(this, "onMenuItemSelected", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onMenuItemSelected", args); } else { @@ -1895,7 +1895,7 @@ public boolean onMenuOpened(int param_0, android.view.Menu param_1) Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (boolean)com.tns.Platform.callJSMethod(this, "onMenuOpened", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onMenuOpened", args); } else { @@ -1908,7 +1908,7 @@ public boolean onNavigateUp() if (__ho130) { Object[] args = null; - return (boolean)com.tns.Platform.callJSMethod(this, "onNavigateUp", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onNavigateUp", args); } else { @@ -1922,7 +1922,7 @@ public boolean onNavigateUpFromChild(android.app.Activity param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "onNavigateUpFromChild", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onNavigateUpFromChild", args); } else { @@ -1950,7 +1950,7 @@ public boolean onOptionsItemSelected(android.view.MenuItem param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "onOptionsItemSelected", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onOptionsItemSelected", args); } else { @@ -2078,7 +2078,7 @@ public boolean onPrepareOptionsMenu(android.view.Menu param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "onPrepareOptionsMenu", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onPrepareOptionsMenu", args); } else { @@ -2094,7 +2094,7 @@ public boolean onPreparePanel(int param_0, android.view.View param_1, android.vi args[0] = param_0; args[1] = param_1; args[2] = param_2; - return (boolean)com.tns.Platform.callJSMethod(this, "onPreparePanel", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onPreparePanel", args); } else { @@ -2174,7 +2174,7 @@ public boolean onSearchRequested() if (__ho148) { Object[] args = null; - return (boolean)com.tns.Platform.callJSMethod(this, "onSearchRequested", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onSearchRequested", args); } else { @@ -2229,7 +2229,7 @@ public boolean onTouchEvent(android.view.MotionEvent param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "onTouchEvent", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onTouchEvent", args); } else { @@ -2243,7 +2243,7 @@ public boolean onTrackballEvent(android.view.MotionEvent param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "onTrackballEvent", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "onTrackballEvent", args); } else { @@ -2940,7 +2940,7 @@ public boolean shouldUpRecreateTask(android.content.Intent param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "shouldUpRecreateTask", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "shouldUpRecreateTask", args); } else { @@ -3124,7 +3124,7 @@ public boolean startActivityIfNeeded(android.content.Intent param_0, int param_1 Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (boolean)com.tns.Platform.callJSMethod(this, "startActivityIfNeeded", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "startActivityIfNeeded", args); } else { @@ -3140,7 +3140,7 @@ public boolean startActivityIfNeeded(android.content.Intent param_0, int param_1 args[0] = param_0; args[1] = param_1; args[2] = param_2; - return (boolean)com.tns.Platform.callJSMethod(this, "startActivityIfNeeded", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "startActivityIfNeeded", args); } else { @@ -3156,7 +3156,7 @@ public boolean startInstrumentation(android.content.ComponentName param_0, java. args[0] = param_0; args[1] = param_1; args[2] = param_2; - return (boolean)com.tns.Platform.callJSMethod(this, "startInstrumentation", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "startInstrumentation", args); } else { @@ -3301,7 +3301,7 @@ public boolean startNextMatchingActivity(android.content.Intent param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "startNextMatchingActivity", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "startNextMatchingActivity", args); } else { @@ -3316,7 +3316,7 @@ public boolean startNextMatchingActivity(android.content.Intent param_0, android Object[] args = new Object[2]; args[0] = param_0; args[1] = param_1; - return (boolean)com.tns.Platform.callJSMethod(this, "startNextMatchingActivity", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "startNextMatchingActivity", args); } else { @@ -3375,7 +3375,7 @@ public boolean stopService(android.content.Intent param_0) { Object[] args = new Object[1]; args[0] = param_0; - return (boolean)com.tns.Platform.callJSMethod(this, "stopService", args); + return (Boolean)com.tns.Platform.callJSMethod(this, "stopService", args); } else { From f85e445e27f81346fc0a7ea4c14f8a8dfcc4b2b4 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Fri, 29 May 2015 17:34:23 +0300 Subject: [PATCH 36/46] fix jni reference leaks (issue #72) --- src/jni/ArgConverter.cpp | 8 ++++---- src/jni/ArrayElementAccessor.cpp | 4 ++-- src/jni/FieldAccessor.cpp | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/jni/ArgConverter.cpp b/src/jni/ArgConverter.cpp index 3dd823411..ebf4ca53f 100644 --- a/src/jni/ArgConverter.cpp +++ b/src/jni/ArgConverter.cpp @@ -179,9 +179,9 @@ Handle ArgConverter::ConvertJavaArgsToJsArgs(jobjectArray args) int jArrayIndex = 0; for (int i = 0; i < argc; i++) { - jobject argTypeIDObj = env.GetObjectArrayElement(args, jArrayIndex++); - jobject arg = env.GetObjectArrayElement(args, jArrayIndex++); - jobject argJavaClassPath = env.GetObjectArrayElement(args, jArrayIndex++); + JniLocalRef argTypeIDObj(env.GetObjectArrayElement(args, jArrayIndex++)); + JniLocalRef arg(env.GetObjectArrayElement(args, jArrayIndex++)); + JniLocalRef argJavaClassPath(env.GetObjectArrayElement(args, jArrayIndex++)); jint length; jint argTypeID = ObjectToInt(argTypeIDObj); @@ -246,7 +246,7 @@ Handle ArgConverter::jcharToV8String(jchar value) { JEnv env; - jstring str = env.NewString(&value, 1); + JniLocalRef str(env.NewString(&value, 1)); jboolean bol = true; const char* resP = env.GetStringUTFChars(str, &bol); auto v8String = ConvertToV8String(resP, 1); diff --git a/src/jni/ArrayElementAccessor.cpp b/src/jni/ArrayElementAccessor.cpp index 3edb67873..bc53dce1e 100644 --- a/src/jni/ArrayElementAccessor.cpp +++ b/src/jni/ArrayElementAccessor.cpp @@ -52,7 +52,7 @@ Handle ArrayElementAccessor::GetArrayElement(const Handle& array, jcharArray charArr = reinterpret_cast(arr); jchar charArrValue; env.GetCharArrayRegion(charArr, startIndex, length, &charArrValue); - jstring s = env.NewString(&charArrValue, 1); + JniLocalRef s(env.NewString(&charArrValue, 1)); const char* singleChar = env.GetStringUTFChars(s, &isCopy); value = CheckForArrayAccessException(env, elementSignature, singleChar); env.ReleaseStringUTFChars(s, singleChar); @@ -129,7 +129,7 @@ void ArrayElementAccessor::SetArrayElement(const Handle& array, uint32_t else if (elementSignature == "C") { String::Utf8Value utf8(value->ToString()); - jstring s = env.NewString((jchar*) *utf8, 1); + JniLocalRef s(env.NewString((jchar*) *utf8, 1)); const char* singleChar = env.GetStringUTFChars(s, &isCopy); jchar charElementValue = *singleChar; env.ReleaseStringUTFChars(s, singleChar); diff --git a/src/jni/FieldAccessor.cpp b/src/jni/FieldAccessor.cpp index 9b80a9e24..4dbe749c0 100644 --- a/src/jni/FieldAccessor.cpp +++ b/src/jni/FieldAccessor.cpp @@ -106,7 +106,7 @@ Handle FieldAccessor::GetJavaField(const Handle& target, FieldCal result = env.GetCharField(targetJavaObject, fieldId); } - jstring str = env.NewString(&result, 1); + JniLocalRef str(env.NewString(&result, 1)); jboolean bol = true; const char* resP = env.GetStringUTFChars(str, &bol); env.ReleaseStringUTFChars(str, resP); From 0978df86558351700aecd6a0817a59137fc4402e Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Mon, 1 Jun 2015 08:22:33 +0300 Subject: [PATCH 37/46] add a check for 'extend' to fail when called as constructor --- src/jni/MetadataNode.cpp | 7 +++++ .../assets/app/tests/extendedClassesTests.js | 8 +++--- test-app/assets/app/tests/tests.js | 28 +++++++++---------- .../tests/testsForRuntimeBindingGenerator.js | 4 +-- test-app/assets/app/tests/testsWithContext.js | 2 +- 5 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/jni/MetadataNode.cpp b/src/jni/MetadataNode.cpp index 063320258..1c8be2380 100644 --- a/src/jni/MetadataNode.cpp +++ b/src/jni/MetadataNode.cpp @@ -1051,6 +1051,13 @@ MetadataNode::ExtendedClassCacheData MetadataNode::GetCachedExtendedClassData(Is void MetadataNode::ExtendCallMethodHandler(const v8::FunctionCallbackInfo& info) { + if (info.IsConstructCall()) + { + string exMsg("Cannot call 'extend' as constructor"); + ExceptionUtil::GetInstance()->ThrowExceptionToJs(exMsg); + return; + } + SET_PROFILER_FRAME(); Handle implementationObject; diff --git a/test-app/assets/app/tests/extendedClassesTests.js b/test-app/assets/app/tests/extendedClassesTests.js index 639a7cee3..d9b6086a4 100644 --- a/test-app/assets/app/tests/extendedClassesTests.js +++ b/test-app/assets/app/tests/extendedClassesTests.js @@ -1,7 +1,7 @@ describe("Tests extended classes ", function () { it("Instance_with_no_extension_shouldnt_use_previously_defined_implementation_object", function () { - var MyButton = new com.tns.tests.Button1.extend({ + var MyButton = com.tns.tests.Button1.extend({ toString: function () { return "overriden toString method of chronometer instance"; }, @@ -24,7 +24,7 @@ describe("Tests extended classes ", function () { it("Instance_with_extension_shouldnt_use_previously_defined_implementation_object", function () { - var MyButton = new com.tns.tests.Button1.extend({ + var MyButton = com.tns.tests.Button1.extend({ toString: function () { return "overriden toString method of button instance"; }, @@ -37,7 +37,7 @@ describe("Tests extended classes ", function () { var labelgetIMAGE_ID_PROP = button.getIMAGE_ID_PROP(); // - var MyButton1 = new com.tns.tests.Button1.extend({ + var MyButton1 = com.tns.tests.Button1.extend({ toString: function () { return "overriden toString method of button1 instance "; }, @@ -59,7 +59,7 @@ describe("Tests extended classes ", function () { var labelgetIMAGE_ID_PROP1 = button1.getIMAGE_ID_PROP(); // - var MyButton = new com.tns.tests.Button1.extend({ + var MyButton = com.tns.tests.Button1.extend({ getIMAGE_ID_PROP: function () { return "overriden getIMAGE_ID_PROP method on button"; } diff --git a/test-app/assets/app/tests/tests.js b/test-app/assets/app/tests/tests.js index 10472a6fe..481432948 100644 --- a/test-app/assets/app/tests/tests.js +++ b/test-app/assets/app/tests/tests.js @@ -40,7 +40,7 @@ describe("Tests ", function () { button1.setLabel("first button"); __log("TEST: Creating MyButton2 class"); - var MyButton2 = new com.tns.tests.Button1.extend("MyButton", { + var MyButton2 = com.tns.tests.Button1.extend("MyButton", { toString : function() { return "button2"; }}); @@ -79,7 +79,7 @@ describe("Tests ", function () { button1.setLabel("first button"); __log("TEST: Creating MyButton2 class"); - var MyButton2 = new com.tns.tests.Button1.extend({ + var MyButton2 = com.tns.tests.Button1.extend({ toString : function() { return "button2"; }}); @@ -136,7 +136,7 @@ describe("Tests ", function () { __log("TEST: When_implementing_an_interface_with_new__the_overrides_should_work"); - var MyButton = new com.tns.tests.Button1.extend("MyButton60", { + var MyButton = com.tns.tests.Button1.extend("MyButton60", { toString : function() { return "button1"; } @@ -158,7 +158,7 @@ describe("Tests ", function () { __log("TEST: When_calling_instanceof_on_field_result_it_should_work"); - var MyButton = new com.tns.tests.Button1.extend("MyButton81", { + var MyButton = com.tns.tests.Button1.extend("MyButton81", { toString : function() { return "button1"; }, @@ -176,7 +176,7 @@ describe("Tests ", function () { __log("TEST: When_calling_instanceof_on_method_result_it_should_work"); - var MyButton = new com.tns.tests.Button1.extend("MyButton98", { + var MyButton = com.tns.tests.Button1.extend("MyButton98", { toString : function() { return "button1"; }, @@ -196,7 +196,7 @@ describe("Tests ", function () { var isInstanceOf; - var MyButton = new com.tns.tests.Button1.extend("MyButton115", { + var MyButton = com.tns.tests.Button1.extend("MyButton115", { toString : function() { return "button1"; }, @@ -453,7 +453,7 @@ describe("Tests ", function () { __log("TEST: When_implementing_an_interface_with_new__the_overrides_should_work"); - var MyButton = new com.tns.tests.Button1.extend({ + var MyButton = com.tns.tests.Button1.extend({ toString : function() { return "button1"; } @@ -477,7 +477,7 @@ describe("Tests ", function () { __log("TEST: When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance"); - var MyButton = new com.tns.tests.Button1.extend("MyButton381", { + var MyButton = com.tns.tests.Button1.extend("MyButton381", { toString : function() { return "button1"; } @@ -501,7 +501,7 @@ describe("Tests ", function () { __log("TEST: When_a_java_method_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); - var Button = new com.tns.tests.Button1.extend("MyButton397", { + var Button = com.tns.tests.Button1.extend("MyButton397", { toString : function() { return "button1"; } @@ -518,7 +518,7 @@ describe("Tests ", function () { __log("TEST: When_a_java_field_returns_object_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); - var Button = new com.tns.tests.Button1.extend("MyButton413", { + var Button = com.tns.tests.Button1.extend("MyButton413", { toString : function() { return "button1"; } @@ -536,7 +536,7 @@ describe("Tests ", function () { __log("TEST: When_a_java_argument_is_passed_to_js_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); var name = ""; - var Button = new com.tns.tests.Button1.extend("MyButton418", { + var Button = com.tns.tests.Button1.extend("MyButton418", { toString : function() { return "button1"; }, @@ -557,7 +557,7 @@ describe("Tests ", function () { __log("TEST: When_a_java_object_is_returned_from_indexer_that_needs_js_instance__it_should_create_the_instance_according_to_the_actual_return_type"); - var Button = new com.tns.tests.Button1.extend("MyButton450", { + var Button = com.tns.tests.Button1.extend("MyButton450", { toString : function() { return "button1"; } @@ -686,7 +686,7 @@ describe("Tests ", function () { var ctorCalled = false; var isConstructor = false; - var MyButton = new com.tns.tests.Button1.extend("MyButton574", { + var MyButton = com.tns.tests.Button1.extend("MyButton574", { init : function() { ctorCalled = true; isConstructor = arguments[arguments.length - 1]; @@ -1568,7 +1568,7 @@ describe("Tests ", function () { var exceptionCaught = false; - var Button1 = new com.tns.tests.Button1.extend("Button1", implObj); + var Button1 = com.tns.tests.Button1.extend("Button1", implObj); try { diff --git a/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js b/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js index c8a4dcb15..d0c1a3308 100644 --- a/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js +++ b/test-app/assets/app/tests/testsForRuntimeBindingGenerator.js @@ -12,7 +12,7 @@ describe("Tests for runtime binding generator", function () { __log("TEST: When_generating_a_proxy_of_nested_interface_at_runtime"); - var MyButton = new com.tns.tests.Button1.extend("MyButton10", { + var MyButton = com.tns.tests.Button1.extend("MyButton10", { toString : function() { return "button1"; }, @@ -36,7 +36,7 @@ describe("Tests for runtime binding generator", function () { __log("TEST: When_generating_a_proxy_of_android_class_at_runtime"); - var MyButton = new com.tns.tests.Button1.extend("MyButton36", { + var MyButton = com.tns.tests.Button1.extend("MyButton36", { toString : function() { return "button1"; }, diff --git a/test-app/assets/app/tests/testsWithContext.js b/test-app/assets/app/tests/testsWithContext.js index 78d581e40..f99055ad4 100644 --- a/test-app/assets/app/tests/testsWithContext.js +++ b/test-app/assets/app/tests/testsWithContext.js @@ -18,7 +18,7 @@ exports.run = function(cntxt) var ctorCalled = false; var isConstructor = false; - var MyButton = new android.widget.Button.extend({ + var MyButton = android.widget.Button.extend({ init : function() { ctorCalled = true; isConstructor = arguments[arguments.length - 1]; From c2f295d8990ec2a9c5aa667761214f6986e96574 Mon Sep 17 00:00:00 2001 From: atanasovg Date: Mon, 1 Jun 2015 08:48:56 +0300 Subject: [PATCH 38/46] Use DexClassLoader instead of the MultiDex library. --- src/src/com/tns/DexFactory.java | 249 ++++---- src/src/com/tns/JsDebugger.java | 24 +- src/src/com/tns/NativeScriptApplication.java | 2 - src/src/com/tns/Platform.java | 5 - src/src/com/tns/multidex/MultiDex.java | 553 ------------------ .../com/tns/multidex/MultiDexExtractor.java | 444 -------------- src/src/com/tns/multidex/ZipUtil.java | 143 ----- 7 files changed, 127 insertions(+), 1293 deletions(-) delete mode 100644 src/src/com/tns/multidex/MultiDex.java delete mode 100644 src/src/com/tns/multidex/MultiDexExtractor.java delete mode 100644 src/src/com/tns/multidex/ZipUtil.java diff --git a/src/src/com/tns/DexFactory.java b/src/src/com/tns/DexFactory.java index 28293d5e6..6df72f85b 100644 --- a/src/src/com/tns/DexFactory.java +++ b/src/src/com/tns/DexFactory.java @@ -10,14 +10,14 @@ import java.io.InputStreamReader; import java.io.InvalidClassException; import java.io.OutputStreamWriter; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; -import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; import com.tns.bindings.ProxyGenerator; -import com.tns.multidex.MultiDex; +import dalvik.system.DexClassLoader; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; @@ -26,34 +26,31 @@ public class DexFactory { - private Context context; - private static final String SECONDARY_DEX_FOLDER_NAME = "code_cache" + File.separator + "secondary-dexes"; - private String proxyPath; + private String dexPath; + private String odexPath; + private String dexThumb; + private Context context; private ProxyGenerator proxyGenerator; - - private File odexDir; - - private HashSet injectedProxyClasses = new HashSet(); + private HashMap> injectedDexClasses = new HashMap>(); - private String proxyThumb; - public DexFactory(Context context) { this.context = context; - ApplicationInfo applicationInfo = context.getApplicationInfo(); - proxyPath = applicationInfo.dataDir + File.separator + SECONDARY_DEX_FOLDER_NAME + File.separator; - proxyGenerator = new ProxyGenerator(proxyPath); + ApplicationInfo applicationInfo = this.context.getApplicationInfo(); + this.dexPath = applicationInfo.dataDir + File.separator + SECONDARY_DEX_FOLDER_NAME + File.separator; + this.odexPath = applicationInfo.dataDir + File.separator + SECONDARY_DEX_FOLDER_NAME + File.separator + "odex" + File.separator; + this.proxyGenerator = new ProxyGenerator(dexPath); ProxyGenerator.IsLogEnabled = Platform.IsLogEnabled; - File dexDir = new File(proxyPath); - odexDir = new File(dexDir.getAbsolutePath() + File.separator + "odex" + File.separator); + + File odexDir = new File(dexPath + File.separator + "odex" + File.separator); odexDir.mkdirs(); - - updateProxyThumbAndPurgeCachedProxies(dexDir); - proxyGenerator.setProxyThumb(proxyThumb); + + this.updateDexThumbAndPurgeCache(); + this.proxyGenerator.setProxyThumb(this.dexThumb); } static long totalGenTime = 0; @@ -62,92 +59,79 @@ public DexFactory(Context context) public Class resolveClass(String name, String className, String[] methodOverrides) throws ClassNotFoundException, IOException { + if(className.contains("NativeScriptActivity")) + { + // Do not extend NativeScriptActivity - it is already extended + return NativeScriptActivity.class; + } + String fullClassName = className.replace("$", "_") + "-" + name; - - if (!injectedProxyClasses.contains(fullClassName)) + Class existingClass = this.injectedDexClasses.get(fullClassName); + if(existingClass != null) { - File proxyFile = getProxyFile(fullClassName); - - if (proxyFile == null) - { - long startGenTime = System.nanoTime(); - String proxyFilePath = ""; - - if (Platform.IsLogEnabled) - { - Log.d(Platform.DEFAULT_LOG_TAG, "generating proxy in place"); - } - proxyFilePath = generateProxy(name, className, methodOverrides); - proxyFile = new File(proxyFilePath); - long stopGenTime = System.nanoTime(); - totalGenTime += stopGenTime - startGenTime; - if (Platform.IsLogEnabled) - { - Log.d(Platform.DEFAULT_LOG_TAG, "Finished inplace gen took: " + (stopGenTime - startGenTime) / 1000000.0 + "ms"); - Log.d(Platform.DEFAULT_LOG_TAG, "TotalGenTime: " + totalGenTime / 1000000.0 + "ms"); - } - } + return existingClass; + } - long startMultiDexTime = System.nanoTime(); - List files = new ArrayList(); - files.add(proxyFile); - try - { - MultiDex.installSecondaryDexes(context.getClassLoader(), odexDir, files); - injectedProxyClasses.add(fullClassName); - } - catch (IllegalArgumentException e) - { - e.printStackTrace(); - } - catch (IllegalAccessException e) - { - e.printStackTrace(); - } - catch (NoSuchFieldException e) - { - e.printStackTrace(); - } - catch (InvocationTargetException e) - { - e.printStackTrace(); - } - catch (NoSuchMethodException e) - { - e.printStackTrace(); - } - long stopMultiDexTime = System.nanoTime(); - totalMultiDexTime += (stopMultiDexTime - startMultiDexTime); + String classToProxy = this.getClassToProxyName(className); + String dexFilePath = classToProxy + "-" + name; + File dexFile = this.getDexFile(dexFilePath); + + if (dexFile == null) + { + long startGenTime = System.nanoTime(); if (Platform.IsLogEnabled) { - Log.d(Platform.DEFAULT_LOG_TAG, "Finished injecting into multidex: " + proxyFile.getAbsolutePath() + " took: " + (stopMultiDexTime - startMultiDexTime) / 1000000.0 + "ms"); - Log.d(Platform.DEFAULT_LOG_TAG, "TotalMultiDexTime: " + totalMultiDexTime / 1000000.0 + "ms"); + Log.d(Platform.DEFAULT_LOG_TAG, "generating proxy in place"); } - - - long startLoadDexTime = System.nanoTime(); - // String classToProxyName = className.replace("$", "_"); - // className = classToProxyName; - - Class loaded = context.getClassLoader().loadClass(fullClassName); - long stopLoadDexTime = System.nanoTime(); - totalLoadDexTime += (stopLoadDexTime - startLoadDexTime); + + dexFilePath = this.generateDex(name, classToProxy, methodOverrides); + dexFile = new File(dexFilePath); + long stopGenTime = System.nanoTime(); + totalGenTime += stopGenTime - startGenTime; if (Platform.IsLogEnabled) { - Log.d(Platform.DEFAULT_LOG_TAG, "Finished loading class : " + fullClassName + " took: " + (stopMultiDexTime - startMultiDexTime) / 1000000.0 + "ms"); - Log.d(Platform.DEFAULT_LOG_TAG, "TotalLoadDexTime: " + totalLoadDexTime / 1000000.0 + "ms"); + Log.d(Platform.DEFAULT_LOG_TAG, "Finished inplace gen took: " + (stopGenTime - startGenTime) / 1000000.0 + "ms"); + Log.d(Platform.DEFAULT_LOG_TAG, "TotalGenTime: " + totalGenTime / 1000000.0 + "ms"); } + } + + String jarFilePath = dexFile.getPath().replace(".dex", ".jar"); + File jarFile = new File(jarFilePath); + + Class result; + if(!jarFile.exists()) + { + FileOutputStream jarFileStream = new FileOutputStream(jarFile); - return loaded; + ZipOutputStream out = new ZipOutputStream(jarFileStream); + out.putNextEntry(new ZipEntry("classes.dex")); + byte[] dexData = new byte[(int)dexFile.length()]; + FileInputStream fi = new FileInputStream(dexFile); + fi.read(dexData, 0, dexData.length); + fi.close(); + out.write(dexData); + out.closeEntry(); + out.close(); + } - - return findClass(fullClassName); + + DexClassLoader dexClassLoader = new DexClassLoader(jarFilePath, this.odexPath, null, this.context.getClassLoader()); + result = dexClassLoader.loadClass(fullClassName); + + this.injectedDexClasses.put(fullClassName, result); + + return result; } public Class findClass(String className) throws ClassNotFoundException { String canonicalName = className.replace('/', '.'); - return context.getClassLoader().loadClass(canonicalName); + Class existingClass = this.injectedDexClasses.get(canonicalName); + if(existingClass != null) + { + return existingClass; + } + return this.context.getClassLoader().loadClass(canonicalName); } public static String strJoin(String[] array, String separator) @@ -168,8 +152,8 @@ public static String strJoin(String[] array, String separator) } return sbStr.toString(); } - - private File getProxyFile(String className) throws InvalidClassException + + private String getClassToProxyName(String className) throws InvalidClassException { String classToProxy = className; @@ -182,46 +166,40 @@ private File getProxyFile(String className) throws InvalidClassException { throw new InvalidClassException("Can't generate proxy of proxy"); } + + return classToProxy; + } - String classToProxyFile = classToProxy.replace("$", "_"); + private File getDexFile(String className) throws InvalidClassException + { + String classToProxyFile = className.replace("$", "_"); - if (proxyThumb != null) + if (this.dexThumb != null) { - classToProxyFile += "-" + proxyThumb; + classToProxyFile += "-" + this.dexThumb; } - String proxyFilePath = proxyPath + classToProxyFile + ".dex"; - File proxyFile = new File(proxyFilePath); - if (proxyFile.exists()) + String dexFilePath = dexPath + classToProxyFile + ".dex"; + File dexFile = new File(dexFilePath); + if (dexFile.exists()) { if (Platform.IsLogEnabled) { - Log.d(Platform.DEFAULT_LOG_TAG, "Looking for proxy file: " + proxyFilePath + " Result: proxy file Found. ClassName: " + className); + Log.d(Platform.DEFAULT_LOG_TAG, "Looking for proxy file: " + dexFilePath + " Result: proxy file Found. ClassName: " + className); } - return proxyFile; + return dexFile; } if (Platform.IsLogEnabled) { - Log.d(Platform.DEFAULT_LOG_TAG, "Looking for proxy file: " + proxyFilePath + " Result: NOT Found. Proxy Gen needed. ClassName: " + className); + Log.d(Platform.DEFAULT_LOG_TAG, "Looking for proxy file: " + dexFilePath + " Result: NOT Found. Proxy Gen needed. ClassName: " + className); } return null; } - private String generateProxy(String proxyName, String className, String[] methodOverrides) throws ClassNotFoundException, IOException + private String generateDex(String proxyName, String className, String[] methodOverrides) throws ClassNotFoundException, IOException { - String classToProxyName = className; - if (className.startsWith("com.tns.gen.")) - { - classToProxyName = className.substring(12); - } - - if (classToProxyName.startsWith("com.tns.gen.")) - { - throw new InvalidClassException("Can't generate proxy of proxy"); - } - - Class classToProxy = Class.forName(classToProxyName); + Class classToProxy = Class.forName(className); HashSet methodOverridesSet = null; if (methodOverrides != null) @@ -237,43 +215,46 @@ private String generateProxy(String proxyName, String className, String[] method return proxyGenerator.generateProxy(proxyName, classToProxy, methodOverridesSet); } - private void updateProxyThumbAndPurgeCachedProxies(File proxyDir) + private void updateDexThumbAndPurgeCache() { - proxyThumb = generateProxyThumb(); - if (proxyThumb == null) + this.dexThumb = this.generateDexThumb(); + if (this.dexThumb == null) { throw new RuntimeException("Error generating proxy thumb 1"); } - String oldProxyThumb = getCachedProxyThumb(proxyDir); - if (proxyThumb.equals(oldProxyThumb)) + File dexDir = new File(this.dexPath); + String oldDexThumb = this.getCachedProxyThumb(dexDir); + if (this.dexThumb.equals(oldDexThumb)) { return; } - if (oldProxyThumb != null) + if (oldDexThumb != null) { - purgeProxiesByThumb(oldProxyThumb, proxyDir); + this.purgeDexesByThumb(oldDexThumb, dexDir); + this.purgeDexesByThumb(oldDexThumb, new File(odexPath)); } else { - //purge all dex files in proxy dir if no thumg file is found - purgeProxiesByThumb(".dex", proxyDir); + //purge all dex files if no thumb file is found + this.purgeDexesByThumb(null, dexDir); + this.purgeDexesByThumb(null, new File(odexPath)); } - saveNewProxyThumb(proxyThumb, proxyDir); + this.saveNewDexThumb(this.dexThumb, dexDir); } - private void saveNewProxyThumb(String newProxyThumb, File proxyDir) + private void saveNewDexThumb(String newDexThumb, File dexDir) { - File cachedThumbFile = new File(proxyDir, "proxyThumb"); + File cachedThumbFile = new File(dexDir, "proxyThumb"); try { FileOutputStream out = new FileOutputStream(cachedThumbFile, false); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out)); try { - writer.write(newProxyThumb); + writer.write(newDexThumb); writer.newLine(); writer.flush(); } @@ -295,7 +276,7 @@ private void saveNewProxyThumb(String newProxyThumb, File proxyDir) } } - private String generateProxyThumb() + private String generateDexThumb() { try { @@ -313,7 +294,7 @@ private String generateProxyThumb() return null; } - private void purgeProxiesByThumb(String cachedproxyThumb, File pathToPurge) + private void purgeDexesByThumb(String cachedDexThumb, File pathToPurge) { if (!pathToPurge.isDirectory()) { @@ -328,13 +309,13 @@ private void purgeProxiesByThumb(String cachedproxyThumb, File pathToPurge) File purgeCandidate = new File(pathToPurge, filename); if (purgeCandidate.isDirectory()) { - purgeProxiesByThumb(cachedproxyThumb, purgeCandidate); + this.purgeDexesByThumb(cachedDexThumb, purgeCandidate); } else { - if (!filename.contains(cachedproxyThumb)) + if (cachedDexThumb != null && !filename.contains(cachedDexThumb)) { - return; + continue; } boolean b = purgeCandidate.delete(); @@ -374,4 +355,4 @@ private String getCachedProxyThumb(File proxyDir) return null; } -} +} \ No newline at end of file diff --git a/src/src/com/tns/JsDebugger.java b/src/src/com/tns/JsDebugger.java index c2c310041..d6b96c19b 100644 --- a/src/src/com/tns/JsDebugger.java +++ b/src/src/com/tns/JsDebugger.java @@ -50,7 +50,7 @@ public class JsDebugger private static final String portEnvOutputFile = "envDebug.out"; - private static final String DEBUG_BRAKE_FILENAME = "debugbreak"; + private static final String DEBUG_BREAK_FILENAME = "debugbreak"; private static int currentPort = INVALID_PORT; @@ -346,7 +346,7 @@ int getDebuggerPortFromEnvironment() w = null; } - if (shouldDebugBrake(context)) + if (shouldDebugBreak(context)) { try { @@ -538,31 +538,31 @@ public static boolean shouldEnableDebugging(Context context) } - public static Boolean shouldDebugBrakeFlag = null; + public static Boolean shouldDebugBreakFlag = null; - public static boolean shouldDebugBrake(Context context) + public static boolean shouldDebugBreak(Context context) { - if (shouldDebugBrakeFlag != null) + if (shouldDebugBreakFlag != null) { - return shouldDebugBrakeFlag; + return shouldDebugBreakFlag; } if (!shouldEnableDebugging(context)) { - shouldDebugBrakeFlag = false; + shouldDebugBreakFlag = false; return false; } String appRoot = context.getFilesDir().getPath() + File.separator; - File debugBrakeFile = new File(appRoot, DEBUG_BRAKE_FILENAME); - if (debugBrakeFile.exists()) + File debugBreakFile = new File(appRoot, DEBUG_BREAK_FILENAME); + if (debugBreakFile.exists()) { - debugBrakeFile.delete(); - shouldDebugBrakeFlag = true; + debugBreakFile.delete(); + shouldDebugBreakFlag = true; return true; } - shouldDebugBrakeFlag = false; + shouldDebugBreakFlag = false; return false; } } diff --git a/src/src/com/tns/NativeScriptApplication.java b/src/src/com/tns/NativeScriptApplication.java index e2468dd67..1b2a6235a 100644 --- a/src/src/com/tns/NativeScriptApplication.java +++ b/src/src/com/tns/NativeScriptApplication.java @@ -96,8 +96,6 @@ protected void attachBaseContext(android.content.Context param_0) { } else { super.attachBaseContext(param_0); } - - com.tns.Platform.installSecondaryDexes(this); } public boolean bindService(android.content.Intent param_0, android.content.ServiceConnection param_1, int param_2) { diff --git a/src/src/com/tns/Platform.java b/src/src/com/tns/Platform.java index b5075c1f7..85587a058 100644 --- a/src/src/com/tns/Platform.java +++ b/src/src/com/tns/Platform.java @@ -127,11 +127,6 @@ public static int init(Context context) throws RuntimeException return appJavaObjectId; } - static void installSecondaryDexes(Context context) - { - com.tns.multidex.MultiDex.install(context); - } - public static void enableVerboseLogging() { IsLogEnabled = true; diff --git a/src/src/com/tns/multidex/MultiDex.java b/src/src/com/tns/multidex/MultiDex.java deleted file mode 100644 index 3b97ac3e3..000000000 --- a/src/src/com/tns/multidex/MultiDex.java +++ /dev/null @@ -1,553 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.tns.multidex; - -import android.app.Application; -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.os.Build; -import android.util.Log; -import dalvik.system.DexFile; - -import java.io.File; -import java.io.IOException; -import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.ListIterator; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.zip.ZipFile; - -/** - * Monkey patches {@link Context#getClassLoader() the application context class - * loader} in order to load classes from more than one dex file. The primary - * {@code classes.dex} must contain the classes necessary for calling this class - * methods. Secondary dex files named classes2.dex, classes3.dex... found in the - * application apk will be added to the classloader after first call to - * {@link #install(Context)}. - * - *

    - * This library provides compatibility for platforms with API level 4 through - * 20. This library does nothing on newer versions of the platform which provide - * built-in support for secondary dex files. - */ -public final class MultiDex -{ - - static final String TAG = "MultiDex"; - - private static final String OLD_SECONDARY_FOLDER_NAME = "secondary-dexes"; - - private static final String SECONDARY_FOLDER_NAME = "code_cache" + File.separator + "secondary-dexes"; - - private static final int MAX_SUPPORTED_SDK_VERSION = 20; - - private static final int MIN_SDK_VERSION = 4; - - private static final int VM_WITH_MULTIDEX_VERSION_MAJOR = 2; - - private static final int VM_WITH_MULTIDEX_VERSION_MINOR = 1; - - private static final Set installedApk = new HashSet(); - - private static final boolean IS_VM_MULTIDEX_CAPABLE = isVMMultidexCapable(System.getProperty("java.vm.version")); - - private MultiDex() - { - } - - /** - * Patches the application context class loader by appending extra dex files - * loaded from the application apk. This method should be called in the - * attachBaseContext of your {@link Application}, see - * {@link MultiDexApplication} for more explanation and an example. - * - * @param context - * application context. - * @throws RuntimeException - * if an error occurred preventing the classloader extension. - */ - public static void install(Context context) - { - Log.i(TAG, "install"); - if (IS_VM_MULTIDEX_CAPABLE) - { - Log.i(TAG, "VM has multidex support, MultiDex support library is disabled."); - return; - } - - if (Build.VERSION.SDK_INT < MIN_SDK_VERSION) - { - throw new RuntimeException("Multi dex installation failed. SDK " + Build.VERSION.SDK_INT + " is unsupported. Min SDK version is " + MIN_SDK_VERSION + "."); - } - - try - { - ApplicationInfo applicationInfo = getApplicationInfo(context); - if (applicationInfo == null) - { - // Looks like running on a test Context, so just return without - // patching. - return; - } - - synchronized (installedApk) - { - String apkPath = applicationInfo.sourceDir; - if (installedApk.contains(apkPath)) - { - return; - } - installedApk.add(apkPath); - - if (Build.VERSION.SDK_INT > MAX_SUPPORTED_SDK_VERSION) - { - Log.w(TAG, "MultiDex is not guaranteed to work in SDK version " + Build.VERSION.SDK_INT + ": SDK version higher than " + MAX_SUPPORTED_SDK_VERSION + " should be backed by " + "runtime with built-in multidex capabilty but it's not the " + "case here: java.vm.version=\"" + System.getProperty("java.vm.version") + "\""); - } - - /* - * The patched class loader is expected to be a descendant of - * dalvik.system.BaseDexClassLoader. We modify its - * dalvik.system.DexPathList pathList field to append additional - * DEX file entries. - */ - ClassLoader loader; - try - { - loader = context.getClassLoader(); - } - catch (RuntimeException e) - { - /* - * Ignore those exceptions so that we don't break tests - * relying on Context like a android.test.mock.MockContext - * or a android.content.ContextWrapper with a null base - * Context. - */ - Log.w(TAG, "Failure while trying to obtain Context class loader. " + "Must be running in test mode. Skip patching.", e); - return; - } - if (loader == null) - { - // Note, the context class loader is null when running - // Robolectric tests. - Log.e(TAG, "Context class loader is null. Must be running in test mode. " + "Skip patching."); - return; - } - - try - { - clearOldDexDir(context); - } - catch (Throwable t) - { - Log.w(TAG, "Something went wrong when trying to clear old MultiDex extraction, " + "continuing without cleaning.", t); - } - - File dexDir = new File(applicationInfo.dataDir, SECONDARY_FOLDER_NAME); - List files = MultiDexExtractor.load(context, applicationInfo, dexDir, false); - if (checkValidZipFiles(files)) - { - installSecondaryDexes(loader, dexDir, files); - } - else - { - Log.w(TAG, "Files were not valid zip files. Forcing a reload."); - // Try again, but this time force a reload of the zip file. - files = MultiDexExtractor.load(context, applicationInfo, dexDir, true); - - if (checkValidZipFiles(files)) - { - installSecondaryDexes(loader, dexDir, files); - } - else - { - // Second time didn't work, give up - throw new RuntimeException("Zip files were not valid."); - } - } - } - - } - catch (Exception e) - { - Log.e(TAG, "Multidex installation failure", e); - throw new RuntimeException("Multi dex installation failed (" + e.getMessage() + ")."); - } - Log.i(TAG, "install done"); - } - - private static ApplicationInfo getApplicationInfo(Context context) throws NameNotFoundException - { - PackageManager pm; - String packageName; - try - { - pm = context.getPackageManager(); - packageName = context.getPackageName(); - } - catch (RuntimeException e) - { - /* - * Ignore those exceptions so that we don't break tests relying on - * Context like a android.test.mock.MockContext or a - * android.content.ContextWrapper with a null base Context. - */ - Log.w(TAG, "Failure while trying to obtain ApplicationInfo from Context. " + "Must be running in test mode. Skip patching.", e); - return null; - } - if (pm == null || packageName == null) - { - // This is most likely a mock context, so just return without - // patching. - return null; - } - ApplicationInfo applicationInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA); - return applicationInfo; - } - - /** - * Identifies if the current VM has a native support for multidex, meaning - * there is no need for additional installation by this library. - * - * @return true if the VM handles multidex - */ - /* package visible for test */ - static boolean isVMMultidexCapable(String versionString) - { - // quick and dirty hack for Android 5 until dex files are located in apk - // root - return false; - /* - * boolean isMultidexCapable = false; if (versionString != null) { - * Matcher matcher = - * Pattern.compile("(\\d+)\\.(\\d+)(\\.\\d+)?").matcher(versionString); - * if (matcher.matches()) { try { int major = - * Integer.parseInt(matcher.group(1)); int minor = - * Integer.parseInt(matcher.group(2)); isMultidexCapable = (major > - * VM_WITH_MULTIDEX_VERSION_MAJOR) || ((major == - * VM_WITH_MULTIDEX_VERSION_MAJOR) && (minor >= - * VM_WITH_MULTIDEX_VERSION_MINOR)); } catch (NumberFormatException e) { - * // let isMultidexCapable be false } } } Log.i(TAG, "VM with version " - * + versionString + (isMultidexCapable ? " has multidex support" : - * " does not have multidex support")); return isMultidexCapable; - */ - } - - public static void installSecondaryDexes(ClassLoader loader, File dexDir, List files) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException, IOException - { - if (!files.isEmpty()) - { - if (Build.VERSION.SDK_INT >= 19) - { - V19.install(loader, files, dexDir); - } - else if (Build.VERSION.SDK_INT >= 14) - { - V14.install(loader, files, dexDir); - } - else - { - V4.install(loader, files); - } - } - } - - /** - * Returns whether all files in the list are valid zip files. If - * {@code files} is empty, then returns true. - */ - private static boolean checkValidZipFiles(List files) - { - for (File file : files) - { - if (!MultiDexExtractor.verifyZipFile(file)) - { - return false; - } - } - return true; - } - - /** - * Locates a given field anywhere in the class inheritance hierarchy. - * - * @param instance - * an object to search the field into. - * @param name - * field name - * @return a field object - * @throws NoSuchFieldException - * if the field cannot be located - */ - private static Field findField(Object instance, String name) throws NoSuchFieldException - { - for (Class clazz = instance.getClass(); clazz != null; clazz = clazz.getSuperclass()) - { - try - { - Field field = clazz.getDeclaredField(name); - - if (!field.isAccessible()) - { - field.setAccessible(true); - } - - return field; - } - catch (NoSuchFieldException e) - { - // ignore and search next - } - } - - throw new NoSuchFieldException("Field " + name + " not found in " + instance.getClass()); - } - - /** - * Locates a given method anywhere in the class inheritance hierarchy. - * - * @param instance - * an object to search the method into. - * @param name - * method name - * @param parameterTypes - * method parameter types - * @return a method object - * @throws NoSuchMethodException - * if the method cannot be located - */ - private static Method findMethod(Object instance, String name, Class... parameterTypes) throws NoSuchMethodException - { - for (Class clazz = instance.getClass(); clazz != null; clazz = clazz.getSuperclass()) - { - try - { - Method method = clazz.getDeclaredMethod(name, parameterTypes); - - if (!method.isAccessible()) - { - method.setAccessible(true); - } - - return method; - } - catch (NoSuchMethodException e) - { - // ignore and search next - } - } - - throw new NoSuchMethodException("Method " + name + " with parameters " + Arrays.asList(parameterTypes) + " not found in " + instance.getClass()); - } - - /** - * Replace the value of a field containing a non null array, by a new array - * containing the elements of the original array plus the elements of - * extraElements. - * - * @param instance - * the instance whose field is to be modified. - * @param fieldName - * the field to modify. - * @param extraElements - * elements to append at the end of the array. - */ - private static void expandFieldArray(Object instance, String fieldName, Object[] extraElements) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException - { - Field jlrField = findField(instance, fieldName); - Object[] original = (Object[]) jlrField.get(instance); - Object[] combined = (Object[]) Array.newInstance(original.getClass().getComponentType(), original.length + extraElements.length); - System.arraycopy(original, 0, combined, 0, original.length); - System.arraycopy(extraElements, 0, combined, original.length, extraElements.length); - jlrField.set(instance, combined); - } - - private static void clearOldDexDir(Context context) throws Exception - { - File dexDir = new File(context.getFilesDir(), OLD_SECONDARY_FOLDER_NAME); - if (dexDir.isDirectory()) - { - Log.i(TAG, "Clearing old secondary dex dir (" + dexDir.getPath() + ")."); - File[] files = dexDir.listFiles(); - if (files == null) - { - Log.w(TAG, "Failed to list secondary dex dir content (" + dexDir.getPath() + ")."); - return; - } - for (File oldFile : files) - { - Log.i(TAG, "Trying to delete old file " + oldFile.getPath() + " of size " + oldFile.length()); - if (!oldFile.delete()) - { - Log.w(TAG, "Failed to delete old file " + oldFile.getPath()); - } - else - { - Log.i(TAG, "Deleted old file " + oldFile.getPath()); - } - } - if (!dexDir.delete()) - { - Log.w(TAG, "Failed to delete secondary dex dir " + dexDir.getPath()); - } - else - { - Log.i(TAG, "Deleted old secondary dex dir " + dexDir.getPath()); - } - } - } - - /** - * Installer for platform versions 19. - */ - private static final class V19 - { - - private static void install(ClassLoader loader, List additionalClassPathEntries, File optimizedDirectory) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException - { - /* - * The patched class loader is expected to be a descendant of - * dalvik.system.BaseDexClassLoader. We modify its - * dalvik.system.DexPathList pathList field to append additional DEX - * file entries. - */ - Field pathListField = findField(loader, "pathList"); - Object dexPathList = pathListField.get(loader); - ArrayList suppressedExceptions = new ArrayList(); - expandFieldArray(dexPathList, "dexElements", makeDexElements(dexPathList, new ArrayList(additionalClassPathEntries), optimizedDirectory, suppressedExceptions)); - if (suppressedExceptions.size() > 0) - { - for (IOException e : suppressedExceptions) - { - Log.w(TAG, "Exception in makeDexElement", e); - } - Field suppressedExceptionsField = findField(loader, "dexElementsSuppressedExceptions"); - IOException[] dexElementsSuppressedExceptions = (IOException[]) suppressedExceptionsField.get(loader); - - if (dexElementsSuppressedExceptions == null) - { - dexElementsSuppressedExceptions = suppressedExceptions.toArray(new IOException[suppressedExceptions.size()]); - } - else - { - IOException[] combined = new IOException[suppressedExceptions.size() + dexElementsSuppressedExceptions.length]; - suppressedExceptions.toArray(combined); - System.arraycopy(dexElementsSuppressedExceptions, 0, combined, suppressedExceptions.size(), dexElementsSuppressedExceptions.length); - dexElementsSuppressedExceptions = combined; - } - - suppressedExceptionsField.set(loader, dexElementsSuppressedExceptions); - } - } - - /** - * A wrapper around - * {@code private static final dalvik.system.DexPathList#makeDexElements} - * . - */ - private static Object[] makeDexElements(Object dexPathList, ArrayList files, File optimizedDirectory, ArrayList suppressedExceptions) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException - { - Method makeDexElements = findMethod(dexPathList, "makeDexElements", ArrayList.class, File.class, ArrayList.class); - - return (Object[]) makeDexElements.invoke(dexPathList, files, optimizedDirectory, suppressedExceptions); - } - } - - /** - * Installer for platform versions 14, 15, 16, 17 and 18. - */ - private static final class V14 - { - - private static void install(ClassLoader loader, List additionalClassPathEntries, File optimizedDirectory) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException - { - /* - * The patched class loader is expected to be a descendant of - * dalvik.system.BaseDexClassLoader. We modify its - * dalvik.system.DexPathList pathList field to append additional DEX - * file entries. - */ - Field pathListField = findField(loader, "pathList"); - Object dexPathList = pathListField.get(loader); - expandFieldArray(dexPathList, "dexElements", makeDexElements(dexPathList, new ArrayList(additionalClassPathEntries), optimizedDirectory)); - } - - /** - * A wrapper around - * {@code private static final dalvik.system.DexPathList#makeDexElements} - * . - */ - private static Object[] makeDexElements(Object dexPathList, ArrayList files, File optimizedDirectory) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException - { - Method makeDexElements = findMethod(dexPathList, "makeDexElements", ArrayList.class, File.class); - - return (Object[]) makeDexElements.invoke(dexPathList, files, optimizedDirectory); - } - } - - /** - * Installer for platform versions 4 to 13. - */ - private static final class V4 - { - private static void install(ClassLoader loader, List additionalClassPathEntries) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, IOException - { - /* - * The patched class loader is expected to be a descendant of - * dalvik.system.DexClassLoader. We modify its fields mPaths, - * mFiles, mZips and mDexs to append additional DEX file entries. - */ - int extraSize = additionalClassPathEntries.size(); - - Field pathField = findField(loader, "path"); - - StringBuilder path = new StringBuilder((String) pathField.get(loader)); - String[] extraPaths = new String[extraSize]; - File[] extraFiles = new File[extraSize]; - ZipFile[] extraZips = new ZipFile[extraSize]; - DexFile[] extraDexs = new DexFile[extraSize]; - for (ListIterator iterator = additionalClassPathEntries.listIterator(); iterator.hasNext();) - { - File additionalEntry = iterator.next(); - String entryPath = additionalEntry.getAbsolutePath(); - path.append(':').append(entryPath); - int index = iterator.previousIndex(); - extraPaths[index] = entryPath; - extraFiles[index] = additionalEntry; - extraZips[index] = new ZipFile(additionalEntry); - extraDexs[index] = DexFile.loadDex(entryPath, entryPath + ".dex", 0); - } - - pathField.set(loader, path.toString()); - expandFieldArray(loader, "mPaths", extraPaths); - expandFieldArray(loader, "mFiles", extraFiles); - expandFieldArray(loader, "mZips", extraZips); - expandFieldArray(loader, "mDexs", extraDexs); - } - } - -} diff --git a/src/src/com/tns/multidex/MultiDexExtractor.java b/src/src/com/tns/multidex/MultiDexExtractor.java deleted file mode 100644 index 7a8df1b34..000000000 --- a/src/src/com/tns/multidex/MultiDexExtractor.java +++ /dev/null @@ -1,444 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.tns.multidex; - -import android.content.Context; -import android.content.SharedPreferences; -import android.content.pm.ApplicationInfo; -import android.os.Build; -import android.util.Log; - -import java.io.BufferedOutputStream; -import java.io.Closeable; -import java.io.File; -import java.io.FileFilter; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.util.zip.ZipEntry; -import java.util.zip.ZipException; -import java.util.zip.ZipFile; -import java.util.zip.ZipOutputStream; - -/** - * Exposes application secondary dex files as files in the application data - * directory. - */ -final class MultiDexExtractor -{ - - private static final String TAG = MultiDex.TAG; - - /** - * We look for additional dex files named {@code classes2.dex}, - * {@code classes3.dex}, etc. - */ - private static final String DEX_PREFIX = "classes"; - private static final String DEX_SUFFIX = ".dex"; - - private static final String EXTRACTED_NAME_EXT = ".classes"; - private static final String EXTRACTED_SUFFIX = ".zip"; - private static final int MAX_EXTRACT_ATTEMPTS = 3; - - private static final String PREFS_FILE = "multidex.version"; - private static final String KEY_TIME_STAMP = "timestamp"; - private static final String KEY_CRC = "crc"; - private static final String KEY_DEX_NUMBER = "dex.number"; - - /** - * Size of reading buffers. - */ - private static final int BUFFER_SIZE = 0x4000; - /* Keep value away from 0 because it is a too probable time stamp value */ - private static final long NO_VALUE = -1L; - - /** - * Extracts application secondary dexes into files in the application data - * directory. - * - * @return a list of files that were created. The list may be empty if there - * are no secondary dex files. - * @throws IOException - * if encounters a problem while reading or writing secondary - * dex files - */ - static List load(Context context, ApplicationInfo applicationInfo, File dexDir, boolean forceReload) throws IOException - { - Log.i(TAG, "MultiDexExtractor.load(" + applicationInfo.sourceDir + ", " + forceReload + ")"); - final File sourceApk = new File(applicationInfo.sourceDir); - - long currentCrc = getZipCrc(sourceApk); - - List files; - if (!forceReload && !isModified(context, sourceApk, currentCrc)) - { - try - { - files = loadExistingExtractions(context, sourceApk, dexDir); - } - catch (IOException ioe) - { - Log.w(TAG, "Failed to reload existing extracted secondary dex files," + " falling back to fresh extraction", ioe); - files = performExtractions(sourceApk, dexDir); - putStoredApkInfo(context, getTimeStamp(sourceApk), currentCrc, files.size() + 1); - - } - } - else - { - Log.i(TAG, "Detected that extraction must be performed."); - files = performExtractions(sourceApk, dexDir); - putStoredApkInfo(context, getTimeStamp(sourceApk), currentCrc, files.size() + 1); - } - - Log.i(TAG, "load found " + files.size() + " secondary dex files"); - return files; - } - - private static List loadExistingExtractions(Context context, File sourceApk, File dexDir) throws IOException - { - Log.i(TAG, "loading existing secondary dex files"); - - final String extractedFilePrefix = sourceApk.getName() + EXTRACTED_NAME_EXT; - int totalDexNumber = getMultiDexPreferences(context).getInt(KEY_DEX_NUMBER, 1); - final List files = new ArrayList(totalDexNumber); - - for (int secondaryNumber = 2; secondaryNumber <= totalDexNumber; secondaryNumber++) - { - String fileName = extractedFilePrefix + secondaryNumber + EXTRACTED_SUFFIX; - File extractedFile = new File(dexDir, fileName); - if (extractedFile.isFile()) - { - files.add(extractedFile); - if (!verifyZipFile(extractedFile)) - { - Log.i(TAG, "Invalid zip file: " + extractedFile); - throw new IOException("Invalid ZIP file."); - } - } - else - { - throw new IOException("Missing extracted secondary dex file '" + extractedFile.getPath() + "'"); - } - } - - return files; - } - - private static boolean isModified(Context context, File archive, long currentCrc) - { - SharedPreferences prefs = getMultiDexPreferences(context); - return (prefs.getLong(KEY_TIME_STAMP, NO_VALUE) != getTimeStamp(archive)) || (prefs.getLong(KEY_CRC, NO_VALUE) != currentCrc); - } - - private static long getTimeStamp(File archive) - { - long timeStamp = archive.lastModified(); - if (timeStamp == NO_VALUE) - { - // never return NO_VALUE - timeStamp--; - } - return timeStamp; - } - - private static long getZipCrc(File archive) throws IOException - { - long computedValue = ZipUtil.getZipCrc(archive); - if (computedValue == NO_VALUE) - { - // never return NO_VALUE - computedValue--; - } - return computedValue; - } - - private static List performExtractions(File sourceApk, File dexDir) throws IOException - { - - final String extractedFilePrefix = sourceApk.getName() + EXTRACTED_NAME_EXT; - - // Ensure that whatever deletions happen in prepareDexDir only happen if - // the zip that - // contains a secondary dex file in there is not consistent with the - // latest apk. Otherwise, - // multi-process race conditions can cause a crash loop where one - // process deletes the zip - // while another had created it. - prepareDexDir(dexDir, extractedFilePrefix); - - List files = new ArrayList(); - - final ZipFile apk = new ZipFile(sourceApk); - try - { - - int secondaryNumber = 2; - - String dexName = "assets/bindings/" + DEX_PREFIX + secondaryNumber + DEX_SUFFIX; - ZipEntry dexFile = apk.getEntry(dexName); - while (dexFile != null) - { - String fileName = extractedFilePrefix + secondaryNumber + EXTRACTED_SUFFIX; - File extractedFile = new File(dexDir, fileName); - files.add(extractedFile); - - Log.i(TAG, "Extraction is needed for file " + extractedFile); - int numAttempts = 0; - boolean isExtractionSuccessful = false; - while (numAttempts < MAX_EXTRACT_ATTEMPTS && !isExtractionSuccessful) - { - numAttempts++; - - // Create a zip file (extractedFile) containing only the - // secondary dex file - // (dexFile) from the apk. - extract(apk, dexFile, extractedFile, extractedFilePrefix); - - // Verify that the extracted file is indeed a zip file. - isExtractionSuccessful = verifyZipFile(extractedFile); - - // Log the sha1 of the extracted zip file - Log.i(TAG, "Extraction " + (isExtractionSuccessful ? "success" : "failed") + " - length " + extractedFile.getAbsolutePath() + ": " + extractedFile.length()); - if (!isExtractionSuccessful) - { - // Delete the extracted file - extractedFile.delete(); - if (extractedFile.exists()) - { - Log.w(TAG, "Failed to delete corrupted secondary dex '" + extractedFile.getPath() + "'"); - } - } - } - if (!isExtractionSuccessful) - { - throw new IOException("Could not create zip file " + extractedFile.getAbsolutePath() + " for secondary dex (" + secondaryNumber + ")"); - } - secondaryNumber++; - dexName = "assets/bindings/" + DEX_PREFIX + secondaryNumber + DEX_SUFFIX; - // dexFile = apk.getEntry(DEX_PREFIX + secondaryNumber + - // DEX_SUFFIX); - dexFile = apk.getEntry(dexName); - } - } - finally - { - try - { - apk.close(); - } - catch (IOException e) - { - Log.w(TAG, "Failed to close resource", e); - } - } - - return files; - } - - private static void putStoredApkInfo(Context context, long timeStamp, long crc, int totalDexNumber) - { - SharedPreferences prefs = getMultiDexPreferences(context); - SharedPreferences.Editor edit = prefs.edit(); - edit.putLong(KEY_TIME_STAMP, timeStamp); - edit.putLong(KEY_CRC, crc); - /* - * SharedPreferences.Editor doc says that apply() and commit() - * "atomically performs the requested modifications" it should be OK to - * rely on saving the dex files number (getting old number value would - * go along with old crc and time stamp). - */ - edit.putInt(KEY_DEX_NUMBER, totalDexNumber); - apply(edit); - } - - private static SharedPreferences getMultiDexPreferences(Context context) - { - return context.getSharedPreferences(PREFS_FILE, Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB ? Context.MODE_PRIVATE : Context.MODE_PRIVATE | Context.MODE_MULTI_PROCESS); - } - - /** - * This removes any files that do not have the correct prefix. - */ - private static void prepareDexDir(File dexDir, final String extractedFilePrefix) throws IOException - { - dexDir.mkdirs(); - if (!dexDir.isDirectory()) - { - throw new IOException("Failed to create dex directory " + dexDir.getPath()); - } - - // Clean possible old files - FileFilter filter = new FileFilter() - { - - @Override - public boolean accept(File pathname) - { - return !pathname.getName().startsWith(extractedFilePrefix); - } - }; - File[] files = dexDir.listFiles(filter); - if (files == null) - { - Log.w(TAG, "Failed to list secondary dex dir content (" + dexDir.getPath() + ")."); - return; - } - for (File oldFile : files) - { - Log.i(TAG, "Trying to delete old file " + oldFile.getPath() + " of size " + oldFile.length()); - if (!oldFile.delete()) - { - Log.w(TAG, "Failed to delete old file " + oldFile.getPath()); - } - else - { - Log.i(TAG, "Deleted old file " + oldFile.getPath()); - } - } - } - - private static void extract(ZipFile apk, ZipEntry dexFile, File extractTo, String extractedFilePrefix) throws IOException, FileNotFoundException - { - - InputStream in = apk.getInputStream(dexFile); - ZipOutputStream out = null; - File tmp = File.createTempFile(extractedFilePrefix, EXTRACTED_SUFFIX, extractTo.getParentFile()); - Log.i(TAG, "Extracting " + tmp.getPath()); - try - { - out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(tmp))); - try - { - ZipEntry classesDex = new ZipEntry("classes.dex"); - // keep zip entry time since it is the criteria used by Dalvik - classesDex.setTime(dexFile.getTime()); - out.putNextEntry(classesDex); - - byte[] buffer = new byte[BUFFER_SIZE]; - int length = in.read(buffer); - while (length != -1) - { - out.write(buffer, 0, length); - length = in.read(buffer); - } - out.closeEntry(); - } - finally - { - out.close(); - } - Log.i(TAG, "Renaming to " + extractTo.getPath()); - if (!tmp.renameTo(extractTo)) - { - throw new IOException("Failed to rename \"" + tmp.getAbsolutePath() + "\" to \"" + extractTo.getAbsolutePath() + "\""); - } - } - finally - { - closeQuietly(in); - tmp.delete(); // return status ignored - } - } - - /** - * Returns whether the file is a valid zip file. - */ - static boolean verifyZipFile(File file) - { - try - { - ZipFile zipFile = new ZipFile(file); - try - { - zipFile.close(); - return true; - } - catch (IOException e) - { - Log.w(TAG, "Failed to close zip file: " + file.getAbsolutePath()); - } - } - catch (ZipException ex) - { - Log.w(TAG, "File " + file.getAbsolutePath() + " is not a valid zip file.", ex); - } - catch (IOException ex) - { - Log.w(TAG, "Got an IOException trying to open zip file: " + file.getAbsolutePath(), ex); - } - return false; - } - - /** - * Closes the given {@code Closeable}. Suppresses any IO exceptions. - */ - private static void closeQuietly(Closeable closeable) - { - try - { - closeable.close(); - } - catch (IOException e) - { - Log.w(TAG, "Failed to close resource", e); - } - } - - // The following is taken from SharedPreferencesCompat to avoid having a - // dependency of the - // multidex support library on another support library. - private static Method sApplyMethod; // final - static - { - try - { - Class cls = SharedPreferences.Editor.class; - sApplyMethod = cls.getMethod("apply"); - } - catch (NoSuchMethodException unused) - { - sApplyMethod = null; - } - } - - private static void apply(SharedPreferences.Editor editor) - { - if (sApplyMethod != null) - { - try - { - sApplyMethod.invoke(editor); - return; - } - catch (InvocationTargetException unused) - { - // fall through - } - catch (IllegalAccessException unused) - { - // fall through - } - } - editor.commit(); - } -} diff --git a/src/src/com/tns/multidex/ZipUtil.java b/src/src/com/tns/multidex/ZipUtil.java deleted file mode 100644 index 5927b0b6f..000000000 --- a/src/src/com/tns/multidex/ZipUtil.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* Apache Harmony HEADER because the code in this class comes mostly from ZipFile, ZipEntry and - * ZipConstants from android libcore. - */ - -package com.tns.multidex; - -import java.io.File; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.util.zip.CRC32; -import java.util.zip.ZipException; - -/** - * Tools to build a quick partial crc of zip files. - */ -final class ZipUtil -{ - static class CentralDirectory - { - long offset; - long size; - } - - /* - * redefine those constant here because of bug 13721174 preventing to - * compile using the constants defined in ZipFile - */ - private static final int ENDHDR = 22; - private static final int ENDSIG = 0x6054b50; - - /** - * Size of reading buffers. - */ - private static final int BUFFER_SIZE = 0x4000; - - /** - * Compute crc32 of the central directory of an apk. The central directory - * contains the crc32 of each entries in the zip so the computed result is - * considered valid for the whole zip file. Does not support zip64 nor - * multidisk but it should be OK for now since ZipFile does not either. - */ - static long getZipCrc(File apk) throws IOException - { - RandomAccessFile raf = new RandomAccessFile(apk, "r"); - try - { - CentralDirectory dir = findCentralDirectory(raf); - - return computeCrcOfCentralDir(raf, dir); - } - finally - { - raf.close(); - } - } - - /* Package visible for testing */ - static CentralDirectory findCentralDirectory(RandomAccessFile raf) throws IOException, ZipException - { - long scanOffset = raf.length() - ENDHDR; - if (scanOffset < 0) - { - throw new ZipException("File too short to be a zip file: " + raf.length()); - } - - long stopOffset = scanOffset - 0x10000 /* - * ".ZIP file comment"'s max - * length - */; - if (stopOffset < 0) - { - stopOffset = 0; - } - - int endSig = Integer.reverseBytes(ENDSIG); - while (true) - { - raf.seek(scanOffset); - if (raf.readInt() == endSig) - { - break; - } - - scanOffset--; - if (scanOffset < stopOffset) - { - throw new ZipException("End Of Central Directory signature not found"); - } - } - // Read the End Of Central Directory. ENDHDR includes the signature - // bytes, - // which we've already read. - - // Pull out the information we need. - raf.skipBytes(2); // diskNumber - raf.skipBytes(2); // diskWithCentralDir - raf.skipBytes(2); // numEntries - raf.skipBytes(2); // totalNumEntries - CentralDirectory dir = new CentralDirectory(); - dir.size = Integer.reverseBytes(raf.readInt()) & 0xFFFFFFFFL; - dir.offset = Integer.reverseBytes(raf.readInt()) & 0xFFFFFFFFL; - return dir; - } - - /* Package visible for testing */ - static long computeCrcOfCentralDir(RandomAccessFile raf, CentralDirectory dir) throws IOException - { - CRC32 crc = new CRC32(); - long stillToRead = dir.size; - raf.seek(dir.offset); - int length = (int) Math.min(BUFFER_SIZE, stillToRead); - byte[] buffer = new byte[BUFFER_SIZE]; - length = raf.read(buffer, 0, length); - while (length != -1) - { - crc.update(buffer, 0, length); - stillToRead -= length; - if (stillToRead == 0) - { - break; - } - length = (int) Math.min(BUFFER_SIZE, stillToRead); - length = raf.read(buffer, 0, length); - } - return crc.getValue(); - } -} From 89393ab7b5a04a0bfedd87ce6d702e6dcdf691cb Mon Sep 17 00:00:00 2001 From: atanasovg Date: Mon, 1 Jun 2015 08:57:10 +0300 Subject: [PATCH 39/46] Use the already created odex String. --- src/src/com/tns/DexFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/src/com/tns/DexFactory.java b/src/src/com/tns/DexFactory.java index 6df72f85b..993e9f1f8 100644 --- a/src/src/com/tns/DexFactory.java +++ b/src/src/com/tns/DexFactory.java @@ -42,11 +42,11 @@ public DexFactory(Context context) ApplicationInfo applicationInfo = this.context.getApplicationInfo(); this.dexPath = applicationInfo.dataDir + File.separator + SECONDARY_DEX_FOLDER_NAME + File.separator; - this.odexPath = applicationInfo.dataDir + File.separator + SECONDARY_DEX_FOLDER_NAME + File.separator + "odex" + File.separator; + this.odexPath = this.dexPath + "odex" + File.separator; this.proxyGenerator = new ProxyGenerator(dexPath); ProxyGenerator.IsLogEnabled = Platform.IsLogEnabled; - File odexDir = new File(dexPath + File.separator + "odex" + File.separator); + File odexDir = new File(this.odexPath); odexDir.mkdirs(); this.updateDexThumbAndPurgeCache(); From a692243a93c94b06cb3a5ea639521211864b69d8 Mon Sep 17 00:00:00 2001 From: blagoev Date: Mon, 1 Jun 2015 12:08:54 +0300 Subject: [PATCH 40/46] create the dex and odex dirs if not exists don't try to purge not existing proxies dir --- src/src/com/tns/DexFactory.java | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/src/com/tns/DexFactory.java b/src/src/com/tns/DexFactory.java index 993e9f1f8..214f9aa5c 100644 --- a/src/src/com/tns/DexFactory.java +++ b/src/src/com/tns/DexFactory.java @@ -46,8 +46,18 @@ public DexFactory(Context context) this.proxyGenerator = new ProxyGenerator(dexPath); ProxyGenerator.IsLogEnabled = Platform.IsLogEnabled; - File odexDir = new File(this.odexPath); - odexDir.mkdirs(); + File dexDir = new File(dexPath); + + if (!dexDir.exists()) + { + dexDir.mkdirs(); + } + + File odexDir = new File(odexPath); + if (!odexDir.exists()) + { + odexDir.mkdir(); + } this.updateDexThumbAndPurgeCache(); this.proxyGenerator.setProxyThumb(this.dexThumb); @@ -296,9 +306,15 @@ private String generateDexThumb() private void purgeDexesByThumb(String cachedDexThumb, File pathToPurge) { - if (!pathToPurge.isDirectory()) + if (!pathToPurge.exists()) + { + return; + } + + if (!pathToPurge.isDirectory()) { - throw new RuntimeException("Purge path not a directory"); + Log.e(Platform.DEFAULT_LOG_TAG, "Purge proxies path not a directory. Path: " + pathToPurge); + throw new RuntimeException("Purge path not a directory"); } String[] children = pathToPurge.list(); From a6ee7eacec304c7243c52d8ad526a99529dac1f1 Mon Sep 17 00:00:00 2001 From: Mihail Slavchev Date: Mon, 1 Jun 2015 15:11:49 +0300 Subject: [PATCH 41/46] add tests for issue #72 --- src/jni/FieldAccessor.cpp | 2 +- src/jni/JsArgToArrayConverter.cpp | 4 +- src/jni/NativeScriptRuntime.cpp | 2 +- test-app/assets/app/mainpage.js | 8 +- .../assets/app/tests/testJniReferenceLeak.js | 99 ++++++++++++++ test-app/assets/metadata/treeNodeStream.dat | Bin 88800 -> 50388 bytes .../assets/metadata/treeStringsStream.dat | Bin 564801 -> 458848 bytes test-app/assets/metadata/treeValueStream.dat | Bin 703229 -> 505377 bytes .../com/tns/tests/JniReferenceLeakTest.java | 126 ++++++++++++++++++ 9 files changed, 235 insertions(+), 6 deletions(-) create mode 100644 test-app/assets/app/tests/testJniReferenceLeak.js create mode 100644 test-app/src/com/tns/tests/JniReferenceLeakTest.java diff --git a/src/jni/FieldAccessor.cpp b/src/jni/FieldAccessor.cpp index 4dbe749c0..c043d2782 100644 --- a/src/jni/FieldAccessor.cpp +++ b/src/jni/FieldAccessor.cpp @@ -109,8 +109,8 @@ Handle FieldAccessor::GetJavaField(const Handle& target, FieldCal JniLocalRef str(env.NewString(&result, 1)); jboolean bol = true; const char* resP = env.GetStringUTFChars(str, &bol); - env.ReleaseStringUTFChars(str, resP); fieldResult = handleScope.Escape(ConvertToV8String(resP, 1)); + env.ReleaseStringUTFChars(str, resP); break; } case 'S': //short diff --git a/src/jni/JsArgToArrayConverter.cpp b/src/jni/JsArgToArrayConverter.cpp index 45e5f6479..e3e367af3 100644 --- a/src/jni/JsArgToArrayConverter.cpp +++ b/src/jni/JsArgToArrayConverter.cpp @@ -293,8 +293,8 @@ bool JsArgToArrayConverter::ConvertArg(const Handle& arg, int index) jchar value = '\0'; if (hidden->IsString()) { - string value = ConvertToString(hidden->ToString()); - value = (jchar)value[0]; + string str = ConvertToString(hidden->ToString()); + value = (jchar)str[0]; } jclass clazz = env.FindClass("java/lang/Character"); diff --git a/src/jni/NativeScriptRuntime.cpp b/src/jni/NativeScriptRuntime.cpp index 3210df4d3..1b31e78e5 100644 --- a/src/jni/NativeScriptRuntime.cpp +++ b/src/jni/NativeScriptRuntime.cpp @@ -297,8 +297,8 @@ void NativeScriptRuntime::CallJavaMethod(const Handle& caller, const str JniLocalRef str(env.NewString(&result, 1)); jboolean bol = true; const char* resP = env.GetStringUTFChars(str, &bol); - env.ReleaseStringUTFChars(str, resP); args.GetReturnValue().Set(ConvertToV8String(resP, 1)); + env.ReleaseStringUTFChars(str, resP); break; } case 'S': //short diff --git a/test-app/assets/app/mainpage.js b/test-app/assets/app/mainpage.js index 46aee38b4..f3ed8d2ac 100644 --- a/test-app/assets/app/mainpage.js +++ b/test-app/assets/app/mainpage.js @@ -16,6 +16,7 @@ require("./tests/testIfAbleToRunExternalFile"); require("./tests/finalFieldsSetTests"); require("./tests/extendedClassesTests"); require("./tests/extendClassNameTests"); +require("./tests/testJniReferenceLeak"); var MainActivity = { @@ -54,11 +55,14 @@ app.init({ getActivity: function(activity) { var intent = activity.getIntent(); __log("intent=" + intent) - if (intent.getAction() == android.content.Intent.ACTION_MAIN) { + var action = intent.getAction(); + __log("action=" + action) + return MainActivity; + if (action == android.content.Intent.ACTION_MAIN) { return MainActivity; } else { - fail("Unknown action"); + __exit("Unknown action"); } }, diff --git a/test-app/assets/app/tests/testJniReferenceLeak.js b/test-app/assets/app/tests/testJniReferenceLeak.js new file mode 100644 index 000000000..f0278f528 --- /dev/null +++ b/test-app/assets/app/tests/testJniReferenceLeak.js @@ -0,0 +1,99 @@ +describe("Tests JNI reference leak", function () { + +// var myCustomEquality = function(first, second) { +// return first == second; +// }; +// +// beforeEach(function() { +// jasmine.addCustomEqualityTester(myCustomEquality); +// }); + + it("test_if_method_param_marshalling_leaks", function () { + + var test = new com.tns.tests.JniReferenceLeakTest(null); + + var N = 10000; + + for (var n=0; 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

    UwIKEHdXX1A_flufc<8@7lW1q;M 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 F{{WqUB_#j= diff --git a/test-app/assets/metadata/treeStringsStream.dat b/test-app/assets/metadata/treeStringsStream.dat index 93580ba975d8a8cfc920be4e4a1caec0e84f388e..aa5bb06594e44a7cb00305fc435449b1d5ca143f 100644 GIT binary patch delta 4616 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 xdh&C delta 111318 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ހ|kLHZbG<3QsNq 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 QN?6Z8Bk+ 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 z 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 VJZ6TN=0I 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

    xr#8A54h|L~QpgQ{$4Sg#Qnl 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�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 literal 703229 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

  • -qA*hA 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

    Ucu8ox@e+39C86!cOG4W> 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�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

    6J_P!`+0d}4(2+aa} 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

    p=LP5e`Wr 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 Date: Tue, 2 Jun 2015 16:20:37 +0300 Subject: [PATCH 42/46] fixed error handling bug --- src/jni/ExceptionUtil.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jni/ExceptionUtil.cpp b/src/jni/ExceptionUtil.cpp index fb9f863ff..8642c9fa0 100644 --- a/src/jni/ExceptionUtil.cpp +++ b/src/jni/ExceptionUtil.cpp @@ -265,7 +265,7 @@ void ExceptionUtil::ThrowExceptionToJava(TryCatch& tc, const string& prependMess if (tc.CanContinue()) { jweak javaThrowable = nullptr; - if (ex->IsObject()) + if (!ex.IsEmpty() && ex->IsObject()) { javaThrowable = TryGetJavaThrowableObject(env, ex->ToObject()); } From 90eadde0002edc687878622399a4b0c4a8668ab2 Mon Sep 17 00:00:00 2001 From: plamen5kov Date: Thu, 28 May 2015 14:46:21 +0300 Subject: [PATCH 43/46] refactored: classNameSeparator is now a constant in binding generator and runtime changed tests so they can work with the new changes --- .../Generator/src/com/tns/bindings/Dump.java | 4 +++- .../Generator/src/com/tns/bindings/ProxyGenerator.java | 2 +- src/jni/Constants.h | 2 ++ src/jni/MetadataNode.cpp | 10 +++++----- src/jni/NativeScriptRuntime.cpp | 2 +- src/src/com/tns/DexFactory.java | 6 ++++-- test-app/assets/app/tests/tests.js | 2 +- test-app/assets/app/tests/testsForTypescript.js | 9 +++++---- 8 files changed, 22 insertions(+), 15 deletions(-) diff --git a/binding-generator/Generator/src/com/tns/bindings/Dump.java b/binding-generator/Generator/src/com/tns/bindings/Dump.java index a2ff7eef6..53307fe6c 100644 --- a/binding-generator/Generator/src/com/tns/bindings/Dump.java +++ b/binding-generator/Generator/src/com/tns/bindings/Dump.java @@ -12,6 +12,8 @@ public class Dump { + public static final char CLASS_NAME_LOCATION_SEPARATOR = '_'; + private static final String callJsMethodSignatureCtor = "Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;Z[Ljava/lang/Object;"; private static final String callJsMethodSignatureMethod = "Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;"; private static final String LCOM_TNS = "Lcom/tns/gen/"; @@ -228,7 +230,7 @@ public void generateProxy(ApplicationWriter aw, String proxyName, Class class //String methodSignature = org.objectweb.asm.Type.getMethodDescriptor(Object.class.getMethods()[0]); String tnsClassSignature = LCOM_TNS + classSignature.substring(1, classSignature.length() - 1).replace("$", "_") - + "-" + proxyName + ";"; + + CLASS_NAME_LOCATION_SEPARATOR + proxyName + ";"; ClassVisitor cv = generateClass(aw, classTo, classSignature, tnsClassSignature); Method[] methods = getSupportedMethods(classTo, methodOverrides); diff --git a/binding-generator/Generator/src/com/tns/bindings/ProxyGenerator.java b/binding-generator/Generator/src/com/tns/bindings/ProxyGenerator.java index 94a9f4cc4..2fce6d093 100644 --- a/binding-generator/Generator/src/com/tns/bindings/ProxyGenerator.java +++ b/binding-generator/Generator/src/com/tns/bindings/ProxyGenerator.java @@ -53,7 +53,7 @@ public String generateProxy(String proxyName, Class classToProxy, HashSetSetHiddenValue(ConvertToV8String("implClassName"), ConvertToV8String(fullName)); // @@ -1073,7 +1073,7 @@ void MetadataNode::ExtendCallMethodHandler(const v8::FunctionCallbackInfom_name + '-' + extendNameAndLocation; //ConvertToString(extendName); + auto fullClassName = node->m_name + Constants::CLASS_NAME_LOCATION_SEPARATOR + extendNameAndLocation; //ConvertToString(extendName); auto fullExtendedName = TNS_PREFIX + fullClassName; DEBUG_WRITE("ExtendsCallMethodHandler: extend full name %s", fullClassName.c_str()); @@ -1162,8 +1162,8 @@ bool MetadataNode::GetExtendLocation(string& extendLocation) } string srcFileName = ConvertToString(scriptName); - std::replace(srcFileName.begin(), srcFileName.end(), '/', '-'); - std::replace(srcFileName.begin(), srcFileName.end(), '.', '-'); + std::replace(srcFileName.begin(), srcFileName.end(), '/', '_'); + std::replace(srcFileName.begin(), srcFileName.end(), '.', '_'); int lineNumber = frame->GetLineNumber(); if (lineNumber < 0) { @@ -1186,7 +1186,7 @@ bool MetadataNode::GetExtendLocation(string& extendLocation) } - extendLocationStream << "f" << srcFileName.c_str() << "-l" << lineNumber << "-c" << column << "--"; + extendLocationStream << "f" << srcFileName.c_str() << "_l" << lineNumber << "_c" << column << "__"; //DEBUG_WRITE("EXTEND_LOCATION %s", extendLocationStream.str().c_str()); } } diff --git a/src/jni/NativeScriptRuntime.cpp b/src/jni/NativeScriptRuntime.cpp index 1b31e78e5..657ddd24c 100644 --- a/src/jni/NativeScriptRuntime.cpp +++ b/src/jni/NativeScriptRuntime.cpp @@ -565,7 +565,7 @@ jobject NativeScriptRuntime::CreateJavaInstance(int objectID, const std::string& int NativeScriptRuntime::GetCachedConstructorId(JEnv& env, const FunctionCallbackInfo& args, const string& name, const string& className, jobjectArray javaArgs, const Handle& implementationObject) { int ctorId = -1; - string fullClassName = className + '-' + name; + string fullClassName = className + Constants::CLASS_NAME_LOCATION_SEPARATOR + name; string encodedCtorArgs = MethodCache::EncodeSignature(fullClassName, "", args, false); auto itFound = s_constructorCache.find(encodedCtorArgs); diff --git a/src/src/com/tns/DexFactory.java b/src/src/com/tns/DexFactory.java index 214f9aa5c..c0f93a22c 100644 --- a/src/src/com/tns/DexFactory.java +++ b/src/src/com/tns/DexFactory.java @@ -27,6 +27,7 @@ public class DexFactory { private static final String SECONDARY_DEX_FOLDER_NAME = "code_cache" + File.separator + "secondary-dexes"; + private static final char CLASS_NAME_LOCATION_SEPARATOR = '_'; private String dexPath; private String odexPath; @@ -75,7 +76,7 @@ public Class resolveClass(String name, String className, String[] methodOverr return NativeScriptActivity.class; } - String fullClassName = className.replace("$", "_") + "-" + name; + String fullClassName = className.replace("$", "_") + CLASS_NAME_LOCATION_SEPARATOR + name; Class existingClass = this.injectedDexClasses.get(fullClassName); if(existingClass != null) { @@ -83,7 +84,7 @@ public Class resolveClass(String name, String className, String[] methodOverr } String classToProxy = this.getClassToProxyName(className); - String dexFilePath = classToProxy + "-" + name; + String dexFilePath = classToProxy + CLASS_NAME_LOCATION_SEPARATOR + name; File dexFile = this.getDexFile(dexFilePath); if (dexFile == null) @@ -136,6 +137,7 @@ public Class resolveClass(String name, String className, String[] methodOverr public Class findClass(String className) throws ClassNotFoundException { String canonicalName = className.replace('/', '.'); + Log.d("TNS_NATIVE", canonicalName); Class existingClass = this.injectedDexClasses.get(canonicalName); if(existingClass != null) { diff --git a/test-app/assets/app/tests/tests.js b/test-app/assets/app/tests/tests.js index 481432948..e35906508 100644 --- a/test-app/assets/app/tests/tests.js +++ b/test-app/assets/app/tests/tests.js @@ -394,7 +394,7 @@ describe("Tests ", function () { var button1 = new MyButton(); var button1Label = button1.toString(); - expect(button1Label.indexOf("com.tns.tests.Button1-")).not.toEqual(-1); + expect(button1Label.indexOf("com.tns.tests.Button1_")).not.toEqual(-1); expect(button1Label.indexOf("MyButton")).not.toEqual(-1); expect(button1Label.indexOf("success")).not.toEqual(-1); diff --git a/test-app/assets/app/tests/testsForTypescript.js b/test-app/assets/app/tests/testsForTypescript.js index 11aa80957..93298f03c 100644 --- a/test-app/assets/app/tests/testsForTypescript.js +++ b/test-app/assets/app/tests/testsForTypescript.js @@ -112,8 +112,9 @@ describe("Tests typescript", function () { var button = new MyButton2(); var button1Label = button.superToString(); - expect(button1Label.indexOf("com.tns.tests.Button1-")).not.toEqual(-1); - expect(button1Label.indexOf("-MyButton2")).not.toEqual(-1); + + expect(button1Label.indexOf("com.tns.tests.Button1_")).not.toEqual(-1); + expect(button1Label.indexOf("_MyButton2")).not.toEqual(-1); }); it("When_creating_a_pure_typescript_inheritance_chain_it_should_work", function () { @@ -289,8 +290,8 @@ describe("Tests typescript", function () { var button = new MyButton5(); var button1Label = button.toString(); - expect(button1Label.indexOf("com.tns.tests.Button1-")).not.toEqual(-1); - expect(button1Label.indexOf("-MyButton5")).not.toEqual(-1); + expect(button1Label.indexOf("com.tns.tests.Button1_")).not.toEqual(-1); + expect(button1Label.indexOf("_MyButton5")).not.toEqual(-1); }); it("When_extending_an_already_extended_object_it_should_throw_an_error", function () { From d6a3d31a6bbf3d8c2e67363b3ad2ec5698f35e8c Mon Sep 17 00:00:00 2001 From: Stefan Dragnev Date: Tue, 2 Jun 2015 17:58:53 +0300 Subject: [PATCH 44/46] fix: HTTP requests are executed serially instead of in parallel --- src/src/com/tns/Async.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/src/com/tns/Async.java b/src/src/com/tns/Async.java index 1369bd3fd..473dbd942 100644 --- a/src/src/com/tns/Async.java +++ b/src/src/com/tns/Async.java @@ -208,7 +208,7 @@ public static void MakeRequest(RequestOptions options, CompleteCallback callback options.screenWidth = metrics.widthPixels; options.screenHeight = metrics.heightPixels; } - new HttpRequestTask(callback, context).execute(options); + new HttpRequestTask(callback, context).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, options); } static class HttpRequestTask extends AsyncTask From c2b61bfc5d5f486df7a1a14b957b0dcc46c63088 Mon Sep 17 00:00:00 2001 From: plamen5kov Date: Wed, 3 Jun 2015 10:54:50 +0300 Subject: [PATCH 45/46] fixed errors in binding generator tests due to constant CLASS_NAME_LOCATION_SEPARATOR --- .../runtimebindinggenerator/tester/RuntimeTests.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/binding-generator/Tester/src/com/tns/runtimebindinggenerator/tester/RuntimeTests.java b/binding-generator/Tester/src/com/tns/runtimebindinggenerator/tester/RuntimeTests.java index 930018497..fe6aef0cd 100644 --- a/binding-generator/Tester/src/com/tns/runtimebindinggenerator/tester/RuntimeTests.java +++ b/binding-generator/Tester/src/com/tns/runtimebindinggenerator/tester/RuntimeTests.java @@ -40,8 +40,8 @@ public class RuntimeTests extends AndroidTestCase private ApplicationWriter aw; private Dump dump; private File optimizedDexOutputPath; + public static final char CLASS_NAME_LOCATION_SEPARATOR = '_'; - public RuntimeTests() { } @@ -120,7 +120,7 @@ private TargetObject loadProxy(File proxyFile, TargetObject implementationObject Platform.implementationObject = implementationObject; DexClassLoader dexClassLoader = new DexClassLoader(proxyFile.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), null, getContext().getClassLoader()); - Class clazz = dexClassLoader.loadClass("com.tns.gen.com.proxy.TargetObject-0"); + Class clazz = dexClassLoader.loadClass("com.tns.gen.com.proxy.TargetObject"+ CLASS_NAME_LOCATION_SEPARATOR + "0"); assertNotNull("Error loading proxy class com.tns.gen.com.proxy.TargetObject", clazz); Constructor ctor = clazz.getConstructor(); @@ -133,7 +133,7 @@ private T loadAnyProxy(File proxyFile, T implementationObject) throws Except Platform.implementationObject = (Object)implementationObject; DexClassLoader dexClassLoader = new DexClassLoader(proxyFile.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), null, getContext().getClassLoader()); - Class clazz = dexClassLoader.loadClass("com.tns.gen." + implementationObject.getClass().getSuperclass().getCanonicalName() + "-0"); + Class clazz = dexClassLoader.loadClass("com.tns.gen." + implementationObject.getClass().getSuperclass().getCanonicalName() + CLASS_NAME_LOCATION_SEPARATOR + "0"); assertNotNull("Error loading proxy class com.tns.gen.com.proxy.Button1", clazz); Constructor ctor = clazz.getConstructor(); @@ -144,7 +144,7 @@ private T loadAnyProxy(File proxyFile, T implementationObject) throws Except private T loadAnyProxyByClass(File proxyFile, Class proxyClass) throws Exception { DexClassLoader dexClassLoader = new DexClassLoader(proxyFile.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), null, getContext().getClassLoader()); - Class clazz = dexClassLoader.loadClass("com.tns.gen." + proxyClass.getName().replace('$', '_') + "-0"); + Class clazz = dexClassLoader.loadClass("com.tns.gen." + proxyClass.getName().replace('$', '_') + CLASS_NAME_LOCATION_SEPARATOR + "0"); assertNotNull("Error loading proxy class com.tns.gen.com.proxy.Button1", clazz); if (!proxyClass.getName().contains("ViewGroup")) @@ -168,7 +168,7 @@ private Button1 loadButton1Proxy(File proxyFile, Button1 implementationObject) t Platform.implementationObject = implementationObject; DexClassLoader dexClassLoader = new DexClassLoader(proxyFile.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), null, getContext().getClassLoader()); - Class clazz = dexClassLoader.loadClass("com.tns.gen.com.proxy.Button1-0"); + Class clazz = dexClassLoader.loadClass("com.tns.gen.com.proxy.Button1" + CLASS_NAME_LOCATION_SEPARATOR + "0"); assertNotNull("Error loading proxy class com.tns.gen.com.proxy.Button1", clazz); Constructor ctor = clazz.getConstructor(); @@ -181,7 +181,7 @@ private TargetObject.TargetInterface loadInterfaceProxy(File proxyFile, TargetOb Platform.implementationObject = implementationObject; DexClassLoader dexClassLoader = new DexClassLoader(proxyFile.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), null, getContext().getClassLoader()); - Class clazz = dexClassLoader.loadClass("com.tns.gen.com.proxy.TargetObject_TargetInterface-0"); + Class clazz = dexClassLoader.loadClass("com.tns.gen.com.proxy.TargetObject_TargetInterface" + CLASS_NAME_LOCATION_SEPARATOR + "0"); assertNotNull("Error loading proxy class com.tns.gen.com.proxy.TargetObject", clazz); Constructor ctor = clazz.getConstructor(); From 5cdd431b5d5e941b6a19adc4ee7329fe27596c4b Mon Sep 17 00:00:00 2001 From: vakrilov Date: Wed, 3 Jun 2015 11:47:51 +0300 Subject: [PATCH 46/46] Changed Lollipop theme to use spinner date/time pickers --- .../res/values-v21/styles.xml | 15 +++++++++++- build/project-template/res/values/styles.xml | 24 ++++--------------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/build/project-template/res/values-v21/styles.xml b/build/project-template/res/values-v21/styles.xml index dba3c417b..27a342b99 100644 --- a/build/project-template/res/values-v21/styles.xml +++ b/build/project-template/res/values-v21/styles.xml @@ -1,5 +1,18 @@ + + @style/SpinnerDatePicker + @style/SpinnerTimePicker + + + + + + + diff --git a/build/project-template/res/values/styles.xml b/build/project-template/res/values/styles.xml index 22901efd2..154e78656 100644 --- a/build/project-template/res/values/styles.xml +++ b/build/project-template/res/values/styles.xml @@ -1,20 +1,6 @@ - - - - - - - - + + + +