zoe Mon Jul 6 21:02:48 2009 UTC Added files: /phpruntests/QA/tests/lang 015.inc 023-1.inc bug38579.inc inc.inc inc_throw.inc 016.inc 023-2.inc /phpruntests/QA/tests/security open_basedir.inc /phpruntests/QA/tests/output ob_011.out ob_011.php ob_011.exp ob_011.diff /phpruntests/QA/tests quicktester.inc
Modified files: /phpruntests/QA/tests/lang bug24054.phpt Log: building test suite
http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/lang/bug24054.phpt?r1=1.1&r2=1.2&diff_format=u Index: phpruntests/QA/tests/lang/bug24054.phpt diff -u phpruntests/QA/tests/lang/bug24054.phpt:1.1 phpruntests/QA/tests/lang/bug24054.phpt:1.2 --- phpruntests/QA/tests/lang/bug24054.phpt:1.1 Mon Jul 6 20:04:53 2009 +++ phpruntests/QA/tests/lang/bug24054.phpt Mon Jul 6 21:02:47 2009 @@ -1,7 +1,7 @@ --TEST-- Bug #24054 (Assignment operator *= broken) --FILE-- -<?php // $Id: bug24054.phpt,v 1.1 2009/07/06 20:04:53 zoe Exp $ +<?php // $Id: bug24054.phpt,v 1.2 2009/07/06 21:02:47 zoe Exp $ define('LONG_MAX', is_int(5000000000)? 9223372036854775807 : 0x7FFFFFFF); define('LONG_MIN', -LONG_MAX - 1); http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/lang/015.inc?view=markup&rev=1.1 Index: phpruntests/QA/tests/lang/015.inc +++ phpruntests/QA/tests/lang/015.inc <?php echo "Hello"; ?> http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/lang/023-1.inc?view=markup&rev=1.1 Index: phpruntests/QA/tests/lang/023-1.inc +++ phpruntests/QA/tests/lang/023-1.inc <html> <head> <?php /* the point of this file is to intensively test various aspects of * the parser. right now, each test focuses in one aspect only * (e.g. variable aliasing, arithemtic operator, various control * structures), while trying to combine code from other parts of the * parser as well. */ ?> *** Testing assignments and variable aliasing: ***<br> <?php /* This test tests assignments to variables using other variables as variable-names */ $a = "b"; $$a = "test"; $$$a = "blah"; ${$$$a}["associative arrays work too"] = "this is nifty"; ?> This should read "blah": <?php echo "$test<br>\n"; ?> This should read "this is nifty": <?php echo $blah[$test="associative arrays work too"]."<br>\n"; ?> *************************************************<br> *** Testing integer operators ***<br> <?php /* test just about any operator possible on $i and $j (ints) */ $i = 5; $j = 3; ?> Correct result - 8: <?php echo $i+$j; ?><br> Correct result - 8: <?php echo $i+$j; ?><br> Correct result - 2: <?php echo $i-$j; ?><br> Correct result - -2: <?php echo $j-$i; ?><br> Correct result - 15: <?php echo $i*$j; ?><br> Correct result - 15: <?php echo $j*$i; ?><br> Correct result - 2: <?php echo $i%$j; ?><br> Correct result - 3: <?php echo $j%$i; ?><br> *********************************<br> *** Testing real operators ***<br> <?php /* test just about any operator possible on $i and $j (floats) */ $i = 5.0; $j = 3.0; ?> Correct result - 8: <?php echo $i+$j; ?><br> Correct result - 8: <?php echo $i+$j; ?><br> Correct result - 2: <?php echo $i-$j; ?><br> Correct result - -2: <?php echo $j-$i; ?><br> Correct result - 15: <?php echo $i*$j; ?><br> Correct result - 15: <?php echo $j*$i; ?><br> Correct result - 2: <?php echo $i%$j; ?><br> Correct result - 3: <?php echo $j%$i; ?><br> *********************************<br> *** Testing if/elseif/else control ***<br> <?php /* sick if/elseif/else test by Andi :) */ $a = 5; if ($a == "4") { echo "This "." does "." not "." work<br>\n"; } elseif ($a == "5") { echo "This "." works<br>\n"; $a = 6; if ("andi" == ($test = "andi")) { echo "this_still_works<br>\n"; } elseif (1) { echo "should_not_print<br>\n"; } else { echo "should_not_print<br>\n"; } if (44 == 43) { echo "should_not_print<br>\n"; } else { echo "should_print<br>\n"; } } elseif ($a == 6) { echo "this "."broken<br>\n"; if (0) { echo "this_should_not_print<br>\n"; } else { echo "TestingDanglingElse_This_Should_not_print<br>\n"; } } else { echo "This "."does "." not"." work<br>\n"; } ?> *** Seriously nested if's test ***<br> ** spelling correction by kluzz ** <?php /* yet another sick if/elseif/else test by Zeev */ $i=$j=0; echo "Only two lines of text should follow:<br>\n"; if (0) { /* this code is not supposed to be executed */ echo "hmm, this shouldn't be displayed #1<br>\n"; $j++; if (1) { $i += $j; if (0) { $j = ++$i; if (1) { $j *= $i; echo "damn, this shouldn't be displayed<br>\n"; } else { $j /= $i; ++$j; echo "this shouldn't be displayed either<br>\n"; } } elseif (1) { $i++; $j++; echo "this isn't supposed to be displayed<br>\n"; } } elseif (0) { $i++; echo "this definitely shouldn't be displayed<br>\n"; } else { --$j; echo "and this too shouldn't be displayed<br>\n"; while ($j>0) { $j--; } } } elseif (2-2) { /* as long as 2-2==0, this isn't supposed to be executed either */ $i = ++$j; echo "hmm, this shouldn't be displayed #2<br>\n"; if (1) { $j = ++$i; if (0) { $j = $i*2+$j*($i++); if (1) { $i++; echo "damn, this shouldn't be displayed<br>\n"; } else { $j++; echo "this shouldn't be displayed either<br>\n"; } } else if (1) { ++$j; echo "this isn't supposed to be displayed<br>\n"; } } elseif (0) { $j++; echo "this definitely shouldn't be displayed<br>\n"; } else { $i++; echo "and this too shouldn't be displayed<br>\n"; } } else { $j=$i++; /* this should set $i to 1, but shouldn't change $j (it's assigned $i's previous values, zero) */ echo "this should be displayed. should be: \$i=1, \$j=0. is: \$i=$i, \$j=$j<br>\n"; if (1) { $j += ++$i; /* ++$i --> $i==2, $j += 2 --> $j==2 */ if (0) { $j += 40; if (1) { $i += 50; echo "damn, this shouldn't be displayed<br>\n"; } else { $j += 20; echo "this shouldn't be displayed either<br>\n"; } } else if (1) { $j *= $i; /* $j *= 2 --> $j == 4 */ echo "this is supposed to be displayed. should be: \$i=2, \$j=4. is: \$i=$i, \$j=$j<br>\n"; echo "3 loop iterations should follow:<br>\n"; while ($i<=$j) { echo $i++." $j<br>\n"; } } } elseif (0) { echo "this definitely shouldn't be displayed<br>\n"; } else { echo "and this too shouldn't be displayed<br>\n"; } echo "**********************************<br>\n"; } ?> *** C-style else-if's ***<br> <?php /* looks like without we even tried, C-style else-if structure works fine! */ if ($a=0) { echo "This shouldn't be displayed<br>\n"; } else if ($a++) { echo "This shouldn't be displayed either<br>\n"; } else if (--$a) { echo "No, this neither<br>\n"; } else if (++$a) { echo "This should be displayed<br>\n"; } else { echo "This shouldn't be displayed at all<br>\n"; } ?> *************************<br> *** WHILE tests ***<br> <?php $i=0; $j=20; while ($i<(2*$j)) { if ($i>$j) { echo "$i is greater than $j<br>\n"; } else if ($i==$j) { echo "$i equals $j<br>\n"; } else { echo "$i is smaller than $j<br>\n"; } $i++; } ?> *******************<br> *** Nested WHILEs ***<br> <?php $arr_len=3; $i=0; while ($i<$arr_len) { $j=0; while ($j<$arr_len) { $k=0; while ($k<$arr_len) { ${"test$i$j"}[$k] = $i+$j+$k; $k++; } $j++; } $i++; } echo "Each array variable should be equal to the sum of its indices:<br>\n"; $i=0; while ($i<$arr_len) { $j=0; while ($j<$arr_len) { $k=0; while ($k<$arr_len) { echo "\${test$i$j}[$k] = ".${"test$i$j"}[$k]."<br>\n"; $k++; } $j++; } $i++; } ?> *********************<br> *** hash test... ***<br> <?php /* $i=0; while ($i<10000) { $arr[$i]=$i; $i++; } $i=0; while ($i<10000) { echo $arr[$i++]."<br>\n"; } */ echo "commented out..."; ?> **************************<br> *** Hash resizing test ***<br> <?php $i = 10; $a = 'b'; while ($i > 0) { $a = $a . 'a'; echo "$a<br>\n"; $resize[$a] = $i; $i--; } $i = 10; $a = 'b'; while ($i > 0) { $a = $a . 'a'; echo "$a<br>\n"; echo $resize[$a]."<br>\n"; $i--; } ?> **************************<br> *** break/continue test ***<br> <?php $i=0; echo "\$i should go from 0 to 2<br>\n"; while ($i<5) { if ($i>2) { break; } $j=0; echo "\$j should go from 3 to 4, and \$q should go from 3 to 4<br>\n"; while ($j<5) { if ($j<=2) { $j++; continue; } echo " \$j=$j<br>\n"; for ($q=0; $q<=10; $q++) { if ($q<3) { continue; } if ($q>4) { break; } echo " \$q=$q<br>\n"; } $j++; } $j=0; echo "\$j should go from 0 to 2<br>\n"; while ($j<5) { if ($j>2) { $k=0; echo "\$k should go from 0 to 2<br>\n"; while ($k<5) { if ($k>2) { break 2; } echo " \$k=$k<br>\n"; $k++; } } echo " \$j=$j<br>\n"; $j++; } echo "\$i=$i<br>\n"; $i++; } ?> ***********************<br> *** Nested file include test ***<br> <?php include("023-2.inc"); ?> ********************************<br> <?php { echo "Tests completed.<br>\n"; # testing some PHP style comment... } ?> http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/lang/bug38579.inc?view=markup&rev=1.1 Index: phpruntests/QA/tests/lang/bug38579.inc +++ phpruntests/QA/tests/lang/bug38579.inc <?php echo "ok\n"; ?> http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/lang/inc.inc?view=markup&rev=1.1 Index: phpruntests/QA/tests/lang/inc.inc +++ phpruntests/QA/tests/lang/inc.inc <?php echo "Included!\n"; ?> http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/lang/inc_throw.inc?view=markup&rev=1.1 Index: phpruntests/QA/tests/lang/inc_throw.inc +++ phpruntests/QA/tests/lang/inc_throw.inc <?php throw new Exception(); ?> http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/lang/016.inc?view=markup&rev=1.1 Index: phpruntests/QA/tests/lang/016.inc +++ phpruntests/QA/tests/lang/016.inc <?php function MyFunc ($a) { echo $a; } ?> http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/lang/023-2.inc?view=markup&rev=1.1 Index: phpruntests/QA/tests/lang/023-2.inc +++ phpruntests/QA/tests/lang/023-2.inc <html> This is Finish.phtml. This file is supposed to be included from regression_test.phtml. This is normal HTML. <?php echo "and this is PHP code, 2+2=".(2+2).""; ?> </html> http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/security/open_basedir.inc?view=markup&rev=1.1 Index: phpruntests/QA/tests/security/open_basedir.inc +++ phpruntests/QA/tests/security/open_basedir.inc <?php // This file contains helper functions for testing open_basedir configuration // Care must be taken with where the directories are created because different // SAPIs set the working directory differently. So simply creating a directory // relative to the current working directory like this: mkdir("blah") might // actually create it in several different places depending on the SAPI..! // // Note also depending on the version of php being tested, so the open_basedir // configuration may or may not be changeable from a script (PHP_INI_SYSTEM). // // For this reason we set the open_basedir to . (current directory) and then // move around to various directories for testing using chdir(). This is NOT // recommended for production use as . bypasses all semblence of security..! // // Although safe mode has been removed in php 6.0, open_basedir is still valid. // See http://www.php.net/features.safe-mode for more information function recursive_delete_directory($directory) { // Remove any trailing slash first if (substr($directory, -1) == '/') { $directory = substr($directory, 0, -1); } // Make sure the directory is valid if (is_dir($directory) == FALSE) { return FALSE; } // Check we can access the directory if (is_readable($directory) == FALSE) { return FALSE; } $handle = opendir($directory); // Scan through the directory contents while (FALSE !== ($item = readdir($handle))) { if ($item != '.') { if ($item != '..') { $path = ($directory.'/'.$item); if (is_dir($path) == TRUE) { recursive_delete_directory($path); } else { @chmod($path, 0777); unlink($path); } } } } closedir($handle); @chmod($directory, 0777); rmdir($directory); return TRUE; } function create_directories() { delete_directories(); $directory = getcwd(); var_dump(mkdir($directory."/test")); var_dump(mkdir($directory."/test/ok")); var_dump(mkdir($directory."/test/bad")); file_put_contents($directory."/test/ok/ok.txt", "Hello World!"); file_put_contents($directory."/test/bad/bad.txt", "Hello World!"); } function delete_directories() { $directory = (getcwd()."/test"); recursive_delete_directory($directory); } function test_open_basedir_error($function) { global $savedDirectory; var_dump($function("../bad")); var_dump($function("../bad/bad.txt")); var_dump($function("..")); var_dump($function("../")); var_dump($function("/")); var_dump($function("../bad/.")); $directory = $savedDirectory; var_dump($function($directory."/test/bad/bad.txt")); var_dump($function($directory."/test/bad/../bad/bad.txt")); } function test_open_basedir_before($function, $change = TRUE) { global $savedDirectory; echo "*** Testing open_basedir configuration [$function] ***\n"; $directory = getcwd(); $savedDirectory = $directory; var_dump(chdir($directory)); create_directories(); // Optionally change directory if ($change == TRUE) { var_dump(chdir($directory."/test/ok")); } } // Delete directories using a --CLEAN-- section! function test_open_basedir_after($function) { echo "*** Finished testing open_basedir configuration [$function] ***\n"; } // This is used by functions that return an array on success function test_open_basedir_array($function) { global $savedDirectory; test_open_basedir_before($function); test_open_basedir_error($function); var_dump(is_array($function("./../."))); var_dump(is_array($function("../ok"))); var_dump(is_array($function("ok.txt"))); var_dump(is_array($function("../ok/ok.txt"))); $directory = $savedDirectory; var_dump(is_array($function($directory."/test/ok/ok.txt"))); var_dump(is_array($function($directory."/test/ok/../ok/ok.txt"))); test_open_basedir_after($function); } function test_open_basedir($function) { global $savedDirectory; test_open_basedir_before($function); test_open_basedir_error($function); var_dump($function("./../.")); var_dump($function("../ok")); var_dump($function("ok.txt")); var_dump($function("../ok/ok.txt")); $directory = $savedDirectory; var_dump($function($directory."/test/ok/ok.txt")); var_dump($function($directory."/test/ok/../ok/ok.txt")); test_open_basedir_after($function); } ?> http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/output/ob_011.out?view=markup&rev=1.1 Index: phpruntests/QA/tests/output/ob_011.out +++ phpruntests/QA/tests/output/ob_011.out http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/output/ob_011.php?view=markup&rev=1.1 Index: phpruntests/QA/tests/output/ob_011.php +++ phpruntests/QA/tests/output/ob_011.php <?php function obh($s) { return ob_get_flush(); } ob_start("obh"); echo "foo\n"; ?> http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/output/ob_011.exp?view=markup&rev=1.1 Index: phpruntests/QA/tests/output/ob_011.exp +++ phpruntests/QA/tests/output/ob_011.exp Fatal error: ob_get_flush(): Cannot use output buffering in output buffering display handlers in %sob_011.php on line %d http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/output/ob_011.diff?view=markup&rev=1.1 Index: phpruntests/QA/tests/output/ob_011.diff +++ phpruntests/QA/tests/output/ob_011.diff 001+ 001- Fatal error: ob_get_flush(): Cannot use output buffering in output buffering display handlers in %sob_011.php on line %d http://cvs.php.net/viewvc.cgi/phpruntests/QA/tests/quicktester.inc?view=markup&rev=1.1 Index: phpruntests/QA/tests/quicktester.inc +++ phpruntests/QA/tests/quicktester.inc <?php /* Helper for simple tests to check return-value. Usage: $tests = <<<TESTS expected_return_value === expression 2 === 1+1 4 === 2*2 FALSE === @ fopen('non_existent_file') TESTS; include( 'tests/quicktester.inc' ); Expect: OK Remember to NOT put a trailing ; after a line! */ error_reporting(E_ALL); $tests = explode("\n",$tests); $success = TRUE; foreach ($tests as $n=>$test) { // ignore empty lines if (!$test) continue; // warn for trailing ; if (substr(trim($test), -1, 1) === ';') { echo "WARNING: trailing ';' found in test ".($n+1)."\n"; exit; } // try for operators $operators = array('===', '~=='); $operator = NULL; foreach ($operators as $a_operator) { if (strpos($test, $a_operator)!== FALSE) { $operator = $a_operator; list($left,$right) = explode($operator, $test); break; } } if (!$operator) { echo "WARNING: unknown operator in '$test' (1)\n"; exit; } $left = eval("return ($left );"); $right = eval("return ($right);"); switch (@$operator) { case '===': // exact match $result = $left === $right; break; case '~==': // may differ after 12th significant number if ( !is_float($left ) && !is_int($left ) || !is_float($right) && !is_int($right)) { $result = FALSE; break; } $result = abs(($left-$right) / $left) < 1e-12; break; default: echo "WARNING: unknown operator in '$test' (2)\n"; exit; } $success = $success && $result; if (!$result) { echo "\nAssert failed:\n"; echo "$test\n"; echo "Left: ";var_dump($left ); echo "Right: ";var_dump($right); } } if ($success) echo "OK";
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php