|
@ -57,7 +57,9 @@ from youtube_dl.utils import ( |
|
|
urlencode_postdata, |
|
|
urlencode_postdata, |
|
|
version_tuple, |
|
|
version_tuple, |
|
|
xpath_with_ns, |
|
|
xpath_with_ns, |
|
|
|
|
|
xpath_element, |
|
|
xpath_text, |
|
|
xpath_text, |
|
|
|
|
|
xpath_attr, |
|
|
render_table, |
|
|
render_table, |
|
|
match_str, |
|
|
match_str, |
|
|
parse_dfxp_time_expr, |
|
|
parse_dfxp_time_expr, |
|
@ -264,6 +266,16 @@ 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_element(self): |
|
|
|
|
|
doc = xml.etree.ElementTree.Element('root') |
|
|
|
|
|
div = xml.etree.ElementTree.SubElement(doc, 'div') |
|
|
|
|
|
p = xml.etree.ElementTree.SubElement(div, 'p') |
|
|
|
|
|
p.text = 'Foo' |
|
|
|
|
|
self.assertEqual(xpath_element(doc, 'div/p'), p) |
|
|
|
|
|
self.assertEqual(xpath_element(doc, 'div/bar', default='default'), 'default') |
|
|
|
|
|
self.assertTrue(xpath_element(doc, 'div/bar') is None) |
|
|
|
|
|
self.assertRaises(ExtractorError, xpath_element, doc, 'div/bar', fatal=True) |
|
|
|
|
|
|
|
|
def test_xpath_text(self): |
|
|
def test_xpath_text(self): |
|
|
testxml = '''<root> |
|
|
testxml = '''<root> |
|
|
<div> |
|
|
<div> |
|
@ -272,9 +284,25 @@ class TestUtil(unittest.TestCase): |
|
|
</root>''' |
|
|
</root>''' |
|
|
doc = xml.etree.ElementTree.fromstring(testxml) |
|
|
doc = xml.etree.ElementTree.fromstring(testxml) |
|
|
self.assertEqual(xpath_text(doc, 'div/p'), 'Foo') |
|
|
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) |
|
|
self.assertTrue(xpath_text(doc, 'div/bar') is None) |
|
|
self.assertRaises(ExtractorError, xpath_text, doc, 'div/bar', fatal=True) |
|
|
self.assertRaises(ExtractorError, xpath_text, doc, 'div/bar', fatal=True) |
|
|
|
|
|
|
|
|
|
|
|
def test_xpath_attr(self): |
|
|
|
|
|
testxml = '''<root> |
|
|
|
|
|
<div> |
|
|
|
|
|
<p x="a">Foo</p> |
|
|
|
|
|
</div> |
|
|
|
|
|
</root>''' |
|
|
|
|
|
doc = xml.etree.ElementTree.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) |
|
|
|
|
|
self.assertEqual(xpath_attr(doc, 'div/bar', 'x', default='default'), 'default') |
|
|
|
|
|
self.assertEqual(xpath_attr(doc, 'div/p', 'y', default='default'), 'default') |
|
|
|
|
|
self.assertRaises(ExtractorError, xpath_attr, doc, 'div/bar', 'x', fatal=True) |
|
|
|
|
|
self.assertRaises(ExtractorError, xpath_attr, doc, 'div/p', 'y', 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' |
|
|