Added the waitUntilReady in TKUnit. Updated the location_tests to use the new functionality.

This commit is contained in:
atanasovg
2014-05-14 14:20:16 +03:00
parent d57abd88c4
commit ed7ea974bf
3 changed files with 73 additions and 53 deletions

View File

@ -1,5 +1,4 @@
 /* Notes:
/* Notes:
1. all test function names should begin with 'test' 1. all test function names should begin with 'test'
2. (if exists) at the beginning of module test setUpModule() module function is called 2. (if exists) at the beginning of module test setUpModule() module function is called
@ -10,23 +9,23 @@
*/ */
var Application = require("application"); import Application = require("application/application");
import timer = require("timer/timer");
var runTest = function(test, testName) { var runTest = function (test, testName) {
test(); test();
console.info("--- [" + testName + "] OK"); console.info("--- [" + testName + "] OK");
} };
export var runTestModule = function(module, moduleName){ export var runTestModule = function (module, moduleName) {
console.info("--- " + moduleName + " TESTS BEGIN ---"); console.info("--- " + moduleName + " TESTS BEGIN ---");
console.time(moduleName); console.time(moduleName);
try { try {
if (module.setUpModule) { if (module.setUpModule) {
module.setUpModule(); module.setUpModule();
} }
} } catch (e) {
catch (e) {
console.error("--- [" + moduleName + ".setUpModule()] FAILED: " + e.message); console.error("--- [" + moduleName + ".setUpModule()] FAILED: " + e.message);
} }
@ -34,29 +33,26 @@ export var runTestModule = function(module, moduleName){
var totalSuccess = 0; var totalSuccess = 0;
for (var testName in module) { for (var testName in module) {
var testFunction = module[testName]; var testFunction = module[testName];
if ((typeof(testFunction) === "function") && (testName.substring(0, 4) == "test")) { if ((typeof (testFunction) === "function") && (testName.substring(0, 4) == "test")) {
try { try {
if (module.setUp) { if (module.setUp) {
module.setUp(); module.setUp();
} }
} } catch (e) {
catch (e) {
console.error("--- [" + moduleName + ".setUp()] FAILED: " + e.message); console.error("--- [" + moduleName + ".setUp()] FAILED: " + e.message);
} }
try { try {
totalTests++; totalTests++;
runTest(testFunction, testName); runTest(testFunction, testName);
totalSuccess++; totalSuccess++;
} } catch (e) {
catch (e) {
console.error("--- [" + testName + "] FAILED: " + e.message); console.error("--- [" + testName + "] FAILED: " + e.message);
} }
try { try {
if (module.tearDown) { if (module.tearDown) {
module.tearDown(); module.tearDown();
} }
} } catch (e) {
catch (e) {
console.error("--- [" + moduleName + ".tearDown()] FAILED: " + e.message); console.error("--- [" + moduleName + ".tearDown()] FAILED: " + e.message);
} }
} }
@ -66,41 +62,62 @@ export var runTestModule = function(module, moduleName){
if (module.tearDownModule) { if (module.tearDownModule) {
module.tearDownModule(); module.tearDownModule();
} }
} } catch (e) {
catch (e) {
console.error("--- [" + moduleName + ".tearDownModule()] FAILED: " + e.message); console.error("--- [" + moduleName + ".tearDownModule()] FAILED: " + e.message);
} }
console.timeEnd(moduleName); console.timeEnd(moduleName);
console.info("--- " + moduleName + " TESTS COMPLETE --- (" + totalSuccess + " of " + totalTests + ") OK, " + (totalTests - totalSuccess) + " failed"); console.info("--- " + moduleName + " TESTS COMPLETE --- (" + totalSuccess + " of " + totalTests + ") OK, " + (totalTests - totalSuccess) + " failed");
} };
export var assert = function(test: boolean, message?: string) export var assert = function (test: boolean, message?: string) {
{
//console.assert(test, message);
if (!test) { if (!test) {
throw new Error(message); throw new Error(message);
} }
} };
export var wait = function(ms) export var wait = function (ms) {
{
if (Application.ios) { if (Application.ios) {
Foundation.NSRunLoop.currentRunLoop().runUntilDate(Foundation.NSDate.dateWithTimeIntervalSinceNow(ms / 1000)); Foundation.NSRunLoop.currentRunLoop().runUntilDate(Foundation.NSDate.dateWithTimeIntervalSinceNow(ms / 1000));
} else if (Application.android) {
java.lang.Thread.sleep(long(ms));
java.lang.Thread.yield();
}
};
export var waitUntilReady = function (isReady, timeoutSec) {
if (!isReady) {
return;
}
if (Application.ios) {
var waitTime = 20 / 1000;
var totalWaitTime = 0;
while (true) {
Foundation.NSRunLoop.currentRunLoop().runUntilDate(Foundation.NSDate.dateWithTimeIntervalSinceNow(waitTime));
if (isReady()) {
break;
}
totalWaitTime += waitTime;
if (timeoutSec && totalWaitTime >= timeoutSec) {
break;
}
}
} else if (Application.android) {
doModalAndroid(isReady, timeoutSec);
}
};
var doModalAndroid = function (quitLoop, timeoutSec) {
if (!quitLoop) {
return;
} }
else if (Application.android) {
// java.lang.Thread.sleep(long(ms));
// java.lang.Thread.yield();
// TODO: Not yet fully implemented
// doModal();
}
}
var doModal = function () {
var clsMsgQueue = java.lang.Class.forName("android.os.MessageQueue"); var clsMsgQueue = java.lang.Class.forName("android.os.MessageQueue");
var clsMsg = java.lang.Class.forName("android.os.Message"); var clsMsg = java.lang.Class.forName("android.os.Message");
var nextMethod: java.lang.reflect.Method; var nextMethod;
var methods = clsMsgQueue.getDeclaredMethods(); var methods = clsMsgQueue.getDeclaredMethods();
var i; var i;
for (i = 0; i < methods.length; i++) { for (i = 0; i < methods.length; i++) {
@ -123,23 +140,31 @@ var doModal = function () {
targetField.setAccessible(true); targetField.setAccessible(true);
var quitModal = false;
var queue = android.os.Looper.myQueue(); var queue = android.os.Looper.myQueue();
var quit = false;
if (timeoutSec) {
timer.setTimeout(function () {
quit = true;
}, timeoutSec * 1000);
}
var msg; var msg;
var obj = new Array(0);
while (!quitModal) { while (!quit) {
msg = nextMethod.invoke(queue, [{}]); msg = nextMethod.invoke(queue, null);
if (msg) { if (msg) {
var target = targetField.get(msg); var target = targetField.get(msg);
if (!target) { if (!target) {
// No target is a magic identifier for the quit message. quit = true;
quitModal = true;
} else { } else {
target.dispatchMessage(msg); target.dispatchMessage(msg);
} }
msg.recycle(); msg.recycle();
} }
if (quitLoop()) {
quit = true;
}
} }
} };

View File

@ -19,19 +19,14 @@ export var testLocation = function () {
console.log('Location error received: ' + error); console.log('Location error received: ' + error);
locationReceived = error; locationReceived = error;
} }
); );
var timeoutAfter = 50; // 5 seconds timeout var isReady = function () {
while (typeof locationReceived == 'undefined') { return locationReceived;
if (0 >= --timeoutAfter) {
locationReceived = 'Location search timed out!';
break;
}
TKUnit.wait(100);
} }
TKUnit.waitUntilReady(isReady, 3);
locationManager.stopLocationMonitoring(); locationManager.stopLocationMonitoring();
TKUnit.assert(true === locationReceived, locationReceived); TKUnit.assert(true === locationReceived, locationReceived);
}; };

View File

@ -1,4 +1,4 @@
declare var setTimeout, clearTimeout, setInterval, clearInterval; declare var setTimeout, clearTimeout, setInterval, clearInterval, console;
import timer = require("timer/timer"); import timer = require("timer/timer");
import consoleModule = require("console/console"); import consoleModule = require("console/console");