diff options
author | Anatol Belski <ab@php.net> | 2015-07-26 20:31:32 +0200 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2015-07-26 20:54:27 +0200 |
commit | 27c973a954375a3706d4a1685334444713e14af8 (patch) | |
tree | ac365f696baa8205976a32a5e378f161f02fcdf8 | |
parent | c18f5e1edddf68bd449cb2b8e55d47a7da622cde (diff) | |
download | php-git-27c973a954375a3706d4a1685334444713e14af8.tar.gz |
exclude the platform diff case from the test
Say the string is \377\000, basename will use mbrlen() to check whether
it's a start of a multibyte sequence. While on Linux it'll return -1 for
any char in the extended ASCII, on Windows it's returning 1. From what I
see the reason is that Windows doesn't implement UTF-8 in the CRT lib,
it's rather 16-bit Unicode or DBCS. Since extended ASCII is convertable
to Unicode directly - thus the behavior. On Linux however, it's a true
UTF-8 locale and implementation, for it \377\000 is invalid.
Maybe mbrlen needs an independent implementation for Windows supporting
UTF-8. For now I just split out this case so the most of the big basename
test doesn't fail on this one case.
-rw-r--r-- | ext/standard/tests/strings/basename_invalid_path.phpt | 22 | ||||
-rw-r--r-- | ext/standard/tests/strings/basename_invalid_path_win.phpt | 22 | ||||
-rw-r--r-- | ext/standard/tests/strings/basename_variation.phpt | 6 |
3 files changed, 44 insertions, 6 deletions
diff --git a/ext/standard/tests/strings/basename_invalid_path.phpt b/ext/standard/tests/strings/basename_invalid_path.phpt new file mode 100644 index 0000000000..b632efa845 --- /dev/null +++ b/ext/standard/tests/strings/basename_invalid_path.phpt @@ -0,0 +1,22 @@ +--TEST-- +Test basename() function : usage variations with invalid paths +--SKIPIF-- +<?php +if((substr(PHP_OS, 0, 3) == "WIN")) + die('skip not for Windows"'); +?> +--FILE-- +<?php +/* Prototype: string basename ( string $path [, string $suffix] ); + Description: Given a string containing a path to a file, + this function will return the base name of the file. + If the filename ends in suffix this will also be cut off. +*/ + +var_dump(basename(chr(-1))); + +echo "Done\n"; + +--EXPECTF-- +string(0) "" +Done diff --git a/ext/standard/tests/strings/basename_invalid_path_win.phpt b/ext/standard/tests/strings/basename_invalid_path_win.phpt new file mode 100644 index 0000000000..587f2b114c --- /dev/null +++ b/ext/standard/tests/strings/basename_invalid_path_win.phpt @@ -0,0 +1,22 @@ +--TEST-- +Test basename() function : usage variations with invalid paths +--SKIPIF-- +<?php +if((substr(PHP_OS, 0, 3) != "WIN")) + die('skip Run only on Windows"'); +?> +--FILE-- +<?php +/* Prototype: string basename ( string $path [, string $suffix] ); + Description: Given a string containing a path to a file, + this function will return the base name of the file. + If the filename ends in suffix this will also be cut off. +*/ + +var_dump(basename("\377")); + +echo "Done\n"; + +--EXPECTF-- +string(1) "%c" +Done diff --git a/ext/standard/tests/strings/basename_variation.phpt b/ext/standard/tests/strings/basename_variation.phpt index 86b1cd296b..1efd8c701a 100644 --- a/ext/standard/tests/strings/basename_variation.phpt +++ b/ext/standard/tests/strings/basename_variation.phpt @@ -67,9 +67,6 @@ $file_path_variations = array ( array(""), array(''), array(NULL), - - /* invalid paths */ - array(chr(-1)), ); function check_basename( $path_arrays ) { @@ -235,7 +232,4 @@ string(0) "" --Iteration 48-- string(0) "" - ---Iteration 49-- -string(0) "" Done |