]> granicus.if.org Git - php/commitdiff
- new tests for ctype functions
authorJosie Messa <jmessa@php.net>
Mon, 17 Mar 2008 09:54:36 +0000 (09:54 +0000)
committerJosie Messa <jmessa@php.net>
Mon, 17 Mar 2008 09:54:36 +0000 (09:54 +0000)
66 files changed:
ext/ctype/tests/ctype_alnum_basic.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_alnum_error.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_alnum_variation1.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_alnum_variation2.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_alnum_variation3.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_alnum_variation4.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_alpha_basic.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_alpha_error.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_alpha_variation1.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_alpha_variation2.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_alpha_variation3.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_alpha_variation4.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_cntrl_basic.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_cntrl_error.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_cntrl_variation1.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_cntrl_variation2.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_cntrl_variation3.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_cntrl_variation4.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_digit_basic.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_digit_error.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_digit_variation1.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_digit_variation2.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_digit_variation3.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_digit_variation4.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_graph_basic.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_graph_error.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_graph_variation1.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_graph_variation2.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_graph_variation3.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_graph_variation4.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_lower_basic.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_lower_error.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_lower_variation1.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_lower_variation2.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_lower_variation3.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_lower_variation4.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_print_basic.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_print_error.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_print_variation1.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_print_variation2.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_print_variation3.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_print_variation4.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_punct_basic.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_punct_error.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_punct_variation1.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_punct_variation2.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_punct_variation3.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_punct_variation4.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_space_basic.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_space_error.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_space_variation1.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_space_variation2.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_space_variation3.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_space_variation4.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_upper_basic.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_upper_error.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_upper_variation1.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_upper_variation2.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_upper_variation3.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_upper_variation4.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_xdigit_basic.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_xdigit_error.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_xdigit_variation1.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_xdigit_variation2.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_xdigit_variation3.phpt [new file with mode: 0644]
ext/ctype/tests/ctype_xdigit_variation4.phpt [new file with mode: 0644]

