UNPKG

cordova-plugin-app-preferences

Version:

Application preferences plugin and preference pane generator

233 lines (201 loc) 7 kB
function testPlugin (cb, logger) { var tests = { "bool-test": true, "false-test": false, "float-test": 123.456, "int-test": 1, "zero-test": 0, "string-test": "xxx", "empty-string-test": "", "string-with-quotes-test": "xx\"xx", "obj-test": {a: "b"}, "arr-test": ["a", "b"], "empty-arr-test": [] }; var fail = []; var pass = 0; var nonExistingKeyName = 'test-key-must-not-exists'; var appp = (typeof AppPreferences !== "undefined") ? new AppPreferences () : plugins.appPreferences; var nativePlatforms = { iOS: true, Android: true, windows: true }; function fetchIncrementStore (keyName) { var testRunCount; appp.fetch (keyName).then (function (value) { testRunCount = value || 0; testRunCount++; pass++; }, function (err) { console.error (err); fail.push ('promise '+keyName+' failed'); }).then (function () { appp.store (keyName, testRunCount) }).then (function () { console.info ("test run #"+testRunCount); }, function (err) { console.error (err); }); } fetchIncrementStore ("test-run-count"); appp.fetch ("test-promise").then (function () { pass++; }, function (err) { fail.push ('promise fetch failed'); }); appp.fetch (function (ok) { if (ok === null) { console.log ("non existing key fetch result is success with null"); pass++; appp.store (function (ok) { pass++; appp.fetch (function (ok) { if (ok !== null && ok) { pass++; } else { fail.push ('fetch>store>fetch '+nonExistingKeyName); } appp.remove (function (ok) { pass++; }, function (err) { fail.push ('fetch>store>fetch>remove '+nonExistingKeyName + ', error: '+err); }, nonExistingKeyName); }, function (err) { fail.push ('fetch>store>fetch null '+nonExistingKeyName); }, nonExistingKeyName); }, function (err) { fail.push ('fetch>store '+nonExistingKeyName); }, nonExistingKeyName, true); } else { appp.remove (function (ok) { pass++; }, function (err) { fail.push ('fetch>remove '+nonExistingKeyName + '="'+err+'"'); }, nonExistingKeyName); fail.push ('fetch exists '+nonExistingKeyName + '="'+ok+'"'); } }, function (err) { fail.push ('fetch '+nonExistingKeyName); }, nonExistingKeyName); appp.fetch (function (ok) { if (ok === null) { pass++; } else { fail.push ('fetch not null '+'dict2.'+nonExistingKeyName + '="'+ok+'"'); } }, function (err) { fail.push ('fetch '+'dict2.'+nonExistingKeyName); }, "dict2", nonExistingKeyName); for (var testK in tests) { (function (testName, testValue) { console.log ('trying to store', testName); appp.store (function (ok) { console.log ('stored', testName); pass ++; appp.fetch (function (ok) { if (ok == testValue || (typeof testValue == "object" && JSON.stringify (ok) == JSON.stringify (testValue))) pass ++; else { console.error ('fetched incorrect value for ' + testName + ': expected ' + JSON.stringify (testValue) + ' got ' + JSON.stringify (ok)); fail.push ('store>fetch not equal '+testName); } }, function (err) { console.error ('fetch value failed for ' + testName + ' and value ' + testValue); fail.push ('store>fetch '+testName); }, testName); if ('device' in window && device.platform && nativePlatforms[device.platform]) { // TODO: replace by localStorage fallback module var lsValue = localStorage.getItem (testName); if (lsValue === null) { pass ++; } else if (lsValue === testValue) { fail.push ('store>fetch (localStorage) '+testName); } else { console.error ('localStorage contains unexpected value: "' + lsValue + '" / "' + testValue + '"'); pass ++; } } }, function (err) { console.error ('store value failed for ' + testName + ' and value ' + testValue); fail.push ('store '+testName); }, testName, testValue); console.log ('trying to store', "dict.x" + testName); appp.store (function (ok) { console.log ('stored', "dict.x" + testName); pass ++; appp.fetch (function (ok) { if (ok == testValue || (typeof testValue == "object" && JSON.stringify (ok) == JSON.stringify (testValue))) pass ++; else { console.error ('fetched incorrect value for dict.x' + testName + ': expected ' + JSON.stringify (testValue) + ' got ' + JSON.stringify (ok)); fail.push ('store>fetch not equal '+'dict.x'+testName); } }, function (err) { console.error ('fetch value failed for ' + "dict.x" + testName + ' and value ' + testValue); fail.push ('store>fetch '+'dict.x'+testName); }, "dict", "x" + testName); }, function (err) { console.error ('store value failed for ' + "dictx" + testName + ' and value ' + testValue); fail.push ('store '+'dict.x'+testName); }, "dict", "x" + testName, testValue); }) (testK, tests[testK]); } setTimeout (function () { var prompt = 'AppPreferences plugin tests'; if (fail && fail.length) { console.error ('%s passed: %d, failed: %d', prompt, pass, fail); } else { console.log ('%s — all %d passed', prompt, pass); } cb && cb (pass, fail); }, 1000); } function testPluginAndCallback () { var contentTag = '<content src="http://127.0.0.1:50000" />'; var url = contentTag.split ('"')[1]; // location.href = url; var oReq = new XMLHttpRequest(); oReq.addEventListener("load", function () {}); var appp = (typeof AppPreferences !== "undefined") ? new AppPreferences () : plugins.appPreferences; // some css fixes var appNode = document.querySelector ('div.app'); if (appNode) appNode.style.cssText = "top: 150px;"; var deviceReadyNode = document.querySelector ('div#deviceready'); if (deviceReadyNode) deviceReadyNode.classList.remove ('blink'); if (deviceReadyNode) { var statusNode = document.createElement ('p'); statusNode.className = 'event test'; statusNode.style.cssText = 'display: none'; deviceReadyNode.parentNode.appendChild (statusNode); deviceReadyNode.parentNode.appendChild (document.createElement ('p')); var showPrefsNode = document.createElement ('p'); showPrefsNode.className = 'event prefs'; showPrefsNode.style.cssText = 'display: block'; deviceReadyNode.parentNode.appendChild (showPrefsNode); showPrefsNode.addEventListener ('click', function () {appp.show()}, false); } // end css fixes testPlugin (function (pass, fail) { var statusColor; var statusMessage; if (fail.length) { url += "/test/fail?" + fail.join (';'); statusColor = '#ba4848'; statusMessage = 'Tests failed: ' + fail + '/' + (fail + pass); } else { url += "/test/success"; statusColor = '#48bab5'; statusMessage = 'All tests passed'; } if (deviceReadyNode) { statusNode.textContent = statusMessage; statusNode.style.cssText = 'display: block; background-color: '+statusColor+';'; deviceReadyNode.querySelector ('.received').style.cssText = 'display: none;'; showPrefsNode.textContent = 'Show preference pane'; showPrefsNode.style.cssText = 'display: block; background-color: #2d2d90'; } oReq.open("GET", url); oReq.send(); }); }