12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778 |
- <?php
- /**
- * @group functions.php
- */
- class Tests_Functions extends WP_UnitTestCase {
- function test_wp_parse_args_object() {
- $x = new MockClass;
- $x->_baba = 5;
- $x->yZ = 'baba'; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
- $x->a = array( 5, 111, 'x' );
- $this->assertSame(
- array(
- '_baba' => 5,
- 'yZ' => 'baba',
- 'a' => array( 5, 111, 'x' ),
- ),
- wp_parse_args( $x )
- );
- $y = new MockClass;
- $this->assertSame( array(), wp_parse_args( $y ) );
- }
- function test_wp_parse_args_array() {
- // Arrays.
- $a = array();
- $this->assertSame( array(), wp_parse_args( $a ) );
- $b = array(
- '_baba' => 5,
- 'yZ' => 'baba',
- 'a' => array( 5, 111, 'x' ),
- );
- $this->assertSame(
- array(
- '_baba' => 5,
- 'yZ' => 'baba',
- 'a' => array( 5, 111, 'x' ),
- ),
- wp_parse_args( $b )
- );
- }
- function test_wp_parse_args_defaults() {
- $x = new MockClass;
- $x->_baba = 5;
- $x->yZ = 'baba'; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
- $x->a = array( 5, 111, 'x' );
- $d = array( 'pu' => 'bu' );
- $this->assertSame(
- array(
- 'pu' => 'bu',
- '_baba' => 5,
- 'yZ' => 'baba',
- 'a' => array( 5, 111, 'x' ),
- ),
- wp_parse_args( $x, $d )
- );
- $e = array( '_baba' => 6 );
- $this->assertSame(
- array(
- '_baba' => 5,
- 'yZ' => 'baba',
- 'a' => array( 5, 111, 'x' ),
- ),
- wp_parse_args( $x, $e )
- );
- }
- function test_wp_parse_args_other() {
- $b = true;
- wp_parse_str( $b, $s );
- $this->assertSame( $s, wp_parse_args( $b ) );
- $q = 'x=5&_baba=dudu&';
- wp_parse_str( $q, $ss );
- $this->assertSame( $ss, wp_parse_args( $q ) );
- }
- /**
- * @ticket 30753
- */
- function test_wp_parse_args_boolean_strings() {
- $args = wp_parse_args( 'foo=false&bar=true' );
- $this->assertInternalType( 'string', $args['foo'] );
- $this->assertInternalType( 'string', $args['bar'] );
- }
- /**
- * @ticket 35972
- */
- function test_bool_from_yn() {
- $this->assertTrue( bool_from_yn( 'Y' ) );
- $this->assertTrue( bool_from_yn( 'y' ) );
- $this->assertFalse( bool_from_yn( 'n' ) );
- }
- function test_path_is_absolute() {
- $absolute_paths = array(
- '/',
- '/foo/',
- '/foo',
- '/FOO/bar',
- '/foo/bar/',
- '/foo/../bar/',
- '\\WINDOWS',
- 'C:\\',
- 'C:\\WINDOWS',
- '\\\\sambashare\\foo',
- );
- foreach ( $absolute_paths as $path ) {
- $this->assertTrue( path_is_absolute( $path ), "path_is_absolute('$path') should return true" );
- }
- }
- function test_path_is_not_absolute() {
- $relative_paths = array(
- '',
- '.',
- '..',
- '../foo',
- '../',
- '../foo.bar',
- 'foo/bar',
- 'foo',
- 'FOO',
- '..\\WINDOWS',
- );
- foreach ( $relative_paths as $path ) {
- $this->assertFalse( path_is_absolute( $path ), "path_is_absolute('$path') should return false" );
- }
- }
- /**
- * @ticket 33265
- * @ticket 35996
- *
- * @dataProvider data_wp_normalize_path
- */
- function test_wp_normalize_path( $path, $expected ) {
- $this->assertSame( $expected, wp_normalize_path( $path ) );
- }
- function data_wp_normalize_path() {
- return array(
- // Windows paths.
- array( 'C:\\www\\path\\', 'C:/www/path/' ),
- array( 'C:\\www\\\\path\\', 'C:/www/path/' ),
- array( 'c:/www/path', 'C:/www/path' ),
- array( 'c:\\www\\path\\', 'C:/www/path/' ), // Uppercase drive letter.
- array( 'c:\\\\www\\path\\', 'C:/www/path/' ),
- array( '\\\\Domain\\DFSRoots\\share\\path\\', '//Domain/DFSRoots/share/path/' ),
- array( '\\\\Server\\share\\path', '//Server/share/path' ),
- array( '\\\\Server\\share', '//Server/share' ),
- // Linux paths.
- array( '/www/path/', '/www/path/' ),
- array( '/www/path/////', '/www/path/' ),
- array( '/www/path', '/www/path' ),
- // PHP stream wrappers.
- array( 'php://input', 'php://input' ),
- array( 'http://example.com//path.ext', 'http://example.com/path.ext' ),
- array( 'file://c:\\www\\path\\', 'file://C:/www/path/' ),
- );
- }
- function test_wp_unique_filename() {
- $testdir = DIR_TESTDATA . '/images/';
- // Sanity check.
- $this->assertSame( 'abcdefg.png', wp_unique_filename( $testdir, 'abcdefg.png' ), 'Sanitiy check failed' );
- // Check number is appended for file already exists.
- $this->assertFileExists( $testdir . 'test-image.png', 'Test image does not exist' );
- $this->assertSame( 'test-image-1.png', wp_unique_filename( $testdir, 'test-image.png' ), 'Number not appended correctly' );
- $this->assertFileNotExists( $testdir . 'test-image-1.png' );
- // Check special chars.
- $this->assertSame( 'testtest-image.png', wp_unique_filename( $testdir, 'testtést-imagé.png' ), 'Filename with special chars failed' );
- // Check special chars with potential conflicting name.
- $this->assertSame( 'test-image-1.png', wp_unique_filename( $testdir, 'tést-imagé.png' ), 'Filename with special chars failed' );
- // Check with single quotes in name (somehow).
- $this->assertSame( 'abcdefgh.png', wp_unique_filename( $testdir, "abcdefg'h.png" ), 'File with quote failed' );
- // Check with double quotes in name (somehow).
- $this->assertSame( 'abcdefgh.png', wp_unique_filename( $testdir, 'abcdefg"h.png' ), 'File with quote failed' );
- // Test crazy name (useful for regression tests).
- $this->assertSame( '12af34567890@..^_qwerty-fghjkl-zx.png', wp_unique_filename( $testdir, '12%af34567890#~!@#$..%^&*()|_+qwerty fgh`jkl zx<>?:"{}[]="\'/?.png' ), 'Failed crazy file name' );
- // Test slashes in names.
- $this->assertSame( 'abcdefg.png', wp_unique_filename( $testdir, 'abcde\fg.png' ), 'Slash not removed' );
- $this->assertSame( 'abcdefg.png', wp_unique_filename( $testdir, 'abcde\\fg.png' ), 'Double slashed not removed' );
- $this->assertSame( 'abcdefg.png', wp_unique_filename( $testdir, 'abcde\\\fg.png' ), 'Tripple slashed not removed' );
- }
- /**
- * @ticket 42437
- */
- function test_unique_filename_with_dimension_like_filename() {
- $testdir = DIR_TESTDATA . '/images/';
- add_filter( 'upload_dir', array( $this, 'upload_dir_patch_basedir' ) );
- // Test collision with "dimension-like" original filename.
- $this->assertSame( 'one-blue-pixel-100x100-1.png', wp_unique_filename( $testdir, 'one-blue-pixel-100x100.png' ) );
- // Test collision with existing sub-size filename.
- // Existing files: one-blue-pixel-100x100.png, one-blue-pixel-1-100x100.png.
- $this->assertSame( 'one-blue-pixel-2.png', wp_unique_filename( $testdir, 'one-blue-pixel.png' ) );
- // Same as above with upper case extension.
- $this->assertSame( 'one-blue-pixel-2.png', wp_unique_filename( $testdir, 'one-blue-pixel.PNG' ) );
- remove_filter( 'upload_dir', array( $this, 'upload_dir_patch_basedir' ) );
- }
- // Callback to patch "basedir" when used in `wp_unique_filename()`.
- function upload_dir_patch_basedir( $upload_dir ) {
- $upload_dir['basedir'] = DIR_TESTDATA . '/images/';
- return $upload_dir;
- }
- /**
- * @dataProvider data_is_not_serialized
- */
- function test_maybe_serialize( $value ) {
- if ( is_array( $value ) || is_object( $value ) ) {
- $expected = serialize( $value );
- } else {
- $expected = $value;
- }
- $this->assertSame( $expected, maybe_serialize( $value ) );
- }
- /**
- * @dataProvider data_is_serialized
- */
- function test_maybe_serialize_with_double_serialization( $value ) {
- $expected = serialize( $value );
- $this->assertSame( $expected, maybe_serialize( $value ) );
- }
- /**
- * @dataProvider data_is_serialized
- * @dataProvider data_is_not_serialized
- */
- function test_maybe_unserialize( $value, $is_serialized ) {
- if ( $is_serialized ) {
- $expected = unserialize( trim( $value ) );
- } else {
- $expected = $value;
- }
- if ( is_object( $expected ) ) {
- $this->assertEquals( $expected, maybe_unserialize( $value ) );
- } else {
- $this->assertSame( $expected, maybe_unserialize( $value ) );
- }
- }
- /**
- * @dataProvider data_is_serialized
- * @dataProvider data_is_not_serialized
- */
- function test_is_serialized( $value, $expected ) {
- $this->assertSame( $expected, is_serialized( $value ) );
- }
- /**
- * @dataProvider data_serialize_deserialize_objects
- */
- function test_deserialize_request_utility_filtered_iterator_objects( $value ) {
- $serialized = maybe_serialize( $value );
- if ( get_class( $value ) === 'Requests_Utility_FilteredIterator' ) {
- $new_value = unserialize( $serialized );
- $property = ( new ReflectionClass( 'Requests_Utility_FilteredIterator' ) )->getProperty( 'callback' );
- $property->setAccessible( true );
- $callback_value = $property->getValue( $new_value );
- $this->assertSame( null, $callback_value );
- } else {
- $this->assertSame( $value->count(), unserialize( $serialized )->count() );
- }
- }
- function data_serialize_deserialize_objects() {
- return array(
- array( new Requests_Utility_FilteredIterator( array( 1 ), 'md5' ) ),
- array( new Requests_Utility_FilteredIterator( array( 1, 2 ), 'sha1' ) ),
- array( new ArrayIterator( array( 1, 2, 3 ) ) ),
- );
- }
- function data_is_serialized() {
- return array(
- array( serialize( null ), true ),
- array( serialize( true ), true ),
- array( serialize( false ), true ),
- array( serialize( -25 ), true ),
- array( serialize( 25 ), true ),
- array( serialize( 1.1 ), true ),
- array( serialize( 'this string will be serialized' ), true ),
- array( serialize( "a\nb" ), true ),
- array( serialize( array() ), true ),
- array( serialize( array( 1, 1, 2, 3, 5, 8, 13 ) ), true ),
- array(
- serialize(
- (object) array(
- 'test' => true,
- '3',
- 4,
- )
- ),
- true,
- ),
- array( ' s:25:"this string is serialized"; ', true ),
- );
- }
- function data_is_not_serialized() {
- return array(
- array( null, false ),
- array( true, false ),
- array( false, false ),
- array( -25, false ),
- array( 25, false ),
- array( 1.1, false ),
- array( 'this string will be serialized', false ),
- array( "a\nb", false ),
- array( array(), false ),
- array( array( 1, 1, 2, 3, 5, 8, 13 ), false ),
- array(
- (object) array(
- 'test' => true,
- '3',
- 4,
- ),
- false,
- ),
- array( 'a string', false ),
- array( 'garbage:a:0:garbage;', false ),
- array( 's:4:test;', false ),
- );
- }
- /**
- * @ticket 46570
- * @dataProvider data_is_serialized_should_return_true_for_large_floats
- */
- function test_is_serialized_should_return_true_for_large_floats( $value ) {
- $this->assertTrue( is_serialized( $value ) );
- }
- function data_is_serialized_should_return_true_for_large_floats() {
- return array(
- array( serialize( 1.7976931348623157E+308 ) ),
- array( serialize( array( 1.7976931348623157E+308, 1.23e50 ) ) ),
- );
- }
- /**
- * @ticket 17375
- */
- function test_no_new_serializable_types() {
- $this->assertFalse( is_serialized( 'C:16:"Serialized_Class":6:{a:0:{}}' ) );
- }
- /**
- * @group add_query_arg
- */
- function test_add_query_arg() {
- $old_req_uri = $_SERVER['REQUEST_URI'];
- $urls = array(
- '/',
- '/2012/07/30/',
- 'edit.php',
- admin_url( 'edit.php' ),
- admin_url( 'edit.php', 'https' ),
- );
- $frag_urls = array(
- '/#frag',
- '/2012/07/30/#frag',
- 'edit.php#frag',
- admin_url( 'edit.php#frag' ),
- admin_url( 'edit.php#frag', 'https' ),
- );
- foreach ( $urls as $url ) {
- $_SERVER['REQUEST_URI'] = 'nothing';
- $this->assertSame( "$url?foo=1", add_query_arg( 'foo', '1', $url ) );
- $this->assertSame( "$url?foo=1", add_query_arg( array( 'foo' => '1' ), $url ) );
- $this->assertSame(
- "$url?foo=2",
- add_query_arg(
- array(
- 'foo' => '1',
- 'foo' => '2',
- ),
- $url
- )
- );
- $this->assertSame(
- "$url?foo=1&bar=2",
- add_query_arg(
- array(
- 'foo' => '1',
- 'bar' => '2',
- ),
- $url
- )
- );
- $_SERVER['REQUEST_URI'] = $url;
- $this->assertSame( "$url?foo=1", add_query_arg( 'foo', '1' ) );
- $this->assertSame( "$url?foo=1", add_query_arg( array( 'foo' => '1' ) ) );
- $this->assertSame(
- "$url?foo=2",
- add_query_arg(
- array(
- 'foo' => '1',
- 'foo' => '2',
- )
- )
- );
- $this->assertSame(
- "$url?foo=1&bar=2",
- add_query_arg(
- array(
- 'foo' => '1',
- 'bar' => '2',
- )
- )
- );
- }
- foreach ( $frag_urls as $frag_url ) {
- $_SERVER['REQUEST_URI'] = 'nothing';
- $url = str_replace( '#frag', '', $frag_url );
- $this->assertSame( "$url?foo=1#frag", add_query_arg( 'foo', '1', $frag_url ) );
- $this->assertSame( "$url?foo=1#frag", add_query_arg( array( 'foo' => '1' ), $frag_url ) );
- $this->assertSame(
- "$url?foo=2#frag",
- add_query_arg(
- array(
- 'foo' => '1',
- 'foo' => '2',
- ),
- $frag_url
- )
- );
- $this->assertSame(
- "$url?foo=1&bar=2#frag",
- add_query_arg(
- array(
- 'foo' => '1',
- 'bar' => '2',
- ),
- $frag_url
- )
- );
- $_SERVER['REQUEST_URI'] = $frag_url;
- $this->assertSame( "$url?foo=1#frag", add_query_arg( 'foo', '1' ) );
- $this->assertSame( "$url?foo=1#frag", add_query_arg( array( 'foo' => '1' ) ) );
- $this->assertSame(
- "$url?foo=2#frag",
- add_query_arg(
- array(
- 'foo' => '1',
- 'foo' => '2',
- )
- )
- );
- $this->assertSame(
- "$url?foo=1&bar=2#frag",
- add_query_arg(
- array(
- 'foo' => '1',
- 'bar' => '2',
- )
- )
- );
- }
- $qs_urls = array(
- 'baz=1', // #WP4903
- '/?baz',
- '/2012/07/30/?baz',
- 'edit.php?baz',
- admin_url( 'edit.php?baz' ),
- admin_url( 'edit.php?baz', 'https' ),
- admin_url( 'edit.php?baz&za=1' ),
- admin_url( 'edit.php?baz=1&za=1' ),
- admin_url( 'edit.php?baz=0&za=0' ),
- );
- foreach ( $qs_urls as $url ) {
- $_SERVER['REQUEST_URI'] = 'nothing';
- $this->assertSame( "$url&foo=1", add_query_arg( 'foo', '1', $url ) );
- $this->assertSame( "$url&foo=1", add_query_arg( array( 'foo' => '1' ), $url ) );
- $this->assertSame(
- "$url&foo=2",
- add_query_arg(
- array(
- 'foo' => '1',
- 'foo' => '2',
- ),
- $url
- )
- );
- $this->assertSame(
- "$url&foo=1&bar=2",
- add_query_arg(
- array(
- 'foo' => '1',
- 'bar' => '2',
- ),
- $url
- )
- );
- $_SERVER['REQUEST_URI'] = $url;
- $this->assertSame( "$url&foo=1", add_query_arg( 'foo', '1' ) );
- $this->assertSame( "$url&foo=1", add_query_arg( array( 'foo' => '1' ) ) );
- $this->assertSame(
- "$url&foo=2",
- add_query_arg(
- array(
- 'foo' => '1',
- 'foo' => '2',
- )
- )
- );
- $this->assertSame(
- "$url&foo=1&bar=2",
- add_query_arg(
- array(
- 'foo' => '1',
- 'bar' => '2',
- )
- )
- );
- }
- $_SERVER['REQUEST_URI'] = $old_req_uri;
- }
- /**
- * @ticket 31306
- */
- function test_add_query_arg_numeric_keys() {
- $url = add_query_arg( array( 'foo' => 'bar' ), '1=1' );
- $this->assertSame( '1=1&foo=bar', $url );
- $url = add_query_arg(
- array(
- 'foo' => 'bar',
- '1' => '2',
- ),
- '1=1'
- );
- $this->assertSame( '1=2&foo=bar', $url );
- $url = add_query_arg( array( '1' => '2' ), 'foo=bar' );
- $this->assertSame( 'foo=bar&1=2', $url );
- }
- /**
- * @ticket 21594
- */
- function test_get_allowed_mime_types() {
- $mimes = get_allowed_mime_types();
- $this->assertInternalType( 'array', $mimes );
- $this->assertNotEmpty( $mimes );
- add_filter( 'upload_mimes', '__return_empty_array' );
- $mimes = get_allowed_mime_types();
- $this->assertInternalType( 'array', $mimes );
- $this->assertEmpty( $mimes );
- remove_filter( 'upload_mimes', '__return_empty_array' );
- $mimes = get_allowed_mime_types();
- $this->assertInternalType( 'array', $mimes );
- $this->assertNotEmpty( $mimes );
- }
- /**
- * @ticket 21594
- */
- function test_wp_get_mime_types() {
- $mimes = wp_get_mime_types();
- $this->assertInternalType( 'array', $mimes );
- $this->assertNotEmpty( $mimes );
- add_filter( 'mime_types', '__return_empty_array' );
- $mimes = wp_get_mime_types();
- $this->assertInternalType( 'array', $mimes );
- $this->assertEmpty( $mimes );
- remove_filter( 'mime_types', '__return_empty_array' );
- $mimes = wp_get_mime_types();
- $this->assertInternalType( 'array', $mimes );
- $this->assertNotEmpty( $mimes );
- // 'upload_mimes' should not affect wp_get_mime_types().
- add_filter( 'upload_mimes', '__return_empty_array' );
- $mimes = wp_get_mime_types();
- $this->assertInternalType( 'array', $mimes );
- $this->assertNotEmpty( $mimes );
- remove_filter( 'upload_mimes', '__return_empty_array' );
- $mimes2 = wp_get_mime_types();
- $this->assertInternalType( 'array', $mimes2 );
- $this->assertNotEmpty( $mimes2 );
- $this->assertSame( $mimes2, $mimes );
- }
- /**
- * @ticket 23688
- */
- function test_canonical_charset() {
- $orig_blog_charset = get_option( 'blog_charset' );
- update_option( 'blog_charset', 'utf8' );
- $this->assertSame( 'UTF-8', get_option( 'blog_charset' ) );
- update_option( 'blog_charset', 'utf-8' );
- $this->assertSame( 'UTF-8', get_option( 'blog_charset' ) );
- update_option( 'blog_charset', 'UTF8' );
- $this->assertSame( 'UTF-8', get_option( 'blog_charset' ) );
- update_option( 'blog_charset', 'UTF-8' );
- $this->assertSame( 'UTF-8', get_option( 'blog_charset' ) );
- update_option( 'blog_charset', 'ISO-8859-1' );
- $this->assertSame( 'ISO-8859-1', get_option( 'blog_charset' ) );
- update_option( 'blog_charset', 'ISO8859-1' );
- $this->assertSame( 'ISO-8859-1', get_option( 'blog_charset' ) );
- update_option( 'blog_charset', 'iso8859-1' );
- $this->assertSame( 'ISO-8859-1', get_option( 'blog_charset' ) );
- update_option( 'blog_charset', 'iso-8859-1' );
- $this->assertSame( 'ISO-8859-1', get_option( 'blog_charset' ) );
- // Arbitrary strings are passed through.
- update_option( 'blog_charset', 'foobarbaz' );
- $this->assertSame( 'foobarbaz', get_option( 'blog_charset' ) );
- update_option( 'blog_charset', $orig_blog_charset );
- }
- /**
- * @ticket 43977
- * @dataProvider data_wp_parse_list
- */
- function test_wp_parse_list( $expected, $actual ) {
- $this->assertSame( $expected, array_values( wp_parse_list( $actual ) ) );
- }
- function data_wp_parse_list() {
- return array(
- array( array( '1', '2', '3', '4' ), '1,2,3,4' ),
- array( array( 'apple', 'banana', 'carrot', 'dog' ), 'apple,banana,carrot,dog' ),
- array( array( '1', '2', 'apple', 'banana' ), '1,2,apple,banana' ),
- array( array( '1', '2', 'apple', 'banana' ), '1, 2,apple,banana' ),
- array( array( '1', '2', 'apple', 'banana' ), '1,2,apple,,banana' ),
- array( array( '1', '2', 'apple', 'banana' ), ',1,2,apple,banana' ),
- array( array( '1', '2', 'apple', 'banana' ), '1,2,apple,banana,' ),
- array( array( '1', '2', 'apple', 'banana' ), '1,2 ,apple,banana' ),
- array( array(), '' ),
- array( array(), ',' ),
- array( array(), ',,' ),
- );
- }
- /**
- * @dataProvider data_wp_parse_id_list
- */
- function test_wp_parse_id_list( $expected, $actual ) {
- $this->assertSame( $expected, array_values( wp_parse_id_list( $actual ) ) );
- }
- function data_wp_parse_id_list() {
- return array(
- array( array( 1, 2, 3, 4 ), '1,2,3,4' ),
- array( array( 1, 2, 3, 4 ), '1, 2,,3,4' ),
- array( array( 1, 2, 3, 4 ), '1,2,2,3,4' ),
- array( array( 1, 2, 3, 4 ), array( '1', '2', '3', '4', '3' ) ),
- array( array( 1, 2, 3, 4 ), array( 1, '2', 3, '4' ) ),
- array( array( 1, 2, 3, 4 ), '-1,2,-3,4' ),
- array( array( 1, 2, 3, 4 ), array( -1, 2, '-3', '4' ) ),
- );
- }
- /**
- * @dataProvider data_wp_parse_slug_list
- */
- function test_wp_parse_slug_list( $expected, $actual ) {
- $this->assertSame( $expected, array_values( wp_parse_slug_list( $actual ) ) );
- }
- function data_wp_parse_slug_list() {
- return array(
- array( array( 'apple', 'banana', 'carrot', 'dog' ), 'apple,banana,carrot,dog' ),
- array( array( 'apple', 'banana', 'carrot', 'dog' ), 'apple, banana,,carrot,dog' ),
- array( array( 'apple', 'banana', 'carrot', 'dog' ), 'apple banana carrot dog' ),
- array( array( 'apple', 'banana-carrot', 'd-o-g' ), array( 'apple ', 'banana carrot', 'd o g' ) ),
- );
- }
- /**
- * @dataProvider data_device_can_upload
- */
- function test_device_can_upload( $user_agent, $expected ) {
- $_SERVER['HTTP_USER_AGENT'] = $user_agent;
- $actual = _device_can_upload();
- unset( $_SERVER['HTTP_USER_AGENT'] );
- $this->assertSame( $expected, $actual );
- }
- function data_device_can_upload() {
- return array(
- // iPhone iOS 5.0.1, Safari 5.1.
- array(
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9A406)',
- false,
- ),
- // iPad iOS 3.2, Safari 4.0.4.
- array(
- 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10',
- false,
- ),
- // iPod iOS 4.3.3, Safari 5.0.2.
- array(
- 'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5',
- false,
- ),
- // iPhone iOS 6.0.0, Safari 6.0.
- array(
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25',
- true,
- ),
- // iPad iOS 6.0.0, Safari 6.0.
- array(
- 'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25',
- true,
- ),
- // Android 2.2, Android Webkit Browser.
- array(
- 'Mozilla/5.0 (Android 2.2; Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4',
- true,
- ),
- // BlackBerry 9900, BlackBerry browser.
- array(
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.346 Mobile Safari/534.11+',
- true,
- ),
- // Windows Phone 8.0, Internet Explorer 10.0.
- array(
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)',
- true,
- ),
- // Ubuntu desktop, Firefox 41.0.
- array(
- 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0',
- true,
- ),
- );
- }
- /**
- * @ticket 9064
- */
- function test_wp_extract_urls() {
- $original_urls = array(
- 'http://woo.com/1,2,3,4,5,6/-1-2-3-4-/woo.html',
- 'http://this.com',
- 'http://127.0.0.1',
- 'http://www111.urwyeoweytwutreyytqytwetowteuiiu.com/?346236346326&2134362574863.437',
- 'http://wordpress-core/1,2,3,4,5,6/-1-2-3-4-/woo.html',
- 'http://wordpress-core.com:8080/',
- 'http://www.website.com:5000',
- 'http://wordpress-core/?346236346326&2134362574863.437',
- 'http://افغانستا.icom.museum',
- 'http://الجزائر.icom.museum',
- 'http://österreich.icom.museum',
- 'http://বাংলাদেশ.icom.museum',
- 'http://беларусь.icom.museum',
- 'http://belgië.icom.museum',
- 'http://българия.icom.museum',
- 'http://تشادر.icom.museum',
- 'http://中国.icom.museum',
- // 'http://القمر.icom.museum', // Comoros http://القمر.icom.museum
- // 'http://κυπρος.icom.museum', // Cyprus http://κυπρος.icom.museum
- 'http://českárepublika.icom.museum',
- // 'http://مصر.icom.museum', // Egypt http://مصر.icom.museum
- 'http://ελλάδα.icom.museum',
- 'http://magyarország.icom.museum',
- 'http://ísland.icom.museum',
- 'http://भारत.icom.museum',
- 'http://ايران.icom.museum',
- 'http://éire.icom.museum',
- 'http://איקו״ם.ישראל.museum',
- 'http://日本.icom.museum',
- 'http://الأردن.icom.museum',
- 'http://қазақстан.icom.museum',
- 'http://한국.icom.museum',
- 'http://кыргызстан.icom.museum',
- 'http://ລາວ.icom.museum',
- 'http://لبنان.icom.museum',
- 'http://македонија.icom.museum',
- // 'http://موريتانيا.icom.museum', // Mauritania http://موريتانيا.icom.museum
- 'http://méxico.icom.museum',
- 'http://монголулс.icom.museum',
- // 'http://المغرب.icom.museum', // Morocco http://المغرب.icom.museum
- 'http://नेपाल.icom.museum',
- // 'http://عمان.icom.museum', // Oman http://عمان.icom.museum
- 'http://قطر.icom.museum',
- 'http://românia.icom.museum',
- 'http://россия.иком.museum',
- 'http://србијаицрнагора.иком.museum',
- 'http://இலங்கை.icom.museum',
- 'http://españa.icom.museum',
- 'http://ไทย.icom.museum',
- 'http://تونس.icom.museum',
- 'http://türkiye.icom.museum',
- 'http://украина.icom.museum',
- 'http://việtnam.icom.museum',
- 'ftp://127.0.0.1/',
- 'http://www.woo.com/video?v=exvUH2qKLTU',
- 'http://taco.com?burrito=enchilada#guac',
- );
- $blob = '
- http://woo.com/1,2,3,4,5,6/-1-2-3-4-/woo.html
- http://this.com
- http://127.0.0.1
- http://www111.urwyeoweytwutreyytqytwetowteuiiu.com/?346236346326&2134362574863.437
- http://wordpress-core/1,2,3,4,5,6/-1-2-3-4-/woo.html
- http://wordpress-core.com:8080/
- http://www.website.com:5000
- http://wordpress-core/?346236346326&2134362574863.437
- http://افغانستا.icom.museum
- http://الجزائر.icom.museum
- http://österreich.icom.museum
- http://বাংলাদেশ.icom.museum
- http://беларусь.icom.museum
- http://belgië.icom.museum
- http://българия.icom.museum
- http://تشادر.icom.museum
- http://中国.icom.museum
- http://českárepublika.icom.museum
- http://ελλάδα.icom.museum
- http://magyarország.icom.museum
- http://ísland.icom.museum
- http://भारत.icom.museum
- http://ايران.icom.museum
- http://éire.icom.museum
- http://איקו״ם.ישראל.museum
- http://日本.icom.museum
- http://الأردن.icom.museum
- http://қазақстан.icom.museum
- http://한국.icom.museum
- http://кыргызстан.icom.museum
- http://ລາວ.icom.museum
- http://لبنان.icom.museum
- http://македонија.icom.museum
- http://méxico.icom.museum
- http://монголулс.icom.museum
- http://नेपाल.icom.museum
- http://قطر.icom.museum
- http://românia.icom.museum
- http://россия.иком.museum
- http://србијаицрнагора.иком.museum
- http://இலங்கை.icom.museum
- http://españa.icom.museum
- http://ไทย.icom.museum
- http://تونس.icom.museum
- http://türkiye.icom.museum
- http://украина.icom.museum
- http://việtnam.icom.museum
- ftp://127.0.0.1/
- http://www.woo.com/video?v=exvUH2qKLTU
- http://taco.com?burrito=enchilada#guac
- ';
- $urls = wp_extract_urls( $blob );
- $this->assertNotEmpty( $urls );
- $this->assertInternalType( 'array', $urls );
- $this->assertCount( count( $original_urls ), $urls );
- $this->assertSame( $original_urls, $urls );
- $exploded = array_values( array_filter( array_map( 'trim', explode( "\n", $blob ) ) ) );
- // wp_extract_urls() calls html_entity_decode().
- $decoded = array_map( 'html_entity_decode', $exploded );
- $this->assertSame( $decoded, $urls );
- $this->assertSame( $original_urls, $decoded );
- $blob = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
- incididunt ut labore http://woo.com/1,2,3,4,5,6/-1-2-3-4-/woo.html et dolore magna aliqua.
- Ut http://this.com enim ad minim veniam, quis nostrud exercitation 16.06. to 18.06.2014 ullamco http://127.0.0.1
- laboris nisi ut aliquip ex http://www111.urwyeoweytwutreyytqytwetowteuiiu.com/?346236346326&2134362574863.437 ea
- commodo consequat. http://wordpress-core/1,2,3,4,5,6/-1-2-3-4-/woo.html Duis aute irure dolor in reprehenderit in voluptate
- velit esse http://wordpress-core.com:8080/ cillum dolore eu fugiat nulla <A href="http://www.website.com:5000">http://www.website.com:5000</B> pariatur. Excepteur sint occaecat cupidatat non proident,
- sunt in culpa qui officia deserunt mollit http://wordpress-core/?346236346326&2134362574863.437 anim id est laborum.';
- $urls = wp_extract_urls( $blob );
- $this->assertNotEmpty( $urls );
- $this->assertInternalType( 'array', $urls );
- $this->assertCount( 8, $urls );
- $this->assertSame( array_slice( $original_urls, 0, 8 ), $urls );
- $blob = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
- incididunt ut labore <a href="http://woo.com/1,2,3,4,5,6/-1-2-3-4-/woo.html">343462^</a> et dolore magna aliqua.
- Ut <a href="http://this.com">&3640i6p1yi499</a> enim ad minim veniam, quis nostrud exercitation 16.06. to 18.06.2014 ullamco <a href="http://127.0.0.1">localhost</a>
- laboris nisi ut aliquip ex <a href="http://www111.urwyeoweytwutreyytqytwetowteuiiu.com/?346236346326&2134362574863.437">343462^</a> ea
- commodo consequat. <a href="http://wordpress-core/1,2,3,4,5,6/-1-2-3-4-/woo.html">343462^</a> Duis aute irure dolor in reprehenderit in voluptate
- velit esse <a href="http://wordpress-core.com:8080/">-3-4--321-64-4@#!$^$!@^@^</a> cillum dolore eu <A href="http://www.website.com:5000">http://www.website.com:5000</B> fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident,
- sunt in culpa qui officia deserunt mollit <a href="http://wordpress-core/?346236346326&2134362574863.437">)(*&^%$</a> anim id est laborum.';
- $urls = wp_extract_urls( $blob );
- $this->assertNotEmpty( $urls );
- $this->assertInternalType( 'array', $urls );
- $this->assertCount( 8, $urls );
- $this->assertSame( array_slice( $original_urls, 0, 8 ), $urls );
- }
- /**
- * @ticket 28786
- */
- function test_wp_json_encode() {
- $this->assertSame( wp_json_encode( 'a' ), '"a"' );
- }
- /**
- * @ticket 28786
- */
- function test_wp_json_encode_utf8() {
- $this->assertSame( wp_json_encode( '这' ), '"\u8fd9"' );
- }
- /**
- * @ticket 28786
- * @requires function mb_detect_order
- */
- function test_wp_json_encode_non_utf8() {
- $charsets = mb_detect_order();
- $old_charsets = $charsets;
- if ( ! in_array( 'EUC-JP', $charsets, true ) ) {
- $charsets[] = 'EUC-JP';
- mb_detect_order( $charsets );
- }
- $eucjp = mb_convert_encoding( 'aあb', 'EUC-JP', 'UTF-8' );
- $utf8 = mb_convert_encoding( $eucjp, 'UTF-8', 'EUC-JP' );
- $this->assertSame( 'aあb', $utf8 );
- $this->assertSame( '"a\u3042b"', wp_json_encode( $eucjp ) );
- mb_detect_order( $old_charsets );
- }
- /**
- * @ticket 28786
- * @requires function mb_detect_order
- */
- function test_wp_json_encode_non_utf8_in_array() {
- $charsets = mb_detect_order();
- $old_charsets = $charsets;
- if ( ! in_array( 'EUC-JP', $charsets, true ) ) {
- $charsets[] = 'EUC-JP';
- mb_detect_order( $charsets );
- }
- $eucjp = mb_convert_encoding( 'aあb', 'EUC-JP', 'UTF-8' );
- $utf8 = mb_convert_encoding( $eucjp, 'UTF-8', 'EUC-JP' );
- $this->assertSame( 'aあb', $utf8 );
- $this->assertSame( '["c","a\u3042b"]', wp_json_encode( array( 'c', $eucjp ) ) );
- mb_detect_order( $old_charsets );
- }
- /**
- * @ticket 28786
- */
- function test_wp_json_encode_array() {
- $this->assertSame( wp_json_encode( array( 'a' ) ), '["a"]' );
- }
- /**
- * @ticket 28786
- */
- function test_wp_json_encode_object() {
- $object = new stdClass;
- $object->a = 'b';
- $this->assertSame( wp_json_encode( $object ), '{"a":"b"}' );
- }
- /**
- * @ticket 28786
- */
- function test_wp_json_encode_depth() {
- $data = array( array( array( 1, 2, 3 ) ) );
- $json = wp_json_encode( $data, 0, 1 );
- $this->assertFalse( $json );
- $data = array( 'あ', array( array( 1, 2, 3 ) ) );
- $json = wp_json_encode( $data, 0, 1 );
- $this->assertFalse( $json );
- }
- /**
- * @ticket 36054
- * @dataProvider datetime_provider
- */
- function test_mysql_to_rfc3339( $expected, $actual ) {
- $date_return = mysql_to_rfc3339( $actual );
- $this->assertTrue( is_string( $date_return ), 'The date return must be a string' );
- $this->assertNotEmpty( $date_return, 'The date return could not be an empty string' );
- $this->assertSame( $expected, $date_return, 'The date does not match' );
- $this->assertEquals( new DateTime( $expected ), new DateTime( $date_return ), 'The date is not the same after the call method' );
- }
- function datetime_provider() {
- return array(
- array( '2016-03-15T18:54:46', '15-03-2016 18:54:46' ),
- array( '2016-03-02T19:13:25', '2016-03-02 19:13:25' ),
- array( '2016-03-02T19:13:00', '2016-03-02 19:13' ),
- array( '2016-03-02T19:13:00', '16-03-02 19:13' ),
- array( '2016-03-02T19:13:00', '16-03-02 19:13' ),
- );
- }
- /**
- * @ticket 35987
- */
- public function test_wp_get_ext_types() {
- $extensions = wp_get_ext_types();
- $this->assertInternalType( 'array', $extensions );
- $this->assertNotEmpty( $extensions );
- add_filter( 'ext2type', '__return_empty_array' );
- $extensions = wp_get_ext_types();
- $this->assertSame( array(), $extensions );
- remove_filter( 'ext2type', '__return_empty_array' );
- $extensions = wp_get_ext_types();
- $this->assertInternalType( 'array', $extensions );
- $this->assertNotEmpty( $extensions );
- }
- /**
- * @ticket 35987
- */
- public function test_wp_ext2type() {
- $extensions = wp_get_ext_types();
- foreach ( $extensions as $type => $extension_list ) {
- foreach ( $extension_list as $extension ) {
- $this->assertSame( $type, wp_ext2type( $extension ) );
- $this->assertSame( $type, wp_ext2type( strtoupper( $extension ) ) );
- }
- }
- $this->assertNull( wp_ext2type( 'unknown_format' ) );
- }
- /**
- * Tests raising the memory limit.
- *
- * Unfortunately as the default for 'WP_MAX_MEMORY_LIMIT' in the
- * test suite is -1, we can not test the memory limit negotiations.
- *
- * @ticket 32075
- */
- function test_wp_raise_memory_limit() {
- if ( -1 !== WP_MAX_MEMORY_LIMIT ) {
- $this->markTestSkipped( 'WP_MAX_MEMORY_LIMIT should be set to -1.' );
- }
- $ini_limit_before = ini_get( 'memory_limit' );
- $raised_limit = wp_raise_memory_limit();
- $ini_limit_after = ini_get( 'memory_limit' );
- $this->assertSame( $ini_limit_before, $ini_limit_after );
- $this->assertFalse( $raised_limit );
- $this->assertEquals( WP_MAX_MEMORY_LIMIT, $ini_limit_after );
- }
- /**
- * Tests wp_generate_uuid4().
- *
- * @covers ::wp_generate_uuid4
- * @ticket 38164
- */
- function test_wp_generate_uuid4() {
- $uuids = array();
- for ( $i = 0; $i < 20; $i += 1 ) {
- $uuid = wp_generate_uuid4();
- $this->assertTrue( wp_is_uuid( $uuid, 4 ) );
- $uuids[] = $uuid;
- }
- $unique_uuids = array_unique( $uuids );
- $this->assertSame( $uuids, $unique_uuids );
- }
- /**
- * Tests wp_is_uuid().
- *
- * @covers ::wp_is_uuid
- * @ticket 39778
- */
- function test_wp_is_valid_uuid() {
- $uuids_v4 = array(
- '27fe2421-780c-44c5-b39b-fff753092b55',
- 'b7c7713a-4ee9-45a1-87ed-944a90390fc7',
- 'fbedbe35-7bf5-49cc-a5ac-0343bd94360a',
- '4c58e67e-123b-4290-a41c-5eeb6970fa3e',
- 'f54f5b78-e414-4637-84a9-a6cdc94a1beb',
- 'd1c533ac-abcf-44b6-9b0e-6477d2c91b09',
- '7fcd683f-e5fd-454a-a8b9-ed15068830da',
- '7962c750-e58c-470a-af0d-ec1eae453ff2',
- 'a59878ce-9a67-4493-8ca0-a756b52804b3',
- '6faa519d-1e13-4415-bd6f-905ae3689d1d',
- );
- foreach ( $uuids_v4 as $uuid ) {
- $this->assertTrue( wp_is_uuid( $uuid, 4 ) );
- }
- $uuids = array(
- '00000000-0000-0000-0000-000000000000', // Nil.
- '9e3a0460-d72d-11e4-a631-c8e0eb141dab', // Version 1.
- '2c1d43b8-e6d7-376e-af7f-d4bde997cc3f', // Version 3.
- '39888f87-fb62-5988-a425-b2ea63f5b81e', // Version 5.
- );
- foreach ( $uuids as $uuid ) {
- $this->assertTrue( wp_is_uuid( $uuid ) );
- $this->assertFalse( wp_is_uuid( $uuid, 4 ) );
- }
- $invalid_uuids = array(
- 'a19d5192-ea41-41e6-b006',
- 'this-is-not-valid',
- 1234,
- true,
- array(),
- );
- foreach ( $invalid_uuids as $invalid_uuid ) {
- $this->assertFalse( wp_is_uuid( $invalid_uuid, 4 ) );
- $this->assertFalse( wp_is_uuid( $invalid_uuid ) );
- }
- }
- /**
- * Tests wp_unique_id().
- *
- * @covers ::wp_unique_id
- * @ticket 44883
- */
- function test_wp_unique_id() {
- // Test without prefix.
- $ids = array();
- for ( $i = 0; $i < 20; $i += 1 ) {
- $id = wp_unique_id();
- $this->assertInternalType( 'string', $id );
- $this->assertTrue( is_numeric( $id ) );
- $ids[] = $id;
- }
- $this->assertSame( $ids, array_unique( $ids ) );
- // Test with prefix.
- $ids = array();
- for ( $i = 0; $i < 20; $i += 1 ) {
- $id = wp_unique_id( 'foo-' );
- $this->assertRegExp( '/^foo-\d+$/', $id );
- $ids[] = $id;
- }
- $this->assertSame( $ids, array_unique( $ids ) );
- }
- /**
- * @ticket 40017
- * @dataProvider _wp_get_image_mime
- */
- public function test_wp_get_image_mime( $file, $expected ) {
- if ( ! is_callable( 'exif_imagetype' ) && ! function_exists( 'getimagesize' ) ) {
- $this->markTestSkipped( 'The exif PHP extension is not loaded.' );
- }
- $this->assertSame( $expected, wp_get_image_mime( $file ) );
- }
- /**
- * @ticket 39550
- * @dataProvider _wp_check_filetype_and_ext_data
- * @requires extension fileinfo
- */
- function test_wp_check_filetype_and_ext( $file, $filename, $expected ) {
- $this->assertSame( $expected, wp_check_filetype_and_ext( $file, $filename ) );
- }
- /**
- * @ticket 39550
- * @group ms-excluded
- * @requires extension fileinfo
- */
- function test_wp_check_filetype_and_ext_with_filtered_svg() {
- $file = DIR_TESTDATA . '/uploads/video-play.svg';
- $filename = 'video-play.svg';
- $expected = array(
- 'ext' => 'svg',
- 'type' => 'image/svg+xml',
- 'proper_filename' => false,
- );
- add_filter( 'upload_mimes', array( $this, '_filter_mime_types_svg' ) );
- $this->assertSame( $expected, wp_check_filetype_and_ext( $file, $filename ) );
- // Cleanup.
- remove_filter( 'upload_mimes', array( $this, '_test_add_mime_types_svg' ) );
- }
- /**
- * @ticket 39550
- * @group ms-excluded
- * @requires extension fileinfo
- */
- function test_wp_check_filetype_and_ext_with_filtered_woff() {
- $file = DIR_TESTDATA . '/uploads/dashicons.woff';
- $filename = 'dashicons.woff';
- $expected = array(
- 'ext' => 'woff',
- 'type' => 'application/font-woff',
- 'proper_filename' => false,
- );
- add_filter( 'upload_mimes', array( $this, '_filter_mime_types_woff' ) );
- $this->assertSame( $expected, wp_check_filetype_and_ext( $file, $filename ) );
- // Cleanup.
- remove_filter( 'upload_mimes', array( $this, '_test_add_mime_types_woff' ) );
- }
- public function _filter_mime_types_svg( $mimes ) {
- $mimes['svg'] = 'image/svg+xml';
- return $mimes;
- }
- public function _filter_mime_types_woff( $mimes ) {
- $mimes['woff'] = 'application/font-woff';
- return $mimes;
- }
- /**
- * Data provider for test_wp_get_image_mime();
- */
- public function _wp_get_image_mime() {
- $data = array(
- // Standard JPEG.
- array(
- DIR_TESTDATA . '/images/test-image.jpg',
- 'image/jpeg',
- ),
- // Standard GIF.
- array(
- DIR_TESTDATA . '/images/test-image.gif',
- 'image/gif',
- ),
- // Standard PNG.
- array(
- DIR_TESTDATA . '/images/test-image.png',
- 'image/png',
- ),
- // Image with wrong extension.
- array(
- DIR_TESTDATA . '/images/test-image-mime-jpg.png',
- 'image/jpeg',
- ),
- // Not an image.
- array(
- DIR_TESTDATA . '/uploads/dashicons.woff',
- false,
- ),
- );
- return $data;
- }
- public function _wp_check_filetype_and_ext_data() {
- $data = array(
- // Standard image.
- array(
- DIR_TESTDATA . '/images/canola.jpg',
- 'canola.jpg',
- array(
- 'ext' => 'jpg',
- 'type' => 'image/jpeg',
- 'proper_filename' => false,
- ),
- ),
- // Image with wrong extension.
- array(
- DIR_TESTDATA . '/images/test-image-mime-jpg.png',
- 'test-image-mime-jpg.png',
- array(
- 'ext' => 'jpg',
- 'type' => 'image/jpeg',
- 'proper_filename' => 'test-image-mime-jpg.jpg',
- ),
- ),
- // Image without extension.
- array(
- DIR_TESTDATA . '/images/test-image-no-extension',
- 'test-image-no-extension',
- array(
- 'ext' => false,
- 'type' => false,
- 'proper_filename' => false,
- ),
- ),
- // Valid non-image file with an image extension.
- array(
- DIR_TESTDATA . '/formatting/big5.txt',
- 'big5.jpg',
- array(
- 'ext' => false,
- 'type' => false,
- 'proper_filename' => false,
- ),
- ),
- // Non-image file not allowed.
- array(
- DIR_TESTDATA . '/export/crazy-cdata.xml',
- 'crazy-cdata.xml',
- array(
- 'ext' => false,
- 'type' => false,
- 'proper_filename' => false,
- ),
- ),
- // Non-image file not allowed even if it's named like one.
- array(
- DIR_TESTDATA . '/export/crazy-cdata.xml',
- 'crazy-cdata.jpg',
- array(
- 'ext' => false,
- 'type' => false,
- 'proper_filename' => false,
- ),
- ),
- // Non-image file not allowed if it's named like something else.
- array(
- DIR_TESTDATA . '/export/crazy-cdata.xml',
- 'crazy-cdata.doc',
- array(
- 'ext' => false,
- 'type' => false,
- 'proper_filename' => false,
- ),
- ),
- // Non-image file not allowed even if it's named like one.
- array(
- DIR_TESTDATA . '/export/crazy-cdata.xml',
- 'crazy-cdata.jpg',
- array(
- 'ext' => false,
- 'type' => false,
- 'proper_filename' => false,
- ),
- ),
- // Non-image file not allowed if it's named like something else.
- array(
- DIR_TESTDATA . '/export/crazy-cdata.xml',
- 'crazy-cdata.doc',
- array(
- 'ext' => false,
- 'type' => false,
- 'proper_filename' => false,
- ),
- ),
- );
- // Test a few additional file types on single sites.
- if ( ! is_multisite() ) {
- $data = array_merge(
- $data,
- array(
- // Standard non-image file.
- array(
- DIR_TESTDATA . '/formatting/big5.txt',
- 'big5.txt',
- array(
- 'ext' => 'txt',
- 'type' => 'text/plain',
- 'proper_filename' => false,
- ),
- ),
- // Non-image file with wrong sub-type.
- array(
- DIR_TESTDATA . '/uploads/pages-to-word.docx',
- 'pages-to-word.docx',
- array(
- 'ext' => 'docx',
- 'type' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
- 'proper_filename' => false,
- ),
- ),
- // FLAC file.
- array(
- DIR_TESTDATA . '/uploads/small-audio.flac',
- 'small-audio.flac',
- array(
- 'ext' => 'flac',
- 'type' => 'audio/flac',
- 'proper_filename' => false,
- ),
- ),
- // Assorted text/* sample files
- array(
- DIR_TESTDATA . '/uploads/test.vtt',
- 'test.vtt',
- array(
- 'ext' => 'vtt',
- 'type' => 'text/vtt',
- 'proper_filename' => false,
- ),
- ),
- array(
- DIR_TESTDATA . '/uploads/test.csv',
- 'test.csv',
- array(
- 'ext' => 'csv',
- 'type' => 'text/csv',
- 'proper_filename' => false,
- ),
- ),
- // RTF files.
- array(
- DIR_TESTDATA . '/uploads/test.rtf',
- 'test.rtf',
- array(
- 'ext' => 'rtf',
- 'type' => 'application/rtf',
- 'proper_filename' => false,
- ),
- ),
- )
- );
- }
- return $data;
- }
- /**
- * Test file path validation
- *
- * @ticket 42016
- * @dataProvider data_test_validate_file()
- *
- * @param string $file File path.
- * @param array $allowed_files List of allowed files.
- * @param int $expected Expected result.
- */
- public function test_validate_file( $file, $allowed_files, $expected ) {
- $this->assertSame( $expected, validate_file( $file, $allowed_files ) );
- }
- /**
- * Data provider for file validation.
- *
- * @return array {
- * @type array $0... {
- * @type string $0 File path.
- * @type array $1 List of allowed files.
- * @type int $2 Expected result.
- * }
- * }
- */
- public function data_test_validate_file() {
- return array(
- // Allowed files:
- array(
- null,
- array(),
- 0,
- ),
- array(
- '',
- array(),
- 0,
- ),
- array(
- ' ',
- array(),
- 0,
- ),
- array(
- '.',
- array(),
- 0,
- ),
- array(
- '..',
- array(),
- 0,
- ),
- array(
- './',
- array(),
- 0,
- ),
- array(
- 'foo.ext',
- array( 'foo.ext' ),
- 0,
- ),
- array(
- 'dir/foo.ext',
- array(),
- 0,
- ),
- array(
- 'foo..ext',
- array(),
- 0,
- ),
- array(
- 'dir/dir/../',
- array(),
- 0,
- ),
- // Directory traversal:
- array(
- '../',
- array(),
- 1,
- ),
- array(
- '../../',
- array(),
- 1,
- ),
- array(
- '../file.ext',
- array(),
- 1,
- ),
- array(
- '../dir/../',
- array(),
- 1,
- ),
- array(
- '/dir/dir/../../',
- array(),
- 1,
- ),
- array(
- '/dir/dir/../../',
- array( '/dir/dir/../../' ),
- 1,
- ),
- // Windows drives:
- array(
- 'c:',
- array(),
- 2,
- ),
- array(
- 'C:/WINDOWS/system32',
- array( 'C:/WINDOWS/system32' ),
- 2,
- ),
- // Disallowed files:
- array(
- 'foo.ext',
- array( 'bar.ext' ),
- 3,
- ),
- array(
- 'foo.ext',
- array( '.ext' ),
- 3,
- ),
- array(
- 'path/foo.ext',
- array( 'foo.ext' ),
- 3,
- ),
- );
- }
- /**
- * Test stream URL validation.
- *
- * @dataProvider data_test_wp_is_stream
- *
- * @param string $path The resource path or URL.
- * @param bool $expected Expected result.
- */
- public function test_wp_is_stream( $path, $expected ) {
- if ( ! extension_loaded( 'openssl' ) && false !== strpos( $path, 'https://' ) ) {
- $this->markTestSkipped( 'The openssl PHP extension is not loaded.' );
- }
- $this->assertSame( $expected, wp_is_stream( $path ) );
- }
- /**
- * Data provider for stream URL validation.
- *
- * @return array {
- * @type array $0... {
- * @type string $0 The resource path or URL.
- * @type bool $1 Expected result.
- * }
- * }
- */
- public function data_test_wp_is_stream() {
- return array(
- // Legitimate stream examples.
- array( 'http://example.com', true ),
- array( 'https://example.com', true ),
- array( 'ftp://example.com', true ),
- array( 'file:///path/to/some/file', true ),
- array( 'php://some/php/file.php', true ),
- // Non-stream examples.
- array( 'fakestream://foo/bar/baz', false ),
- array( '../../some/relative/path', false ),
- array( 'some/other/relative/path', false ),
- array( '/leading/relative/path', false ),
- );
- }
- /**
- * Test human_readable_duration().
- *
- * @ticket 39667
- * @dataProvider data_test_human_readable_duration
- *
- * @param string $input Duration.
- * @param string $expected Expected human readable duration.
- */
- public function test_human_readable_duration( $input, $expected ) {
- $this->assertSame( $expected, human_readable_duration( $input ) );
- }
- /**
- * Dataprovider for test_duration_format().
- *
- * @return array {
- * @type array {
- * @type string $input Duration.
- * @type string $expect Expected human readable duration.
- * }
- * }
- */
- public function data_test_human_readable_duration() {
- return array(
- // Valid ii:ss cases.
- array( '0:0', '0 minutes, 0 seconds' ),
- array( '00:00', '0 minutes, 0 seconds' ),
- array( '0:5', '0 minutes, 5 seconds' ),
- array( '0:05', '0 minutes, 5 seconds' ),
- array( '01:01', '1 minute, 1 second' ),
- array( '30:00', '30 minutes, 0 seconds' ),
- array( ' 30:00 ', '30 minutes, 0 seconds' ),
- // Valid HH:ii:ss cases.
- array( '0:0:0', '0 hours, 0 minutes, 0 seconds' ),
- array( '00:00:00', '0 hours, 0 minutes, 0 seconds' ),
- array( '00:30:34', '0 hours, 30 minutes, 34 seconds' ),
- array( '01:01:01', '1 hour, 1 minute, 1 second' ),
- array( '1:02:00', '1 hour, 2 minutes, 0 seconds' ),
- array( '10:30:34', '10 hours, 30 minutes, 34 seconds' ),
- array( '1234567890:59:59', '1234567890 hours, 59 minutes, 59 seconds' ),
- // Valid ii:ss cases with negative sign.
- array( '-00:00', '0 minutes, 0 seconds' ),
- array( '-3:00', '3 minutes, 0 seconds' ),
- array( '-03:00', '3 minutes, 0 seconds' ),
- array( '-30:00', '30 minutes, 0 seconds' ),
- // Valid HH:ii:ss cases with negative sign.
- array( '-00:00:00', '0 hours, 0 minutes, 0 seconds' ),
- array( '-1:02:00', '1 hour, 2 minutes, 0 seconds' ),
- // Invalid cases.
- array( null, false ),
- array( '', false ),
- array( ':', false ),
- array( '::', false ),
- array( array(), false ),
- array( 'Batman Begins !', false ),
- array( '', false ),
- array( '-1', false ),
- array( -1, false ),
- array( 0, false ),
- array( 1, false ),
- array( '00', false ),
- array( '30:-10', false ),
- array( ':30:00', false ), // Missing HH.
- array( 'MM:30:00', false ), // Invalid HH.
- array( '30:MM:00', false ), // Invalid ii.
- array( '30:30:MM', false ), // Invalid ss.
- array( '30:MM', false ), // Invalid ss.
- array( 'MM:00', false ), // Invalid ii.
- array( 'MM:MM', false ), // Invalid ii and ss.
- array( '10 :30', false ), // Containing a space.
- array( '59:61', false ), // Out of bound.
- array( '61:59', false ), // Out of bound.
- array( '3:59:61', false ), // Out of bound.
- array( '03:61:59', false ), // Out of bound.
- );
- }
- /**
- * @ticket 49404
- * @dataProvider data_test_wp_is_json_media_type
- */
- public function test_wp_is_json_media_type( $input, $expected ) {
- $this->assertSame( $expected, wp_is_json_media_type( $input ) );
- }
- public function data_test_wp_is_json_media_type() {
- return array(
- array( 'application/ld+json', true ),
- array( 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"', true ),
- array( 'application/activity+json', true ),
- array( 'application/json+oembed', true ),
- array( 'application/json', true ),
- array( 'application/nojson', false ),
- array( 'application/no.json', false ),
- array( 'text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, */*;q=0.8', false ),
- array( 'application/activity+json, application/nojson', true ),
- );
- }
- }
|