|
|
@ -24,6 +24,7 @@ from youtube_dl.utils import (
|
|
|
|
encodeFilename,
|
|
|
|
encodeFilename,
|
|
|
|
escape_rfc3986,
|
|
|
|
escape_rfc3986,
|
|
|
|
escape_url,
|
|
|
|
escape_url,
|
|
|
|
|
|
|
|
ExtractorError,
|
|
|
|
find_xpath_attr,
|
|
|
|
find_xpath_attr,
|
|
|
|
fix_xml_ampersands,
|
|
|
|
fix_xml_ampersands,
|
|
|
|
InAdvancePagedList,
|
|
|
|
InAdvancePagedList,
|
|
|
@ -54,6 +55,7 @@ from youtube_dl.utils import (
|
|
|
|
urlencode_postdata,
|
|
|
|
urlencode_postdata,
|
|
|
|
version_tuple,
|
|
|
|
version_tuple,
|
|
|
|
xpath_with_ns,
|
|
|
|
xpath_with_ns,
|
|
|
|
|
|
|
|
xpath_text,
|
|
|
|
render_table,
|
|
|
|
render_table,
|
|
|
|
match_str,
|
|
|
|
match_str,
|
|
|
|
)
|
|
|
|
)
|
|
|
@ -250,6 +252,17 @@ class TestUtil(unittest.TestCase):
|
|
|
|
self.assertEqual(find('media:song/media:author').text, 'The Author')
|
|
|
|
self.assertEqual(find('media:song/media:author').text, 'The Author')
|
|
|
|
self.assertEqual(find('media:song/url').text, 'http://server.com/download.mp3')
|
|
|
|
self.assertEqual(find('media:song/url').text, 'http://server.com/download.mp3')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_xpath_text(self):
|
|
|
|
|
|
|
|
testxml = '''<root>
|
|
|
|
|
|
|
|
<div>
|
|
|
|
|
|
|
|
<p>Foo</p>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</root>'''
|
|
|
|
|
|
|
|
doc = xml.etree.ElementTree.fromstring(testxml)
|
|
|
|
|
|
|
|
self.assertEqual(xpath_text(doc, 'div/p'), 'Foo')
|
|
|
|
|
|
|
|
self.assertTrue(xpath_text(doc, 'div/bar') is None)
|
|
|
|
|
|
|
|
self.assertRaises(ExtractorError, xpath_text, doc, 'div/bar', fatal=True)
|
|
|
|
|
|
|
|
|
|
|
|
def test_smuggle_url(self):
|
|
|
|
def test_smuggle_url(self):
|
|
|
|
data = {"ö": "ö", "abc": [3]}
|
|
|
|
data = {"ö": "ö", "abc": [3]}
|
|
|
|
url = 'https://foo.bar/baz?x=y#a'
|
|
|
|
url = 'https://foo.bar/baz?x=y#a'
|
|
|
|