diff --git a/ext/ctype/tests/ctype_alnum_basic.phpt b/ext/ctype/tests/ctype_alnum_basic.phpt
new file mode 100644 (file)
index 0000000..739b65e
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+Test ctype_alnum() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_alnum(mixed $c)
+ * Description: Checks for alphanumeric character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_alnum() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+$c1 = 'abcXYZ';
+$c2 = ' \t*@';
+
+var_dump(ctype_alnum($c1));
+var_dump(ctype_alnum($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alnum() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_alnum_error.phpt b/ext/ctype/tests/ctype_alnum_error.phpt
new file mode 100644 (file)
index 0000000..2c552a0
--- /dev/null
@@ -0,0 +1,49 @@
+--TEST--
+Test ctype_alnum() function : error conditions - Incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_alnum(mixed $c)
+ * Description: Checks for alphanumeric character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass incorrect number of arguments to ctype_alnum() to test behaviour
+ */
+
+echo "*** Testing ctype_alnum() : error conditions ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+// Zero arguments
+echo "\n-- Testing ctype_alnum() function with Zero arguments --\n";
+var_dump( ctype_alnum() );
+
+//Test ctype_alnum with one more than the expected number of arguments
+echo "\n-- Testing ctype_alnum() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_alnum($c, $extra_arg) );
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alnum() : error conditions ***
+
+-- Testing ctype_alnum() function with Zero arguments --
+
+Warning: ctype_alnum() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_alnum() function with more than expected no. of arguments --
+
+Warning: ctype_alnum() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/ctype/tests/ctype_alnum_variation1.phpt b/ext/ctype/tests/ctype_alnum_variation1.phpt
new file mode 100644 (file)
index 0000000..2dc4531
--- /dev/null
@@ -0,0 +1,183 @@
+--TEST--
+Test ctype_alnum() function : usage variations - Different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_alnum(mixed $c)
+ * Description: Checks for alphanumeric character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_alnum() to test behaviour
+ */
+
+echo "*** Testing ctype_alnum() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "xyz";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+123
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+       array(),
+
+       // string data
+/*19*/ "pqr",
+       'LMN',
+       $heredoc,
+       
+       // object data
+/*22*/ new classA(),
+
+       // undefined data
+/*23*/ @$undefined_var,
+
+       // unset data
+/*24*/ @$unset_var,
+
+       // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_alnum()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( ctype_alnum($input) );
+  $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alnum() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_alnum_variation2.phpt b/ext/ctype/tests/ctype_alnum_variation2.phpt
new file mode 100644 (file)
index 0000000..e0a95c0
--- /dev/null
@@ -0,0 +1,163 @@
+--TEST--
+Test ctype_alnum() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_alnum(mixed $c)
+ * Description: Checks for alphanumeric character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_alnum() to test which character codes are considered
+ * valid alphanumeric characters
+ */
+
+echo "*** Testing ctype_alnum() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+for ($i = 0; $i < 256; $i++) {
+       if (ctype_alnum($i)) {
+               echo "character code $i is alpha numeric\n";
+       }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alnum() : usage variations ***
+character code 48 is alpha numeric
+character code 49 is alpha numeric
+character code 50 is alpha numeric
+character code 51 is alpha numeric
+character code 52 is alpha numeric
+character code 53 is alpha numeric
+character code 54 is alpha numeric
+character code 55 is alpha numeric
+character code 56 is alpha numeric
+character code 57 is alpha numeric
+character code 65 is alpha numeric
+character code 66 is alpha numeric
+character code 67 is alpha numeric
+character code 68 is alpha numeric
+character code 69 is alpha numeric
+character code 70 is alpha numeric
+character code 71 is alpha numeric
+character code 72 is alpha numeric
+character code 73 is alpha numeric
+character code 74 is alpha numeric
+character code 75 is alpha numeric
+character code 76 is alpha numeric
+character code 77 is alpha numeric
+character code 78 is alpha numeric
+character code 79 is alpha numeric
+character code 80 is alpha numeric
+character code 81 is alpha numeric
+character code 82 is alpha numeric
+character code 83 is alpha numeric
+character code 84 is alpha numeric
+character code 85 is alpha numeric
+character code 86 is alpha numeric
+character code 87 is alpha numeric
+character code 88 is alpha numeric
+character code 89 is alpha numeric
+character code 90 is alpha numeric
+character code 97 is alpha numeric
+character code 98 is alpha numeric
+character code 99 is alpha numeric
+character code 100 is alpha numeric
+character code 101 is alpha numeric
+character code 102 is alpha numeric
+character code 103 is alpha numeric
+character code 104 is alpha numeric
+character code 105 is alpha numeric
+character code 106 is alpha numeric
+character code 107 is alpha numeric
+character code 108 is alpha numeric
+character code 109 is alpha numeric
+character code 110 is alpha numeric
+character code 111 is alpha numeric
+character code 112 is alpha numeric
+character code 113 is alpha numeric
+character code 114 is alpha numeric
+character code 115 is alpha numeric
+character code 116 is alpha numeric
+character code 117 is alpha numeric
+character code 118 is alpha numeric
+character code 119 is alpha numeric
+character code 120 is alpha numeric
+character code 121 is alpha numeric
+character code 122 is alpha numeric
+character code 170 is alpha numeric
+character code 181 is alpha numeric
+character code 186 is alpha numeric
+character code 192 is alpha numeric
+character code 193 is alpha numeric
+character code 194 is alpha numeric
+character code 195 is alpha numeric
+character code 196 is alpha numeric
+character code 197 is alpha numeric
+character code 198 is alpha numeric
+character code 199 is alpha numeric
+character code 200 is alpha numeric
+character code 201 is alpha numeric
+character code 202 is alpha numeric
+character code 203 is alpha numeric
+character code 204 is alpha numeric
+character code 205 is alpha numeric
+character code 206 is alpha numeric
+character code 207 is alpha numeric
+character code 208 is alpha numeric
+character code 209 is alpha numeric
+character code 210 is alpha numeric
+character code 211 is alpha numeric
+character code 212 is alpha numeric
+character code 213 is alpha numeric
+character code 214 is alpha numeric
+character code 216 is alpha numeric
+character code 217 is alpha numeric
+character code 218 is alpha numeric
+character code 219 is alpha numeric
+character code 220 is alpha numeric
+character code 221 is alpha numeric
+character code 222 is alpha numeric
+character code 223 is alpha numeric
+character code 224 is alpha numeric
+character code 225 is alpha numeric
+character code 226 is alpha numeric
+character code 227 is alpha numeric
+character code 228 is alpha numeric
+character code 229 is alpha numeric
+character code 230 is alpha numeric
+character code 231 is alpha numeric
+character code 232 is alpha numeric
+character code 233 is alpha numeric
+character code 234 is alpha numeric
+character code 235 is alpha numeric
+character code 236 is alpha numeric
+character code 237 is alpha numeric
+character code 238 is alpha numeric
+character code 239 is alpha numeric
+character code 240 is alpha numeric
+character code 241 is alpha numeric
+character code 242 is alpha numeric
+character code 243 is alpha numeric
+character code 244 is alpha numeric
+character code 245 is alpha numeric
+character code 246 is alpha numeric
+character code 248 is alpha numeric
+character code 249 is alpha numeric
+character code 250 is alpha numeric
+character code 251 is alpha numeric
+character code 252 is alpha numeric
+character code 253 is alpha numeric
+character code 254 is alpha numeric
+character code 255 is alpha numeric
+===DONE===
diff --git a/ext/ctype/tests/ctype_alnum_variation3.phpt b/ext/ctype/tests/ctype_alnum_variation3.phpt
new file mode 100644 (file)
index 0000000..57d82a1
--- /dev/null
@@ -0,0 +1,133 @@
+--TEST--
+Test ctype_alnum() function : usage variations - different string values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_alnum(mixed $c)
+ * Description: Checks for alphanumeric character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different strings to ctype_alnum to test behaviour
+ */
+
+echo "*** Testing ctype_alnum() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+$values = array(
+/*1*/  "This string contains just letters and spaces", // Simple string
+       "but this one contains some numbers too 123+456 = 678", // Mixed string
+       "",
+       " ",
+/*5*/  "a",
+       "ABCXYZ",
+       "abcxyz",
+       "ABCXYZ123DEF456",
+       "abczyz123DEF456",
+/*10*/ "\r\n",
+       "123",
+       "03F", // hexadecimal 'digits'
+       ")speci@! ch@r$(",
+       '@!$*',
+/*15*/ 'ABC',
+       'abc',
+       'ABC123',
+       'abc123',
+       'abc123\n',
+/*20*/ 'abc 123',
+       '',
+       ' ', 
+/*23*/ base64_decode("w4DDoMOHw6fDiMOo") // non-ascii characters
+);
+
+
+// loop through each element of $values to test behaviour of ctype_alnum()
+$iterator = 1;
+foreach($values as $value) {
+      echo "\n-- Iteration $iterator --\n";
+      var_dump( ctype_alnum($value) );
+      $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alnum() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(true)
+
+-- Iteration 7 --
+bool(true)
+
+-- Iteration 8 --
+bool(true)
+
+-- Iteration 9 --
+bool(true)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(true)
+
+-- Iteration 12 --
+bool(true)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(true)
+
+-- Iteration 18 --
+bool(true)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_alnum_variation4.phpt b/ext/ctype/tests/ctype_alnum_variation4.phpt
new file mode 100644 (file)
index 0000000..e40eae3
--- /dev/null
@@ -0,0 +1,68 @@
+--TEST--
+Test ctype_alnum() function : usage variations  - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_alnum(mixed $c)
+ * Description: Checks for alphanumeric character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values to ctype_alnum() to test behaviour
+ */
+
+echo "*** Testing ctype_alnum() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+$octal_values = array (060, 061, 062, 063);
+$hex_values = array(0x30, 0x31, 0x32, 0x33);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_alnum($c));
+       $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_alnum($c));
+       $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alnum() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
diff --git a/ext/ctype/tests/ctype_alpha_basic.phpt b/ext/ctype/tests/ctype_alpha_basic.phpt
new file mode 100644 (file)
index 0000000..fbeaae8
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+Test ctype_alpha() function : basic functionality 
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_alpha(mixed $c)
+ * Description: Checks for alphabetic character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_alpha() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = 'abcXYZ';
+$c2 = "Hello, World!";
+
+var_dump(ctype_alpha($c1));
+var_dump(ctype_alpha($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alpha() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_alpha_error.phpt b/ext/ctype/tests/ctype_alpha_error.phpt
new file mode 100644 (file)
index 0000000..fbef01c
--- /dev/null
@@ -0,0 +1,45 @@
+--TEST--
+Test ctype_alpha() function : error conditions - Incorrect number of arguments
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_alpha(mixed $c)
+ * Description: Checks for alphabetic character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to ctype_alpha() to test behaviour
+ */
+
+echo "*** Testing ctype_alpha() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_alpha() function with Zero arguments --\n";
+var_dump( ctype_alpha() );
+
+//Test ctype_alpha with one more than the expected number of arguments
+echo "\n-- Testing ctype_alpha() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_alpha($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alpha() : error conditions ***
+
+-- Testing ctype_alpha() function with Zero arguments --
+
+Warning: ctype_alpha() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_alpha() function with more than expected no. of arguments --
+
+Warning: ctype_alpha() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/ctype/tests/ctype_alpha_variation1.phpt b/ext/ctype/tests/ctype_alpha_variation1.phpt
new file mode 100644 (file)
index 0000000..9bc157d
--- /dev/null
@@ -0,0 +1,183 @@
+--TEST--
+Test ctype_alpha() function : usage variations - different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_alpha(mixed $c)
+ * Description: Checks for alphabetic character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_alpha() to test behaviour
+ */
+
+echo "*** Testing ctype_alpha() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+       public function __toString() {
+               return "abcdef";
+       }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+XYZ
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+       array(),
+
+       // string data
+/*19*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*22*/ new classA(),
+
+       // undefined data
+/*23*/ @$undefined_var,
+
+       // unset data
+/*24*/ @$unset_var,
+
+       // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_alpha()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( ctype_alpha($input) );
+  $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alpha() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_alpha_variation2.phpt b/ext/ctype/tests/ctype_alpha_variation2.phpt
new file mode 100644 (file)
index 0000000..785f33c
--- /dev/null
@@ -0,0 +1,153 @@
+--TEST--
+Test ctype_alpha() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_alpha(mixed $c)
+ * Description: Checks for alphabetic character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_alpha() to test which character codes are considered
+ * valid alphabetic characters
+ */
+
+echo "*** Testing ctype_alpha() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+       if (ctype_alpha($i)) {
+               echo "character code $i is alphabetic\n";
+       }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alpha() : usage variations ***
+character code 65 is alphabetic
+character code 66 is alphabetic
+character code 67 is alphabetic
+character code 68 is alphabetic
+character code 69 is alphabetic
+character code 70 is alphabetic
+character code 71 is alphabetic
+character code 72 is alphabetic
+character code 73 is alphabetic
+character code 74 is alphabetic
+character code 75 is alphabetic
+character code 76 is alphabetic
+character code 77 is alphabetic
+character code 78 is alphabetic
+character code 79 is alphabetic
+character code 80 is alphabetic
+character code 81 is alphabetic
+character code 82 is alphabetic
+character code 83 is alphabetic
+character code 84 is alphabetic
+character code 85 is alphabetic
+character code 86 is alphabetic
+character code 87 is alphabetic
+character code 88 is alphabetic
+character code 89 is alphabetic
+character code 90 is alphabetic
+character code 97 is alphabetic
+character code 98 is alphabetic
+character code 99 is alphabetic
+character code 100 is alphabetic
+character code 101 is alphabetic
+character code 102 is alphabetic
+character code 103 is alphabetic
+character code 104 is alphabetic
+character code 105 is alphabetic
+character code 106 is alphabetic
+character code 107 is alphabetic
+character code 108 is alphabetic
+character code 109 is alphabetic
+character code 110 is alphabetic
+character code 111 is alphabetic
+character code 112 is alphabetic
+character code 113 is alphabetic
+character code 114 is alphabetic
+character code 115 is alphabetic
+character code 116 is alphabetic
+character code 117 is alphabetic
+character code 118 is alphabetic
+character code 119 is alphabetic
+character code 120 is alphabetic
+character code 121 is alphabetic
+character code 122 is alphabetic
+character code 170 is alphabetic
+character code 181 is alphabetic
+character code 186 is alphabetic
+character code 192 is alphabetic
+character code 193 is alphabetic
+character code 194 is alphabetic
+character code 195 is alphabetic
+character code 196 is alphabetic
+character code 197 is alphabetic
+character code 198 is alphabetic
+character code 199 is alphabetic
+character code 200 is alphabetic
+character code 201 is alphabetic
+character code 202 is alphabetic
+character code 203 is alphabetic
+character code 204 is alphabetic
+character code 205 is alphabetic
+character code 206 is alphabetic
+character code 207 is alphabetic
+character code 208 is alphabetic
+character code 209 is alphabetic
+character code 210 is alphabetic
+character code 211 is alphabetic
+character code 212 is alphabetic
+character code 213 is alphabetic
+character code 214 is alphabetic
+character code 216 is alphabetic
+character code 217 is alphabetic
+character code 218 is alphabetic
+character code 219 is alphabetic
+character code 220 is alphabetic
+character code 221 is alphabetic
+character code 222 is alphabetic
+character code 223 is alphabetic
+character code 224 is alphabetic
+character code 225 is alphabetic
+character code 226 is alphabetic
+character code 227 is alphabetic
+character code 228 is alphabetic
+character code 229 is alphabetic
+character code 230 is alphabetic
+character code 231 is alphabetic
+character code 232 is alphabetic
+character code 233 is alphabetic
+character code 234 is alphabetic
+character code 235 is alphabetic
+character code 236 is alphabetic
+character code 237 is alphabetic
+character code 238 is alphabetic
+character code 239 is alphabetic
+character code 240 is alphabetic
+character code 241 is alphabetic
+character code 242 is alphabetic
+character code 243 is alphabetic
+character code 244 is alphabetic
+character code 245 is alphabetic
+character code 246 is alphabetic
+character code 248 is alphabetic
+character code 249 is alphabetic
+character code 250 is alphabetic
+character code 251 is alphabetic
+character code 252 is alphabetic
+character code 253 is alphabetic
+character code 254 is alphabetic
+character code 255 is alphabetic
+===DONE===
diff --git a/ext/ctype/tests/ctype_alpha_variation3.phpt b/ext/ctype/tests/ctype_alpha_variation3.phpt
new file mode 100644 (file)
index 0000000..842ab20
--- /dev/null
@@ -0,0 +1,134 @@
+--TEST--
+Test ctype_alpha() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_alpha(mixed $c)
+ * Description: Checks for alphabetic character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_alpha() to test
+ * which are considered valid alphabetic character only strings
+ */
+
+echo "*** Testing ctype_alpha() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/  "This string contains just letters and spaces", // Simple string
+       "but this one contains some numbers too 123+456 = 678", // Mixed string
+       "",
+       " ",
+/*5*/  "a",
+       "ABCXYZ",
+       "abcxyz",
+       "ABCXYZ123DEF456",
+       "abczyz123DEF456",
+/*10*/ "\r\n",
+       "123",
+       "03F", // hexadecimal 'digits'
+       ")speci@! ch@r$(",
+       '@!$*',
+/*15*/ 'ABC',
+       'abc',
+       'ABC123',
+       'abc123',
+       'abc123\n',
+/*20*/ 'abc 123',
+       '',
+       ' ', 
+/*23*/ base64_decode("w4DDoMOHw6fDiMOo") // non-ascii characters
+);
+
+
+// loop through each element of $values to test behaviour of ctype_alnum()
+$iterator = 1;
+foreach($values as $value) {
+      echo "\n-- Iteration $iterator --\n";
+      var_dump( ctype_alpha($value) );
+      $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alpha() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(true)
+
+-- Iteration 7 --
+bool(true)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_alpha_variation4.phpt b/ext/ctype/tests/ctype_alpha_variation4.phpt
new file mode 100644 (file)
index 0000000..f4348df
--- /dev/null
@@ -0,0 +1,68 @@
+--TEST--
+Test ctype_alpha() function : usage variations - Octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_alpha(mixed $c)
+ * Description: Checks for alphabetic character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values to ctype_alpha() to test behaviour
+ */
+
+echo "*** Testing ctype_alpha() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array (0101, 0102, 0103, 0104);
+$hex_values = array   (0x41, 0x42, 0x43, 0x44);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_alpha($c));
+       $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_alpha($c));
+       $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_alpha() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
diff --git a/ext/ctype/tests/ctype_cntrl_basic.phpt b/ext/ctype/tests/ctype_cntrl_basic.phpt
new file mode 100644 (file)
index 0000000..34aa977
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+Test ctype_cntrl() function : basic functionality 
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_cntrl(mixed $c)
+ * Description: Checks for control character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_cntrl() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = "\r\n\t";
+$c2 = "Hello, World!\n";
+
+var_dump(ctype_cntrl($c1));
+var_dump(ctype_cntrl($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_cntrl() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_cntrl_error.phpt b/ext/ctype/tests/ctype_cntrl_error.phpt
new file mode 100644 (file)
index 0000000..e4a8822
--- /dev/null
@@ -0,0 +1,45 @@
+--TEST--
+Test ctype_cntrl() function : error conditions - Incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_cntrl(mixed $c)
+ * Description: Checks for control character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to ctype_cntrl() to test behaviour
+ */
+
+echo "*** Testing ctype_cntrl() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_cntrl() function with Zero arguments --\n";
+var_dump( ctype_cntrl() );
+
+//Test ctype_cntrl with one more than the expected number of arguments
+echo "\n-- Testing ctype_cntrl() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_cntrl($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_cntrl() : error conditions ***
+
+-- Testing ctype_cntrl() function with Zero arguments --
+
+Warning: ctype_cntrl() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_cntrl() function with more than expected no. of arguments --
+
+Warning: ctype_cntrl() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/ctype/tests/ctype_cntrl_variation1.phpt b/ext/ctype/tests/ctype_cntrl_variation1.phpt
new file mode 100644 (file)
index 0000000..a708abd
--- /dev/null
@@ -0,0 +1,184 @@
+--TEST--
+Test ctype_cntrl() function : usage variations - Different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_cntrl(mixed $c)
+ * Description: Checks for control character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_cntrl() to test behaviour
+ */
+
+echo "*** Testing ctype_cntrl() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "\n\r\t";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+\t\r\n
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+       array(),
+
+       // string data
+/*19*/ "\t\r\n",
+       '
+',
+       $heredoc,
+       
+       // object data
+/*22*/ new classA(),
+
+       // undefined data
+/*23*/ @$undefined_var,
+
+       // unset data
+/*24*/ @$unset_var,
+
+       // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_cntrl()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( ctype_cntrl($input) );
+  $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_cntrl() : usage variations ***
+
+-- Iteration 1 --
+bool(true)
+
+-- Iteration 2 --
+bool(true)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_cntrl_variation2.phpt b/ext/ctype/tests/ctype_cntrl_variation2.phpt
new file mode 100644 (file)
index 0000000..109dff5
--- /dev/null
@@ -0,0 +1,102 @@
+--TEST--
+Test ctype_cntrl() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_cntrl(mixed $c)
+ * Description: Checks for control character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_cntrl() to test which character codes are considered
+ * valid control characters
+ */
+
+echo "*** Testing ctype_cntrl() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+       if (ctype_cntrl($i)) {
+               echo "character code $i is control character\n";
+       }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_cntrl() : usage variations ***
+character code 0 is control character
+character code 1 is control character
+character code 2 is control character
+character code 3 is control character
+character code 4 is control character
+character code 5 is control character
+character code 6 is control character
+character code 7 is control character
+character code 8 is control character
+character code 9 is control character
+character code 10 is control character
+character code 11 is control character
+character code 12 is control character
+character code 13 is control character
+character code 14 is control character
+character code 15 is control character
+character code 16 is control character
+character code 17 is control character
+character code 18 is control character
+character code 19 is control character
+character code 20 is control character
+character code 21 is control character
+character code 22 is control character
+character code 23 is control character
+character code 24 is control character
+character code 25 is control character
+character code 26 is control character
+character code 27 is control character
+character code 28 is control character
+character code 29 is control character
+character code 30 is control character
+character code 31 is control character
+character code 127 is control character
+character code 128 is control character
+character code 129 is control character
+character code 130 is control character
+character code 131 is control character
+character code 132 is control character
+character code 133 is control character
+character code 134 is control character
+character code 135 is control character
+character code 136 is control character
+character code 137 is control character
+character code 138 is control character
+character code 139 is control character
+character code 140 is control character
+character code 141 is control character
+character code 142 is control character
+character code 143 is control character
+character code 144 is control character
+character code 145 is control character
+character code 146 is control character
+character code 147 is control character
+character code 148 is control character
+character code 149 is control character
+character code 150 is control character
+character code 151 is control character
+character code 152 is control character
+character code 153 is control character
+character code 154 is control character
+character code 155 is control character
+character code 156 is control character
+character code 157 is control character
+character code 158 is control character
+character code 159 is control character
+character code 173 is control character
+===DONE===
diff --git a/ext/ctype/tests/ctype_cntrl_variation3.phpt b/ext/ctype/tests/ctype_cntrl_variation3.phpt
new file mode 100644 (file)
index 0000000..91d2b70
--- /dev/null
@@ -0,0 +1,162 @@
+--TEST--
+Test ctype_cntrl() function : usage variations - Different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_cntrl(mixed $c)
+ * Description: Checks for control character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_cntrl() to test
+ * which are considered valid control character only strings
+ */
+
+echo "*** Testing ctype_cntrl() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/  "This string contains just letters and spaces", // Simple string
+       "but this one contains some numbers too 123+456 = 678", // Mixed string
+       "",
+       " ",
+/*5*/  "a",
+       "ABCXYZ",
+       "abcxyz",
+       "ABCXYZ123DEF456",
+       "abczyz123DEF456",
+/*10*/ "\r\n",
+       "123",
+       "03F", // hexadecimal 'digits'
+       ")speci@! ch@r$(",
+       '@!$*',
+/*15*/ 'ABC',
+       'abc',
+       'ABC123',
+       'abc123',
+       'abc123\n',
+/*20*/ 'abc 123',
+       '',
+       ' ', 
+       base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+       "\n",
+/*25*/ "\r",
+       "\t",
+       "0xD",
+       "0xA",
+       "0xE",
+/*30*/ "\t\r\n",
+);
+
+
+// loop through each element of $values to test behaviour of ctype_cntrl()
+$iterator = 1;
+foreach($values as $value) {
+      echo "\n-- Iteration $iterator --\n";
+      var_dump( ctype_cntrl($value) );
+      $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_cntrl() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(true)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(true)
+
+-- Iteration 25 --
+bool(true)
+
+-- Iteration 26 --
+bool(true)
+
+-- Iteration 27 --
+bool(false)
+
+-- Iteration 28 --
+bool(false)
+
+-- Iteration 29 --
+bool(false)
+
+-- Iteration 30 --
+bool(true)
+===DONE===
diff --git a/ext/ctype/tests/ctype_cntrl_variation4.phpt b/ext/ctype/tests/ctype_cntrl_variation4.phpt
new file mode 100644 (file)
index 0000000..f306e0c
--- /dev/null
@@ -0,0 +1,67 @@
+--TEST--
+Test ctype_cntrl() function : usage variations - Octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_cntrl(mixed $c)
+ * Description: Checks for control character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass hexadecimal and octal values to ctype_cntrl() to test behaviour
+ */
+
+echo "*** Testing ctype_cntrl() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(01, 02, 03, 04);
+$hex_values = array(0x1, 0x2, 0x3, 0x4);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_cntrl($c));
+       $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_cntrl($c));
+       $iterator++;
+}
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_cntrl() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
diff --git a/ext/ctype/tests/ctype_digit_basic.phpt b/ext/ctype/tests/ctype_digit_basic.phpt
new file mode 100644 (file)
index 0000000..093fc31
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+Test ctype_digit() function : basic functionality
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_digit(mixed $c)
+ * Description: Checks for numeric character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_digit() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = '1234';
+$c2 = 'abc123';
+
+var_dump(ctype_digit($c1));
+var_dump(ctype_digit($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_digit() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_digit_error.phpt b/ext/ctype/tests/ctype_digit_error.phpt
new file mode 100644 (file)
index 0000000..5b7b9bd
--- /dev/null
@@ -0,0 +1,45 @@
+--TEST--
+Test ctype_digit() function : error conditions - incorrect number of arguments
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_digit(mixed $c)
+ * Description: Checks for numeric character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to ctype_digit() to test behaviour
+ */
+
+echo "*** Testing ctype_digit() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_digit() function with Zero arguments --\n";
+var_dump( ctype_digit() );
+
+//Test ctype_digit with one more than the expected number of arguments
+echo "\n-- Testing ctype_digit() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_digit($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_digit() : error conditions ***
+
+-- Testing ctype_digit() function with Zero arguments --
+
+Warning: ctype_digit() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_digit() function with more than expected no. of arguments --
+
+Warning: ctype_digit() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/ctype/tests/ctype_digit_variation1.phpt b/ext/ctype/tests/ctype_digit_variation1.phpt
new file mode 100644 (file)
index 0000000..26c8050
--- /dev/null
@@ -0,0 +1,183 @@
+--TEST--
+Test ctype_digit() function : usage variations - different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_digit(mixed $c)
+ * Description: Checks for numeric character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_digit() to test behaviour
+ */
+
+echo "*** Testing ctype_digit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+       public function __toString() {
+               return "123456";
+       }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+1
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+       array(),
+
+       // string data
+/*19*/ "2",
+       '309',
+       $heredoc,
+       
+       // object data
+/*22*/ new classA(),
+
+       // undefined data
+/*23*/ @$undefined_var,
+
+       // unset data
+/*24*/ @$unset_var,
+
+       // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_digit()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( ctype_digit($input) );
+  $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_digit() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_digit_variation2.phpt b/ext/ctype/tests/ctype_digit_variation2.phpt
new file mode 100644 (file)
index 0000000..d4bf0f7
--- /dev/null
@@ -0,0 +1,46 @@
+--TEST--
+Test ctype_digit() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_digit(mixed $c)
+ * Description: Checks for numeric character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_digit() to test which character codes are considered
+ * valid decimal digits
+ */
+
+echo "*** Testing ctype_digit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+       if (ctype_digit($i)) {
+               echo "character code $i is a numeric digit\n";
+       }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_digit() : usage variations ***
+character code 48 is a numeric digit
+character code 49 is a numeric digit
+character code 50 is a numeric digit
+character code 51 is a numeric digit
+character code 52 is a numeric digit
+character code 53 is a numeric digit
+character code 54 is a numeric digit
+character code 55 is a numeric digit
+character code 56 is a numeric digit
+character code 57 is a numeric digit
+===DONE===
diff --git a/ext/ctype/tests/ctype_digit_variation3.phpt b/ext/ctype/tests/ctype_digit_variation3.phpt
new file mode 100644 (file)
index 0000000..e157542
--- /dev/null
@@ -0,0 +1,164 @@
+--TEST--
+Test ctype_digit() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_digit(mixed $c)
+ * Description: Checks for numeric character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_digit() to test
+ * which are considered valid decimal digit only strings
+ */
+
+echo "*** Testing ctype_digit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/  "This string contains just letters and spaces", // Simple string
+       "but this one contains some numbers too 123+456 = 678", // Mixed string
+       "",
+       " ",
+/*5*/  "a",
+       "ABCXYZ",
+       "abcxyz",
+       "ABCXYZ123DEF456",
+       "abczyz123DEF456",
+/*10*/ "\r\n",
+       "123",
+       ")speci@! ch@r$(",
+       '@!$*',
+       "0",
+/*15*/ "3",
+       "9", 
+       "1234",
+       "7890",
+       "0677",
+/*20*/ '0',
+       '3',
+       '9',
+       '1234',
+       '7890',
+/*25*/ "123abc",
+       "abc123",
+       "123\r\t",
+       "123 ",
+       "  123",
+/*30*/ "123E4",
+/*31*/ "0x3F",
+);
+
+$iterator = 1;
+foreach($values as $value) {
+      echo "\n-- Iteration $iterator --\n";
+      var_dump( ctype_digit($value) );
+      $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_digit() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(true)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(true)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(true)
+
+-- Iteration 18 --
+bool(true)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(true)
+
+-- Iteration 23 --
+bool(true)
+
+-- Iteration 24 --
+bool(true)
+
+-- Iteration 25 --
+bool(false)
+
+-- Iteration 26 --
+bool(false)
+
+-- Iteration 27 --
+bool(false)
+
+-- Iteration 28 --
+bool(false)
+
+-- Iteration 29 --
+bool(false)
+
+-- Iteration 30 --
+bool(false)
+
+-- Iteration 31 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_digit_variation4.phpt b/ext/ctype/tests/ctype_digit_variation4.phpt
new file mode 100644 (file)
index 0000000..48bbaf7
--- /dev/null
@@ -0,0 +1,68 @@
+--TEST--
+Test ctype_digit() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_digit(mixed $c)
+ * Description: Checks for numeric character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values as $c argument to ctype_digit() to test behaviour
+ */
+
+echo "*** Testing ctype_digit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(061,  062,  063,  064);
+$hex_values = array  (0x31, 0x32, 0x33, 0x34);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_digit($c));
+       $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_digit($c));
+       $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_digit() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
diff --git a/ext/ctype/tests/ctype_graph_basic.phpt b/ext/ctype/tests/ctype_graph_basic.phpt
new file mode 100644 (file)
index 0000000..767e926
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+Test ctype_graph() function : basic functionality 
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_graph(mixed $c)
+ * Description: Checks for any printable character(s) except space 
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_graph() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = 'helloWorld!';
+$c2 = "Hello, world!\n";
+
+var_dump(ctype_graph($c1));
+var_dump(ctype_graph($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_graph() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_graph_error.phpt b/ext/ctype/tests/ctype_graph_error.phpt
new file mode 100644 (file)
index 0000000..ee17da9
--- /dev/null
@@ -0,0 +1,45 @@
+--TEST--
+Test ctype_graph() function : error conditions - incorrect number of arguments
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_graph(mixed $c)
+ * Description: Checks for any printable character(s) except space 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to ctype_graph() to test behaviour
+ */
+
+echo "*** Testing ctype_graph() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_graph() function with Zero arguments --\n";
+var_dump( ctype_graph() );
+
+//Test ctype_graph with one more than the expected number of arguments
+echo "\n-- Testing ctype_graph() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_graph($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_graph() : error conditions ***
+
+-- Testing ctype_graph() function with Zero arguments --
+
+Warning: ctype_graph() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_graph() function with more than expected no. of arguments --
+
+Warning: ctype_graph() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/ctype/tests/ctype_graph_variation1.phpt b/ext/ctype/tests/ctype_graph_variation1.phpt
new file mode 100644 (file)
index 0000000..cc9edd0
--- /dev/null
@@ -0,0 +1,183 @@
+--TEST--
+Test ctype_graph() function : usage variations - different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_graph(mixed $c)
+ * Description: Checks for any printable character(s) except space 
+ * Source code: ext/ctype/ctype.c 
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_graph() to test behaviour
+ */
+
+echo "*** Testing ctype_graph() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+       public function __toString() {
+               return "myClass";
+       }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hiWorld!
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+       array(),
+
+       // string data
+/*19*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*22*/ new classA(),
+
+       // undefined data
+/*23*/ @$undefined_var,
+
+       // unset data
+/*24*/ @$unset_var,
+
+       // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_graph()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( ctype_graph($input) );
+  $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_graph() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(true)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_graph_variation2.phpt b/ext/ctype/tests/ctype_graph_variation2.phpt
new file mode 100644 (file)
index 0000000..724a855
--- /dev/null
@@ -0,0 +1,224 @@
+--TEST--
+Test ctype_graph() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_graph(mixed $c)
+ * Description: Checks for any printable character(s) except space 
+ * Source code: ext/ctype/ctype.c 
+ */
+
+/*
+ * Pass different integers to ctype_graph() to test which character codes are considered
+ * valid visibly printable characters
+ */
+
+echo "*** Testing ctype_graph() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+       if (ctype_graph($i)) {
+               echo "character code $i is a printable character\n";
+       }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_graph() : usage variations ***
+character code 33 is a printable character
+character code 34 is a printable character
+character code 35 is a printable character
+character code 36 is a printable character
+character code 37 is a printable character
+character code 38 is a printable character
+character code 39 is a printable character
+character code 40 is a printable character
+character code 41 is a printable character
+character code 42 is a printable character
+character code 43 is a printable character
+character code 44 is a printable character
+character code 45 is a printable character
+character code 46 is a printable character
+character code 47 is a printable character
+character code 48 is a printable character
+character code 49 is a printable character
+character code 50 is a printable character
+character code 51 is a printable character
+character code 52 is a printable character
+character code 53 is a printable character
+character code 54 is a printable character
+character code 55 is a printable character
+character code 56 is a printable character
+character code 57 is a printable character
+character code 58 is a printable character
+character code 59 is a printable character
+character code 60 is a printable character
+character code 61 is a printable character
+character code 62 is a printable character
+character code 63 is a printable character
+character code 64 is a printable character
+character code 65 is a printable character
+character code 66 is a printable character
+character code 67 is a printable character
+character code 68 is a printable character
+character code 69 is a printable character
+character code 70 is a printable character
+character code 71 is a printable character
+character code 72 is a printable character
+character code 73 is a printable character
+character code 74 is a printable character
+character code 75 is a printable character
+character code 76 is a printable character
+character code 77 is a printable character
+character code 78 is a printable character
+character code 79 is a printable character
+character code 80 is a printable character
+character code 81 is a printable character
+character code 82 is a printable character
+character code 83 is a printable character
+character code 84 is a printable character
+character code 85 is a printable character
+character code 86 is a printable character
+character code 87 is a printable character
+character code 88 is a printable character
+character code 89 is a printable character
+character code 90 is a printable character
+character code 91 is a printable character
+character code 92 is a printable character
+character code 93 is a printable character
+character code 94 is a printable character
+character code 95 is a printable character
+character code 96 is a printable character
+character code 97 is a printable character
+character code 98 is a printable character
+character code 99 is a printable character
+character code 100 is a printable character
+character code 101 is a printable character
+character code 102 is a printable character
+character code 103 is a printable character
+character code 104 is a printable character
+character code 105 is a printable character
+character code 106 is a printable character
+character code 107 is a printable character
+character code 108 is a printable character
+character code 109 is a printable character
+character code 110 is a printable character
+character code 111 is a printable character
+character code 112 is a printable character
+character code 113 is a printable character
+character code 114 is a printable character
+character code 115 is a printable character
+character code 116 is a printable character
+character code 117 is a printable character
+character code 118 is a printable character
+character code 119 is a printable character
+character code 120 is a printable character
+character code 121 is a printable character
+character code 122 is a printable character
+character code 123 is a printable character
+character code 124 is a printable character
+character code 125 is a printable character
+character code 126 is a printable character
+character code 161 is a printable character
+character code 162 is a printable character
+character code 163 is a printable character
+character code 164 is a printable character
+character code 165 is a printable character
+character code 166 is a printable character
+character code 167 is a printable character
+character code 168 is a printable character
+character code 169 is a printable character
+character code 170 is a printable character
+character code 171 is a printable character
+character code 172 is a printable character
+character code 174 is a printable character
+character code 175 is a printable character
+character code 176 is a printable character
+character code 177 is a printable character
+character code 178 is a printable character
+character code 179 is a printable character
+character code 180 is a printable character
+character code 181 is a printable character
+character code 182 is a printable character
+character code 183 is a printable character
+character code 184 is a printable character
+character code 185 is a printable character
+character code 186 is a printable character
+character code 187 is a printable character
+character code 188 is a printable character
+character code 189 is a printable character
+character code 190 is a printable character
+character code 191 is a printable character
+character code 192 is a printable character
+character code 193 is a printable character
+character code 194 is a printable character
+character code 195 is a printable character
+character code 196 is a printable character
+character code 197 is a printable character
+character code 198 is a printable character
+character code 199 is a printable character
+character code 200 is a printable character
+character code 201 is a printable character
+character code 202 is a printable character
+character code 203 is a printable character
+character code 204 is a printable character
+character code 205 is a printable character
+character code 206 is a printable character
+character code 207 is a printable character
+character code 208 is a printable character
+character code 209 is a printable character
+character code 210 is a printable character
+character code 211 is a printable character
+character code 212 is a printable character
+character code 213 is a printable character
+character code 214 is a printable character
+character code 215 is a printable character
+character code 216 is a printable character
+character code 217 is a printable character
+character code 218 is a printable character
+character code 219 is a printable character
+character code 220 is a printable character
+character code 221 is a printable character
+character code 222 is a printable character
+character code 223 is a printable character
+character code 224 is a printable character
+character code 225 is a printable character
+character code 226 is a printable character
+character code 227 is a printable character
+character code 228 is a printable character
+character code 229 is a printable character
+character code 230 is a printable character
+character code 231 is a printable character
+character code 232 is a printable character
+character code 233 is a printable character
+character code 234 is a printable character
+character code 235 is a printable character
+character code 236 is a printable character
+character code 237 is a printable character
+character code 238 is a printable character
+character code 239 is a printable character
+character code 240 is a printable character
+character code 241 is a printable character
+character code 242 is a printable character
+character code 243 is a printable character
+character code 244 is a printable character
+character code 245 is a printable character
+character code 246 is a printable character
+character code 247 is a printable character
+character code 248 is a printable character
+character code 249 is a printable character
+character code 250 is a printable character
+character code 251 is a printable character
+character code 252 is a printable character
+character code 253 is a printable character
+character code 254 is a printable character
+character code 255 is a printable character
+===DONE===
diff --git a/ext/ctype/tests/ctype_graph_variation3.phpt b/ext/ctype/tests/ctype_graph_variation3.phpt
new file mode 100644 (file)
index 0000000..fbfdc77
--- /dev/null
@@ -0,0 +1,152 @@
+--TEST--
+Test ctype_graph() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_graph(mixed $c)
+ * Description: Checks for any printable character(s) except space 
+ * Source code: ext/ctype/ctype.c 
+ */
+
+/*
+ * Pass strings containing different character types to ctype_graph() to test
+ * which are considered valid printable character only strings
+ */
+
+echo "*** Testing ctype_graph() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/  "This string contains just letters and spaces", // Simple string
+       "but this one contains some numbers too 123+456 = 678", // Mixed string
+       "",
+       " ",
+/*5*/  "a",
+       "ABCXYZ",
+       "abcxyz",
+       "ABCXYZ123DEF456",
+       "abczyz123DEF456",
+/*10*/ "\r\n",
+       "123",
+       "03F", // hexadecimal 'digits'
+       ")speci@! ch@r$(",
+       '@!$*',
+/*15*/ 'ABC',
+       'abc',
+       'ABC123',
+       'abc123',
+       "abc123\n",
+/*20*/ 'abc 123',
+       '',
+       ' ',
+       base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+       "!$%^&*()_+-={}[]:;@~'#<,>.?/",
+/*25*/ "\"ABC\"",
+       "String\twith\ttabs",
+       "Sample string with newline\n",
+/*28*/ "123 ABC XYZ",
+);
+
+$iterator = 1;
+foreach($values as $value) {
+      echo "\n-- Iteration $iterator --\n";
+      var_dump( ctype_graph($value) );
+      $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_graph() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(true)
+
+-- Iteration 7 --
+bool(true)
+
+-- Iteration 8 --
+bool(true)
+
+-- Iteration 9 --
+bool(true)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(true)
+
+-- Iteration 12 --
+bool(true)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(true)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(true)
+
+-- Iteration 18 --
+bool(true)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(true)
+
+-- Iteration 25 --
+bool(true)
+
+-- Iteration 26 --
+bool(false)
+
+-- Iteration 27 --
+bool(false)
+
+-- Iteration 28 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_graph_variation4.phpt b/ext/ctype/tests/ctype_graph_variation4.phpt
new file mode 100644 (file)
index 0000000..1b5ec01
--- /dev/null
@@ -0,0 +1,68 @@
+--TEST--
+Test ctype_graph() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_graph(mixed $c)
+ * Description: Checks for any printable character(s) except space 
+ * Source code: ext/ctype/ctype.c 
+ */
+
+/*
+ * Pass octal and hexadecimal values to ctype_graph() to test behaviour
+ */
+
+echo "*** Testing ctype_graph() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(061,  062,  063,  064);
+$hex_values = array  (0x31, 0x32, 0x33, 0x34);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_graph($c));
+       $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_graph($c));
+       $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_graph() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
diff --git a/ext/ctype/tests/ctype_lower_basic.phpt b/ext/ctype/tests/ctype_lower_basic.phpt
new file mode 100644 (file)
index 0000000..cde8732
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+Test ctype_lower() function : basic functionality 
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_lower(mixed $c)
+ * Description: Checks for lowercase character(s)  
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_lower() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = 'helloworld';
+$c2 = "Hello, world!\n";
+
+var_dump(ctype_lower($c1));
+var_dump(ctype_lower($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_lower() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_lower_error.phpt b/ext/ctype/tests/ctype_lower_error.phpt
new file mode 100644 (file)
index 0000000..56c5463
--- /dev/null
@@ -0,0 +1,45 @@
+--TEST--
+Test ctype_lower() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_lower(mixed $c)
+ * Description: Checks for lowercase character(s)  
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass incorrect number of arguments to ctype_lower() to test behaviour
+ */
+
+echo "*** Testing ctype_lower() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_lower() function with Zero arguments --\n";
+var_dump( ctype_lower() );
+
+//Test ctype_lower with one more than the expected number of arguments
+echo "\n-- Testing ctype_lower() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_lower($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_lower() : error conditions ***
+
+-- Testing ctype_lower() function with Zero arguments --
+
+Warning: ctype_lower() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_lower() function with more than expected no. of arguments --
+
+Warning: ctype_lower() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/ctype/tests/ctype_lower_variation1.phpt b/ext/ctype/tests/ctype_lower_variation1.phpt
new file mode 100644 (file)
index 0000000..f8ccc79
--- /dev/null
@@ -0,0 +1,183 @@
+--TEST--
+Test ctype_lower() function : usage variations - different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_lower(mixed $c)
+ * Description: Checks for lowercase character(s)  
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_lower() to test behaviour
+ */
+
+echo "*** Testing ctype_lower() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+       public function __toString() {
+               return "class";
+       }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+heredoc
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+       array(),
+
+       // string data
+/*19*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*22*/ new classA(),
+
+       // undefined data
+/*23*/ @$undefined_var,
+
+       // unset data
+/*24*/ @$unset_var,
+
+       // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_lower()
+$iterator = 1;
+foreach($inputs as $input) {
+       echo "\n-- Iteration $iterator --\n";
+       var_dump( ctype_lower($input) );
+       $iterator++;
+};
+
+fclose($fp);
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_lower() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_lower_variation2.phpt b/ext/ctype/tests/ctype_lower_variation2.phpt
new file mode 100644 (file)
index 0000000..a381275
--- /dev/null
@@ -0,0 +1,97 @@
+--TEST--
+Test ctype_lower() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_lower(mixed $c)
+ * Description: Checks for lowercase character(s)  
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_lower() to test which character codes are considered
+ * valid lowercase characters
+ */
+
+echo "*** Testing ctype_lower() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+       if (ctype_lower($i)) {
+               echo "character code $i is a lower case character\n";
+       }
+}
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_lower() : usage variations ***
+character code 97 is a lower case character
+character code 98 is a lower case character
+character code 99 is a lower case character
+character code 100 is a lower case character
+character code 101 is a lower case character
+character code 102 is a lower case character
+character code 103 is a lower case character
+character code 104 is a lower case character
+character code 105 is a lower case character
+character code 106 is a lower case character
+character code 107 is a lower case character
+character code 108 is a lower case character
+character code 109 is a lower case character
+character code 110 is a lower case character
+character code 111 is a lower case character
+character code 112 is a lower case character
+character code 113 is a lower case character
+character code 114 is a lower case character
+character code 115 is a lower case character
+character code 116 is a lower case character
+character code 117 is a lower case character
+character code 118 is a lower case character
+character code 119 is a lower case character
+character code 120 is a lower case character
+character code 121 is a lower case character
+character code 122 is a lower case character
+character code 170 is a lower case character
+character code 181 is a lower case character
+character code 186 is a lower case character
+character code 223 is a lower case character
+character code 224 is a lower case character
+character code 225 is a lower case character
+character code 226 is a lower case character
+character code 227 is a lower case character
+character code 228 is a lower case character
+character code 229 is a lower case character
+character code 230 is a lower case character
+character code 231 is a lower case character
+character code 232 is a lower case character
+character code 233 is a lower case character
+character code 234 is a lower case character
+character code 235 is a lower case character
+character code 236 is a lower case character
+character code 237 is a lower case character
+character code 238 is a lower case character
+character code 239 is a lower case character
+character code 240 is a lower case character
+character code 241 is a lower case character
+character code 242 is a lower case character
+character code 243 is a lower case character
+character code 244 is a lower case character
+character code 245 is a lower case character
+character code 246 is a lower case character
+character code 248 is a lower case character
+character code 249 is a lower case character
+character code 250 is a lower case character
+character code 251 is a lower case character
+character code 252 is a lower case character
+character code 253 is a lower case character
+character code 254 is a lower case character
+character code 255 is a lower case character
+===DONE===
diff --git a/ext/ctype/tests/ctype_lower_variation3.phpt b/ext/ctype/tests/ctype_lower_variation3.phpt
new file mode 100644 (file)
index 0000000..7689ed1
--- /dev/null
@@ -0,0 +1,144 @@
+--TEST--
+Test ctype_lower() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_lower(mixed $c)
+ * Description: Checks for lowercase character(s)  
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_lower() to test
+ * which are considered valid lowercase character only strings
+ */
+
+echo "*** Testing ctype_lower() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/  "This string contains just letters and spaces", // Simple string
+       "but this one contains some numbers too 123+456 = 678", // Mixed string
+       "",
+       " ",
+/*5*/  "a",
+       "ABCXYZ",
+       "abcxyz",
+       "ABCXYZ123DEF456",
+       "abczyz123DEF456",
+/*10*/ "\r\n",
+       "123",
+       "03F", // hexadecimal 'digits'
+       ")speci@! ch@r$(",
+       '@!$*',
+/*15*/ 'ABC',
+       'abc',
+       'ABC123',
+       'abc123',
+       'abc123\n',
+/*20*/ 'abc 123',
+       '',
+       ' ',
+       base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+       "abcXYZ",
+/*25*/ "abc xyz",
+/*26*/ "abc+efg*xyz",
+);
+
+$iterator = 1;
+foreach($values as $value) {
+      echo "\n-- Iteration $iterator --\n";
+      var_dump( ctype_lower($value) );
+      $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_lower() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(true)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+
+-- Iteration 26 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_lower_variation4.phpt b/ext/ctype/tests/ctype_lower_variation4.phpt
new file mode 100644 (file)
index 0000000..a8a61e5
--- /dev/null
@@ -0,0 +1,68 @@
+--TEST--
+Test ctype_lower() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_lower(mixed $c)
+ * Description: Checks for lowercase character(s)  
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values to ctype_lower() to test behaviour
+ */
+
+echo "*** Testing ctype_lower() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(0141, 0142, 0143, 0144);
+$hex_values = array  (0x61, 0x62, 0x63, 0x64);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_lower($c));
+       $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_lower($c));
+       $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_lower() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
diff --git a/ext/ctype/tests/ctype_print_basic.phpt b/ext/ctype/tests/ctype_print_basic.phpt
new file mode 100644 (file)
index 0000000..57329e2
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+Test ctype_print() function : basic functionality 
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_print(mixed $c)
+ * Description: Checks for printable character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_print() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = "Hello, World!";
+$c2 = null;
+
+var_dump(ctype_print($c1));
+var_dump(ctype_print($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_print() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_print_error.phpt b/ext/ctype/tests/ctype_print_error.phpt
new file mode 100644 (file)
index 0000000..fb26aa6
--- /dev/null
@@ -0,0 +1,45 @@
+--TEST--
+Test ctype_print() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_print(mixed $c)
+ * Description: Checks for printable character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass incorrect number of arguments to ctype_print() to test behaviour
+ */
+
+echo "*** Testing ctype_print() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_print() function with Zero arguments --\n";
+var_dump( ctype_print() );
+
+//Test ctype_print with one more than the expected number of arguments
+echo "\n-- Testing ctype_print() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_print($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_print() : error conditions ***
+
+-- Testing ctype_print() function with Zero arguments --
+
+Warning: ctype_print() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_print() function with more than expected no. of arguments --
+
+Warning: ctype_print() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/ctype/tests/ctype_print_variation1.phpt b/ext/ctype/tests/ctype_print_variation1.phpt
new file mode 100644 (file)
index 0000000..dd75e98
--- /dev/null
@@ -0,0 +1,183 @@
+--TEST--
+Test ctype_print() function : usage variations - different data types as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_print(mixed $c)
+ * Description: Checks for printable character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_print() to test behaviour
+ */
+
+echo "*** Testing ctype_print() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+       public function __toString() {
+               return "Class A object";
+       }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+hello world
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+       array(),
+
+       // string data
+/*19*/ "string",
+       'string',
+       $heredoc,
+       
+       // object data
+/*22*/ new classA(),
+
+       // undefined data
+/*23*/ @$undefined_var,
+
+       // unset data
+/*24*/ @$unset_var,
+
+       // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_print()
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( ctype_print($input) );
+  $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_print() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(true)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_print_variation2.phpt b/ext/ctype/tests/ctype_print_variation2.phpt
new file mode 100644 (file)
index 0000000..21e7617
--- /dev/null
@@ -0,0 +1,226 @@
+--TEST--
+Test ctype_print() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_print(mixed $c)
+ * Description: Checks for printable character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_print() to test which character codes are considered
+ * valid printable characters
+ */
+
+echo "*** Testing ctype_print() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+       if (ctype_print($i)) {
+               echo "character code $i is a printable character\n";
+       }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_print() : usage variations ***
+character code 32 is a printable character
+character code 33 is a printable character
+character code 34 is a printable character
+character code 35 is a printable character
+character code 36 is a printable character
+character code 37 is a printable character
+character code 38 is a printable character
+character code 39 is a printable character
+character code 40 is a printable character
+character code 41 is a printable character
+character code 42 is a printable character
+character code 43 is a printable character
+character code 44 is a printable character
+character code 45 is a printable character
+character code 46 is a printable character
+character code 47 is a printable character
+character code 48 is a printable character
+character code 49 is a printable character
+character code 50 is a printable character
+character code 51 is a printable character
+character code 52 is a printable character
+character code 53 is a printable character
+character code 54 is a printable character
+character code 55 is a printable character
+character code 56 is a printable character
+character code 57 is a printable character
+character code 58 is a printable character
+character code 59 is a printable character
+character code 60 is a printable character
+character code 61 is a printable character
+character code 62 is a printable character
+character code 63 is a printable character
+character code 64 is a printable character
+character code 65 is a printable character
+character code 66 is a printable character
+character code 67 is a printable character
+character code 68 is a printable character
+character code 69 is a printable character
+character code 70 is a printable character
+character code 71 is a printable character
+character code 72 is a printable character
+character code 73 is a printable character
+character code 74 is a printable character
+character code 75 is a printable character
+character code 76 is a printable character
+character code 77 is a printable character
+character code 78 is a printable character
+character code 79 is a printable character
+character code 80 is a printable character
+character code 81 is a printable character
+character code 82 is a printable character
+character code 83 is a printable character
+character code 84 is a printable character
+character code 85 is a printable character
+character code 86 is a printable character
+character code 87 is a printable character
+character code 88 is a printable character
+character code 89 is a printable character
+character code 90 is a printable character
+character code 91 is a printable character
+character code 92 is a printable character
+character code 93 is a printable character
+character code 94 is a printable character
+character code 95 is a printable character
+character code 96 is a printable character
+character code 97 is a printable character
+character code 98 is a printable character
+character code 99 is a printable character
+character code 100 is a printable character
+character code 101 is a printable character
+character code 102 is a printable character
+character code 103 is a printable character
+character code 104 is a printable character
+character code 105 is a printable character
+character code 106 is a printable character
+character code 107 is a printable character
+character code 108 is a printable character
+character code 109 is a printable character
+character code 110 is a printable character
+character code 111 is a printable character
+character code 112 is a printable character
+character code 113 is a printable character
+character code 114 is a printable character
+character code 115 is a printable character
+character code 116 is a printable character
+character code 117 is a printable character
+character code 118 is a printable character
+character code 119 is a printable character
+character code 120 is a printable character
+character code 121 is a printable character
+character code 122 is a printable character
+character code 123 is a printable character
+character code 124 is a printable character
+character code 125 is a printable character
+character code 126 is a printable character
+character code 160 is a printable character
+character code 161 is a printable character
+character code 162 is a printable character
+character code 163 is a printable character
+character code 164 is a printable character
+character code 165 is a printable character
+character code 166 is a printable character
+character code 167 is a printable character
+character code 168 is a printable character
+character code 169 is a printable character
+character code 170 is a printable character
+character code 171 is a printable character
+character code 172 is a printable character
+character code 174 is a printable character
+character code 175 is a printable character
+character code 176 is a printable character
+character code 177 is a printable character
+character code 178 is a printable character
+character code 179 is a printable character
+character code 180 is a printable character
+character code 181 is a printable character
+character code 182 is a printable character
+character code 183 is a printable character
+character code 184 is a printable character
+character code 185 is a printable character
+character code 186 is a printable character
+character code 187 is a printable character
+character code 188 is a printable character
+character code 189 is a printable character
+character code 190 is a printable character
+character code 191 is a printable character
+character code 192 is a printable character
+character code 193 is a printable character
+character code 194 is a printable character
+character code 195 is a printable character
+character code 196 is a printable character
+character code 197 is a printable character
+character code 198 is a printable character
+character code 199 is a printable character
+character code 200 is a printable character
+character code 201 is a printable character
+character code 202 is a printable character
+character code 203 is a printable character
+character code 204 is a printable character
+character code 205 is a printable character
+character code 206 is a printable character
+character code 207 is a printable character
+character code 208 is a printable character
+character code 209 is a printable character
+character code 210 is a printable character
+character code 211 is a printable character
+character code 212 is a printable character
+character code 213 is a printable character
+character code 214 is a printable character
+character code 215 is a printable character
+character code 216 is a printable character
+character code 217 is a printable character
+character code 218 is a printable character
+character code 219 is a printable character
+character code 220 is a printable character
+character code 221 is a printable character
+character code 222 is a printable character
+character code 223 is a printable character
+character code 224 is a printable character
+character code 225 is a printable character
+character code 226 is a printable character
+character code 227 is a printable character
+character code 228 is a printable character
+character code 229 is a printable character
+character code 230 is a printable character
+character code 231 is a printable character
+character code 232 is a printable character
+character code 233 is a printable character
+character code 234 is a printable character
+character code 235 is a printable character
+character code 236 is a printable character
+character code 237 is a printable character
+character code 238 is a printable character
+character code 239 is a printable character
+character code 240 is a printable character
+character code 241 is a printable character
+character code 242 is a printable character
+character code 243 is a printable character
+character code 244 is a printable character
+character code 245 is a printable character
+character code 246 is a printable character
+character code 247 is a printable character
+character code 248 is a printable character
+character code 249 is a printable character
+character code 250 is a printable character
+character code 251 is a printable character
+character code 252 is a printable character
+character code 253 is a printable character
+character code 254 is a printable character
+character code 255 is a printable character
+===DONE===
diff --git a/ext/ctype/tests/ctype_print_variation3.phpt b/ext/ctype/tests/ctype_print_variation3.phpt
new file mode 100644 (file)
index 0000000..3b14c0d
--- /dev/null
@@ -0,0 +1,132 @@
+--TEST--
+Test ctype_print() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_print(mixed $c)
+ * Description: Checks for printable character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_print() to test
+ * which are considered valid printable character only strings
+ */
+
+echo "*** Testing ctype_print() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/  "This string contains just letters and spaces", // Simple string
+       "but this one contains some numbers too 123+456 = 678", // Mixed string
+       "",
+       " ",
+/*5*/  "a",
+       "ABCXYZ",
+       "abcxyz",
+       "ABCXYZ123DEF456",
+       "abczyz123DEF456",
+/*10*/ "\r\n",
+       "123",
+       "03F", // hexadecimal 'digits'
+       ")speci@! ch@r$(",
+       '@!$*',
+/*15*/ 'ABC',
+       'abc',
+       'ABC123',
+       'abc123',
+       "abc123\n",
+/*20*/ 'abc 123',
+       '',
+       ' ', 
+/*23*/ base64_decode("w4DDoMOHw6fDiMOo") // non-ascii characters
+);
+
+$iterator = 1;
+foreach($values as $value) {
+      echo "\n-- Iteration $iterator --\n";
+      var_dump( ctype_print($value) );
+      $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_print() : usage variations ***
+
+-- Iteration 1 --
+bool(true)
+
+-- Iteration 2 --
+bool(true)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(true)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(true)
+
+-- Iteration 7 --
+bool(true)
+
+-- Iteration 8 --
+bool(true)
+
+-- Iteration 9 --
+bool(true)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(true)
+
+-- Iteration 12 --
+bool(true)
+
+-- Iteration 13 --
+bool(true)
+
+-- Iteration 14 --
+bool(true)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(true)
+
+-- Iteration 18 --
+bool(true)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(true)
+
+-- Iteration 23 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_print_variation4.phpt b/ext/ctype/tests/ctype_print_variation4.phpt
new file mode 100644 (file)
index 0000000..47dd8bb
--- /dev/null
@@ -0,0 +1,67 @@
+--TEST--
+Test ctype_print() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_print(mixed $c)
+ * Description: Checks for printable character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values to ctype_print() to test behaviour
+ */
+
+echo "*** Testing ctype_print() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(040, 041, 042, 043);
+$hex_values = array (0x20, 0x21, 0x23, 0x24);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_print($c));
+       $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_print($c));
+       $iterator++;
+}
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_print() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
diff --git a/ext/ctype/tests/ctype_punct_basic.phpt b/ext/ctype/tests/ctype_punct_basic.phpt
new file mode 100644 (file)
index 0000000..596402b
--- /dev/null
@@ -0,0 +1,34 @@
+--TEST--
+Test ctype_punct() function : basic functionality 
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_punct(mixed $c)
+ * Description: Checks for any printable character which is not whitespace 
+ * or an alphanumeric character 
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_punct() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+$c1 = '@!$*';
+$c2 = 'hello, world!';
+
+var_dump(ctype_punct($c1));
+var_dump(ctype_punct($c2));
+
+setlocale(LC_CTYPE, $orig); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_punct() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_punct_error.phpt b/ext/ctype/tests/ctype_punct_error.phpt
new file mode 100644 (file)
index 0000000..29c7c59
--- /dev/null
@@ -0,0 +1,50 @@
+--TEST--
+Test ctype_punct() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_punct(mixed $c)
+ * Description: Checks for any printable character which is not whitespace 
+ * or an alphanumeric character 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass incorrect number of arguments to ctype_punct() to test behaviour
+ */
+
+echo "*** Testing ctype_punct() : error conditions ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+// Zero arguments
+echo "\n-- Testing ctype_punct() function with Zero arguments --\n";
+var_dump( ctype_punct() );
+
+//Test ctype_punct with one more than the expected number of arguments
+echo "\n-- Testing ctype_punct() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_punct($c, $extra_arg) );
+
+setlocale(LC_CTYPE, $orig); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_punct() : error conditions ***
+
+-- Testing ctype_punct() function with Zero arguments --
+
+Warning: ctype_punct() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_punct() function with more than expected no. of arguments --
+
+Warning: ctype_punct() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/ctype/tests/ctype_punct_variation1.phpt b/ext/ctype/tests/ctype_punct_variation1.phpt
new file mode 100644 (file)
index 0000000..acee9c9
--- /dev/null
@@ -0,0 +1,184 @@
+--TEST--
+Test ctype_punct() function : usage variations - different data types as $c argument
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_punct(mixed $c)
+ * Description: Checks for any printable character which is not whitespace 
+ * or an alphanumeric character 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_punt() to test behaviour
+ */
+
+echo "*** Testing ctype_punct() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return ",<.>";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+[{}]
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+       array(),
+
+       // string data
+/*19*/ ";:'@",
+       '#~/?',
+       $heredoc,
+       
+       // object data
+/*22*/ new classA(),
+
+       // undefined data
+/*23*/ @$undefined_var,
+
+       // unset data
+/*24*/ @$unset_var,
+
+       // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_punct
+$iterator = 1;
+foreach($inputs as $input) {
+  echo "\n-- Iteration $iterator --\n";
+  var_dump( ctype_punct($input) );
+  $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_punct() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_punct_variation2.phpt b/ext/ctype/tests/ctype_punct_variation2.phpt
new file mode 100644 (file)
index 0000000..4096f58
--- /dev/null
@@ -0,0 +1,65 @@
+--TEST--
+Test ctype_punct() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_punct(mixed $c)
+ * Description: Checks for any printable character which is not whitespace 
+ * or an alphanumeric character 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_punct() to test which character codes are considered
+ * valid punctuation characters
+ */
+
+echo "*** Testing ctype_punct() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+for ($c = 1; $c < 256; $c++) {
+       if (ctype_punct($c)) {
+               echo "character code $c is punctuation\n";
+       }
+}
+
+setlocale(LC_CTYPE, $orig); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_punct() : usage variations ***
+character code 33 is punctuation
+character code 34 is punctuation
+character code 35 is punctuation
+character code 37 is punctuation
+character code 38 is punctuation
+character code 39 is punctuation
+character code 40 is punctuation
+character code 41 is punctuation
+character code 42 is punctuation
+character code 44 is punctuation
+character code 45 is punctuation
+character code 46 is punctuation
+character code 47 is punctuation
+character code 58 is punctuation
+character code 59 is punctuation
+character code 63 is punctuation
+character code 64 is punctuation
+character code 91 is punctuation
+character code 92 is punctuation
+character code 93 is punctuation
+character code 95 is punctuation
+character code 123 is punctuation
+character code 125 is punctuation
+character code 161 is punctuation
+character code 171 is punctuation
+character code 183 is punctuation
+character code 187 is punctuation
+character code 191 is punctuation
+===DONE===
diff --git a/ext/ctype/tests/ctype_punct_variation3.phpt b/ext/ctype/tests/ctype_punct_variation3.phpt
new file mode 100644 (file)
index 0000000..c09d4fa
--- /dev/null
@@ -0,0 +1,144 @@
+--TEST--
+Test ctype_punct() function : usage variations - different punctuation
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_punct(mixed $c)
+ * Description: Checks for any printable character which is not whitespace 
+ * or an alphanumeric character 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_punct() to test
+ * which are considered valid punctuation character only strings
+ */
+
+echo "*** Testing ctype_punct() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/  "This string contains just letters and spaces", // Simple string
+       "but this one contains some numbers too 123+456 = 678", // Mixed string
+       "",
+       " ",
+/*5*/  "a",
+       "ABCXYZ",
+       "abcxyz",
+       "ABCXYZ123DEF456",
+       "abczyz123DEF456",
+/*10*/ "\r\n",
+       "123",
+       "03F", // hexadecimal 'digits'
+       ")speci@! ch@r$(",
+       '@!$*',
+/*15*/ 'ABC',
+       'abc',
+       'ABC123',
+       'abc123',
+       "abc123\n",
+/*20*/ 'abc 123',
+       '',
+       ' ', 
+       base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+       "!$%@\n",
+/*25*/ "\"?!\"",
+/*26*/ "|\ @~",
+);
+
+$iterator = 1;
+foreach($values as $value) {
+      echo "\n-- Iteration $iterator --\n";
+      var_dump( ctype_punct($value) );
+      $iterator++;
+};
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_punct() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(true)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(true)
+
+-- Iteration 26 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_punct_variation4.phpt b/ext/ctype/tests/ctype_punct_variation4.phpt
new file mode 100644 (file)
index 0000000..f1404e8
--- /dev/null
@@ -0,0 +1,69 @@
+--TEST--
+Test ctype_punct() function : usage variations - Octal and Hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_punct(mixed $c)
+ * Description: Checks for any printable character which is not whitespace 
+ * or an alphanumeric character 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different octal and hexadecimal values to ctype_punct() to test behaviour
+ */
+
+echo "*** Testing ctype_punct() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+$octal_values = array(045, 046, 047, 050);
+$hex_values   = array(0x25, 0x26, 0x27, 0x28);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_punct($c));
+       $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_punct($c));
+       $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_punct() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
diff --git a/ext/ctype/tests/ctype_space_basic.phpt b/ext/ctype/tests/ctype_space_basic.phpt
new file mode 100644 (file)
index 0000000..9f2233e
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+Test ctype_space() function : basic functionality 
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_space(mixed $c)
+ * Description: Checks for whitespace character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_space() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = " \t\r\n";
+var_dump(ctype_space($c1));
+
+$c2 = "Hello, world!\n";
+var_dump(ctype_space($c2));
+
+setlocale(LC_CTYPE, $orig); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_space() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_space_error.phpt b/ext/ctype/tests/ctype_space_error.phpt
new file mode 100644 (file)
index 0000000..cd2886e
--- /dev/null
@@ -0,0 +1,49 @@
+--TEST--
+Test ctype_space() function : error conditions - Incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_space(mixed $c)
+ * Description: Checks for whitespace character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass an incorrect number of arguments to ctype_space() to test behaviour
+ */
+
+echo "*** Testing ctype_space() : error conditions ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+// Zero arguments
+echo "\n-- Testing ctype_space() function with Zero arguments --\n";
+var_dump( ctype_space() );
+
+//Test ctype_space with one more than the expected number of arguments
+echo "\n-- Testing ctype_space() function with more than expected no. of arguments --\n";
+$c = " ";
+$extra_arg = 10;
+var_dump( ctype_space($c, $extra_arg) );
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_space() : error conditions ***
+
+-- Testing ctype_space() function with Zero arguments --
+
+Warning: ctype_space() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_space() function with more than expected no. of arguments --
+
+Warning: ctype_space() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/ctype/tests/ctype_space_variation1.phpt b/ext/ctype/tests/ctype_space_variation1.phpt
new file mode 100644 (file)
index 0000000..c416092
--- /dev/null
@@ -0,0 +1,183 @@
+--TEST--
+Test ctype_space() function : usage variations - different data types as $c argument
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_space(mixed $c)
+ * Description: Checks for whitespace character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_space() to test behaviour
+ */
+
+echo "*** Testing ctype_space() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+       public function __toString() {
+               return "\n\t\r";
+       }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+       array(),
+
+       // string data
+/*19*/ "\n\t\r",
+       ' ',
+       $heredoc,
+       
+       // object data
+/*22*/ new classA(),
+
+       // undefined data
+/*23*/ @$undefined_var,
+
+       // unset data
+/*24*/ @$unset_var,
+
+       // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_space()
+$iterator = 1;
+foreach($inputs as $input) {
+       echo "\n-- Iteration $iterator --\n";
+       var_dump( ctype_space($input) );
+       $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_space() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_space_variation2.phpt b/ext/ctype/tests/ctype_space_variation2.phpt
new file mode 100644 (file)
index 0000000..c46f531
--- /dev/null
@@ -0,0 +1,47 @@
+--TEST--
+Test ctype_space() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_space(mixed $c)
+ * Description: Checks for whitespace character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_space() to test which character codes are considered
+ * valid whitespace characters
+ */
+
+echo "*** Testing ctype_space() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($c = 1; $c < 256; $c++) {
+       if (ctype_space($c)) {
+               echo "character code $c is a space character\n";
+       }
+}
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_space() : usage variations ***
+character code 9 is a space character
+character code 10 is a space character
+character code 11 is a space character
+character code 12 is a space character
+character code 13 is a space character
+character code 28 is a space character
+character code 29 is a space character
+character code 30 is a space character
+character code 31 is a space character
+character code 32 is a space character
+character code 133 is a space character
+character code 160 is a space character
+===DONE===
diff --git a/ext/ctype/tests/ctype_space_variation3.phpt b/ext/ctype/tests/ctype_space_variation3.phpt
new file mode 100644 (file)
index 0000000..55d1496
--- /dev/null
@@ -0,0 +1,144 @@
+--TEST--
+Test ctype_space() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_space(mixed $c)
+ * Description: Checks for whitespace character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_space() to test
+ * which are considered valid whitespace character only strings
+ */
+
+echo "*** Testing ctype_space() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/  "This string contains just letters and spaces", // Simple string
+       "but this one contains some numbers too 123+456 = 678", // Mixed string
+       "",
+       " ",
+/*5*/  "a",
+       "ABCXYZ",
+       "abcxyz",
+       "ABCXYZ123DEF456",
+       "abczyz123DEF456",
+/*10*/ "\r\n",
+       "123",
+       "03F", // hexadecimal 'digits'
+       ")speci@! ch@r$(",
+       '@!$*',
+/*15*/ 'ABC',
+       'abc',
+       'ABC123',
+       'abc123',
+       "abc123\n",
+/*20*/ 'abc 123',
+       '',
+       ' ', 
+       base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+       "\"\n",
+/*25*/ " \t\r\n",
+/*26*/ "\v\f",
+);
+
+$iterator = 1;
+foreach($values as $value) {
+      echo "\n-- Iteration $iterator --\n";
+      var_dump( ctype_space($value) );
+      $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_space() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(true)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(true)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(true)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(true)
+
+-- Iteration 26 --
+bool(true)
+===DONE===
diff --git a/ext/ctype/tests/ctype_space_variation4.phpt b/ext/ctype/tests/ctype_space_variation4.phpt
new file mode 100644 (file)
index 0000000..82df3f4
--- /dev/null
@@ -0,0 +1,75 @@
+--TEST--
+Test ctype_space() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_space(mixed $c)
+ * Description: Checks for whitespace character(s)
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values as $c to ctype_space() to test behaviour
+ */
+
+echo "*** Testing ctype_space() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array (011, 012, 013, 014, 015, 040);
+$hex_values   = array (0x9, 0xA, 0xB, 0xC, 0xD, 0x20);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_space($c));
+       $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_space($c));
+       $iterator++;
+}
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_space() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+-- Iteration 5 --
+bool(true)
+-- Iteration 6 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+-- Iteration 5 --
+bool(true)
+-- Iteration 6 --
+bool(true)
+===DONE===
diff --git a/ext/ctype/tests/ctype_upper_basic.phpt b/ext/ctype/tests/ctype_upper_basic.phpt
new file mode 100644 (file)
index 0000000..88028a5
--- /dev/null
@@ -0,0 +1,33 @@
+--TEST--
+Test ctype_upper() function : basic functionality 
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_upper(mixed $c)
+ * Description: Checks for uppercase character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_upper() : basic functionality ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+$c1 = 'HELLOWORLD';
+$c2 = "Hello, World!\n";
+
+var_dump(ctype_upper($c1));
+var_dump(ctype_upper($c2));
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_upper() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_upper_error.phpt b/ext/ctype/tests/ctype_upper_error.phpt
new file mode 100644 (file)
index 0000000..623c1dd
--- /dev/null
@@ -0,0 +1,45 @@
+--TEST--
+Test ctype_upper() function : error conditions - incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_upper(mixed $c)
+ * Description: Checks for uppercase character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass incorrect number of arguments to ctype_upper() to test behaviour
+ */
+
+echo "*** Testing ctype_upper() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_upper() function with Zero arguments --\n";
+var_dump( ctype_upper() );
+
+//Test ctype_upper with one more than the expected number of arguments
+echo "\n-- Testing ctype_upper() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_upper($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_upper() : error conditions ***
+
+-- Testing ctype_upper() function with Zero arguments --
+
+Warning: ctype_upper() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_upper() function with more than expected no. of arguments --
+
+Warning: ctype_upper() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/ctype/tests/ctype_upper_variation1.phpt b/ext/ctype/tests/ctype_upper_variation1.phpt
new file mode 100644 (file)
index 0000000..73b75c0
--- /dev/null
@@ -0,0 +1,183 @@
+--TEST--
+Test ctype_upper() function : usage variations - different data types
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_upper(mixed $c)
+ * Description: Checks for uppercase character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_upper() to test behaviour
+ */
+
+echo "*** Testing ctype_upper() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C");
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+       public function __toString() {
+               return "HELLO";
+       }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+HI
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+       array(),
+
+       // string data
+/*19*/ "STRING",
+       'STRING',
+       $heredoc,
+       
+       // object data
+/*22*/ new classA(),
+
+       // undefined data
+/*23*/ @$undefined_var,
+
+       // unset data
+/*24*/ @$unset_var,
+
+       // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_upper()
+$iterator = 1;
+foreach($inputs as $input) {
+       echo "\n-- Iteration $iterator --\n";
+       var_dump( ctype_upper($input) );
+       $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_upper() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_upper_variation2.phpt b/ext/ctype/tests/ctype_upper_variation2.phpt
new file mode 100644 (file)
index 0000000..8d037d4
--- /dev/null
@@ -0,0 +1,91 @@
+--TEST--
+Test ctype_upper() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_upper(mixed $c)
+ * Description: Checks for uppercase character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_upper() to test which character codes are considered
+ * valid uppercase characters
+ */
+
+echo "*** Testing ctype_upper() : usage variations ***\n";
+$orig = setlocale(LC_CTYPE, "C");
+
+for ($i = 0; $i < 256; $i++) {
+       if (ctype_upper($i)) {
+               echo "character code $i is a uppercase character\n";
+       }
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_upper() : usage variations ***
+character code 65 is a uppercase character
+character code 66 is a uppercase character
+character code 67 is a uppercase character
+character code 68 is a uppercase character
+character code 69 is a uppercase character
+character code 70 is a uppercase character
+character code 71 is a uppercase character
+character code 72 is a uppercase character
+character code 73 is a uppercase character
+character code 74 is a uppercase character
+character code 75 is a uppercase character
+character code 76 is a uppercase character
+character code 77 is a uppercase character
+character code 78 is a uppercase character
+character code 79 is a uppercase character
+character code 80 is a uppercase character
+character code 81 is a uppercase character
+character code 82 is a uppercase character
+character code 83 is a uppercase character
+character code 84 is a uppercase character
+character code 85 is a uppercase character
+character code 86 is a uppercase character
+character code 87 is a uppercase character
+character code 88 is a uppercase character
+character code 89 is a uppercase character
+character code 90 is a uppercase character
+character code 192 is a uppercase character
+character code 193 is a uppercase character
+character code 194 is a uppercase character
+character code 195 is a uppercase character
+character code 196 is a uppercase character
+character code 197 is a uppercase character
+character code 198 is a uppercase character
+character code 199 is a uppercase character
+character code 200 is a uppercase character
+character code 201 is a uppercase character
+character code 202 is a uppercase character
+character code 203 is a uppercase character
+character code 204 is a uppercase character
+character code 205 is a uppercase character
+character code 206 is a uppercase character
+character code 207 is a uppercase character
+character code 208 is a uppercase character
+character code 209 is a uppercase character
+character code 210 is a uppercase character
+character code 211 is a uppercase character
+character code 212 is a uppercase character
+character code 213 is a uppercase character
+character code 214 is a uppercase character
+character code 216 is a uppercase character
+character code 217 is a uppercase character
+character code 218 is a uppercase character
+character code 219 is a uppercase character
+character code 220 is a uppercase character
+character code 221 is a uppercase character
+character code 222 is a uppercase character
+===DONE===
diff --git a/ext/ctype/tests/ctype_upper_variation3.phpt b/ext/ctype/tests/ctype_upper_variation3.phpt
new file mode 100644 (file)
index 0000000..93a5cb9
--- /dev/null
@@ -0,0 +1,143 @@
+--TEST--
+Test ctype_upper() function : usage variations - different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_upper(mixed $c)
+ * Description: Checks for uppercase character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_upper() to test
+ * which are considered valid uppercase character only strings
+ */
+
+echo "*** Testing ctype_upper() : usage variations ***\n";
+$orig = setlocale(LC_CTYPE, "C");
+
+$values = array(
+/*1*/  "This string contains just letters and spaces", // Simple string
+       "but this one contains some numbers too 123+456 = 678", // Mixed string
+       "",
+       " ",
+/*5*/  "a",
+       "ABCXYZ",
+       "abcxyz",
+       "ABCXYZ123DEF456",
+       "abczyz123DEF456",
+/*10*/ "\r\n",
+       "123",
+       "03F", // hexadecimal 'digits'
+       ")speci@! ch@r$(",
+       '@!$*',
+/*15*/ 'ABC',
+       'abc',
+       'ABC123',
+       'abc123',
+       'abc123\n',
+/*20*/ 'abc 123',
+       '',
+       ' ',
+       base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+       "abcXYZ",
+/*25*/ "ABC XYZ",
+/*26*/ "ABC+EFG*XYZ",
+);
+
+$iterator = 1;
+foreach($values as $value) {
+      echo "\n-- Iteration $iterator --\n";
+      var_dump( ctype_upper($value) );
+      $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_upper() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(true)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+
+-- Iteration 26 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_upper_variation4.phpt b/ext/ctype/tests/ctype_upper_variation4.phpt
new file mode 100644 (file)
index 0000000..d3d464a
--- /dev/null
@@ -0,0 +1,67 @@
+--TEST--
+Test ctype_upper() function : usage variations - octal and hexadecimal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_upper(mixed $c)
+ * Description: Checks for uppercase character(s) 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass octal and hexadecimal values to ctype_upper() to test behaviour
+ */
+
+echo "*** Testing ctype_upper() : usage variations ***\n";
+$orig = setlocale(LC_CTYPE, "C");
+
+$octal_values = array(0101, 0102, 0103, 0104);
+$hex_values =   array(0x41, 0x42, 0x43, 0x44);
+
+echo "\n-- Octal Values --\n";
+$iterator = 1;
+foreach($octal_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_upper($c));
+       $iterator++;
+}
+
+echo "\n-- Hexadecimal Values --\n";
+$iterator = 1;
+foreach($hex_values as $c) {
+       echo "-- Iteration $iterator --\n";
+       var_dump(ctype_upper($c));
+       $iterator++;
+}
+
+setlocale(LC_CTYPE, $orig);
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_upper() : usage variations ***
+
+-- Octal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+
+-- Hexadecimal Values --
+-- Iteration 1 --
+bool(true)
+-- Iteration 2 --
+bool(true)
+-- Iteration 3 --
+bool(true)
+-- Iteration 4 --
+bool(true)
+===DONE===
diff --git a/ext/ctype/tests/ctype_xdigit_basic.phpt b/ext/ctype/tests/ctype_xdigit_basic.phpt
new file mode 100644 (file)
index 0000000..fa46223
--- /dev/null
@@ -0,0 +1,32 @@
+--TEST--
+Test ctype_xdigit() function : basic functionality 
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_xdigit(mixed $c)
+ * Description: Checks for character(s) representing a hexadecimal digit 
+ * Source code: ext/ctype/ctype.c
+ */
+
+echo "*** Testing ctype_xdigit() : basic functionality ***\n";
+$orig = setlocale(LC_CTYPE, "C"); 
+
+$c1 = 'abcdefABCDEF0123456789';
+$c2 = 'face 034';
+
+var_dump(ctype_xdigit($c1));
+var_dump(ctype_xdigit($c2));
+
+setlocale(LC_CTYPE, $orig); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_xdigit() : basic functionality ***
+bool(true)
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_xdigit_error.phpt b/ext/ctype/tests/ctype_xdigit_error.phpt
new file mode 100644 (file)
index 0000000..13006c2
--- /dev/null
@@ -0,0 +1,45 @@
+--TEST--
+Test ctype_xdigit() function : error conditions - Incorrect number of args
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_xdigit(mixed $c)
+ * Description: Checks for character(s) representing a hexadecimal digit 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass incorrect number of arguments to ctype_xdigit() to test behaviour
+ */
+
+echo "*** Testing ctype_xdigit() : error conditions ***\n";
+
+// Zero arguments
+echo "\n-- Testing ctype_xdigit() function with Zero arguments --\n";
+var_dump( ctype_xdigit() );
+
+//Test ctype_xdigit with one more than the expected number of arguments
+echo "\n-- Testing ctype_xdigit() function with more than expected no. of arguments --\n";
+$c = 1;
+$extra_arg = 10;
+var_dump( ctype_xdigit($c, $extra_arg) );
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_xdigit() : error conditions ***
+
+-- Testing ctype_xdigit() function with Zero arguments --
+
+Warning: ctype_xdigit() expects exactly 1 parameter, 0 given in %s on line %d
+NULL
+
+-- Testing ctype_xdigit() function with more than expected no. of arguments --
+
+Warning: ctype_xdigit() expects exactly 1 parameter, 2 given in %s on line %d
+NULL
+===DONE===
diff --git a/ext/ctype/tests/ctype_xdigit_variation1.phpt b/ext/ctype/tests/ctype_xdigit_variation1.phpt
new file mode 100644 (file)
index 0000000..f3cebe3
--- /dev/null
@@ -0,0 +1,183 @@
+--TEST--
+Test ctype_xdigit() function : usage variations - different data typse as $c arg
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_xdigit(mixed $c)
+ * Description: Checks for character(s) representing a hexadecimal digit 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different data types as $c argument to ctype_xdigit() to test behaviour
+ */
+
+echo "*** Testing ctype_xdigit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+//get an unset variable
+$unset_var = 10;
+unset ($unset_var);
+
+// get a class
+class classA
+{
+  public function __toString() {
+    return "ABcd";
+  }
+}
+
+// heredoc string
+$heredoc = <<<EOT
+234
+EOT;
+
+// get a resource variable
+$fp = fopen(__FILE__, "r");
+
+// unexpected values to be passed to $c argument
+$inputs = array(
+
+       // int data
+/*1*/  0,
+       1,
+       12345,
+       -2345,
+
+       // float data
+/*5*/  10.5,
+       -10.5,
+       12.3456789000e10,
+       12.3456789000E-10,
+       .5,
+
+       // null data
+/*10*/ NULL,
+       null,
+
+       // boolean data
+/*12*/ true,
+       false,
+       TRUE,
+       FALSE,
+       
+       // empty data
+/*16*/ "",
+       '',
+       array(),
+
+       // string data
+/*19*/ "456",
+       'def',
+       $heredoc,
+       
+       // object data
+/*22*/ new classA(),
+
+       // undefined data
+/*23*/ @$undefined_var,
+
+       // unset data
+/*24*/ @$unset_var,
+
+       // resource variable
+/*25*/ $fp
+);
+
+// loop through each element of $inputs to check the behavior of ctype_xdigit()
+$iterator = 1;
+foreach($inputs as $input) {
+       echo "\n-- Iteration $iterator --\n";
+       var_dump( ctype_xdigit($input) );
+       $iterator++;
+};
+
+fclose($fp);
+
+setlocale(LC_CTYPE, $orig); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_xdigit() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(false)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(false)
+
+-- Iteration 12 --
+bool(false)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(false)
+
+-- Iteration 16 --
+bool(false)
+
+-- Iteration 17 --
+bool(false)
+
+-- Iteration 18 --
+bool(false)
+
+-- Iteration 19 --
+bool(true)
+
+-- Iteration 20 --
+bool(true)
+
+-- Iteration 21 --
+bool(true)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(false)
+
+-- Iteration 25 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_xdigit_variation2.phpt b/ext/ctype/tests/ctype_xdigit_variation2.phpt
new file mode 100644 (file)
index 0000000..dfb229e
--- /dev/null
@@ -0,0 +1,58 @@
+--TEST--
+Test ctype_xdigit() function : usage variations - different integers
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_xdigit(mixed $c)
+ * Description: Checks for character(s) representing a hexadecimal digit 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different integers to ctype_xdigit() to test which character codes are considered
+ * valid hexadecimal 'digits'
+ */
+
+echo "*** Testing ctype_xdigit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+for($c = 1; $c < 256; $c++) {
+       if (ctype_xdigit($c)) {
+               echo "character code $c is a hexadecimal 'digit'\n";
+       }
+}
+
+setlocale(LC_CTYPE, $orig); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_xdigit() : usage variations ***
+character code 48 is a hexadecimal 'digit'
+character code 49 is a hexadecimal 'digit'
+character code 50 is a hexadecimal 'digit'
+character code 51 is a hexadecimal 'digit'
+character code 52 is a hexadecimal 'digit'
+character code 53 is a hexadecimal 'digit'
+character code 54 is a hexadecimal 'digit'
+character code 55 is a hexadecimal 'digit'
+character code 56 is a hexadecimal 'digit'
+character code 57 is a hexadecimal 'digit'
+character code 65 is a hexadecimal 'digit'
+character code 66 is a hexadecimal 'digit'
+character code 67 is a hexadecimal 'digit'
+character code 68 is a hexadecimal 'digit'
+character code 69 is a hexadecimal 'digit'
+character code 70 is a hexadecimal 'digit'
+character code 97 is a hexadecimal 'digit'
+character code 98 is a hexadecimal 'digit'
+character code 99 is a hexadecimal 'digit'
+character code 100 is a hexadecimal 'digit'
+character code 101 is a hexadecimal 'digit'
+character code 102 is a hexadecimal 'digit'
+===DONE===
diff --git a/ext/ctype/tests/ctype_xdigit_variation3.phpt b/ext/ctype/tests/ctype_xdigit_variation3.phpt
new file mode 100644 (file)
index 0000000..698acfe
--- /dev/null
@@ -0,0 +1,144 @@
+--TEST--
+Test ctype_xdigit() function : usage variations - Different strings
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_xdigit(mixed $c)
+ * Description: Checks for character(s) representing a hexadecimal digit 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass strings containing different character types to ctype_xdigit() to test
+ * which are considered valid hexadecimal 'digit' only strings
+ */
+
+echo "*** Testing ctype_xdigit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+$values = array(
+/*1*/  "This string contains just letters and spaces", // Simple string
+       "but this one contains some numbers too 123+456 = 678", // Mixed string
+       "",
+       " ",
+/*5*/  "a",
+       "ABCXYZ",
+       "abcxyz",
+       "ABCXYZ123DEF456",
+       "abczyz123DEF456",
+/*10*/ "\r\n",
+       "123",
+       "03F", // hexadecimal 'digits'
+       ")speci@! ch@r$(",
+       '@!$*',
+/*15*/ 'ABC',
+       'abc',
+       'ABC123',
+       'abc123',
+       'abc123\n',
+/*20*/ 'abc 123',
+       '',
+       ' ',
+       base64_decode("w4DDoMOHw6fDiMOo"), // non-ascii characters
+       'ABCdef07',
+       "56ea\tFB",
+       "0x2A"
+       );
+
+$iterator = 1;
+foreach($values as $value) {
+      echo "\n-- Iteration $iterator --\n";
+      var_dump( ctype_xdigit($value) );
+      $iterator++;
+};
+
+setlocale(LC_CTYPE, $orig); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_xdigit() : usage variations ***
+
+-- Iteration 1 --
+bool(false)
+
+-- Iteration 2 --
+bool(false)
+
+-- Iteration 3 --
+bool(false)
+
+-- Iteration 4 --
+bool(false)
+
+-- Iteration 5 --
+bool(true)
+
+-- Iteration 6 --
+bool(false)
+
+-- Iteration 7 --
+bool(false)
+
+-- Iteration 8 --
+bool(false)
+
+-- Iteration 9 --
+bool(false)
+
+-- Iteration 10 --
+bool(false)
+
+-- Iteration 11 --
+bool(true)
+
+-- Iteration 12 --
+bool(true)
+
+-- Iteration 13 --
+bool(false)
+
+-- Iteration 14 --
+bool(false)
+
+-- Iteration 15 --
+bool(true)
+
+-- Iteration 16 --
+bool(true)
+
+-- Iteration 17 --
+bool(true)
+
+-- Iteration 18 --
+bool(true)
+
+-- Iteration 19 --
+bool(false)
+
+-- Iteration 20 --
+bool(false)
+
+-- Iteration 21 --
+bool(false)
+
+-- Iteration 22 --
+bool(false)
+
+-- Iteration 23 --
+bool(false)
+
+-- Iteration 24 --
+bool(true)
+
+-- Iteration 25 --
+bool(false)
+
+-- Iteration 26 --
+bool(false)
+===DONE===
diff --git a/ext/ctype/tests/ctype_xdigit_variation4.phpt b/ext/ctype/tests/ctype_xdigit_variation4.phpt
new file mode 100644 (file)
index 0000000..7bccfe2
--- /dev/null
@@ -0,0 +1,87 @@
+--TEST--
+Test ctype_xdigit() function : usage variations - heaxadecimal and octal values
+--SKIPIF--
+<?php
+if( ini_get("unicode.semantics") == "1") {
+    die('skip do not run when unicode on');
+}
+?>
+--FILE--
+<?php
+/* Prototype  : bool ctype_xdigit(mixed $c)
+ * Description: Checks for character(s) representing a hexadecimal digit 
+ * Source code: ext/ctype/ctype.c
+ */
+
+/*
+ * Pass different hexadecimal and octal values that:
+ * 1. contain hexadecimal digits
+ * 2. correspond to character codes recognised as hexadecimal digits (see variation2)
+ *    referred to as 'correct' integers below
+ */
+
+echo "*** Testing ctype_xdigit() : usage variations ***\n";
+
+$orig = setlocale(LC_CTYPE, "C"); 
+
+// contain hexadecimal digits but do not correspond to 'correct' ints
+$octal_values1 = array(012, 013, 014, 015);
+
+// correspond to 'correct' integers
+$octal_values2 = array(061, 062, 063, 064);
+
+// contain hexadecimal digits but do not correspond to 'correct' ints
+$hex_values1 = array(0x1A, 0x1B, 0x1C, 0x1D);
+
+//correspond to 'correct' integers
+$hex_values2 = array(0x61, 0x62, 0x63, 0x64);
+
+echo "\n-- Octal values --\n";
+echo "'Incorrect' Integers: \n";
+foreach($octal_values1 as $c) {
+       var_dump(ctype_xdigit($c));
+}
+echo "'Correct' Integers: \n";
+foreach($octal_values2 as $c) {
+       var_dump(ctype_xdigit($c));
+}
+
+echo "\n-- Hexadecimal values --\n";
+echo "'Incorrect' Integers: \n";
+foreach($hex_values1 as $c) {
+       var_dump(ctype_xdigit($c));
+}
+echo "'Correct' Integers: \n";
+foreach($hex_values2 as $c) {
+       var_dump(ctype_xdigit($c));
+}
+setlocale(LC_CTYPE, $orig); 
+?>
+===DONE===
+--EXPECTF--
+*** Testing ctype_xdigit() : usage variations ***
+
+-- Octal values --
+'Incorrect' Integers: 
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+'Correct' Integers: 
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+
+-- Hexadecimal values --
+'Incorrect' Integers: 
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+'Correct' Integers: 
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+===DONE===