Merge remote-tracking branch 'dstftw/escape-non-ascii-in-urls'
authorPhilipp Hagemeister <phihag@phihag.de>
Mon, 15 Sep 2014 13:40:10 +0000 (15:40 +0200)
committerPhilipp Hagemeister <phihag@phihag.de>
Mon, 15 Sep 2014 13:40:10 +0000 (15:40 +0200)
Conflicts:
test/test_utils.py

1  2 
test/test_utils.py
youtube_dl/utils.py

index 70050d2b836aedfd7310bbee2c2f07037d70c71a,e90caed2961ba24689d135c2fc007ef565a26ae7..3efbed29dd34de570f2db4e6eb4954ec2f4b9c6e
@@@ -40,7 -40,8 +40,9 @@@ from youtube_dl.utils import 
      parse_iso8601,
      strip_jsonp,
      uppercase_escape,
 +    limit_length,
+     escape_rfc3986,
+     escape_url,
  )
  
  
@@@ -287,12 -288,34 +289,41 @@@ class TestUtil(unittest.TestCase)
          self.assertEqual(uppercase_escape('aä'), 'aä')
          self.assertEqual(uppercase_escape('\\U0001d550'), '𝕐')
  
 +    def test_limit_length(self):
 +        self.assertEqual(limit_length(None, 12), None)
 +        self.assertEqual(limit_length('foo', 12), 'foo')
 +        self.assertTrue(
 +            limit_length('foo bar baz asd', 12).startswith('foo bar'))
 +        self.assertTrue('...' in limit_length('foo bar baz asd', 12))
 +
+     def test_escape_rfc3986(self):
+         reserved = "!*'();:@&=+$,/?#[]"
+         unreserved = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~'
+         self.assertEqual(escape_rfc3986(reserved), reserved)
+         self.assertEqual(escape_rfc3986(unreserved), unreserved)
+         self.assertEqual(escape_rfc3986('тест'), '%D1%82%D0%B5%D1%81%D1%82')
+         self.assertEqual(escape_rfc3986('%D1%82%D0%B5%D1%81%D1%82'), '%D1%82%D0%B5%D1%81%D1%82')
+         self.assertEqual(escape_rfc3986('foo bar'), 'foo%20bar')
+         self.assertEqual(escape_rfc3986('foo%20bar'), 'foo%20bar')
+     def test_escape_url(self):
+         self.assertEqual(
+             escape_url('http://wowza.imust.org/srv/vod/telemb/new/UPLOAD/UPLOAD/20224_IncendieHavré_FD.mp4'),
+             'http://wowza.imust.org/srv/vod/telemb/new/UPLOAD/UPLOAD/20224_IncendieHavre%CC%81_FD.mp4'
+         )
+         self.assertEqual(
+             escape_url('http://www.ardmediathek.de/tv/Sturm-der-Liebe/Folge-2036-Zu-Mann-und-Frau-erklärt/Das-Erste/Video?documentId=22673108&bcastId=5290'),
+             'http://www.ardmediathek.de/tv/Sturm-der-Liebe/Folge-2036-Zu-Mann-und-Frau-erkl%C3%A4rt/Das-Erste/Video?documentId=22673108&bcastId=5290'
+         )
+         self.assertEqual(
+             escape_url('http://тест.рф/фрагмент'),
+             'http://тест.рф/%D1%84%D1%80%D0%B0%D0%B3%D0%BC%D0%B5%D0%BD%D1%82'
+         )
+         self.assertEqual(
+             escape_url('http://тест.рф/абв?абв=абв#абв'),
+             'http://тест.рф/%D0%B0%D0%B1%D0%B2?%D0%B0%D0%B1%D0%B2=%D0%B0%D0%B1%D0%B2#%D0%B0%D0%B1%D0%B2'
+         )
+         self.assertEqual(escape_url('http://vimeo.com/56015672#at=0'), 'http://vimeo.com/56015672#at=0')
  if __name__ == '__main__':
      unittest.main()
Simple merge