/*global exports: false, require: false */
/*jslint plusplus: false */
// TODO: add some failing tests as well
"use strict";
var util = require("util");
var pushkinTestString = "Byl pozdní večer první máj!\n\n" +
"Нас было много на челне;\nИные парус напрягали,\nДругие дружно упирали\n\n" +
"В глубь мощны веслы. В тишине\nНа руль склонясь, наш кормщик умный\n" +
"В молчаньи правил грузный чолн;\nА я — беспечной веры полн —\n" +
"Пловцам я пел....";
// shamelessly stolen from
// http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256BFB0077DFFD
var areArraysEqual = function areArraysEqual(array1, array2) {
var temp = [], i = 0, key = "";
if ((!array1[0]) || (!array2[0])) { // If either is not an array
return false;
}
if (array1.length !== array2.length) {
return false;
}
// Put all the elements from array1 into a "tagged" array
for (i = 0; i < array1.length; i++) {
key = (typeof array1[i]) + "~" + array1[i];
// Use "typeof" so a number 1 isn't equal to a string "1".
if (temp[key]) {
temp[key]++;
} else {
temp[key] = 1;
}
// temp[key] = # of occurrences of the value (so an element could appear multiple times)
}
// Go through array2 - if same tag missing in "tagged" array, not equal
for (i = 0; i < array2.length; i++) {
key = (typeof array2[i]) + "~" + array2[i];
if (temp[key]) {
if (temp[key] === 0) {
return false;
} else {
temp[key]--;
}
// Subtract to keep track of # of appearances in array2
} else { // Key didn't appear in array1, arrays are not equal.
return false;
}
}
return true;
};
// testing util.isInList
exports.ensureIsInListTrue = function (test) {
test.assert(util.isInList("a", ["a"]),
"conversion of a string to an array");
};
exports.ensureIsInListFalse = function (test) {
test.assert(!util.isInList("b", ["a"]),
"conversion of a string to an array");
};
exports.ensureIsInListEmpty = function (test) {
test.assert(!util.isInList("b", []),
"conversion of a string to an array");
};
exports.ensureIsInListNoMember = function (test) {
test.assert(!util.isInList("", ["x"]),
"conversion of a string to an array");
};
// testing util.getISODate
exports.ensureGetISODate = function (test) {
test.assertEqual(util.getISODate("Mon May 31 2010 23:29:09 GMT+0200 (CET)"),
"2010-05-31", "conversion of a Date to ISO-formatted String");
};
// testing util.valToArray
exports.ensureValToArrayString = function (test) {
test.assert(areArraysEqual(util.valToArray("a"), ["a"]),
"conversion of a string to an array");
};
// TODO: somehow cannot pass array as a parameter
// waiting on https://bugzilla.mozilla.org/show_bug.cgi?id=569273
//exports.ensureValToArrayEmpty = function (test) {
// test.assert(areArraysEqual(util.valToArray(""), [""]),
// "conversion of a string to an array");
//};
//exports.ensureValToArrayArray = function (test) {
// test.assert(areArraysEqual(util.valToArray("a"), ["a"]),
// "conversion of a string to an array");
//};
// testing util.addCSVValue
exports.ensureCSVAddedToNull = function (test) {
test.assertEqual(util.addCSVValue("", "b"), "b",
"adding a string to empty string");
};
exports.ensureCSVAddedNull = function (test) {
test.assertEqual(util.addCSVValue("a", ""), "a",
"adding nothing to a string");
};
exports.ensureCSVAddedString = function (test) {
test.assertEqual(util.addCSVValue("a", "b"), "a, b",
"adding one string to another one");
};
exports.ensureCSVAddedArray = function (test) {
test.assertEqual(util.addCSVValue("a", ["b", "c"]), "a, b, c",
"adding array to a string");
};
exports.ensureCSVAddedArray2Array = function (test) {
test.assertEqual(util.addCSVValue("a, b", ["c", "d"]), "a, b, c, d",
"adding one array to another");
};
// testing util.removeCSVValue
exports.ensureCSVRemoveSimple = function (test) {
test.assertEqual(util.removeCSVValue("a, b", "b"), "a",
"removing one string from an array");
};
// also checking a tolerancy against different ways of writing arrays
exports.ensureCSVRemoveNonMember = function (test) {
test.assertEqual(util.removeCSVValue("a,b", "c"), "a, b",
"removing a string from an array of which it isn't a member");
};
exports.ensureCSVRemoveEmpty = function (test) {
test.assertEqual(util.removeCSVValue("", "c"), "",
"removing a string from an empty array");
};
// testing util.getBugNo
exports.ensureGetBugNo = function (test) {
var bugNo = util.getBugNo("https://bugzilla.redhat.com/show_bug.cgi?id=597141");
test.assertEqual(bugNo, 597141, "getting bug number");
};
// TODO: waiting on https://bugzilla.mozilla.org/show_bug.cgi?id=569271
//// testing util.loadText
//exports.ensureLoadText = function (test) {
// var url = "http://www.ceplovi.cz/matej/progs/data/pushkin.txt";
// var text = "";
// util.loadText(url,function(txt) {
// test.assertEqual(txt,pushkinTestString);
// });
//};
//// testing util.loadJSON
//exports.ensureLoadJSON = function (test) {
// var url = "http://www.ceplovi.cz/matej/progs/data/test.json";
// var date = {};
// util.loadJSON(url,function(data) {
// test.assertEqual(data,[1,2,3]);
// });
//};