@@ -0,0 +1,280 @@
buster.testCase("FILTER_VALIDATE_BOOLEAN", {
"it should recognize some obvious values": function () {
var FILTER = "FILTER_VALIDATE_BOOLEAN";

assert.same(true, filter_var("true", FILTER));
assert.same(true, filter_var("1", FILTER));
assert.same(true, filter_var("on", FILTER));
assert.same(true, filter_var("yes", FILTER));

assert.same(false, filter_var("false", FILTER));
assert.same(false, filter_var("0", FILTER));
assert.same(false, filter_var("off", FILTER));
assert.same(false, filter_var("no", FILTER));
},

"it should return false or null on failure depending on FILTER_NULL_ON_FAILURE flag": function () {
var FILTER = "FILTER_VALIDATE_BOOLEAN";

// should return true, because "1" is treated as true
assert.same(true, filter_var("1", FILTER, "FILTER_NULL_ON_FAILURE"));

// these should fail the test, so null is expected
assert.same(null, filter_var("", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(null, filter_var("foo", FILTER, "FILTER_NULL_ON_FAILURE"));

// these will fail and return false, cause no FILTER_NULL_ON_FAILURE is set
assert.same(false, filter_var("", FILTER));
assert.same(false, filter_var("foo", FILTER));

// these should pass the boolean test, so no null expected
assert.same(false, filter_var("false", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(false, filter_var("0", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(false, filter_var("no", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(false, filter_var("off", FILTER, "FILTER_NULL_ON_FAILURE"));
},

"it should handle some non-string types": function () {
var FILTER = "FILTER_VALIDATE_BOOLEAN";

assert.same(true, filter_var(true, FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(false, filter_var(false, FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(true, filter_var(1, FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(false, filter_var(0, FILTER, "FILTER_NULL_ON_FAILURE"));
},

"it should ignore leading and trailing white-space characters": function () {
var FILTER = "FILTER_VALIDATE_BOOLEAN", FLAGS = "FILTER_NULL_ON_FAILURE";

assert.same(true, filter_var(" true", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(false, filter_var(" false", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(true, filter_var("\ttrue", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(true, filter_var("\ntrue", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(true, filter_var("true ", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(true, filter_var("true\t", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(true, filter_var("true\n", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(true, filter_var(" \t\r\ntrue\r\n\t ", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(false, filter_var(" \t\r\nfalse\r\n\t ", FILTER, "FILTER_NULL_ON_FAILURE"));
assert.same(null, filter_var("tr ue", FILTER, "FILTER_NULL_ON_FAILURE"));
// assuming the same works for on|off|yes|no
},

"it should be case insensitive": function () {
assert.same(true, filter_var("TrUe", "FILTER_VALIDATE_BOOLEAN"));
assert.same(false, filter_var("fAlSe", "FILTER_VALIDATE_BOOLEAN"));
},

"it should respond with null to strange data types": function () {
var FILTER = "FILTER_VALIDATE_BOOLEAN", FLAGS = "FILTER_NULL_ON_FAILURE";

assert.same(null, filter_var(null, FILTER, FLAGS));
assert.same(null, filter_var(undefined, FILTER, FLAGS));
assert.same(null, filter_var([], FILTER, FLAGS));
assert.same(null, filter_var([0], FILTER, FLAGS));
assert.same(null, filter_var([1], FILTER, FLAGS));
assert.same(null, filter_var([false], FILTER, FLAGS));
assert.same(null, filter_var([true], FILTER, FLAGS));
assert.same(null, filter_var(["on"], FILTER, FLAGS));
assert.same(null, filter_var({}, FILTER, FLAGS));
},

"it should accept numeric values for filter argument": function () {
assert.same(true, filter_var("1", 258));
assert.same(false, filter_var("0", 258));
assert.same(null, filter_var("foo", 258, "FILTER_NULL_ON_FAILURE"));
}
});

buster.testCase("FILTER_VALIDATE_INT", {
"it should recognize numeric strings": function () {
var FILTER = "FILTER_VALIDATE_INT";

assert.same(0, filter_var("0", FILTER));
assert.same(1, filter_var("1", FILTER));
assert.same(1, filter_var("+1", FILTER));
assert.same(-1, filter_var("-1", FILTER));
assert.same(12, filter_var("+12", FILTER));
},

"it shouldn't treat some numeric strings as ints": function () {
var FILTER = "FILTER_VALIDATE_INT";

assert.same(false, filter_var("+0", FILTER));
assert.same(false, filter_var("-0", FILTER));
assert.same(false, filter_var("01", FILTER));
assert.same(false, filter_var("2.5", FILTER));
},

"it should check if value is within a range": function () {
var FILTER = "FILTER_VALIDATE_INT";

assert.same(7, filter_var("7", FILTER, {options: {min_range: 0}}));
assert.same(7, filter_var("7", FILTER, {options: {min_range: 7}}));
assert.same(7, filter_var("7", FILTER, {options: {max_range: 7}}));
assert.same(false, filter_var("7", FILTER, {options: {min_range: 10}}));
assert.same(false, filter_var("7", FILTER, {options: {max_range: 6}}));
assert.same(7, filter_var("7", FILTER, {options: {min_range: 0, max_range: 10}}));
assert.same(7, filter_var("7", FILTER, {options: {min_range: 7, max_range: 7}}));
assert.same(false, filter_var("7", FILTER, {options: {min_range: 8, max_range: 6}}));
},

"it should allow to pass hex and octal strings": function () {
var FILTER = "FILTER_VALIDATE_INT";
assert.same(255, filter_var("0xff", FILTER, "FILTER_FLAG_ALLOW_HEX"));
assert.same(8, filter_var("010", FILTER, "FILTER_FLAG_ALLOW_OCTAL"));
},

"it should allow trailing white spaces": function () {
var FILTER = "FILTER_VALIDATE_INT";

assert.same(123, filter_var(" \t\r\n123 \t\r\n", FILTER));
}
});

buster.testCase("FILTER_VALIDATE_FLOAT", {

});

buster.testCase("FILTER_VALIDATE_REGEXP", {

});

buster.testCase("FILTER_VALIDATE_URL", {

});

buster.testCase("FILTER_VALIDATE_EMAIL", {

});

buster.testCase("FILTER_VALIDATE_IP", {
"it should recognize some values as valid IPv4": function () {
var FILTER = "FILTER_VALIDATE_IP";

assert.same("127.0.0.1", filter_var("127.0.0.1", FILTER));
assert.same("87.233.214.186", filter_var("87.233.214.186", FILTER));
},

"it should recognize some values as valid IPv6": function () {
var FILTER = "FILTER_VALIDATE_IP";

assert.same("::1", filter_var("::1", FILTER));
},

"it should allow up to 2 leading zeros": function () {
var FILTER = "FILTER_VALIDATE_IP";

assert.same("127.0.00.001", filter_var("127.0.00.001", FILTER));
assert.same(false, filter_var("127.00000000.0.1", FILTER));
},

"it shouldn't allow trailing white spaces": function () {
var FILTER = "FILTER_VALIDATE_IP";

assert.same(false, filter_var(" 127.0.0.1 ", FILTER));
assert.same(false, filter_var(" \t\r\n127.0.0.1\r\n\t ", FILTER));
}
});

buster.testCase("FILTER_SANITIZE_STRING", {

});

buster.testCase("FILTER_SANITIZE_STRIPPED", {

});

buster.testCase("FILTER_SANITIZE_ENCODED", {

});

buster.testCase("FILTER_SANITIZE_SPECIAL_CHARS", {

});

buster.testCase("FILTER_UNSAFE_RAW", {

});

buster.testCase("FILTER_SANITIZE_EMAIL", {
"it should remove invalid characters": function () {
var FILTER = "FILTER_SANITIZE_EMAIL";

assert.same(filter_var("<>\\,", FILTER), "");
assert.same(filter_var("ąęśćńźżół", FILTER), "");
},

"it shouldn't touch valid characters": function () {
var FILTER = "FILTER_SANITIZE_EMAIL";

assert.same("!#$%&'*+-/=?^_`{|}~@.[]", filter_var("!#$%&'*+-/=?^_`{|}~@.[]", FILTER));
assert.same("0123456789", filter_var("0123456789", FILTER));
assert.same("abcdefghijklmnopqrstuvwxyz", filter_var("abcdefghijklmnopqrstuvwxyz", FILTER));
assert.same("ABCDEFGHIJKLMNOPQRSTUVWXYZ", filter_var("ABCDEFGHIJKLMNOPQRSTUVWXYZ", FILTER));
}
});

buster.testCase("FILTER_SANITIZE_URL", {
"it shouldn't touch valid characters": function () {
var FILTER = "FILTER_SANITIZE_URL";

assert.same(filter_var("0123456789", FILTER), "0123456789");
assert.same("abcdefghijklmnopqrstuvwxyz", filter_var("abcdefghijklmnopqrstuvwxyz", FILTER));
assert.same("ABCDEFGHIJKLMNOPQRSTUVWXYZ", filter_var("ABCDEFGHIJKLMNOPQRSTUVWXYZ", FILTER));
assert.same(filter_var("$-_.+!*'(),{}|\\^~[]`<>#%\";/?:@&=", FILTER), "$-_.+!*'(),{}|\\^~[]`<>#%\";/?:@&=");
},

"it should remove invalid characters": function () {
var FILTER = "FILTER_SANITIZE_URL";

// TODO: extend
assert.same(filter_var("ąęśćńźżół", FILTER), "");
}
});

buster.testCase("FILTER_SANITIZE_NUMBER_INT", {
"it should accept digits, + and - characters": function () {
var FILTER = "FILTER_SANITIZE_NUMBER_INT";

assert.same(filter_var("0123456789+-", FILTER), "0123456789+-");
},

"it should remove invalid characters": function () {
var FILTER = "FILTER_SANITIZE_NUMBER_INT";

assert.same(filter_var(" +-123.456\r\n\t ", FILTER), "+-123456");
}
});

buster.testCase("FILTER_SANITIZE_NUMBER_FLOAT", {

});

buster.testCase("FILTER_SANITIZE_MAGIC_QUOTES", {

});

buster.testCase("FILTER_SANITIZE_FULL_SPECIAL_CHARS", {

});

buster.testCase("FILTER_CALLBACK", {
"it should accept a callback function": function () {
assert.same("bar", filter_var("foo", "FILTER_CALLBACK", {
options: function () {
return "bar";
}
}));
}
});

buster.testCase("General function behavior", {
"it should fall back to default when filter not given": function () {
assert.same(" foo ", filter_var(" foo "));

},

"it should fail (return false/null) when filter is unknown": function () {
assert.same(false, filter_var("foo", "UNKNOWN"));
}
});