php-src/ext/standard/tests/strings/strpos.phpt
Raghubansh Kumar 4b731b1af0 fix tests
2007-11-09 12:02:42 +00:00

340 lines
9.1 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--TEST--
Test strpos() function
--INI--
precision=14
--FILE--
<?php
/* Prototype: int strpos ( string $haystack, mixed $needle [, int $offset] );
Description: Find position of first occurrence of a string
*/
echo "*** Testing basic functionality of strpos() ***\n";
var_dump( strpos("test string", "test") );
var_dump( strpos("test string", "string") );
var_dump( strpos("test string", "strin") );
var_dump( strpos("test string", "t s") );
var_dump( strpos("test string", "g") );
var_dump( strpos("te".chr(0)."st", chr(0)) );
var_dump( strpos("tEst", "test") );
var_dump( strpos("teSt", "test") );
var_dump( @strpos("", "") );
var_dump( @strpos("a", "") );
var_dump( @strpos("", "a") );
var_dump( @strpos("\\\\a", "\\a") );
echo "\n*** Testing stropos() to find various needles and a long string ***\n";
$string =
"Hello world,012033 -3.3445 NULL TRUE FALSE\0 abcd\xxyz \x000 octal\n
abcd$:Hello world";
/* needles in an array to get the position of needle in $string */
$needles = array(
"Hello world",
"WORLD",
"\0",
"\x00",
"\x000",
"abcd",
"xyz",
"octal",
"-3",
-3,
"-3.344",
-3.344,
NULL,
"NULL",
"0",
0,
TRUE,
"TRUE",
"1",
1,
FALSE,
"FALSE",
" ",
" ",
'b',
'\n',
"\n",
"12",
"12twelve",
$string
);
/* loop through to get the "needle" position in $string */
for( $i = 0; $i < count($needles); $i++ ) {
echo "Position of '$needles[$i]' is => ";
var_dump( strpos($string, $needles[$i]) );
}
echo "\n*** Testing strpos() with possible variations in offset ***\n";
$offset_values = array (
1, // offset = 1
"string", // offset as string, converts to zero
NULL, // offset as string, converts to zero
"", // offset as string, converts to zero
"12string", // mixed string with int and chars
"0",
TRUE,
NULL,
FALSE,
"string12",
"12.3string", // mixed string with float and chars
);
/* loop through to get the "needle" position in $string */
for( $i = 0; $i < count( $offset_values ); $i++ ) {
echo "Position of 'Hello' with offset '$offset_values[$i]' is => ";
var_dump( strpos($string, "Hello", $offset_values[$i]) );
}
echo "\n*** Testing Miscelleneous input data ***\n";
echo "-- Passing objects as string and needle --\n";
/* we get "Catchable fatal error: saying Object of class needle could not be
converted to string" by default when an object is passed instead of string:
The error can be avoided by chosing the __toString magix method as follows: */
class string
{
function __toString() {
return "Hello, world";
}
}
$obj_string = new string;
class needle
{
function __toString() {
return "world";
}
}
$obj_needle = new needle;
var_dump( strpos("$obj_string", "$obj_needle") );
echo "\n-- Passing an array as string and needle --\n";
$needles = array("hello", "?world", "!$%**()%**[][[[&@#~!");
var_dump( strpos($needles, $needles) ); // won't work
var_dump( strpos("hello?world,!$%**()%**[][[[&@#~!", "$needles[1]") ); // works
var_dump( strpos("hello?world,!$%**()%**[][[[&@#~!", "$needles[2]") ); // works
echo "\n-- Passing Resources as string and needle --\n";
$resource1 = fopen(__FILE__, "r");
$resource2 = opendir(".");
var_dump( strpos($resource1, $resource1) );
var_dump( strpos($resource1, $resource2) );
echo "\n-- Posiibilities with null --\n";
var_dump( strpos("", NULL) );
var_dump( strpos(NULL, NULL) );
var_dump( strpos("a", NULL) );
var_dump( strpos("/x0", "0") ); // Hexadecimal NUL
echo "\n-- A longer and heredoc string --\n";
$string = <<<EOD
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
EOD;
var_dump( strpos($string, "abcd") );
var_dump( strpos($string, "abcd", 72) ); // 72 -> "\n" in the first line
var_dump( strpos($string, "abcd", 73) ); // 73 -> "abcd" in the second line
var_dump( strpos($string, "9", (strlen($string)-1)) );
echo "\n-- A heredoc null string --\n";
$str = <<<EOD
EOD;
var_dump( strpos($str, "\0") );
var_dump( strpos($str, NULL) );
var_dump( strpos($str, "0") );
echo "\n-- simple and complex syntax strings --\n";
$needle = 'world';
/* Simple syntax */
var_dump( strpos("Hello, world", "$needle") ); // works
var_dump( strpos("Hello, world'S", "$needle'S") ); // works
var_dump( strpos("Hello, worldS", "$needleS") ); // won't work
/* String with curly braces, complex syntax */
var_dump( strpos("Hello, worldS", "${needle}S") ); // works
var_dump( strpos("Hello, worldS", "{$needle}S") ); // works
echo "\n-- complex strings containing other than 7-bit chars --\n";
$str = chr(0).chr(128).chr(129).chr(234).chr(235).chr(254).chr(255);
echo "-- Positions of some chars in the string '$str' are as follows --\n";
echo chr(128)." => ";
var_dump( strpos($str, chr(128)) );
echo chr(255)." => ";
var_dump( strpos($str, chr(255), 3) );
echo chr(256)." => ";
var_dump( strpos($str, chr(256)) );
echo "\n*** Testing error conditions ***";
var_dump( strpos($string, "") );
var_dump( strpos() ); // zero argument
var_dump( strpos("") ); // null argument
var_dump( strpos($string) ); // without "needle"
var_dump( strpos("a", "b", "c", "d") ); // args > expected
var_dump( strpos($string, "test", strlen($string)+1) ); // offset > strlen()
var_dump( strpos($string, "test", -1) ); // offset < 0
var_dump( strpos(NULL, "") );
echo "\nDone";
fclose($resource1);
closedir($resource2);
?>
--EXPECTF--
*** Testing basic functionality of strpos() ***
int(0)
int(5)
int(5)
int(3)
int(10)
int(2)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
int(1)
*** Testing stropos() to find various needles and a long string ***
Position of 'Hello world' is => int(0)
Position of 'WORLD' is => bool(false)
Position of '' is => int(46)
Position of '' is => int(46)
Position of '0' is => int(58)
Position of 'abcd' is => int(48)
Position of 'xyz' is => int(54)
Position of 'octal' is => int(61)
Position of '-3' is => int(19)
Position of '-3' is => bool(false)
Position of '-3.344' is => int(19)
Position of '-3.344' is => bool(false)
Position of '' is => int(46)
Position of 'NULL' is => int(31)
Position of '0' is => int(12)
Position of '0' is => int(46)
Position of '1' is => bool(false)
Position of 'TRUE' is => int(36)
Position of '1' is => int(13)
Position of '1' is => bool(false)
Position of '' is => int(46)
Position of 'FALSE' is => int(41)
Position of ' ' is => int(5)
Position of ' ' is => int(26)
Position of 'b' is => int(49)
Position of '\n' is => bool(false)
Position of '
' is => int(66)
Position of '12' is => int(13)
Position of '12twelve' is => bool(false)
Position of 'Hello world,012033 -3.3445 NULL TRUE FALSE abcd\xxyz 0 octal
abcd$:Hello world' is => int(0)
*** Testing strpos() with possible variations in offset ***
Position of 'Hello' with offset '1' is => int(74)
Position of 'Hello' with offset 'string' is => int(0)
Position of 'Hello' with offset '' is => int(0)
Position of 'Hello' with offset '' is => int(0)
Position of 'Hello' with offset '12string' is => int(74)
Position of 'Hello' with offset '0' is => int(0)
Position of 'Hello' with offset '1' is => int(74)
Position of 'Hello' with offset '' is => int(0)
Position of 'Hello' with offset '' is => int(0)
Position of 'Hello' with offset 'string12' is => int(0)
Position of 'Hello' with offset '12.3string' is => int(74)
*** Testing Miscelleneous input data ***
-- Passing objects as string and needle --
int(7)
-- Passing an array as string and needle --
Notice: Array to string conversion in %s on line %d
bool(false)
int(5)
int(12)
-- Passing Resources as string and needle --
%s
%s
-- Posiibilities with null --
bool(false)
bool(false)
bool(false)
int(2)
-- A longer and heredoc string --
int(0)
int(73)
int(73)
int(728)
-- A heredoc null string --
bool(false)
bool(false)
bool(false)
-- simple and complex syntax strings --
int(7)
int(7)
Notice: Undefined variable: needleS in %s on line %d
Warning: strpos(): Empty delimiter in %s on line %d
bool(false)
int(7)
int(7)
-- complex strings containing other than 7-bit chars --
-- Positions of some chars in the string '<00><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' are as follows --
<EFBFBD> => int(1)
<EFBFBD> => int(6)
=> int(0)
*** Testing error conditions ***
Warning: strpos(): Empty delimiter in %s on line %d
bool(false)
Warning: Wrong parameter count for strpos() in %s on line %d
NULL
Warning: Wrong parameter count for strpos() in %s on line %d
NULL
Warning: Wrong parameter count for strpos() in %s on line %d
NULL
Warning: Wrong parameter count for strpos() in %s on line %d
NULL
Warning: strpos(): Offset not contained in string in %s on line %d
bool(false)
Warning: strpos(): Offset not contained in string in %s on line %d
bool(false)
Warning: strpos(): Empty delimiter in %s on line %d
bool(false)
Done