diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/helper.py | 5 | ||||
| -rw-r--r-- | test/test_all_urls.py | 1 | ||||
| -rw-r--r-- | test/test_download.py | 32 | ||||
| -rw-r--r-- | test/test_playlists.py | 11 | ||||
| -rw-r--r-- | test/test_utils.py | 2 | 
5 files changed, 43 insertions, 8 deletions
| diff --git a/test/helper.py b/test/helper.py index b7299fb82..22d763860 100644 --- a/test/helper.py +++ b/test/helper.py @@ -117,8 +117,9 @@ def expect_info_dict(self, expected_dict, got_dict):                  u'invalid value for field %s, expected %r, got %r' % (info_field, expected, got))      # Check for the presence of mandatory fields -    for key in ('id', 'url', 'title', 'ext'): -        self.assertTrue(got_dict.get(key), 'Missing mandatory field %s' % key) +    if got_dict.get('_type') != 'playlist': +        for key in ('id', 'url', 'title', 'ext'): +            self.assertTrue(got_dict.get(key), 'Missing mandatory field %s' % key)      # Check for mandatory fields that are automatically set by YoutubeDL      for key in ['webpage_url', 'extractor', 'extractor_key']:          self.assertTrue(got_dict.get(key), u'Missing field: %s' % key) diff --git a/test/test_all_urls.py b/test/test_all_urls.py index 0ff47cf1e..b1ad30bf1 100644 --- a/test/test_all_urls.py +++ b/test/test_all_urls.py @@ -99,6 +99,7 @@ class TestAllURLsMatching(unittest.TestCase):      def test_facebook_matching(self):          self.assertTrue(FacebookIE.suitable('https://www.facebook.com/Shiniknoh#!/photo.php?v=10153317450565268')) +        self.assertTrue(FacebookIE.suitable('https://www.facebook.com/cindyweather?fref=ts#!/photo.php?v=10152183998945793'))      def test_no_duplicates(self):          ies = gen_extractors() diff --git a/test/test_download.py b/test/test_download.py index d6540588c..c8d4ec2c8 100644 --- a/test/test_download.py +++ b/test/test_download.py @@ -63,15 +63,21 @@ def generator(test_case):      def test_template(self):          ie = youtube_dl.extractor.get_info_extractor(test_case['name'])          other_ies = [get_info_extractor(ie_key) for ie_key in test_case.get('add_ie', [])] +        is_playlist = any(k.startswith('playlist') for k in test_case) +        test_cases = test_case.get( +            'playlist', [] if is_playlist else [test_case]) +          def print_skipping(reason):              print('Skipping %s: %s' % (test_case['name'], reason))          if not ie.working():              print_skipping('IE marked as not _WORKING')              return -        if 'playlist' not in test_case: -            info_dict = test_case.get('info_dict', {}) -            if not test_case.get('file') and not (info_dict.get('id') and info_dict.get('ext')): + +        for tc in test_cases: +            info_dict = tc.get('info_dict', {}) +            if not tc.get('file') and not (info_dict.get('id') and info_dict.get('ext')):                  raise Exception('Test definition incorrect. The output file cannot be known. Are both \'id\' and \'ext\' keys present?') +          if 'skip' in test_case:              print_skipping(test_case['skip'])              return @@ -81,6 +87,9 @@ def generator(test_case):                  return          params = get_params(test_case.get('params', {})) +        if is_playlist and 'playlist' not in test_case: +            params.setdefault('extract_flat', True) +            params.setdefault('skip_download', True)          ydl = YoutubeDL(params)          ydl.add_default_info_extractors() @@ -93,7 +102,6 @@ def generator(test_case):          def get_tc_filename(tc):              return tc.get('file') or ydl.prepare_filename(tc.get('info_dict', {})) -        test_cases = test_case.get('playlist', [test_case])          def try_rm_tcs_files():              for tc in test_cases:                  tc_filename = get_tc_filename(tc) @@ -105,7 +113,10 @@ def generator(test_case):              try_num = 1              while True:                  try: -                    ydl.download([test_case['url']]) +                    # We're not using .download here sine that is just a shim +                    # for outside error handling, and returns the exit code +                    # instead of the result dict. +                    res_dict = ydl.extract_info(test_case['url'])                  except (DownloadError, ExtractorError) as err:                      # Check if the exception is not a network related one                      if not err.exc_info[0] in (compat_urllib_error.URLError, socket.timeout, UnavailableVideoError, compat_http_client.BadStatusLine) or (err.exc_info[0] == compat_HTTPError and err.exc_info[1].code == 503): @@ -121,6 +132,17 @@ def generator(test_case):                  else:                      break +            if is_playlist: +                self.assertEqual(res_dict['_type'], 'playlist') +                expect_info_dict(self, test_case.get('info_dict', {}), res_dict) +            if 'playlist_mincount' in test_case: +                self.assertGreaterEqual( +                    len(res_dict['entries']), +                    test_case['playlist_mincount'], +                    'Expected at least %d in playlist %s, but got only %d' % ( +                        test_case['playlist_mincount'], test_case['url'], +                        len(res_dict['entries']))) +              for tc in test_cases:                  tc_filename = get_tc_filename(tc)                  if not test_case.get('params', {}).get('skip_download', False): diff --git a/test/test_playlists.py b/test/test_playlists.py index 4f188345b..6448fea38 100644 --- a/test/test_playlists.py +++ b/test/test_playlists.py @@ -1,6 +1,17 @@  #!/usr/bin/env python  # encoding: utf-8 +## DEPRECATED FILE! +# Add new tests to the extractors themselves, like this: +# _TEST = { +#    'url': 'http://example.com/playlist/42', +#    'playlist_mincount': 99, +#    'info_dict': { +#        'id': '42', +#        'title': 'Playlist number forty-two', +#    } +# } +  from __future__ import unicode_literals  # Allow direct execution diff --git a/test/test_utils.py b/test/test_utils.py index 51eb0b6b9..e26cc5b0c 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -280,7 +280,7 @@ class TestUtil(unittest.TestCase):          d = json.loads(stripped)          self.assertEqual(d, [{"id": "532cb", "x": 3}]) -    def test_uppercase_escpae(self): +    def test_uppercase_escape(self):          self.assertEqual(uppercase_escape(u'aä'), u'aä')          self.assertEqual(uppercase_escape(u'\\U0001d550'), u'𝕐') | 
