Make test tools interactive
authorBehdad Esfahbod <behdad@behdad.org>
Fri, 20 Jan 2012 23:39:27 +0000 (18:39 -0500)
committerBehdad Esfahbod <behdad@behdad.org>
Fri, 20 Jan 2012 23:40:25 +0000 (18:40 -0500)
By bypassing readlines() buffering.

test/shaping/hb_test_tools.py

index fb2b622..c9b13bd 100644 (file)
@@ -25,6 +25,10 @@ class Colors:
                else:
                        return Colors.Null
 
+       @staticmethod
+       def Default (argv = []):
+               return Colors.ANSI
+
 
 class FancyDiffer:
 
@@ -80,6 +84,7 @@ class FancyDiffer:
                for l in f1:
                        sys.stdout.writelines (["-", colors.green, l1, colors.end])
 
+
 class DiffFilters:
 
        @staticmethod
@@ -89,6 +94,15 @@ class DiffFilters:
                                sys.stdout.writelines (l)
 
 
+class ShapeFilters:
+
+       @staticmethod
+       def filter_failures (f):
+               for l in f:
+                       if l[0] in '-+':
+                               sys.stdout.writelines (l)
+
+
 class UtilMains:
 
        @staticmethod
@@ -99,7 +113,7 @@ class UtilMains:
                        sys.exit (1)
 
                for s in sys.argv[1:]:
-                       callback (open_file_or_stdin (s))
+                       callback (FileHelpers.open_file_or_stdin (s))
 
        @staticmethod
        def filter_multiple_strings_or_stdin (callback, string_mnemonic, \
@@ -113,7 +127,10 @@ class UtilMains:
 
                if '--stdin' in sys.argv:
                        sys.argv.remove ('--stdin')
-                       for line in sys.stdin.readlines ():
+                       while (1):
+                               line = sys.stdin.readline ()
+                               if not len (line):
+                                       break
                                print callback (line)
                else:
                        args = sys.argv[1:]
@@ -171,10 +188,14 @@ class Unicode:
                s = [unichr (int (x, 16)) for x in re.split ('[, \n]', s) if len (x)]
                return ' + '.join (Unicode.pretty_name (x) for x in s)
 
-def open_file_or_stdin (f):
-       if f == '-':
-               return sys.stdin
-       return file (f)
+
+class FileHelprs:
+
+       @staticmethod
+       def open_file_or_stdin (f):
+               if f == '-':
+                       return sys.stdin
+               return file (f)
 
 if __name__ == '__main__':
        pass