Make WordPress Core

Changeset 38512


Ignore:
Timestamp:
09/02/2016 09:35:51 PM (10 years ago)
Author:
johnbillion
Message:

Embeds: Update the oEmbed provider test suite.

  • Remove the manual flag for HTTPS support and replace it with a simple check on the URL format.
  • Ensure testOembedTestsCoverAllProviders() actually fails when a new provider is added without a corresponding test.

See #32360

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/oembed.php

    r38454 r38512  
    44        protected static $oembed;
    55        protected static $provider_map = array(
    6                 'youtube' => '#https?://((m|www)\.)?youtube\.com/watch.*#i',
    7                 'youtube-playlist' => '#https?://((m|www)\.)?youtube\.com/playlist.*#i',
    8                 'youtube-shorturl' => '#https?://youtu\.be/.*#i',
    9                 'vimeo' => '#https?://(.+\.)?vimeo\.com/.*#i',
    10                 'dailymotion' => '#https?://(www\.)?dailymotion\.com/.*#i',
     6                'youtube'              => '#https?://((m|www)\.)?youtube\.com/watch.*#i',
     7                'youtube-playlist'     => '#https?://((m|www)\.)?youtube\.com/playlist.*#i',
     8                'youtube-shorturl'     => '#https?://youtu\.be/.*#i',
     9                'vimeo'                => '#https?://(.+\.)?vimeo\.com/.*#i',
     10                'dailymotion'          => '#https?://(www\.)?dailymotion\.com/.*#i',
    1111                'dailymotion-shorturl' => '#https?://dai.ly/.*#i',
    12                 'flickr' => '#https?://(www\.)?flickr\.com/.*#i',
    13                 'flickr-shorturl' => '#https?://flic\.kr/.*#i',
    14                 'smugmug' => '#https?://(.+\.)?smugmug\.com/.*#i',
    15                 'hulu' => '#https?://(www\.)?hulu\.com/watch/.*#i',
    16                 'photobucket-album' => 'http://i*.photobucket.com/albums/*',
    17                 'photobucket-group' => 'http://gi*.photobucket.com/groups/*',
    18                 'scribd' => '#https?://(www\.)?scribd\.com/doc/.*#i',
    19                 'wordpress-tv' => '#https?://wordpress.tv/.*#i',
    20                 'polldaddy' => '#https?://(.+\.)?polldaddy\.com/.*#i',
    21                 'polldaddy-shorturl' => '#https?://poll\.fm/.*#i',
    22                 'funnyordie' => '#https?://(www\.)?funnyordie\.com/videos/.*#i',
    23                 'twitter' => '#https?://(www\.)?twitter\.com/.+?/status(es)?/.*#i',
    24                 'twitter-timeline' => '#https?://(www\.)?twitter\.com/.+?/timelines/.*#i',
    25                 'twitter-moment' => '#https?://(www\.)?twitter\.com/i/moments/.*#i',
    26                 'vine' => '#https?://vine.co/v/.*#i',
    27                 'soundcloud' => '#https?://(www\.)?soundcloud\.com/.*#i',
    28                 'slideshare' => '#https?://(.+?\.)?slideshare\.net/.*#i',
    29                 'instagram' => '#https?://(www\.)?instagr(\.am|am\.com)/p/.*#i',
    30                 'spotify' => '#https?://(open|play)\.spotify\.com/.*#i',
    31                 'imgur' => '#https?://(.+\.)?imgur\.com/.*#i',
    32                 'meetup' => '#https?://(www\.)?meetu(\.ps|p\.com)/.*#i',
    33                 'issuu' => '#https?://(www\.)?issuu\.com/.+/docs/.+#i',
    34                 'collegehumor' => '#https?://(www\.)?collegehumor\.com/video/.*#i',
    35                 'mixcloud' => '#https?://(www\.)?mixcloud\.com/.*#i',
    36                 'ted' => '#https?://(www\.|embed\.)?ted\.com/talks/.*#i',
    37                 'animoto' => '#https?://(www\.)?(animoto|video214)\.com/play/.*#i',
    38                 'tumblr' => '#https?://(.+)\.tumblr\.com/post/.*#i',
    39                 'kickstarter' => '#https?://(www\.)?kickstarter\.com/projects/.*#i',
     12                'flickr'               => '#https?://(www\.)?flickr\.com/.*#i',
     13                'flickr-shorturl'      => '#https?://flic\.kr/.*#i',
     14                'smugmug'              => '#https?://(.+\.)?smugmug\.com/.*#i',
     15                'hulu'                 => '#https?://(www\.)?hulu\.com/watch/.*#i',
     16                'photobucket-album'    => 'http://i*.photobucket.com/albums/*',
     17                'photobucket-group'    => 'http://gi*.photobucket.com/groups/*',
     18                'scribd'               => '#https?://(www\.)?scribd\.com/doc/.*#i',
     19                'wordpress-tv'         => '#https?://wordpress.tv/.*#i',
     20                'polldaddy'            => '#https?://(.+\.)?polldaddy\.com/.*#i',
     21                'polldaddy-shorturl'   => '#https?://poll\.fm/.*#i',
     22                'funnyordie'           => '#https?://(www\.)?funnyordie\.com/videos/.*#i',
     23                'twitter'              => '#https?://(www\.)?twitter\.com/.+?/status(es)?/.*#i',
     24                'twitter-timeline'     => '#https?://(www\.)?twitter\.com/.+?/timelines/.*#i',
     25                'twitter-moment'       => '#https?://(www\.)?twitter\.com/i/moments/.*#i',
     26                'vine'                 => '#https?://vine.co/v/.*#i',
     27                'soundcloud'           => '#https?://(www\.)?soundcloud\.com/.*#i',
     28                'slideshare'           => '#https?://(.+?\.)?slideshare\.net/.*#i',
     29                'instagram'            => '#https?://(www\.)?instagr(\.am|am\.com)/p/.*#i',
     30                'spotify'              => '#https?://(open|play)\.spotify\.com/.*#i',
     31                'imgur'                => '#https?://(.+\.)?imgur\.com/.*#i',
     32                'meetup'               => '#https?://(www\.)?meetu(\.ps|p\.com)/.*#i',
     33                'issuu'                => '#https?://(www\.)?issuu\.com/.+/docs/.+#i',
     34                'collegehumor'         => '#https?://(www\.)?collegehumor\.com/video/.*#i',
     35                'mixcloud'             => '#https?://(www\.)?mixcloud\.com/.*#i',
     36                'ted'                  => '#https?://(www\.|embed\.)?ted\.com/talks/.*#i',
     37                'animoto'              => '#https?://(www\.)?(animoto|video214)\.com/play/.*#i',
     38                'tumblr'               => '#https?://(.+)\.tumblr\.com/post/.*#i',
     39                'kickstarter'          => '#https?://(www\.)?kickstarter\.com/projects/.*#i',
    4040                'kickstarter-shorturl' => '#https?://kck\.st/.*#i',
    41                 'cloudup' => '#https?://cloudup\.com/.*#i',
    42                 'reverbnation' => '#https?://(www\.)?reverbnation\.com/.*#i',
    43                 'videopress' => '#https?://videopress.com/v/.*#',
    44                 'reddit-comments' => '#https?://(www\.)?reddit\.com/r/[^/]+/comments/.*#i',
    45                 'speakerdeck' => '#https?://(www\.)?speakerdeck\.com/.*#i',
    46                 'facebook-post' => '#https?://www\.facebook\.com/.*/posts/.*#i',
    47                 'facebook-photo' => '#https?://www\.facebook\.com/photo(s/|\.php).*#i',
    48                 'facebook-permalink' => '#https?://www\.facebook\.com/permalink\.php.*#i',
    49                 'facebook-media' => '#https?://www\.facebook\.com/media/.*#i',
    50                 'facebook-notes' => '#https?://www\.facebook\.com/notes/.*#i',
    51                 'facebook-video' => '#https?://www\.facebook\.com/.*/videos/.*#i',
    52                 'facebook-videophp' => '#https?://www\.facebook\.com/video\.php.*#i',
    53                 // I can't find URLs in this format
    54                 //'facebook-activity' => '#https?://www\.facebook\.com/.*/activity/.*#i',
    55                 // Questions has been RIP since 2012, URLs (if you can find them) should still work
    56                 //'facebook-questions' => '#https?://www\.facebook\.com/questions/.*#i',
     41                'cloudup'              => '#https?://cloudup\.com/.*#i',
     42                'reverbnation'         => '#https?://(www\.)?reverbnation\.com/.*#i',
     43                'videopress'           => '#https?://videopress.com/v/.*#',
     44                'reddit-comments'      => '#https?://(www\.)?reddit\.com/r/[^/]+/comments/.*#i',
     45                'speakerdeck'          => '#https?://(www\.)?speakerdeck\.com/.*#i',
     46                'facebook-post'        => '#https?://www\.facebook\.com/.*/posts/.*#i',
     47                'facebook-activity'    => '#https?://www\.facebook\.com/.*/activity/.*#i',
     48                'facebook-photo'       => '#https?://www\.facebook\.com/photo(s/|\.php).*#i',
     49                'facebook-permalink'   => '#https?://www\.facebook\.com/permalink\.php.*#i',
     50                'facebook-media'       => '#https?://www\.facebook\.com/media/.*#i',
     51                'facebook-questions'   => '#https?://www\.facebook\.com/questions/.*#i',
     52                'facebook-notes'       => '#https?://www\.facebook\.com/notes/.*#i',
     53                'facebook-video'       => '#https?://www\.facebook\.com/.*/videos/.*#i',
     54                'facebook-videophp'    => '#https?://www\.facebook\.com/video\.php.*#i',
    5755        );
    5856
     
    7775         * @dataProvider oEmbedProviderData
    7876         */
    79         public function testOembedTestURLsResolve( $match, array $urls, $supports_https ) {
     77        public function testOembedTestURLsResolve( $match, array $urls ) {
    8078
    8179                if ( empty( $urls ) ) {
     
    109107         * @dataProvider oEmbedProviderData
    110108         */
    111         public function testOembedProviderReturnsExpectedResponse( $match, array $urls, $supports_https ) {
     109        public function testOembedProviderReturnsExpectedResponse( $match, array $urls ) {
    112110
    113111                if ( empty( $urls ) ) {
     
    121119                        'height' => 500,
    122120                );
    123                 $test_urls = $urls;
    124 
    125                 if ( $supports_https ) {
    126                         foreach ( $urls as $url ) {
     121                $supports_https = ( 0 === strpos( $match, '#https?' ) );
     122
     123                foreach ( $urls as $url ) {
     124                        $test_urls[] = set_url_scheme( $url, 'http' );
     125                        if ( $supports_https ) {
    127126                                $test_urls[] = set_url_scheme( $url, 'https' );
    128127                        }
     
    320319         * @dataProvider oEmbedProviderData
    321320         */
    322         public function testOembedProviderHandlesInvalidData( $match, array $urls, $supports_https ) {
     321        public function testOembedProviderHandlesInvalidData( $match, array $urls ) {
    323322
    324323                if ( empty( $urls ) ) {
     
    416415
    417416                $tests     = wp_list_pluck( $this->oEmbedProviderData(), 0 );
    418                 $providers = array_values( self::$provider_map );
     417                $providers = array_keys( self::$oembed->providers );
    419418                $missing   = array_diff( $providers, $tests );
    420419
     
    437436
    438437                $this->assertEmpty( $useless, sprintf( "These tests do not cover any oEmbed provider:\n- %s", implode( "\n- ", $useless ) ) );
     438
     439        }
     440
     441        /**
     442         * Test the tests
     443         *
     444         * @group oembed
     445         * @ticket 32360
     446         *
     447         */
     448        public function testOembedTestProvidersMatchActualProviders() {
     449
     450                $providers    = array_keys( self::$oembed->providers );
     451                $provider_map = array_values( self::$provider_map );
     452
     453                $this->assertEquals( $providers, $provider_map );
    439454
    440455        }
     
    449464
    450465                return array(
    451                         // YouTube without www
    452466                        array(
    453467                                $providers['youtube'],
     
    455469                                        'http://youtube.com/watch?v=zdtD19tXX30',
    456470                                        'http://m.youtube.com/watch?v=QkP_rOCBrpY',
    457                                 ),
    458                                 false, // HTTPS handled by different endpoints
    459                         ),
    460                         // YouTube with www
    461                         array(
    462                                 $providers['youtube'],
    463                                 array(
    464                                         'https://www.youtube.com/watch?v=bDRQRdFaFEo',
    465                                         'https://m.youtube.com/watch?v=yfUflij74P4',
    466                                 ),
    467                                 false, // HTTPS handled by different endpoints
    468                         ),
    469                         // YouTube Playlist without www
     471                                        'http://www.youtube.com/watch?v=bDRQRdFaFEo',
     472                                ),
     473                        ),
    470474                        array(
    471475                                $providers['youtube-playlist'],
    472476                                array(
    473                                         'https://youtube.com/playlist?list=PL93B9F6B77FBB0160',
    474                                         'https://m.youtube.com/playlist?list=PL1AC02C68F976A10F',
    475                                 ),
    476                                 false, // HTTPS handled by different endpoints
    477                         ),
    478                         // YouTube Playlist with www
    479                         array(
    480                                 $providers['youtube-playlist'],
    481                                 array(
     477                                        'http://youtube.com/playlist?list=PL93B9F6B77FBB0160',
     478                                        'http://m.youtube.com/playlist?list=PL1AC02C68F976A10F',
    482479                                        'http://www.youtube.com/playlist?list=PLC7D2959C96B8D27B',
    483                                         'http://m.youtube.com/playlist?list=PLEC422D53B7588DC7',
    484                                 ),
    485                                 false, // HTTPS handled by different endpoints
    486                         ),
    487                         // YouTube HTTP Short Url
     480                                ),
     481                        ),
    488482                        array(
    489483                                $providers['youtube-shorturl'],
    490484                                array(
    491485                                        'http://youtu.be/nfWlot6h_JM?list=PLirAqAtl_h2r5g8xGajEwdXd3x1sZh8hC',
    492                                 ),
    493                                 false, // HTTPS handled by different endpoints
    494                         ),
    495                         // YouTube HTTPS Short Url
    496                         array(
    497                                 $providers['youtube-shorturl'],
    498                                 array(
    499                                         'https://youtu.be/U8SYRUYfs_I',
    500                                 ),
    501                                 false, // HTTPS handled by different endpoints
     486                                        'http://youtu.be/U8SYRUYfs_I',
     487                                ),
    502488                        ),
    503489                        array(
     
    506492                                        'http://vimeo.com/12339198',
    507493                                ),
    508                                 true,
    509494                        ),
    510495                        array(
     
    513498                                        'http://www.dailymotion.com/video/x27bwvb_how-to-wake-up-better_news',
    514499                                ),
    515                                 true,
    516500                        ),
    517501                        array(
     
    520504                                        'http://dai.ly/x33exze',
    521505                                ),
    522                                 false, // No HTTPS support
    523506                        ),
    524507                        array(
     
    527510                                        'http://www.flickr.com/photos/bon/14004280667/',
    528511                                ),
    529                                 true,
    530512                        ),
    531513                        array(
     
    534516                                        'http://flic.kr/p/6BFrbQ',
    535517                                ),
    536                                 true,
    537518                        ),
    538519                        array(
     
    541522                                        'http://fotoeffects.smugmug.com/Daily-shots-for-the-dailies/Dailies/6928550_9gMRmv/476011624_WhGWpts#!i=476011624&k=WhGWpts',
    542523                                ),
    543                                 true,
    544524                        ),
    545525                        array(
     
    548528                                        'http://www.hulu.com/watch/807443',
    549529                                ),
    550                                 true,
    551530                        ),
    552531                        array(
     
    555534                                        'http://i415.photobucket.com/albums/pp236/Keefers_/Keffers%20Animals/funny-cats-a10.jpg',
    556535                                ),
    557                                 false, // No HTTPS support
    558536                        ),
    559537                        array(
     
    562540                                        // ??
    563541                                ),
    564                                 false, // No HTTPS support
    565542                        ),
    566543                        array(
     
    569546                                        'http://www.scribd.com/doc/110799637/Synthesis-of-Knowledge-Effects-of-Fire-and-Thinning-Treatments-on-Understory-Vegetation-in-Dry-U-S-Forests',
    570547                                ),
    571                                 true,
    572548                        ),
    573549                        array(
     
    576552                                        'http://wordpress.tv/2015/08/18/billie/',
    577553                                ),
    578                                 true,
    579554                        ),
    580555                        array(
     
    583558                                        'http://polldaddy.com/poll/9066794/',
    584559                                ),
    585                                 true,
    586560                        ),
    587561                        array(
     
    590564                                        'http://poll.fm/5ebze',
    591565                                ),
    592                                 false, // No HTTPS support
    593566                        ),
    594567                        array(
     
    597570                                        'http://www.funnyordie.com/videos/e5ef40bf2a/cute-overload',
    598571                                ),
    599                                 true,
    600572                        ),
    601573                        array(
     
    604576                                        'http://twitter.com/WordPress/status/633718182335922177',
    605577                                ),
    606                                 true,
    607578                        ),
    608579                        array(
     
    611582                                        'https://twitter.com/wordpress',
    612583                                ),
    613                                 true,
    614584                        ),
    615585                        array(
     
    618588                                        'https://twitter.com/i/moments/770661957397573633',
    619589                                ),
    620                                 true,
    621590                        ),
    622591                        array(
     
    625594                                        'https://www.reddit.com/r/Wordpress/comments/3xerq8/list_of_useful_wordpress_functions/'
    626595                                ),
    627                                 true,
    628596                        ),
    629597                        array(
     
    632600                                        'http://vine.co/v/OjiLun5LuQ6',
    633601                                ),
    634                                 true,
    635602                        ),
    636603                        array(
     
    639606                                        'http://soundcloud.com/steveaoki/kid-cudi-pursuit-of-happiness',
    640607                                ),
    641                                 true,
    642608                        ),
    643609                        array(
     
    646612                                        'http://www.slideshare.net/haraldf/business-quotes-for-2011',
    647613                                ),
    648                                 true,
    649614                        ),
    650615                        array(
     
    652617                                array(
    653618                                        'http://instagram.com/p/68WqXbTcfl/',
    654                                         'https://instagram.com/p/68WqXbTcfl/',
    655619                                        'http://instagr.am/p/MRM3HQy6kh/',
    656620                                ),
    657                                 false, // No HTTPS support on instagr.am
    658621                        ),
    659622                        array(
     
    662625                                        'http://open.spotify.com/track/2i1KmyEXN3pNLwdxAWSGcg',
    663626                                ),
    664                                 true,
    665627                        ),
    666628                        array(
     
    670632                                        'http://i.imgur.com/mbOPX2L.png',
    671633                                ),
    672                                 true,
    673634                        ),
    674635                        array(
     
    678639                                        'http://meetu.ps/2L533w',
    679640                                ),
    680                                 true,
    681641                        ),
    682642                        array(
     
    685645                                        'http://issuu.com/vmagazine/docs/v87',
    686646                                ),
    687                                 true,
    688647                        ),
    689648                        array(
     
    692651                                        'http://www.collegehumor.com/video/2862877/jake-and-amir-math',
    693652                                ),
    694                                 true,
    695653                        ),
    696654                        array(
     
    699657                                        'http://www.mixcloud.com/8_8s/disclosurefriends/',
    700658                                ),
    701                                 true,
    702659                        ),
    703660                        array(
     
    706663                                        'http://www.ted.com/talks/rodney_mullen_pop_an_ollie_and_innovate',
    707664                                ),
    708                                 true,
    709665                        ),
    710666                        array(
     
    714670                                        'http://video214.com/play/MlRRgXHhoT8gOZyHanM6TA',
    715671                                ),
    716                                 true,
    717672                        ),
    718673                        array(
     
    721676                                        'http://yahoo.tumblr.com/post/50902111638/tumblr-yahoo',
    722677                                ),
    723                                 false, // No HTTPS support
    724678                        ),
    725679                        array(
     
    728682                                        'http://www.kickstarter.com/projects/zackdangerbrown/potato-salad',
    729683                                ),
    730                                 true,
    731684                        ),
    732685                        array(
     
    735688                                        'http://kck.st/1ukxHcx',
    736689                                ),
    737                                 false, // No HTTPS support
    738690                        ),
    739691                        array(
     
    742694                                        'http://cloudup.com/cWX2Bi5DmfJ',
    743695                                ),
    744                                 true,
    745696                        ),
    746697                        array(
     
    750701                                        'http://www.reverbnation.com/enemyplanes',
    751702                                ),
    752                                 true,
    753703                        ),
    754704                        array(
     
    757707                                        'https://videopress.com/v/kUJmAcSf',
    758708                                ),
    759                                 true,
    760709                        ),
    761710                        array(
     
    764713                                        'https://speakerdeck.com/tollmanz/scaling-wordpress'
    765714                                ),
    766                                 true
    767715                        ),
    768716                        array(
     
    771719                                        'https://www.facebook.com/WordPress/posts/10154220015487911'
    772720                                ),
    773                                 true
    774                         ),
    775 //                      array(
    776 //                              $providers['facebook-activity'],
    777 //                              array(
    778 //                                      ''
    779 //                              ),
    780 //                              true
    781 //                      ),
     721                        ),
     722                        array(
     723                                $providers['facebook-activity'],
     724                                array(
     725                                        // ??
     726                                ),
     727                        ),
    782728                        array(
    783729                                $providers['facebook-photo'],
     
    785731                                        'https://www.facebook.com/WordPress/photos/a.111006762910.97747.6427302910/10153207719422911/'
    786732                                ),
    787                                 true
    788733                        ),
    789734                        array(
     
    792737                                        'https://www.facebook.com/permalink.php?story_fbid=10154220015487911'
    793738                                ),
    794                                 true
    795739                        ),
    796740                        array(
     
    799743                                        'https://www.facebook.com/media/set/?set=a.164630483698579.1073741878.150601778434783&type=1&l=6c3a7725d5'
    800744                                ),
    801                                 true
    802                         ),
    803 //                      array(
    804 //                              $providers['facebook-questions'],
    805 //                              array(
    806 //                                      ''
    807 //                              ),
    808 //                              true
    809 //                      ),
     745                        ),
     746                        array(
     747                                $providers['facebook-questions'],
     748                                array(
     749                                        // ??
     750                                ),
     751                        ),
    810752                        array(
    811753                                $providers['facebook-notes'],
     
    813755                                        'https://www.facebook.com/notes/facebook/searching-for-answers-ask-facebook-questions/411795942130/'
    814756                                ),
    815                                 true
    816757                        ),
    817758                        array(
     
    820761                                        'https://www.facebook.com/WordPress/videos/317622575398/'
    821762                                ),
    822                                 true
    823763                        ),
    824764                        array(
     
    828768                                        'https://www.facebook.com/video.php?id=317622575398',
    829769                                ),
    830                                 true
    831770                        ),
    832771                );
Note: See TracChangeset for help on using the changeset viewer.