diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/test_all_urls.py | 4 | ||||
| -rw-r--r-- | test/test_compat.py | 17 | ||||
| -rw-r--r-- | test/test_jsinterp.py | 3 | ||||
| -rw-r--r-- | test/test_subtitles.py | 34 | ||||
| -rw-r--r-- | test/test_utils.py | 54 | 
5 files changed, 89 insertions, 23 deletions
| diff --git a/test/test_all_urls.py b/test/test_all_urls.py index a9db42b30..a0c11e6c1 100644 --- a/test/test_all_urls.py +++ b/test/test_all_urls.py @@ -121,8 +121,8 @@ class TestAllURLsMatching(unittest.TestCase):      def test_pbs(self):          # https://github.com/rg3/youtube-dl/issues/2350 -        self.assertMatch('http://video.pbs.org/viralplayer/2365173446/', ['PBS']) -        self.assertMatch('http://video.pbs.org/widget/partnerplayer/980042464/', ['PBS']) +        self.assertMatch('http://video.pbs.org/viralplayer/2365173446/', ['pbs']) +        self.assertMatch('http://video.pbs.org/widget/partnerplayer/980042464/', ['pbs'])      def test_yahoo_https(self):          # https://github.com/rg3/youtube-dl/issues/2701 diff --git a/test/test_compat.py b/test/test_compat.py index 4ee0dc99d..b6bfad05e 100644 --- a/test/test_compat.py +++ b/test/test_compat.py @@ -13,8 +13,10 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))  from youtube_dl.utils import get_filesystem_encoding  from youtube_dl.compat import (      compat_getenv, +    compat_etree_fromstring,      compat_expanduser,      compat_shlex_split, +    compat_str,      compat_urllib_parse_unquote,      compat_urllib_parse_unquote_plus,  ) @@ -71,5 +73,20 @@ class TestCompat(unittest.TestCase):      def test_compat_shlex_split(self):          self.assertEqual(compat_shlex_split('-option "one two"'), ['-option', 'one two']) +    def test_compat_etree_fromstring(self): +        xml = ''' +            <root foo="bar" spam="中文"> +                <normal>foo</normal> +                <chinese>中文</chinese> +                <foo><bar>spam</bar></foo> +            </root> +        ''' +        doc = compat_etree_fromstring(xml.encode('utf-8')) +        self.assertTrue(isinstance(doc.attrib['foo'], compat_str)) +        self.assertTrue(isinstance(doc.attrib['spam'], compat_str)) +        self.assertTrue(isinstance(doc.find('normal').text, compat_str)) +        self.assertTrue(isinstance(doc.find('chinese').text, compat_str)) +        self.assertTrue(isinstance(doc.find('foo/bar').text, compat_str)) +  if __name__ == '__main__':      unittest.main() diff --git a/test/test_jsinterp.py b/test/test_jsinterp.py index fc73e5dc2..63c350b8f 100644 --- a/test/test_jsinterp.py +++ b/test/test_jsinterp.py @@ -19,6 +19,9 @@ class TestJSInterpreter(unittest.TestCase):          jsi = JSInterpreter('function x3(){return 42;}')          self.assertEqual(jsi.call_function('x3'), 42) +        jsi = JSInterpreter('var x5 = function(){return 42;}') +        self.assertEqual(jsi.call_function('x5'), 42) +      def test_calc(self):          jsi = JSInterpreter('function x4(a){return 2*a+1;}')          self.assertEqual(jsi.call_function('x4', 3), 7) diff --git a/test/test_subtitles.py b/test/test_subtitles.py index 0343967d9..9ed9fe622 100644 --- a/test/test_subtitles.py +++ b/test/test_subtitles.py @@ -11,7 +11,6 @@ from test.helper import FakeYDL, md5  from youtube_dl.extractor import ( -    BlipTVIE,      YoutubeIE,      DailymotionIE,      TEDIE, @@ -28,6 +27,7 @@ from youtube_dl.extractor import (      ThePlatformFeedIE,      RTVEALaCartaIE,      FunnyOrDieIE, +    DemocracynowIE,  ) @@ -144,18 +144,6 @@ class TestTedSubtitles(BaseTestSubtitles):              self.assertTrue(subtitles.get(lang) is not None, 'Subtitles for \'%s\' not extracted' % lang) -class TestBlipTVSubtitles(BaseTestSubtitles): -    url = 'http://blip.tv/a/a-6603250' -    IE = BlipTVIE - -    def test_allsubtitles(self): -        self.DL.params['writesubtitles'] = True -        self.DL.params['allsubtitles'] = True -        subtitles = self.getSubtitles() -        self.assertEqual(set(subtitles.keys()), set(['en'])) -        self.assertEqual(md5(subtitles['en']), '5b75c300af65fe4476dff79478bb93e4') - -  class TestVimeoSubtitles(BaseTestSubtitles):      url = 'http://vimeo.com/76979871'      IE = VimeoIE @@ -346,5 +334,25 @@ class TestFunnyOrDieSubtitles(BaseTestSubtitles):          self.assertEqual(md5(subtitles['en']), 'c5593c193eacd353596c11c2d4f9ecc4') +class TestDemocracynowSubtitles(BaseTestSubtitles): +    url = 'http://www.democracynow.org/shows/2015/7/3' +    IE = DemocracynowIE + +    def test_allsubtitles(self): +        self.DL.params['writesubtitles'] = True +        self.DL.params['allsubtitles'] = True +        subtitles = self.getSubtitles() +        self.assertEqual(set(subtitles.keys()), set(['en'])) +        self.assertEqual(md5(subtitles['en']), 'acaca989e24a9e45a6719c9b3d60815c') + +    def test_subtitles_in_page(self): +        self.url = 'http://www.democracynow.org/2015/7/3/this_flag_comes_down_today_bree' +        self.DL.params['writesubtitles'] = True +        self.DL.params['allsubtitles'] = True +        subtitles = self.getSubtitles() +        self.assertEqual(set(subtitles.keys()), set(['en'])) +        self.assertEqual(md5(subtitles['en']), 'acaca989e24a9e45a6719c9b3d60815c') + +  if __name__ == '__main__':      unittest.main() diff --git a/test/test_utils.py b/test/test_utils.py index 0c34f0e55..1c3290d9b 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -21,6 +21,8 @@ from youtube_dl.utils import (      clean_html,      DateRange,      detect_exe_version, +    determine_ext, +    encode_compat_str,      encodeFilename,      escape_rfc3986,      escape_url, @@ -42,6 +44,7 @@ from youtube_dl.utils import (      sanitize_path,      prepend_extension,      replace_extension, +    remove_quotes,      shell_quote,      smuggle_url,      str_to_int, @@ -68,6 +71,9 @@ from youtube_dl.utils import (      cli_valueless_option,      cli_bool_option,  ) +from youtube_dl.compat import ( +    compat_etree_fromstring, +)  class TestUtil(unittest.TestCase): @@ -196,6 +202,15 @@ class TestUtil(unittest.TestCase):          self.assertEqual(replace_extension('.abc', 'temp'), '.abc.temp')          self.assertEqual(replace_extension('.abc.ext', 'temp'), '.abc.temp') +    def test_remove_quotes(self): +        self.assertEqual(remove_quotes(None), None) +        self.assertEqual(remove_quotes('"'), '"') +        self.assertEqual(remove_quotes("'"), "'") +        self.assertEqual(remove_quotes(';'), ';') +        self.assertEqual(remove_quotes('";'), '";') +        self.assertEqual(remove_quotes('""'), '') +        self.assertEqual(remove_quotes('";"'), ';') +      def test_ordered_set(self):          self.assertEqual(orderedSet([1, 1, 2, 3, 4, 4, 5, 6, 7, 3, 5]), [1, 2, 3, 4, 5, 6, 7])          self.assertEqual(orderedSet([]), []) @@ -207,8 +222,8 @@ class TestUtil(unittest.TestCase):          self.assertEqual(unescapeHTML('%20;'), '%20;')          self.assertEqual(unescapeHTML('/'), '/')          self.assertEqual(unescapeHTML('/'), '/') -        self.assertEqual( -            unescapeHTML('é'), 'é') +        self.assertEqual(unescapeHTML('é'), 'é') +        self.assertEqual(unescapeHTML('�'), '�')      def test_daterange(self):          _20century = DateRange("19000101", "20000101") @@ -233,6 +248,14 @@ class TestUtil(unittest.TestCase):              unified_strdate('2/2/2015 6:47:40 PM', day_first=False),              '20150202')          self.assertEqual(unified_strdate('25-09-2014'), '20140925') +        self.assertEqual(unified_strdate('UNKNOWN DATE FORMAT'), None) + +    def test_determine_ext(self): +        self.assertEqual(determine_ext('http://example.com/foo/bar.mp4/?download'), 'mp4') +        self.assertEqual(determine_ext('http://example.com/foo/bar/?download', None), None) +        self.assertEqual(determine_ext('http://example.com/foo/bar.nonext/?download', None), None) +        self.assertEqual(determine_ext('http://example.com/foo/bar/mp4?download', None), None) +        self.assertEqual(determine_ext('http://example.com/foo/bar.m3u8//?download'), 'm3u8')      def test_find_xpath_attr(self):          testxml = '''<root> @@ -242,7 +265,7 @@ class TestUtil(unittest.TestCase):              <node x="b" y="d" />              <node x="" />          </root>''' -        doc = xml.etree.ElementTree.fromstring(testxml) +        doc = compat_etree_fromstring(testxml)          self.assertEqual(find_xpath_attr(doc, './/fourohfour', 'n'), None)          self.assertEqual(find_xpath_attr(doc, './/fourohfour', 'n', 'v'), None) @@ -263,7 +286,7 @@ class TestUtil(unittest.TestCase):                  <url>http://server.com/download.mp3</url>              </media:song>          </root>''' -        doc = xml.etree.ElementTree.fromstring(testxml) +        doc = compat_etree_fromstring(testxml)          find = lambda p: doc.find(xpath_with_ns(p, {'media': 'http://example.com/'}))          self.assertTrue(find('media:song') is not None)          self.assertEqual(find('media:song/media:author').text, 'The Author') @@ -275,9 +298,16 @@ class TestUtil(unittest.TestCase):          p = xml.etree.ElementTree.SubElement(div, 'p')          p.text = 'Foo'          self.assertEqual(xpath_element(doc, 'div/p'), p) +        self.assertEqual(xpath_element(doc, ['div/p']), p) +        self.assertEqual(xpath_element(doc, ['div/bar', 'div/p']), p)          self.assertEqual(xpath_element(doc, 'div/bar', default='default'), 'default') +        self.assertEqual(xpath_element(doc, ['div/bar'], default='default'), 'default')          self.assertTrue(xpath_element(doc, 'div/bar') is None) +        self.assertTrue(xpath_element(doc, ['div/bar']) is None) +        self.assertTrue(xpath_element(doc, ['div/bar'], 'div/baz') is None)          self.assertRaises(ExtractorError, xpath_element, doc, 'div/bar', fatal=True) +        self.assertRaises(ExtractorError, xpath_element, doc, ['div/bar'], fatal=True) +        self.assertRaises(ExtractorError, xpath_element, doc, ['div/bar', 'div/baz'], fatal=True)      def test_xpath_text(self):          testxml = '''<root> @@ -285,7 +315,7 @@ class TestUtil(unittest.TestCase):                  <p>Foo</p>              </div>          </root>''' -        doc = xml.etree.ElementTree.fromstring(testxml) +        doc = compat_etree_fromstring(testxml)          self.assertEqual(xpath_text(doc, 'div/p'), 'Foo')          self.assertEqual(xpath_text(doc, 'div/bar', default='default'), 'default')          self.assertTrue(xpath_text(doc, 'div/bar') is None) @@ -297,7 +327,7 @@ class TestUtil(unittest.TestCase):                  <p x="a">Foo</p>              </div>          </root>''' -        doc = xml.etree.ElementTree.fromstring(testxml) +        doc = compat_etree_fromstring(testxml)          self.assertEqual(xpath_attr(doc, 'div/p', 'x'), 'a')          self.assertEqual(xpath_attr(doc, 'div/bar', 'x'), None)          self.assertEqual(xpath_attr(doc, 'div/p', 'y'), None) @@ -420,6 +450,10 @@ class TestUtil(unittest.TestCase):          data = urlencode_postdata({'username': 'foo@bar.com', 'password': '1234'})          self.assertTrue(isinstance(data, bytes)) +    def test_encode_compat_str(self): +        self.assertEqual(encode_compat_str(b'\xd1\x82\xd0\xb5\xd1\x81\xd1\x82', 'utf-8'), 'тест') +        self.assertEqual(encode_compat_str('тест', 'utf-8'), 'тест') +      def test_parse_iso8601(self):          self.assertEqual(parse_iso8601('2014-03-23T23:04:26+0100'), 1395612266)          self.assertEqual(parse_iso8601('2014-03-23T22:04:26+0000'), 1395612266) @@ -632,12 +666,13 @@ ffmpeg version 2.4.4 Copyright (c) 2000-2014 the FFmpeg ...'''), '2.4.4')              {'like_count': 190, 'dislike_count': 10}))      def test_parse_dfxp_time_expr(self): -        self.assertEqual(parse_dfxp_time_expr(None), 0.0) -        self.assertEqual(parse_dfxp_time_expr(''), 0.0) +        self.assertEqual(parse_dfxp_time_expr(None), None) +        self.assertEqual(parse_dfxp_time_expr(''), None)          self.assertEqual(parse_dfxp_time_expr('0.1'), 0.1)          self.assertEqual(parse_dfxp_time_expr('0.1s'), 0.1)          self.assertEqual(parse_dfxp_time_expr('00:00:01'), 1.0)          self.assertEqual(parse_dfxp_time_expr('00:00:01.100'), 1.1) +        self.assertEqual(parse_dfxp_time_expr('00:00:01:100'), 1.1)      def test_dfxp2srt(self):          dfxp_data = '''<?xml version="1.0" encoding="UTF-8"?> @@ -647,6 +682,9 @@ ffmpeg version 2.4.4 Copyright (c) 2000-2014 the FFmpeg ...'''), '2.4.4')                      <p begin="0" end="1">The following line contains Chinese characters and special symbols</p>                      <p begin="1" end="2">第二行<br/>♪♪</p>                      <p begin="2" dur="1"><span>Third<br/>Line</span></p> +                    <p begin="3" end="-1">Lines with invalid timestamps are ignored</p> +                    <p begin="-1" end="-1">Ignore, two</p> +                    <p begin="3" dur="-1">Ignored, three</p>                  </div>              </body>              </tt>''' | 
