#!/usr/bin/env node // Preamble // function assert(condition, message) { if (!condition) { print("Assertion failed ", message); throw new Error(message || "Assertion failed"); } } if(typeof process !== 'undefined') { console.log('running from nodejs'); console.log('path', process.env.NODE_PATH); console.log("teste1"); efl = require('efl'); assert(efl != null, "could not load efl node module"); // Setup output aliases print = console.log; printError = function() { if (process.argv.indexOf("--supress-errors") == -1) console.error.apply(null, arguments); }; printInfo = function() { if (process.argv.indexOf("--verbose") != -1) console.info.apply(null, arguments); }; exit = efl.ecore_mainloop_quit; } else { assert = function(test, message) { if (!test) throw message; }; print('running from libv8') //FIXME Add levels to v8 tests printError = print printInfo = print exit = function() {} } // Global flag for suite success // suiteSuccess = true; // Global test summary suiteOk = 0; suiteFail = []; // Will store the name of the failures // Basic test function // function startTest(testName, testFunc) { print("[ RUN ] eolian_js_suite: " + testName); var testResult = true; try { testFunc(); } catch (e) { suiteSuccess = false; testResult = false; printError("Error: ", e, e.stack); } print("[ " + (testResult ? "PASS" : "FAIL") + " ] eolian_js_suite: " + testName); if (testResult) suiteOk += 1; else suiteFail.push(testName); } // end Preamble // eolian Preamble if (typeof process != "undefined") { suite = require('eolian_js_suite_mod'); assert(suite != null, "could not load eolian_js_suite_mod"); ConstructorMethodClass = suite.ConstructorMethodClass; TestObject = suite.Test.Object; } else { ConstructorMethodClass = suite.ConstructorMethodClass; TestObject = suite.Test.Object; } function expectException(func) { var exceptionCaught = false; try { func(); } catch (e) { exceptionCaught = true; } assert(exceptionCaught, "Exception expected but not thrown!"); } // end eolian Preamble // Test cases // startTest("constructor_null_parent", function() { var obj = new TestObject(null); assert(obj !== null); }); startTest("integral_in_and_out_parameters", function() { var obj = new TestObject(null); var expectedValue = 1234; obj.checkMethodIntegralInA(expectedValue); var actualValue = obj.checkMethodIntegralOutA(); assert(actualValue == expectedValue, actualValue + " == " + expectedValue); }); startTest("integral_inout_parameter", function() { var obj = new TestObject(null); var expectedValue = 1234; var actualValue = obj.checkMethodIntegralInout(-expectedValue); assert(actualValue == expectedValue, actualValue + " == " + expectedValue); var expectedValue = -4321; var actualValue = obj.checkMethodIntegralInout(-expectedValue); assert(actualValue == expectedValue, actualValue + " == " + expectedValue); }); startTest("integral_return_value", function() { var obj = new TestObject(null); var expectedValue = 1234; obj.checkMethodIntegralInA(expectedValue); var actualValue = obj.checkMethodIntegralReturnA(); assert(actualValue == expectedValue, actualValue + " == " + expectedValue); }); startTest("more_parameters_than_expected_is_ok", function() { var obj = new TestObject(null); var expectedValue = 1234; obj.checkMethodIntegralInA(expectedValue, 4321); var actualValue = obj.checkMethodIntegralOutA(); assert(actualValue == expectedValue, actualValue + " == " + expectedValue); }); startTest("less_parameters_that_expected_fails", function() { var obj = new TestObject(null); expectException(function() { obj.checkMethodIntegralInA(); }); }); startTest("wrong_parameter_type_fails", function() { var obj = new TestObject(null); expectException(function() { obj.checkMethodIntegralInA('string'); }); }); startTest("mixed_in_out_and_result", function() { var obj = new TestObject(null); var ret = obj.checkMethodDivMod(7, 3); var success = ret[0]; var quotient = ret[1]; var remainder = ret[2]; assert(success); assert(2 == quotient); assert(1 == remainder); ret = obj.checkMethodDivMod(42, 0); success = ret[0]; assert(!success); }); startTest("boolean", function() { var obj = new TestObject(null); var ret = obj.checkMethodAnd(false, false); assert(ret == false); ret = obj.checkMethodAnd(false, true); assert(ret == false); ret = obj.checkMethodAnd(true, false); assert(ret == false); ret = obj.checkMethodAnd(true, true); assert(ret); }); startTest("floating_point", function() { var obj = new TestObject(null); var ret = obj.checkMethodModf(3.14159); assert(Math.abs(ret[0] - 0.14159) < 0.00001, "Math.abs(ret[0] - 0.14159) < 0.00001 (" + Math.abs(ret[0] - 0.14159) + " < 0.00001)"); assert(ret[1] == 3, "ret[1] == 3 (" + ret[1] + " == 3)"); }); startTest("string_inout", function() { var obj = new TestObject(null); var ret = obj.checkMethodUppercase('hello world'); assert(ret == "HELLO WORLD", "ret == " + ret); }); startTest("in_null_string", function() { var obj = new TestObject(null); var success = obj.checkMethodInNull(null); assert(success, "success == " + success); }); startTest("out_null_string", function() { var obj = new TestObject(null); var ret = obj.checkMethodOutNull(); assert(ret[0], "success == " + ret[0]); assert(ret[1] === null, "output == " + ret[1]); }); startTest("inout_null_string", function() { var obj = new TestObject(null); var ret = obj.checkMethodInoutNull(null); assert(ret[0], "success == " + ret[0]); assert(ret[1] === null, "output == " + ret[1]); }); startTest("return_null_string", function() { var obj = new TestObject(null); var ret = obj.checkMethodReturnNull(); assert(ret === null, "ret == " + ret); }); startTest("null_values", function() { var obj = new TestObject(null); var ret = obj.checkMethodNull(null, null); assert(ret[0] === null, "ret == " + ret[0]); assert(ret[1] === null, "ret == " + ret[1]); assert(ret[2] === null, "ret == " + ret[2]); }); startTest("enum_values", function() { var obj = new TestObject(null); var ret = obj.checkMethodInEnumReturnEnum(suite.Test.EnumEx.SECOND); assert(ret === suite.Test.EnumEx.SECOND); var value = suite.Test.EnumEx.THIRD; assert(value === 2); ret = obj.checkMethodInEnumReturnEnum(value); assert(ret === value); }); startTest("struct_values", function() { var obj = new TestObject(null); var newStruct = new suite.Test.StructEx; newStruct.valueInt = 42; newStruct.valueEnum = suite.Test.EnumEx.FOURTH; var ret = newStruct.valueInt; assert(ret === 42); ret = newStruct.valueEnum; assert(ret === suite.Test.EnumEx.FOURTH); ret = obj.checkMethodInStructReturnStruct(newStruct); assert(ret.valueInt === 42); assert(ret.valueEnum === suite.Test.EnumEx.FOURTH); }); startTest("event_simple", function() { var v = false; var obj = new TestObject(null); var ret = obj.on ("test", function() { printInfo('Event called') v = true; } ); printInfo('going to call event'); obj.emitEvent(); printInfo('is event called?'); assert(v); }); startTest("event_object_call", function() { var v = false; var obj = new TestObject(null); var ret = obj.on ("test", function() { printInfo('Event called'); var o = arguments[0]; assert(o != null); var expectedValue = 1234; o.checkMethodIntegralInA(expectedValue); var actualValue = o.checkMethodIntegralOutA(); assert(actualValue == expectedValue, actualValue + " == " + expectedValue); v = true; } ); printInfo('going to call event'); obj.emitEvent(); printInfo('is event called?'); assert(v); }); startTest("event_structarg", function() { var v = false; var obj = new TestObject(null); var ret = obj.on ("test,structarg", function() { printInfo('Event called'); var s = arguments[1]; assert(s != null); assert(s.valueInt === 42); assert(s.valueEnum === suite.Test.EnumEx.THIRD); v = true; } ); printInfo('going to call event'); obj.emitEvent(); printInfo('is event called?'); assert(v); }); startTest("event_stringarg", function() { var v = false; var obj = new TestObject(null); var ret = obj.on ("test,stringarg", function() { printInfo('Event called'); var s = arguments[1]; assert(s === "foo"); v = true; } ); printInfo('going to call event'); obj.emitEvent(); printInfo('is event called?'); assert(v); }); // // TODO: disabled. Not implemented yet // startTest("integral_array", function() { // var obj = new TestObject(null); // var ret = obj.checkMethodArrayAt([1, 2, 3, 4, 5], 1); // assert(ret == 2, "ret == " + ret); // }); startTest("array_in_array_out", function() { var obj = new TestObject(null); var newArray = obj.checkMethodArrayWith42(); assert(newArray != null); var arr = obj.checkMethodArrayInArrayOut(newArray); assert(arr != null); assert(arr[0] === 42); assert(newArray[0] === arr[0]); }); startTest("method_array_of_objects", function() { var obj = new TestObject(null); var arr = obj.checkMethodArrayOfObjects(null); assert(arr != null); assert(arr[0] != null); arr = obj.checkMethodArrayOfObjects(arr); assert(arr != null); var v = arr[0]; assert(v != null); // assert(v == obj); // TODO: check if same Eo object pointer? var expectedValue = 1234; v.checkMethodIntegralInA(expectedValue); var actualValue = v.checkMethodIntegralOutA(); assert(actualValue == expectedValue, actualValue + " == " + expectedValue); }); // FIXME // startTest("method_array_of_strings", function() { // var obj = new TestObject(null); // var arr = obj.checkMethodArrayOfStrings(null); // assert(arr != null); // assert(arr[0] === "foo"); // arr = obj.checkMethodArrayOfStrings(arr); // assert(arr != null); // assert(arr[0] === "foo"); // }); startTest("method_array_of_ints", function() { var obj = new TestObject(null); var arr = obj.checkMethodArrayOfInts(null); assert(arr != null); assert(arr[0] === 42); arr = obj.checkMethodArrayOfInts(arr); assert(arr != null); assert(arr[0] === 42); }); startTest("method_array_of_bools", function() { var obj = new TestObject(null); var arr = obj.checkMethodArrayOfBools(null); assert(arr != null); assert(arr[0] === true); arr = obj.checkMethodArrayOfBools(arr); assert(arr != null); assert(arr[0] === true); }); startTest("method_array_of_doubles", function() { var obj = new TestObject(null); var arr = obj.checkMethodArrayOfDoubles(null); assert(arr != null); assert(arr[0] === 42.0); arr = obj.checkMethodArrayOfDoubles(arr); assert(arr != null); assert(arr[0] === 42.0); }); startTest("method_array_of_enums", function() { var obj = new TestObject(null); var arr = obj.checkMethodArrayOfEnums(null); assert(arr != null); assert(arr[0] === suite.Test.EnumEx.THIRD); arr = obj.checkMethodArrayOfEnums(arr); assert(arr != null); assert(arr[0] === suite.Test.EnumEx.THIRD); }); startTest("method_array_of_structs", function() { var obj = new TestObject(null); var arr = obj.checkMethodArrayOfStructs(null); assert(arr != null); var s = arr[0]; assert(s != null); assert(s.valueInt === 42); assert(s.valueEnum === suite.Test.EnumEx.THIRD); arr = obj.checkMethodArrayOfStructs(arr); s = arr[0]; assert(s != null); assert(s.valueInt === 42); assert(s.valueEnum === suite.Test.EnumEx.THIRD); }); startTest("list_in_list_out", function() { var obj = new TestObject(null); var newList = obj.checkMethodListWith42(); assert(newList != null); var lis = obj.checkMethodListInListOut(newList); assert(lis != null); // assert(lis == newList); // TODO: check same list pointer? assert(lis[0] === 42); assert(newList[0] === lis[0]); }); startTest("method_list_of_objects", function() { var obj = new TestObject(null); var lis = obj.checkMethodListOfObjects(null); assert(lis != null); assert(lis[0] != null); lis = obj.checkMethodListOfObjects(lis); assert(lis != null); var v = lis[0]; assert(v != null); // assert(v == obj); // TODO: check if same Eo object pointer? var expectedValue = 1234; v.checkMethodIntegralInA(expectedValue); var actualValue = v.checkMethodIntegralOutA(); assert(actualValue == expectedValue, actualValue + " == " + expectedValue); }); // FIXME // startTest("method_list_of_strings", function() { // var obj = new TestObject(null); // var lis = obj.checkMethodListOfStrings(null); // assert(lis != null); // assert(lis[0] === "foo"); // lis = obj.checkMethodListOfStrings(lis); // assert(lis != null); // assert(lis[0] === "foo"); // }); startTest("method_list_of_ints", function() { var obj = new TestObject(null); var lis = obj.checkMethodListOfInts(null); assert(lis != null); assert(lis[0] === 42); lis = obj.checkMethodListOfInts(lis); assert(lis != null); assert(lis[0] === 42); }); startTest("method_list_of_bools", function() { var obj = new TestObject(null); var lis = obj.checkMethodListOfBools(null); assert(lis != null); assert(lis[0] === true); lis = obj.checkMethodListOfBools(lis); assert(lis != null); assert(lis[0] === true); }); startTest("method_list_of_doubles", function() { var obj = new TestObject(null); var lis = obj.checkMethodListOfDoubles(null); assert(lis != null); assert(lis[0] === 42.0); lis = obj.checkMethodListOfDoubles(lis); assert(lis != null); assert(lis[0] === 42.0); }); startTest("method_list_of_enums", function() { var obj = new TestObject(null); var lis = obj.checkMethodListOfEnums(null); assert(lis != null); assert(lis[0] === suite.Test.EnumEx.THIRD); lis = obj.checkMethodListOfEnums(lis); assert(lis != null); assert(lis[0] === suite.Test.EnumEx.THIRD); }); startTest("method_list_of_structs", function() { var obj = new TestObject(null); var lis = obj.checkMethodListOfStructs(null); assert(lis != null); var s = lis[0]; assert(s != null); assert(s.valueInt === 42); assert(s.valueEnum === suite.Test.EnumEx.THIRD); lis = obj.checkMethodListOfStructs(lis); s = lis[0]; assert(s != null); assert(s.valueInt === 42); assert(s.valueEnum === suite.Test.EnumEx.THIRD); }); startTest("method_accessor_of_objects", function() { var obj = new TestObject(null); var acc = obj.checkMethodAccessorOfObjects(null); assert(acc != null); assert(acc.get(0) != null); acc = obj.checkMethodAccessorOfObjects(acc); assert(acc != null); var v = acc.get(0); assert(v != null); var expectedValue = 1234; v.checkMethodIntegralInA(expectedValue); var actualValue = v.checkMethodIntegralOutA(); assert(actualValue == expectedValue, actualValue + " == " + expectedValue); }); // FIXME // startTest("method_accessor_of_strings", function() { // var obj = new TestObject(null); // var acc = obj.checkMethodAccessorOfStrings(null); // assert(acc != null); // assert(acc.get(0) === "foo"); // acc = obj.checkMethodAccessorOfStrings(acc); // assert(acc != null); // assert(acc.get(0) === "foo"); // }); startTest("method_accessor_of_ints", function() { var obj = new TestObject(null); var acc = obj.checkMethodAccessorOfInts(null); assert(acc != null); assert(acc.get(0) === 42); acc = obj.checkMethodAccessorOfInts(acc); assert(acc != null); assert(acc.get(0) === 42); }); startTest("method_accessor_of_bools", function() { var obj = new TestObject(null); var acc = obj.checkMethodAccessorOfBools(null); assert(acc != null); assert(acc.get(0) === true); acc = obj.checkMethodAccessorOfBools(acc); assert(acc != null); assert(acc.get(0) === true); }); startTest("method_accessor_of_doubles", function() { var obj = new TestObject(null); var acc = obj.checkMethodAccessorOfDoubles(null); assert(acc != null); assert(acc.get(0) === 42.0); acc = obj.checkMethodAccessorOfDoubles(acc); assert(acc != null); assert(acc.get(0) === 42.0); }); startTest("method_accessor_of_enums", function() { var obj = new TestObject(null); var acc = obj.checkMethodAccessorOfEnums(null); assert(acc != null); assert(acc.get(0) === suite.Test.EnumEx.THIRD); acc = obj.checkMethodAccessorOfEnums(acc); assert(acc != null); assert(acc.get(0) === suite.Test.EnumEx.THIRD); }); startTest("method_accessor_of_structs", function() { var obj = new TestObject(null); var acc = obj.checkMethodAccessorOfStructs(null); assert(acc != null); var s = acc.get(0); assert(s != null); assert(s.valueInt === 42); assert(s.valueEnum === suite.Test.EnumEx.THIRD); acc = obj.checkMethodAccessorOfStructs(acc); assert(acc != null); s = acc.get(0); assert(s != null); assert(s.valueInt === 42); assert(s.valueEnum === suite.Test.EnumEx.THIRD); }); // Combinations of complex types // // FIXME // startTest("method_array_of_arrays_of_ints", function() { // var obj = new TestObject(null); // var arr = obj.checkMethodArrayOfArraysOfInts(null); // assert(arr != null); // var a = arr[0]; // assert(a != null); // assert(a[0] === 42); // arr = obj.checkMethodArrayOfArraysOfInts(arr); // assert(arr != null); // a = arr[0]; // assert(a != null); // assert(a[0] === 42); // }); // FIXME // startTest("method_list_of_lists_of_ints", function() { // var obj = new TestObject(null); // var lis = obj.checkMethodListOfListsOfInts(null); // assert(lis != null); // var l = lis[0]; // assert(l != null); // assert(l[0] === 42); // lis = obj.checkMethodListOfListsOfInts(lis); // assert(lis != null); // l = lis[0]; // assert(l != null); // assert(l[0] === 42); // }); // FIXME // startTest("method_array_of_lists_of_ints", function() { // var obj = new TestObject(null); // var arr = obj.checkMethodArrayOfListsOfInts(null); // assert(arr != null); // var l = arr[0]; // assert(l != null); // assert(l[0] === 42); // arr = obj.checkMethodArrayOfListsOfInts(arr); // assert(arr != null); // l = arr[0]; // assert(l != null); // assert(l[0] === 42); // }); // FIXME // startTest("method_list_of_arrays_of_ints", function() { // var obj = new TestObject(null); // var lis = obj.checkMethodListOfArraysOfInts(null); // assert(lis != null); // var a = lis[0]; // assert(a != null); // assert(a[0] === 42); // lis = obj.checkMethodListOfArraysOfInts(lis); // assert(lis != null); // a = lis[0]; // assert(a != null); // assert(a[0] === 42); // }); startTest("new Constructor_Method_Class", function() { var obj = new ConstructorMethodClass(null, 5, 10.0); assert(obj); assert(obj.getFail() == false, "object fail flag set"); }); startTest("Constructor_Method_Class method1", function() { var obj = new ConstructorMethodClass(null, 5, 10.0); obj.method1(2); assert(obj.getFail() == false, "object fail flag set"); }); startTest("Constructor_Method_Class method2", function() { var obj = new ConstructorMethodClass(null, 5, 10.0); var r = obj.method2(3); assert(r === 5); assert(obj.getFail() == false, "object fail flag set"); }); startTest("Constructor_Method_Class method3", function() { var obj = new ConstructorMethodClass(null, 5, 10.0); obj.method3(3, 11.1); assert(obj.getFail() == false, "object fail flag set"); }); startTest("Constructor_Method_Class method4", function() { var obj = new ConstructorMethodClass(null, 5, 10.0); var r = obj.method4(3, 11.1); assert(r == 5); assert(obj.getFail() == false, "object fail flag set"); }); startTest("Constructor_Method_Class method3 less parameters than expected", function() { var obj = new ConstructorMethodClass(null, 5, 10.0); expectException(function() { obj.method3(3); }); }); startTest("Constructor_Method_Class constructor less parameters than expected", function() { expectException(function() { var obj = new ConstructorMethodClass(null, 5); }); }); startTest("Constructor_Method_Class constructor wrong parameter types", function() { expectException(function() { var obj = new ConstructorMethodClass(null, 5.1, 10); }); }); // Out parameters // startTest("Constructor_Method_Class outmethod1", function() { var obj = new ConstructorMethodClass(null, 5, 10.0); var r = obj.outmethod1(); assert(r == 5); assert(obj.getFail() == false, "object fail flag set"); }); startTest("Constructor_Method_Class outmethod2", function() { var obj = new ConstructorMethodClass(null, 5, 10.0); var r = obj.outmethod2(); assert(Array.isArray(r)); printInfo("Return is array from outmethod2"); assert(r[0] == 11); assert(r[1] == 10); assert(obj.getFail() == false, "object fail flag set"); }); startTest("Constructor_Method_Class outmethod3", function() { var obj = new ConstructorMethodClass(null, 5, 10.0); var r = obj.outmethod3(); assert(Array.isArray(r)); printInfo("Return is array from outmethod3"); assert(r[0] == 11); assert(r[1] == 5.1); assert(obj.getFail() == false, "object fail flag set"); }); startTest("Constructor_Method_Class classoutmethod1", function() { var obj = new ConstructorMethodClass(null, 5, 10.0); var c = obj.classoutmethod1(5, 10.0); assert(c); var r = c.method4(3, 11.1); assert(r == 5); assert(c.getFail() == false, "object fail flag set"); assert(obj.getFail() == false, "object fail flag set"); }); startTest("Constructor_Method_Class classoutmethod2", function() { var obj = new ConstructorMethodClass(null, 5, 10.0); printInfo('1'); var c = obj.classoutmethod2(5, 10.0); assert(c); var r = c.method4(3, 11.1); assert(r); assert(r == 5); assert(c.getFail() == false, "object fail flag set"); assert(obj.getFail() == false, "object fail flag set"); }); startTest("cast", function() { var obj = new ConstructorMethodClass(null, 5, 10.0); var c = obj.classoutmethod1(5, 10.0); print('classoutmethod1'); assert(c); var d = c.cast('Constructor_Method_Class'); assert(d); }); if (!suiteSuccess) { print ("[ Total tests run: %s ]", suiteOk + suiteFail.length); print ("[ Total successful: %s ]", suiteOk); print ("[ Total failures: %s ]", suiteFail.length); print ("[ Tests failed: ]"); for (var i = 0; i < suiteFail.length; i++) { print ("[ %s]", suiteFail[i]); }; assert(false, "[ Test suite fail ]"); } else { print ("[ Test execution with success ]"); print ("[ Total tests run: %s ]", suiteOk); } exit();