substr.phpt 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. --TEST--
  2. Testing substr() function
  3. --FILE--
  4. <?php
  5. /* Prototype: string substr( string str, int start[, int length] )
  6. * Description: Returns the portion of string specified by the start and length parameters.
  7. */
  8. $strings_array = array( NULL, "", 12345, "abcdef", "123abc", "_123abc");
  9. /* Testing for error conditions */
  10. echo "*** Testing for error conditions ***\n";
  11. /* Zero Argument */
  12. var_dump( substr() );
  13. /* NULL as Argument */
  14. var_dump( substr(NULL) );
  15. /* Single Argument */
  16. var_dump( substr("abcde") );
  17. /* Scalar Argument */
  18. var_dump( substr(12345) );
  19. /* more than valid number of arguments ( valid are 2 or 3 ) */
  20. var_dump( substr("abcde", 2, 3, 4) );
  21. $counter = 1;
  22. foreach ($strings_array as $str) {
  23. /* variations with two arguments */
  24. /* start values >, < and = 0 */
  25. echo ("\n--- Iteration ".$counter." ---\n");
  26. echo ("\n-- Variations for two arguments --\n");
  27. var_dump ( substr($str, 1) );
  28. var_dump ( substr($str, 0) );
  29. var_dump ( substr($str, -2) );
  30. /* variations with three arguments */
  31. /* start value variations with length values */
  32. echo ("\n-- Variations for three arguments --\n");
  33. var_dump ( substr($str, 1, 3) );
  34. var_dump ( substr($str, 1, 0) );
  35. var_dump ( substr($str, 1, -3) );
  36. var_dump ( substr($str, 0, 3) );
  37. var_dump ( substr($str, 0, 0) );
  38. var_dump ( substr($str, 0, -3) );
  39. var_dump ( substr($str, -2, 3) );
  40. var_dump ( substr($str, -2, 0 ) );
  41. var_dump ( substr($str, -2, -3) );
  42. $counter++;
  43. }
  44. /* variation of start and length to point to same element */
  45. echo ("\n*** Testing for variations of start and length to point to same element ***\n");
  46. var_dump (substr("abcde" , 2, -2) );
  47. var_dump (substr("abcde" , -3, -2) );
  48. /* Testing to return empty string when start denotes the position beyond the truncation (set by negative length) */
  49. echo ("\n*** Testing for start > truncation ***\n");
  50. var_dump (substr("abcdef" , 4, -4) );
  51. /* String with null character */
  52. echo ("\n*** Testing for string with null characters ***\n");
  53. var_dump (substr("abc\x0xy\x0z" ,2) );
  54. /* String with international characters */
  55. echo ("\n*** Testing for string with international characters ***\n");
  56. var_dump (substr('\xIñtërnâtiônàlizætiøn',3) );
  57. /* start <0 && -start > length */
  58. echo "\n*** Start before the first char ***\n";
  59. var_dump (substr("abcd" , -8) );
  60. echo"\nDone";
  61. ?>
  62. --EXPECTF--
  63. *** Testing for error conditions ***
  64. Warning: substr() expects at least 2 parameters, 0 given in %s on line %d
  65. NULL
  66. Warning: substr() expects at least 2 parameters, 1 given in %s on line %d
  67. NULL
  68. Warning: substr() expects at least 2 parameters, 1 given in %s on line %d
  69. NULL
  70. Warning: substr() expects at least 2 parameters, 1 given in %s on line %d
  71. NULL
  72. Warning: substr() expects at most 3 parameters, 4 given in %s on line %d
  73. NULL
  74. --- Iteration 1 ---
  75. -- Variations for two arguments --
  76. bool(false)
  77. bool(false)
  78. bool(false)
  79. -- Variations for three arguments --
  80. bool(false)
  81. bool(false)
  82. bool(false)
  83. bool(false)
  84. bool(false)
  85. bool(false)
  86. bool(false)
  87. bool(false)
  88. bool(false)
  89. --- Iteration 2 ---
  90. -- Variations for two arguments --
  91. bool(false)
  92. bool(false)
  93. bool(false)
  94. -- Variations for three arguments --
  95. bool(false)
  96. bool(false)
  97. bool(false)
  98. bool(false)
  99. bool(false)
  100. bool(false)
  101. bool(false)
  102. bool(false)
  103. bool(false)
  104. --- Iteration 3 ---
  105. -- Variations for two arguments --
  106. string(4) "2345"
  107. string(5) "12345"
  108. string(2) "45"
  109. -- Variations for three arguments --
  110. string(3) "234"
  111. string(0) ""
  112. string(1) "2"
  113. string(3) "123"
  114. string(0) ""
  115. string(2) "12"
  116. string(2) "45"
  117. string(0) ""
  118. string(0) ""
  119. --- Iteration 4 ---
  120. -- Variations for two arguments --
  121. string(5) "bcdef"
  122. string(6) "abcdef"
  123. string(2) "ef"
  124. -- Variations for three arguments --
  125. string(3) "bcd"
  126. string(0) ""
  127. string(2) "bc"
  128. string(3) "abc"
  129. string(0) ""
  130. string(3) "abc"
  131. string(2) "ef"
  132. string(0) ""
  133. string(0) ""
  134. --- Iteration 5 ---
  135. -- Variations for two arguments --
  136. string(5) "23abc"
  137. string(6) "123abc"
  138. string(2) "bc"
  139. -- Variations for three arguments --
  140. string(3) "23a"
  141. string(0) ""
  142. string(2) "23"
  143. string(3) "123"
  144. string(0) ""
  145. string(3) "123"
  146. string(2) "bc"
  147. string(0) ""
  148. string(0) ""
  149. --- Iteration 6 ---
  150. -- Variations for two arguments --
  151. string(6) "123abc"
  152. string(7) "_123abc"
  153. string(2) "bc"
  154. -- Variations for three arguments --
  155. string(3) "123"
  156. string(0) ""
  157. string(3) "123"
  158. string(3) "_12"
  159. string(0) ""
  160. string(4) "_123"
  161. string(2) "bc"
  162. string(0) ""
  163. string(0) ""
  164. *** Testing for variations of start and length to point to same element ***
  165. string(1) "c"
  166. string(1) "c"
  167. *** Testing for start > truncation ***
  168. bool(false)
  169. *** Testing for string with null characters ***
  170. string(6) "c�xy�z"
  171. *** Testing for string with international characters ***
  172. string(26) "ñtërnâtiônàlizætiøn"
  173. *** Start before the first char ***
  174. string(4) "abcd"
  175. Done