assertEquals($expected, $provider::getIdFromInput($url)); } /** * A data provider for URL parsing test cases. * * @return array * An array of test cases. */ public function urlsWithExpectedIds() { return [ // Youtube passing cases. 'YouTube: Standard URL' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', 'https://www.youtube.com/watch?v=fdbFVWupSsw', 'fdbFVWupSsw', ], 'YouTube: Non HTTPS' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', 'http://www.youtube.com/watch?v=fdbFVWupSsw', 'fdbFVWupSsw', ], 'YouTube: Non WWW' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', 'https://youtube.com/watch?v=fdbFVWupSsw', 'fdbFVWupSsw', ], 'YouTube: Special Characters' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', 'https://youtube.com/watch?v=fdbFV_Wup-Ssw', 'fdbFV_Wup-Ssw', ], 'YouTube: Short URL' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', 'https://youtu.be/fdbFVWupSsw', 'fdbFVWupSsw', ], 'YouTube: With Language Preference' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', 'https://youtube.com/watch?v=fdbFV_Wup-Ssw&hl=fr-ca', 'fdbFV_Wup-Ssw', ], 'YouTube: Added Query String' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', 'https://youtube.com/watch?v=fdbFVWupSsw&some_param=value&t=150', 'fdbFVWupSsw', ], 'YouTube: Added Query String in first position' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', 'https://youtube.com/watch?feature=player_detailpage&v=fdbFV_Wup-Ssw', 'fdbFV_Wup-Ssw', ], 'YouTube: Short URL Added Query String' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', 'https://youtu.be/fdbFVWupSsw?some_param=other&another=something&t=55', 'fdbFVWupSsw', ], // Youtube failing cases. 'YouTube: Non-youtube domain with ?v param' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', 'https://www.otherdomain.com/watch?v=fdbFVWupSsw', FALSE, ], 'YouTube: Malformed String' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', $this->randomMachineName(), FALSE, ], 'YouTube: Playlist URL' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', 'https://www.youtube.com/watch?v=-A2Nc3TRpi0&list=PLs4n2zZ8S1eszdZZwDSQ1G8iP95DmJHSh', FALSE, ], 'YouTube: Playlist URL (reversed params)' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTube', 'https://www.youtube.com/watch?list=PLs4n2zZ8S1eszdZZwDSQ1G8iP95DmJHSh&v=-A2Nc3TRpi0', FALSE, ], // Youtube Playlists passing cases. 'YouTube Playlist' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTubePlaylist', 'https://www.youtube.com/watch?v=xoJH3qZwsHc&list=PLpeDXSh4nHjQCIZmkxg3VSdpR5e87X5eB', 'PLpeDXSh4nHjQCIZmkxg3VSdpR5e87X5eB', ], 'YouTube Playlist: Reversed param order' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTubePlaylist', 'https://www.youtube.com/watch?list=PLpeDXSh4nHjQCIZmkxg3VSdpR5e87X5eB&v=xoJH3qZwsHc', 'PLpeDXSh4nHjQCIZmkxg3VSdpR5e87X5eB', ], 'YouTube Playlist: Underscore in ID' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTubePlaylist', 'https://www.youtube.com/watch?list=PLpeDXSh4nHjQCIZmkxg3VSdpR5e8_7X5eB&v=xoJH3qZwsHc', 'PLpeDXSh4nHjQCIZmkxg3VSdpR5e8_7X5eB', ], 'YouTube Playlist: No HTTPs' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTubePlaylist', 'http://www.youtube.com/watch?v=xoJH3qZwsHc&list=PLpeDXSh4nHjQCIZmkxg3VSdpR5e87X5eB', 'PLpeDXSh4nHjQCIZmkxg3VSdpR5e87X5eB', ], 'YouTube Playlist: No www' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTubePlaylist', 'https://youtube.com/watch?v=xoJH3qZwsHc&list=PLpeDXSh4nHjQCIZmkxg3VSdpR5e87X5eB', 'PLpeDXSh4nHjQCIZmkxg3VSdpR5e87X5eB', ], 'Youtube Playlist: Hyphens' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTubePlaylist', 'https://www.youtube.com/watch?list=PLg7vT2Yor-Q72v4NPNlWXWmT6iJ4t___k&v=5gdSMPaJOf4', 'PLg7vT2Yor-Q72v4NPNlWXWmT6iJ4t___k', ], // Youtube Playlists failing cases. 'YouTube Playlist: Invalid ID' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTubePlaylist', 'https://www.youtube.com/watch?v=xoJH3qZwsHc&list=!@#123', FALSE, ], 'YouTube Playlist: No ID' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTubePlaylist', 'https://www.youtube.com/watch?v=xoJH3qZwsHc&list=', FALSE, ], 'YouTube Playlist: No List' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\YouTubePlaylist', 'https://www.youtube.com/watch?v=xoJH3qZwsHc', FALSE, ], // Vimeo passing cases. 'Vimeo: Normal URL' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\Vimeo', 'https://vimeo.com/138627894', '138627894', ], 'Vimeo: WWW URL' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\Vimeo', 'https://www.vimeo.com/138627894', '138627894', ], 'Vimeo: Non HTTPS' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\Vimeo', 'http://www.vimeo.com/138627894', '138627894', ], 'Vimeo: Channel URL' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\Vimeo', 'https://vimeo.com/channels/staffpicks/138627894', '138627894', ], 'Vimeo: Private Video' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\Vimeo', 'https://vimeo.com/173101914/aab5894fec', '173101914', ], 'Vimeo: with timeindex' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\Vimeo', 'https://vimeo.com/193517656#t=160s', '193517656', ], // Vimeo failing cases. 'Vimeo: Malformed String' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\Vimeo', $this->randomMachineName(), FALSE, ], 'Vimeo: Non numeric channel page' => [ 'Drupal\video_embed_field\Plugin\video_embed_field\Provider\Vimeo', 'https://vimeo.com/channels/staffpicks/some-page', FALSE, ], ]; } /** * Test the langauge parsing feature. * * @dataProvider languageParseTestCases */ public function testYouTubeLanguageParsing($url, $expected) { $provider = new YouTube([ 'input' => $url, ], '', [], new MockHttpClient()); $embed = $provider->renderEmbedCode(100, 100, TRUE); $language = isset($embed['#query']['cc_lang_pref']) ? $embed['#query']['cc_lang_pref'] : FALSE; $this->assertEquals($expected, $language); } /** * A data provider for testYouTubeLanguageParsing. * * @return array * An array of test cases. */ public function languageParseTestCases() { return [ 'Simple Preference' => [ 'https://youtube.com/watch?v=fdbFV_Wup-Ssw&hl=fr', 'fr', ], 'Preference with Hyphen' => [ 'https://youtube.com/watch?v=fdbFV_Wup-Ssw&hl=fr-ca', 'fr-ca', ], 'Invalid Language' => [ 'https://youtube.com/watch?v=fdbFV_Wup-Ssw&hl=', FALSE, ], 'Multiple Parameters' => [ 'https://youtube.com/watch?v=fdbFV_Wup-Ssw&hl=au&anotherparam=1', 'au', ], ]; } /** * Test the YouTube time index parsing. * * @dataProvider youTubeTimeIndexTestCases */ public function testYouTubeTimeIndex($url, $expected) { $provider = new YouTube([ 'input' => $url, ], '', [], new MockHttpClient()); $embed = $provider->renderEmbedCode(100, 100, TRUE); $this->assertEquals($expected, $embed['#query']['start']); } /** * A data provider for testYouTubeTimeIndex. * * @return array * An array of test cases. */ public function youTubeTimeIndexTestCases() { return [ 'Simple Timeindex' => [ 'https://www.youtube.com/watch?v=fdbFVWupSsw&t=15', '15', ], 'No Timeindex' => [ 'https://www.youtube.com/watch?v=fdbFVWupSsw', '0', ], 'Invalid Timeindex' => [ 'https://www.youtube.com/watch?v=fdbFVWupSsw&t=time', '0', ], ]; } /** * Test the Vimeo time index integration. * * @dataProvider vimeoTimeIndexTestCases */ public function testVimeoTimeIndex($url, $expected, $exception_expected = FALSE) { $exception_triggered = FALSE; try { $provider = new Vimeo([ 'input' => $url, ], '', [], new MockHttpClient()); } catch (\Exception $e) { $exception_triggered = TRUE; } $this->assertEquals($exception_expected, $exception_triggered); if (!$exception_triggered) { $embed = $provider->renderEmbedCode(100, 100, TRUE); $this->assertEquals($expected, isset($embed['#fragment']) ? $embed['#fragment'] : FALSE); } } /** * A data provider for testVimeoTimeIndex. * * @return array * An array of test cases. */ public function vimeoTimeIndexTestCases() { return [ 'Standard time index' => [ 'https://vimeo.com/193517656#t=150s', 't=150s', FALSE, ], 'Empty start time' => [ 'https://vimeo.com/193517656#t=', NULL, TRUE, ], 'Empty start time (with seconds)' => [ 'https://vimeo.com/193517656#t=s', NULL, TRUE, ], 'Non numeric start time' => [ 'https://vimeo.com/193517656#t=STARTs', NULL, TRUE, ], 'Non t fragment' => [ 'https://vimeo.com/193517656#o=150s', NULL, TRUE, ], 'No seconds' => [ 'https://vimeo.com/193517656#t=15', NULL, TRUE, ], ]; } }