Annotation of embedaddon/php/ext/standard/tests/strings/strpos.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: Test strpos() function
        !             3: --INI--
        !             4: precision=14
        !             5: --FILE--
        !             6: <?php
        !             7: /* Prototype: int strpos ( string $haystack, mixed $needle [, int $offset] );
        !             8:    Description: Find position of first occurrence of a string
        !             9: */
        !            10: 
        !            11: echo "*** Testing basic functionality of strpos() ***\n";
        !            12: var_dump( strpos("test string", "test") );
        !            13: var_dump( strpos("test string", "string") );
        !            14: var_dump( strpos("test string", "strin") );
        !            15: var_dump( strpos("test string", "t s") );
        !            16: var_dump( strpos("test string", "g") );
        !            17: var_dump( strpos("te".chr(0)."st", chr(0)) );
        !            18: var_dump( strpos("tEst", "test") );
        !            19: var_dump( strpos("teSt", "test") );
        !            20: var_dump( @strpos("", "") );
        !            21: var_dump( @strpos("a", "") );
        !            22: var_dump( @strpos("", "a") );
        !            23: var_dump( @strpos("\\\\a", "\\a") );
        !            24: 
        !            25: 
        !            26: echo "\n*** Testing strpos() to find various needles and a long string ***\n";
        !            27: $string = 
        !            28: "Hello world,012033 -3.3445     NULL TRUE FALSE\0 abcd\xxyz \x000 octal\n
        !            29: abcd$:Hello world";
        !            30: 
        !            31: /* needles in an array to get the position of needle in $string */
        !            32: $needles = array(
        !            33:   "Hello world",       
        !            34:   "WORLD", 
        !            35:   "\0", 
        !            36:   "\x00", 
        !            37:   "\x000", 
        !            38:   "abcd", 
        !            39:   "xyz", 
        !            40:   "octal", 
        !            41:   "-3", 
        !            42:   -3, 
        !            43:   "-3.344", 
        !            44:   -3.344, 
        !            45:   NULL, 
        !            46:   "NULL",
        !            47:   "0",
        !            48:   0, 
        !            49:   TRUE, 
        !            50:   "TRUE",
        !            51:   "1",
        !            52:   1,
        !            53:   FALSE,
        !            54:   "FALSE",
        !            55:   " ",
        !            56:   "     ",
        !            57:   'b',
        !            58:   '\n',
        !            59:   "\n",
        !            60:   "12",
        !            61:   "12twelve",
        !            62:   $string
        !            63: );
        !            64: 
        !            65: /* loop through to get the "needle" position in $string */
        !            66: for( $i = 0; $i < count($needles); $i++ ) {
        !            67:   echo "Position of '$needles[$i]' is => ";
        !            68:   var_dump( strpos($string, $needles[$i]) );
        !            69: }  
        !            70: 
        !            71: 
        !            72: echo "\n*** Testing strpos() with possible variations in offset ***\n";
        !            73: $offset_values = array (
        !            74:   1,  // offset = 1
        !            75:   "string",  // offset as string, converts to zero
        !            76:   NULL,  // offset as string, converts to zero
        !            77:   "",  // offset as string, converts to zero
        !            78:   "12string",  // mixed string with int and chars
        !            79:   "0",
        !            80:   TRUE,
        !            81:   NULL,
        !            82:   FALSE,
        !            83:   "string12",
        !            84:   "12.3string",  // mixed string with float and chars
        !            85: );
        !            86: 
        !            87: /* loop through to get the "needle" position in $string */
        !            88: for( $i = 0; $i < count( $offset_values ); $i++ ) {
        !            89:   echo "Position of 'Hello' with offset '$offset_values[$i]' is => ";
        !            90:   var_dump( strpos($string, "Hello", $offset_values[$i]) );
        !            91: }
        !            92: 
        !            93: 
        !            94: echo "\n*** Testing Miscelleneous input data ***\n";
        !            95: 
        !            96: echo "-- Passing objects as string and needle --\n";
        !            97: /* we get "Catchable fatal error: saying Object of class needle could not be
        !            98:  converted to string" by default when an object is passed instead of string:
        !            99:  The error can be avoided by chosing the __toString magix method as follows: */
        !           100: 
        !           101: class string 
        !           102: {
        !           103:   function __toString() {
        !           104:     return "Hello, world";
        !           105:   }
        !           106: }
        !           107: $obj_string = new string;
        !           108: 
        !           109: class needle 
        !           110: {
        !           111:   function __toString() {
        !           112:     return "world";
        !           113:   }
        !           114: }
        !           115: $obj_needle = new needle;
        !           116: 
        !           117: var_dump( strpos("$obj_string", "$obj_needle") );
        !           118: 
        !           119: echo "\n-- Passing an array as string and needle --\n";
        !           120: $needles = array("hello", "?world", "!$%**()%**[][[[&@#~!");
        !           121: var_dump( strpos($needles, $needles) );         // won't work
        !           122: var_dump( strpos("hello?world,!$%**()%**[][[[&@#~!", "$needles[1]") ); // works
        !           123: var_dump( strpos("hello?world,!$%**()%**[][[[&@#~!", "$needles[2]") ); // works
        !           124: 
        !           125: 
        !           126: echo "\n-- Passing Resources as string and needle --\n"; 
        !           127: $resource1 = fopen(__FILE__, "r");
        !           128: $resource2 = opendir(".");
        !           129: var_dump( strpos($resource1, $resource1) );
        !           130: var_dump( strpos($resource1, $resource2) );
        !           131: 
        !           132: echo "\n-- Posiibilities with null --\n";
        !           133: var_dump( strpos("", NULL) );
        !           134: var_dump( strpos(NULL, NULL) );
        !           135: var_dump( strpos("a", NULL) );
        !           136: var_dump( strpos("/x0", "0") );         // Hexadecimal NUL
        !           137: 
        !           138: echo "\n-- A longer and heredoc string --\n";
        !           139: $string = <<<EOD
        !           140: abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
        !           141: abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
        !           142: abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
        !           143: abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
        !           144: abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
        !           145: abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
        !           146: abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
        !           147: abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
        !           148: abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
        !           149: abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789
        !           150: EOD;
        !           151: var_dump( strpos($string, "abcd") );
        !           152: var_dump( strpos($string, "abcd", 72) );  // 72 -> "\n" in the first line
        !           153: var_dump( strpos($string, "abcd", 73) );  // 73 -> "abcd" in the second line
        !           154: var_dump( strpos($string, "9", (strlen($string)-1)) );
        !           155: 
        !           156: echo "\n-- A heredoc null string --\n";
        !           157: $str = <<<EOD
        !           158: EOD;
        !           159: var_dump( strpos($str, "\0") );
        !           160: var_dump( strpos($str, NULL) );
        !           161: var_dump( strpos($str, "0") );
        !           162: 
        !           163: 
        !           164: echo "\n-- simple and complex syntax strings --\n";
        !           165: $needle = 'world';
        !           166: 
        !           167: /* Simple syntax */
        !           168: var_dump( strpos("Hello, world", "$needle") );  // works 
        !           169: var_dump( strpos("Hello, world'S", "$needle'S") );  // works
        !           170: var_dump( strpos("Hello, worldS", "$needleS") );  // won't work 
        !           171: 
        !           172: /* String with curly braces, complex syntax */
        !           173: var_dump( strpos("Hello, worldS", "${needle}S") );  // works
        !           174: var_dump( strpos("Hello, worldS", "{$needle}S") );  // works
        !           175: 
        !           176: 
        !           177: echo "\n-- complex strings containing other than 7-bit chars --\n";
        !           178: $str = chr(0).chr(128).chr(129).chr(234).chr(235).chr(254).chr(255);
        !           179: echo "-- Positions of some chars in the string '$str' are as follows --\n";
        !           180: echo chr(128)." => "; 
        !           181: var_dump( strpos($str, chr(128)) );            
        !           182: echo chr(255)." => "; 
        !           183: var_dump( strpos($str, chr(255), 3) );
        !           184: echo chr(256)." => "; 
        !           185: var_dump( strpos($str, chr(256)) );
        !           186: 
        !           187: echo "\n*** Testing error conditions ***";
        !           188: var_dump( strpos($string, "") );
        !           189: var_dump( strpos() );  // zero argument
        !           190: var_dump( strpos("") );  // null argument 
        !           191: var_dump( strpos($string) );  // without "needle"
        !           192: var_dump( strpos("a", "b", "c", "d") );  // args > expected
        !           193: var_dump( strpos($string, "test", strlen($string)+1) );  // offset > strlen()
        !           194: var_dump( strpos($string, "test", -1) );  // offset < 0
        !           195: var_dump( strpos(NULL, "") );
        !           196: 
        !           197: echo "\nDone";
        !           198: 
        !           199: fclose($resource1); 
        !           200: closedir($resource2);
        !           201: ?>
        !           202: --EXPECTF--
        !           203: *** Testing basic functionality of strpos() ***
        !           204: int(0)
        !           205: int(5)
        !           206: int(5)
        !           207: int(3)
        !           208: int(10)
        !           209: int(2)
        !           210: bool(false)
        !           211: bool(false)
        !           212: bool(false)
        !           213: bool(false)
        !           214: bool(false)
        !           215: int(1)
        !           216: 
        !           217: *** Testing strpos() to find various needles and a long string ***
        !           218: Position of 'Hello world' is => int(0)
        !           219: Position of 'WORLD' is => bool(false)
        !           220: Position of '' is => int(46)
        !           221: Position of '' is => int(46)
        !           222: Position of '0' is => int(58)
        !           223: Position of 'abcd' is => int(48)
        !           224: Position of 'xyz' is => int(54)
        !           225: Position of 'octal' is => int(61)
        !           226: Position of '-3' is => int(19)
        !           227: Position of '-3' is => bool(false)
        !           228: Position of '-3.344' is => int(19)
        !           229: Position of '-3.344' is => bool(false)
        !           230: Position of '' is => int(46)
        !           231: Position of 'NULL' is => int(31)
        !           232: Position of '0' is => int(12)
        !           233: Position of '0' is => int(46)
        !           234: Position of '1' is => bool(false)
        !           235: Position of 'TRUE' is => int(36)
        !           236: Position of '1' is => int(13)
        !           237: Position of '1' is => bool(false)
        !           238: Position of '' is => int(46)
        !           239: Position of 'FALSE' is => int(41)
        !           240: Position of ' ' is => int(5)
        !           241: Position of '     ' is => int(26)
        !           242: Position of 'b' is => int(49)
        !           243: Position of '\n' is => bool(false)
        !           244: Position of '
        !           245: ' is => int(66)
        !           246: Position of '12' is => int(13)
        !           247: Position of '12twelve' is => bool(false)
        !           248: Position of 'Hello world,012033 -3.3445     NULL TRUE FALSE abcd\xxyz 0 octal
        !           249: 
        !           250: abcd$:Hello world' is => int(0)
        !           251: 
        !           252: *** Testing strpos() with possible variations in offset ***
        !           253: Position of 'Hello' with offset '1' is => int(74)
        !           254: Position of 'Hello' with offset 'string' is => 
        !           255: Warning: strpos() expects parameter 3 to be long, string given in %s on line %d
        !           256: NULL
        !           257: Position of 'Hello' with offset '' is => int(0)
        !           258: Position of 'Hello' with offset '' is => 
        !           259: Warning: strpos() expects parameter 3 to be long, string given in %s on line %d
        !           260: NULL
        !           261: Position of 'Hello' with offset '12string' is => 
        !           262: Notice: A non well formed numeric value encountered in %s on line %d
        !           263: int(74)
        !           264: Position of 'Hello' with offset '0' is => int(0)
        !           265: Position of 'Hello' with offset '1' is => int(74)
        !           266: Position of 'Hello' with offset '' is => int(0)
        !           267: Position of 'Hello' with offset '' is => int(0)
        !           268: Position of 'Hello' with offset 'string12' is => 
        !           269: Warning: strpos() expects parameter 3 to be long, string given in %s on line %d
        !           270: NULL
        !           271: Position of 'Hello' with offset '12.3string' is => 
        !           272: Notice: A non well formed numeric value encountered in %s on line %d
        !           273: int(74)
        !           274: 
        !           275: *** Testing Miscelleneous input data ***
        !           276: -- Passing objects as string and needle --
        !           277: int(7)
        !           278: 
        !           279: -- Passing an array as string and needle --
        !           280: 
        !           281: Warning: strpos() expects parameter 1 to be string, array given in %s on line %d
        !           282: NULL
        !           283: int(5)
        !           284: int(12)
        !           285: 
        !           286: -- Passing Resources as string and needle --
        !           287: 
        !           288: Warning: strpos() expects parameter 1 to be string, resource given in %s on line %d
        !           289: NULL
        !           290: 
        !           291: Warning: strpos() expects parameter 1 to be string, resource given in %s on line %d
        !           292: NULL
        !           293: 
        !           294: -- Posiibilities with null --
        !           295: bool(false)
        !           296: bool(false)
        !           297: bool(false)
        !           298: int(2)
        !           299: 
        !           300: -- A longer and heredoc string --
        !           301: int(0)
        !           302: int(73)
        !           303: int(73)
        !           304: int(728)
        !           305: 
        !           306: -- A heredoc null string --
        !           307: bool(false)
        !           308: bool(false)
        !           309: bool(false)
        !           310: 
        !           311: -- simple and complex syntax strings --
        !           312: int(7)
        !           313: int(7)
        !           314: 
        !           315: Notice: Undefined variable: needleS in %s on line %d
        !           316: 
        !           317: Warning: strpos(): Empty delimiter in %s on line %d
        !           318: bool(false)
        !           319: int(7)
        !           320: int(7)
        !           321: 
        !           322: -- complex strings containing other than 7-bit chars --
        !           323: -- Positions of some chars in the string '' are as follows --
        !           324:  => int(1)
        !           325:  => int(6)
        !           326:  => int(0)
        !           327: 
        !           328: *** Testing error conditions ***
        !           329: Warning: strpos(): Empty delimiter in %s on line %d
        !           330: bool(false)
        !           331: 
        !           332: Warning: strpos() expects at least 2 parameters, 0 given in %s on line %d
        !           333: NULL
        !           334: 
        !           335: Warning: strpos() expects at least 2 parameters, 1 given in %s on line %d
        !           336: NULL
        !           337: 
        !           338: Warning: strpos() expects at least 2 parameters, 1 given in %s on line %d
        !           339: NULL
        !           340: 
        !           341: Warning: strpos() expects at most 3 parameters, 4 given in %s on line %d
        !           342: NULL
        !           343: 
        !           344: Warning: strpos(): Offset not contained in string in %s on line %d
        !           345: bool(false)
        !           346: 
        !           347: Warning: strpos(): Offset not contained in string in %s on line %d
        !           348: bool(false)
        !           349: 
        !           350: Warning: strpos(): Empty delimiter in %s on line %d
        !           351: bool(false)
        !           352: 
        !           353: Done

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>