[ChangeLog] Actualize
[youtube-dl] / test / test_unicode_literals.py
index 5f88ac2f87393f2adddf2416689fdfb510b056b6..6c1b7ec915c60321e62c7c44728f5486921e772f 100644 (file)
@@ -1,32 +1,55 @@
 from __future__ import unicode_literals
 
-import io
+# Allow direct execution
 import os
-import re
+import sys
 import unittest
+sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+
+import io
+import re
 
 rootDir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 
+IGNORED_FILES = [
+    'setup.py',  # http://bugs.python.org/issue13943
+    'conf.py',
+    'buildserver.py',
+]
+
+IGNORED_DIRS = [
+    '.git',
+    '.tox',
+]
+
+from test.helper import assertRegexpMatches
+
 
 class TestUnicodeLiterals(unittest.TestCase):
     def test_all_files(self):
-        print('Skipping this test (not yet fully implemtned)')
-        return
-
-        for dirpath, _, filenames in os.walk(rootDir):
+        for dirpath, dirnames, filenames in os.walk(rootDir):
+            for ignore_dir in IGNORED_DIRS:
+                if ignore_dir in dirnames:
+                    # If we remove the directory from dirnames os.walk won't
+                    # recurse into it
+                    dirnames.remove(ignore_dir)
             for basename in filenames:
                 if not basename.endswith('.py'):
                     continue
+                if basename in IGNORED_FILES:
+                    continue
+
                 fn = os.path.join(dirpath, basename)
                 with io.open(fn, encoding='utf-8') as inf:
                     code = inf.read()
 
                 if "'" not in code and '"' not in code:
                     continue
-                imps = 'from __future__ import unicode_literals'
-                self.assertTrue(
-                    imps in code,
-                    ' %s  missing in %s' % (imps, fn))
+                assertRegexpMatches(
+                    self,
+                    code,
+                    r'(?:(?:#.*?|\s*)\n)*from __future__ import (?:[a-z_]+,\s*)*unicode_literals',
+                    'unicode_literals import  missing in %s' % fn)
 
                 m = re.search(r'(?<=\s)u[\'"](?!\)|,|$)', code)
                 if m is not None: