diff options
Diffstat (limited to 'test/test_utils.py')
| -rw-r--r-- | test/test_utils.py | 76 | 
1 files changed, 76 insertions, 0 deletions
| diff --git a/test/test_utils.py b/test/test_utils.py index 3fba8ae11..abaf1ab73 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -24,6 +24,7 @@ from youtube_dl.utils import (      encodeFilename,      escape_rfc3986,      escape_url, +    ExtractorError,      find_xpath_attr,      fix_xml_ampersands,      InAdvancePagedList, @@ -38,6 +39,8 @@ from youtube_dl.utils import (      parse_iso8601,      read_batch_urls,      sanitize_filename, +    sanitize_path, +    sanitize_url_path_consecutive_slashes,      shell_quote,      smuggle_url,      str_to_int, @@ -52,6 +55,7 @@ from youtube_dl.utils import (      urlencode_postdata,      version_tuple,      xpath_with_ns, +    xpath_text,      render_table,      match_str,  ) @@ -85,8 +89,11 @@ class TestUtil(unittest.TestCase):          self.assertEqual(              sanitize_filename('New World record at 0:12:34'),              'New World record at 0_12_34') +          self.assertEqual(sanitize_filename('--gasdgf'), '_-gasdgf')          self.assertEqual(sanitize_filename('--gasdgf', is_id=True), '--gasdgf') +        self.assertEqual(sanitize_filename('.gasdgf'), 'gasdgf') +        self.assertEqual(sanitize_filename('.gasdgf', is_id=True), '.gasdgf')          forbidden = '"\0\\/'          for fc in forbidden: @@ -128,6 +135,62 @@ class TestUtil(unittest.TestCase):          self.assertEqual(sanitize_filename('_BD_eEpuzXw', is_id=True), '_BD_eEpuzXw')          self.assertEqual(sanitize_filename('N0Y__7-UOdI', is_id=True), 'N0Y__7-UOdI') +    def test_sanitize_path(self): +        if sys.platform != 'win32': +            return + +        self.assertEqual(sanitize_path('abc'), 'abc') +        self.assertEqual(sanitize_path('abc/def'), 'abc\\def') +        self.assertEqual(sanitize_path('abc\\def'), 'abc\\def') +        self.assertEqual(sanitize_path('abc|def'), 'abc#def') +        self.assertEqual(sanitize_path('<>:"|?*'), '#######') +        self.assertEqual(sanitize_path('C:/abc/def'), 'C:\\abc\\def') +        self.assertEqual(sanitize_path('C?:/abc/def'), 'C##\\abc\\def') + +        self.assertEqual(sanitize_path('\\\\?\\UNC\\ComputerName\\abc'), '\\\\?\\UNC\\ComputerName\\abc') +        self.assertEqual(sanitize_path('\\\\?\\UNC/ComputerName/abc'), '\\\\?\\UNC\\ComputerName\\abc') + +        self.assertEqual(sanitize_path('\\\\?\\C:\\abc'), '\\\\?\\C:\\abc') +        self.assertEqual(sanitize_path('\\\\?\\C:/abc'), '\\\\?\\C:\\abc') +        self.assertEqual(sanitize_path('\\\\?\\C:\\ab?c\\de:f'), '\\\\?\\C:\\ab#c\\de#f') +        self.assertEqual(sanitize_path('\\\\?\\C:\\abc'), '\\\\?\\C:\\abc') + +        self.assertEqual( +            sanitize_path('youtube/%(uploader)s/%(autonumber)s-%(title)s-%(upload_date)s.%(ext)s'), +            'youtube\\%(uploader)s\\%(autonumber)s-%(title)s-%(upload_date)s.%(ext)s') + +        self.assertEqual( +            sanitize_path('youtube/TheWreckingYard ./00001-Not bad, Especially for Free! (1987 Yamaha 700)-20141116.mp4.part'), +            'youtube\\TheWreckingYard #\\00001-Not bad, Especially for Free! (1987 Yamaha 700)-20141116.mp4.part') +        self.assertEqual(sanitize_path('abc/def...'), 'abc\\def..#') +        self.assertEqual(sanitize_path('abc.../def'), 'abc..#\\def') +        self.assertEqual(sanitize_path('abc.../def...'), 'abc..#\\def..#') + +        self.assertEqual(sanitize_path('../abc'), '..\\abc') +        self.assertEqual(sanitize_path('../../abc'), '..\\..\\abc') +        self.assertEqual(sanitize_path('./abc'), 'abc') +        self.assertEqual(sanitize_path('./../abc'), '..\\abc') + +    def test_sanitize_url_path_consecutive_slashes(self): +        self.assertEqual( +            sanitize_url_path_consecutive_slashes('http://hostname/foo//bar/filename.html'), +            'http://hostname/foo/bar/filename.html') +        self.assertEqual( +            sanitize_url_path_consecutive_slashes('http://hostname//foo/bar/filename.html'), +            'http://hostname/foo/bar/filename.html') +        self.assertEqual( +            sanitize_url_path_consecutive_slashes('http://hostname//'), +            'http://hostname/') +        self.assertEqual( +            sanitize_url_path_consecutive_slashes('http://hostname/foo/bar/filename.html'), +            'http://hostname/foo/bar/filename.html') +        self.assertEqual( +            sanitize_url_path_consecutive_slashes('http://hostname/'), +            'http://hostname/') +        self.assertEqual( +            sanitize_url_path_consecutive_slashes('http://hostname/abc//'), +            'http://hostname/abc/') +      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([]), []) @@ -137,6 +200,8 @@ class TestUtil(unittest.TestCase):      def test_unescape_html(self):          self.assertEqual(unescapeHTML('%20;'), '%20;') +        self.assertEqual(unescapeHTML('/'), '/') +        self.assertEqual(unescapeHTML('/'), '/')          self.assertEqual(              unescapeHTML('é'), 'é') @@ -189,6 +254,17 @@ class TestUtil(unittest.TestCase):          self.assertEqual(find('media:song/media:author').text, 'The Author')          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):          data = {"ö": "ö", "abc": [3]}          url = 'https://foo.bar/baz?x=y#a' | 
