diff --git a/phpunit.xml b/phpunit.xml
index 6430dc3..432a377 100644
--- a/phpunit.xml
+++ b/phpunit.xml
@@ -3,10 +3,13 @@
backupGlobals="false" backupStaticAttributes="false"
beStrictAboutChangesToGlobalState="true" beStrictAboutOutputDuringTests="true" beStrictAboutResourceUsageDuringSmallTests="true" beStrictAboutTodoAnnotatedTests="true" beStrictAboutCoversAnnotation="false"
bootstrap="tests/bootstrap.php"
+ cacheResultFile=".phpunit.cache/test-results"
cacheResult="false"
colors="true"
convertErrorsToExceptions="true" convertDeprecationsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true"
enforceTimeLimit="true"
+ executionOrder="depends,defects"
+ failOnRisky="true"
failOnWarning="true"
forceCoversAnnotation="false"
processIsolation="true"
@@ -19,4 +22,9 @@
tests/
+
+
+ src
+
+
diff --git a/src/MD_STD_IN.php b/src/MD_STD_IN.php
index 22d7efc..ef9bdc9 100644
--- a/src/MD_STD_IN.php
+++ b/src/MD_STD_IN.php
@@ -99,7 +99,8 @@ final class MD_STD_IN {
$output = \filter_var($input, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_STRIP_HIGH);
if ($output === false
- || (preg_match('/^[a-zA-Z0-9]{3}$/', $output) === false && preg_match('/^[a-zA-Z0-9]{6}$/', $output) === false)
+ || !in_array(strlen($output), [3, 6], true)
+ || (preg_match('/^[a-fA-F0-9]{3}$/', $output) === false && preg_match('/^[a-fA-F0-9]{6}$/', $output) === false)
) {
throw new MDInvalidColorCode("Invalid color code provided: " . $output);
}
@@ -243,8 +244,7 @@ final class MD_STD_IN {
return "";
}
- $output = \filter_var($input, FILTER_SANITIZE_EMAIL);
- if (($output = \filter_var($output, FILTER_VALIDATE_EMAIL)) === false) {
+ if (($output = \filter_var($input, FILTER_VALIDATE_EMAIL)) === false) {
throw new MDInvalidEmail("Invalid input email address");
}
@@ -321,7 +321,7 @@ final class MD_STD_IN {
*
* @return float
*/
- public static function validate_longitude(string|int $input):float {
+ public static function validate_longitude(string|int|float $input):float {
if (is_string($input)) $output = self::sanitize_float($input);
else $output = $input;
@@ -341,7 +341,7 @@ final class MD_STD_IN {
*
* @return float
*/
- public static function validate_latitude(string|int $input):float {
+ public static function validate_latitude(string|int|float $input):float {
if (is_string($input)) $output = self::sanitize_float($input);
else $output = $input;
diff --git a/tests/MD_STD_IN_Test.php b/tests/MD_STD_IN_Test.php
index dc3406c..9226d31 100644
--- a/tests/MD_STD_IN_Test.php
+++ b/tests/MD_STD_IN_Test.php
@@ -13,13 +13,193 @@ use PHPUnit\Framework\TestCase;
*/
final class MD_STD_IN_Test extends TestCase {
/**
- * Function for testing sanitize_url().
+ * Function for testing sanitize_id().
*
* @small
+ * @covers \MD_STD_IN::sanitize_id
*
* @return void
*/
- public function testSanitizeUrlWorksBasically():void {
+ public function test_sanitize_id():void {
+
+ self::assertEquals(1, MD_STD_IN::sanitize_id(1));
+ self::assertEquals(1, MD_STD_IN::sanitize_id("1"));
+
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id(0);
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id(100000000000000000000000000000);
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id("1a2");
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id("12a");
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id("a");
+
+ }
+
+ /**
+ * Function for testing sanitize_id_or_zero().
+ *
+ * @small
+ * @covers \MD_STD_IN::sanitize_id_or_zero
+ *
+ * @return void
+ */
+ public function test_sanitize_id_or_zero():void {
+
+ self::assertEquals(0, MD_STD_IN::sanitize_id_or_zero(""));
+ self::assertEquals(0, MD_STD_IN::sanitize_id_or_zero(0));
+ self::assertEquals(0, MD_STD_IN::sanitize_id_or_zero("0"));
+ self::assertEquals(1, MD_STD_IN::sanitize_id_or_zero(1));
+ self::assertEquals(1, MD_STD_IN::sanitize_id_or_zero("1"));
+
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id_or_zero(100000000000000000000000000000);
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id_or_zero("1a2");
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id_or_zero("12a");
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id_or_zero("a");
+
+ }
+
+ /**
+ * Function for testing sanitize_text().
+ *
+ * @small
+ * @covers \MD_STD_IN::sanitize_text
+ *
+ * @return void
+ */
+ public function test_sanitize_text():void {
+
+ self::assertEquals("", MD_STD_IN::sanitize_text(""));
+ self::assertEquals("a", MD_STD_IN::sanitize_text("a"));
+ self::assertEquals("a a", MD_STD_IN::sanitize_text("a a"));
+ self::assertEquals("a", MD_STD_IN::sanitize_text("a "));
+ self::assertEquals("", MD_STD_IN::sanitize_text([]));
+
+ }
+
+ /**
+ * Function for testing sanitize_rgb_color().
+ *
+ * @small
+ * @covers \MD_STD_IN::sanitize_rgb_color
+ *
+ * @return void
+ */
+ public function test_sanitize_rgb_color():void {
+
+ self::assertEquals("AAA", MD_STD_IN::sanitize_rgb_color("AAA"));
+ self::assertEquals("000", MD_STD_IN::sanitize_rgb_color("000"));
+
+ self::expectException(MDInvalidColorCode::class);
+ MD_STD_IN::sanitize_rgb_color("ZZZaa2343422342342323");
+
+ self::expectException(MDInvalidColorCode::class);
+ MD_STD_IN::sanitize_rgb_color("ZZZaa");
+
+ self::expectException(MDInvalidColorCode::class);
+ MD_STD_IN::sanitize_rgb_color("ZZZ");
+
+ }
+
+ /**
+ * Function for testing sanitize_id_array().
+ *
+ * @small
+ * @covers \MD_STD_IN::sanitize_id_array
+ *
+ * @return void
+ */
+ public function test_sanitize_id_array():void {
+
+ self::assertEquals([1], MD_STD_IN::sanitize_id_array([1]));
+ self::assertEquals([1, 2], MD_STD_IN::sanitize_id_array(["1", 2]));
+
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id_array([0]);
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id_array([0, 1]);
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id_array([100000000000000000000000000000]);
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id_array(["1a2"]);
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id_array(["12a"]);
+ self::expectException(MDpageParameterNotNumericException::class);
+ MD_STD_IN::sanitize_id_array(["a"]);
+
+ }
+
+ /**
+ * Function for testing get_http_input_text().
+ *
+ * @small
+ * @covers \MD_STD_IN::get_http_input_text
+ *
+ * @return void
+ */
+ public function test_get_http_input_text():void {
+
+ $_GET['test'] = "a";
+ self::assertEquals("a", MD_STD_IN::get_http_input_text("test"));
+ unset($_GET['test']);
+
+ $_POST['test'] = "a";
+ self::assertEquals("a", MD_STD_IN::get_http_input_text("test"));
+ unset($_POST['test']);
+
+ $_POST['test'] = [];
+ self::assertEquals("", MD_STD_IN::get_http_input_text("test"));
+ unset($_POST['test']);
+
+ self::assertEquals("", MD_STD_IN::get_http_input_text("test"));
+
+ self::expectException(MDpageParameterNotFromListException::class);
+ MD_STD_IN::get_http_input_text("a", "", ['a']);
+
+
+ }
+
+ /**
+ * Function for testing get_http_post_text().
+ *
+ * @small
+ * @covers \MD_STD_IN::get_http_post_text
+ *
+ * @return void
+ */
+ public function test_get_http_post_text():void {
+
+ $_POST['test'] = "a";
+ self::assertEquals("a", MD_STD_IN::get_http_post_text("test"));
+ unset($_POST['test']);
+
+ $_POST['test'] = [];
+ self::assertEquals("", MD_STD_IN::get_http_post_text("test"));
+ unset($_POST['test']);
+
+ self::assertEquals("", MD_STD_IN::get_http_post_text("test"));
+
+ self::expectException(MDpageParameterNotFromListException::class);
+ MD_STD_IN::get_http_post_text("a", "", ['a']);
+
+
+ }
+
+ /**
+ * Function for testing sanitize_url().
+ *
+ * @small
+ * @covers \MD_STD_IN::sanitize_url
+ *
+ * @return void
+ */
+ public function test_sanitize_url():void {
// Ensure empty inputs return empty output
self::assertEquals("", MD_STD_IN::sanitize_url(""));
@@ -36,4 +216,181 @@ final class MD_STD_IN_Test extends TestCase {
MD_STD_IN::sanitize_url("h ttps://www.museum-digital.org");
}
+
+ /**
+ * Function for testing sanitize_email().
+ *
+ * @small
+ * @covers \MD_STD_IN::sanitize_email
+ *
+ * @return void
+ */
+ public function test_sanitize_email():void {
+
+ self::assertEquals("", MD_STD_IN::sanitize_email(""));
+ self::assertEquals("test@example.org", MD_STD_IN::sanitize_email("test@example.org"));
+
+ self::expectException(MDInvalidEmail::class);
+ MD_STD_IN::sanitize_email("test");
+
+ }
+
+ /**
+ * Function for testing validate_password().
+ *
+ * @small
+ * @covers \MD_STD_IN::validate_password
+ *
+ * @return void
+ */
+ public function test_validate_password():void {
+
+ self::assertEquals(['password_too_short', 'password_has_no_number_no_special_char'], MD_STD_IN::validate_password("a"));
+ self::assertEquals(['password_has_no_number_no_special_char'], MD_STD_IN::validate_password("aaaaaaaaaaaaaaaaaaaa"));
+ self::assertEquals(['password_too_short'], MD_STD_IN::validate_password("!a323!"));
+ self::assertEquals([], MD_STD_IN::validate_password("!a324324324123!"));
+
+ }
+
+ /**
+ * Function for testing validate_phone_number().
+ *
+ * @small
+ * @covers \MD_STD_IN::validate_phone_number
+ *
+ * @return void
+ */
+ public function test_validate_phone_number():void {
+
+ self::assertEquals("", MD_STD_IN::validate_phone_number(""));
+ self::assertEquals("+1932-1321123", MD_STD_IN::validate_phone_number("+1932-1321123"));
+ self::assertEquals("+49 (030) 21321123", MD_STD_IN::validate_phone_number("+49 (030) 21321123"));
+
+ self::expectException(MDgenericInvalidInputsException::class);
+ MD_STD_IN::validate_phone_number("test@example.org");
+
+ self::expectException(MDgenericInvalidInputsException::class);
+ MD_STD_IN::validate_phone_number("+123456789 z");
+
+ }
+
+ /**
+ * Function for testing sanitize_float().
+ *
+ * @small
+ * @covers \MD_STD_IN::sanitize_float
+ *
+ * @return void
+ */
+ public function test_sanitize_float():void {
+
+ self::assertEquals(0, MD_STD_IN::sanitize_float("0"));
+ self::assertEquals(12, MD_STD_IN::sanitize_float("12"));
+ self::assertEquals(12.12, MD_STD_IN::sanitize_float("12.12"));
+ self::assertEquals(12.12, MD_STD_IN::sanitize_float("12,12"));
+
+ self::expectException(MDgenericInvalidInputsException::class);
+ MD_STD_IN::sanitize_float("test");
+ self::expectException(MDgenericInvalidInputsException::class);
+ MD_STD_IN::sanitize_float("");
+
+ }
+
+ /**
+ * Function for testing validate_longitude().
+ *
+ * @small
+ * @covers \MD_STD_IN::validate_longitude
+ *
+ * @return void
+ */
+ public function test_validate_longitude():void {
+
+ self::assertEquals(0, MD_STD_IN::validate_longitude("0"));
+ self::assertEquals(12, MD_STD_IN::validate_longitude("12"));
+ self::assertEquals(12, MD_STD_IN::validate_longitude(12));
+ self::assertEquals(12.12, MD_STD_IN::validate_longitude("12.12"));
+ self::assertEquals(12.12, MD_STD_IN::validate_longitude("12,12"));
+ self::assertEquals(12.12, MD_STD_IN::validate_longitude(12.12));
+
+ self::expectException(MDgenericInvalidInputsException::class);
+ MD_STD_IN::validate_longitude("test");
+ self::expectException(MDgenericInvalidInputsException::class);
+ MD_STD_IN::validate_longitude("");
+ self::expectException(MDCoordinateOutOfRange::class);
+ MD_STD_IN::validate_longitude(1900);
+ self::expectException(MDCoordinateOutOfRange::class);
+ MD_STD_IN::validate_longitude(-1900);
+
+ }
+
+ /**
+ * Function for testing validate_latitude().
+ *
+ * @small
+ * @covers \MD_STD_IN::validate_latitude
+ *
+ * @return void
+ */
+ public function test_validate_latitude():void {
+
+ self::assertEquals(0, MD_STD_IN::validate_latitude("0"));
+ self::assertEquals(12, MD_STD_IN::validate_latitude("12"));
+ self::assertEquals(12, MD_STD_IN::validate_latitude(12));
+ self::assertEquals(12.12, MD_STD_IN::validate_latitude("12.12"));
+ self::assertEquals(12.12, MD_STD_IN::validate_latitude("12,12"));
+ self::assertEquals(12.12, MD_STD_IN::validate_latitude(12.12));
+
+ self::expectException(MDgenericInvalidInputsException::class);
+ MD_STD_IN::validate_latitude("test");
+ self::expectException(MDgenericInvalidInputsException::class);
+ MD_STD_IN::validate_latitude("");
+ self::expectException(MDCoordinateOutOfRange::class);
+ MD_STD_IN::validate_latitude(1900);
+ self::expectException(MDCoordinateOutOfRange::class);
+ MD_STD_IN::validate_latitude(-1900);
+
+ }
+
+ /**
+ * Function for testing validate_isbn().
+ *
+ * @small
+ * @covers \MD_STD_IN::validate_isbn
+ *
+ * @return void
+ */
+ public function test_validate_isbn():void {
+
+ self::assertEquals("", MD_STD_IN::validate_isbn(""));
+ self::assertEquals("0943396042", MD_STD_IN::validate_isbn("0943396042"));
+ self::assertEquals("0943396042", MD_STD_IN::validate_isbn("0-943396-04-2"));
+ self::assertEquals("094339604X", MD_STD_IN::validate_isbn("0-943396-04-X"));
+
+ self::assertEquals("1230943396042", MD_STD_IN::validate_isbn("1230943396042"));
+ self::assertEquals("1230943396042", MD_STD_IN::validate_isbn("1230-943396-04-2"));
+
+ self::expectException(MDgenericInvalidInputsException::class);
+ MD_STD_IN::validate_isbn("X094339604");
+
+ self::expectException(MDgenericInvalidInputsException::class);
+ MD_STD_IN::validate_isbn("094339604a");
+
+ }
+
+ /**
+ * Function for testing ensureStringIsUtf8().
+ *
+ * @small
+ * @covers \MD_STD_IN::ensureStringIsUtf8
+ *
+ * @return void
+ */
+ public function test_ensureStringIsUtf8():void {
+
+ self::assertEquals("ä", MD_STD_IN::ensureStringIsUtf8("ä"));
+ self::assertEquals("ä", MD_STD_IN::ensureStringIsUtf8(iconv("UTF-8", 'ISO-8859-1//TRANSLIT', "ä")));
+ self::assertEquals("a", MD_STD_IN::ensureStringIsUtf8(iconv("UTF-8", 'ISO-2022-JP//TRANSLIT', "ä")));
+
+ }
}
diff --git a/tests/bootstrap.php b/tests/bootstrap.php
index 3da3df3..b38df7d 100644
--- a/tests/bootstrap.php
+++ b/tests/bootstrap.php
@@ -12,7 +12,7 @@ declare(strict_types = 1);
// Try using class map as defined through /scripts/buildClassMap.php
- foreach (array_merge([__DIR__ . '/../tests', __DIR__ . '/../src', __DIR__ . '/../../MDErrorReporter', __DIR__ . '/../../MDErrorReporter/exceptions', __DIR__ . '/../../MDErrorReporter/exceptions/generic', __DIR__ . '/../../MDErrorReporter/exceptions/updates']) as $classDir) {
+ foreach (array_merge([__DIR__ . '/../tests', __DIR__ . '/../src', __DIR__ . '/../../MDErrorReporter', __DIR__ . '/../../MDErrorReporter/exceptions', __DIR__ . '/../../MDErrorReporter/exceptions/generic', __DIR__ . '/../../MDErrorReporter/exceptions/updates', __DIR__ . '/../../MDErrorReporter/exceptions/page']) as $classDir) {
if (\file_exists("$classDir/$className.php")) {
include "$classDir/$className.php";