| LEFT | RIGHT | 
|   1 #!/usr/bin/env python |   1 #!/usr/bin/env python | 
|   2 # coding: utf-8 |   2 # coding: utf-8 | 
|   3  |   3  | 
|   4 # This Source Code is subject to the terms of the Mozilla Public License |   4 # This Source Code is subject to the terms of the Mozilla Public License | 
|   5 # version 2.0 (the "License"). You can obtain a copy of the License at |   5 # version 2.0 (the "License"). You can obtain a copy of the License at | 
|   6 # http://mozilla.org/MPL/2.0/. |   6 # http://mozilla.org/MPL/2.0/. | 
|   7  |   7  | 
|   8 import sys, os, re, difflib, utils |   8 import sys, os, subprocess, re, difflib, utils | 
|   9  |   9  | 
|  10 def run_tests(): |  10 def run_tests(): | 
|  11   application = utils.ensureJSShell() |  11   application = utils.ensureJSShell() | 
|  12   env = { |  12   env = { | 
|  13     'LD_LIBRARY_PATH': os.path.relpath(os.path.dirname(application)), |  13     'LD_LIBRARY_PATH': os.path.relpath(os.path.dirname(application)), | 
|  14   } |  14   } | 
|  15  |  15  | 
|  16   baseDir = os.path.dirname(utils.__file__) |  16   baseDir = os.path.dirname(utils.__file__) | 
|  17   testDir = os.path.join(baseDir, 'autotest') |  17   testDir = os.path.join(baseDir, 'autotest') | 
|  18   for file in os.listdir(testDir): |  18   for file in os.listdir(testDir): | 
|  19     if not re.search(r'^test_.*\.js$', file): |  19     if not re.search(r'^test_.*\.js$', file): | 
|  20       continue |  20       continue | 
|  21  |  21  | 
|  22     file = os.path.join(testDir, file) |  22     file = os.path.join(testDir, file) | 
|  23     handle = open(file, 'r') |  23     handle = open(file, 'r') | 
|  24     name = None |  24     name = None | 
|  25     arguments = None |  25     arguments = None | 
|  26     for line in handle: |  26     for line in handle: | 
|  27       match = re.search(r'^//\s*([A-Za-z]+):\s*(.*?)\s*$', line) |  27       match = re.search(r'^//\s*([A-Za-z]+):\s*(.*?)\s*$', line) | 
|  28       if match and match.group(1).lower() == 'name': |  28       if match and match.group(1).lower() == 'name': | 
|  29         name = match.group(2) |  29         name = match.group(2) | 
|  30       elif match and match.group(1).lower() == 'arguments': |  30       elif match and match.group(1).lower() == 'arguments': | 
|  31         arguments = match.group(2).split(' ') |  31         arguments = match.group(2).split(' ') | 
|  32     handle.close() |  32     handle.close() | 
|  33  |  33  | 
|  34     if arguments == None: |  34     if arguments == None: | 
|  35       continue |  35       continue | 
|  36  |  36  | 
|  37     command = [application, os.path.join(baseDir, 'jshydra.js'), file] + argumen
    ts |  37     command = [application, os.path.join(baseDir, 'jshydra.js'), file] + argumen
    ts | 
|  38     out = utils.run(command, utils.STREAMS_STDOUT, env=env).replace('\r', '') |  38     out = subprocess.check_output(command, stderr=subprocess.STDOUT, env=env).re
    place('\r', '') | 
|  39     expected = open(file + '.expected', 'r').read().replace('\r', '') |  39     expected = open(file + '.expected', 'r').read().replace('\r', '') | 
|  40     if out == expected: |  40     if out == expected: | 
|  41       print '%s passed' % name |  41       print '%s passed' % name | 
|  42     else: |  42     else: | 
|  43       print '%s failed! Log:' % name |  43       print '%s failed! Log:' % name | 
|  44       for line in difflib.unified_diff(expected.split('\n'), out.split('\n'), fr
    omfile=file + '.expected', tofile=file + '.output'): |  44       for line in difflib.unified_diff(expected.split('\n'), out.split('\n'), fr
    omfile=file + '.expected', tofile=file + '.output'): | 
|  45         print line |  45         print line | 
|  46       print |  46       print | 
|  47  |  47  | 
|  48 if __name__ == '__main__': |  48 if __name__ == '__main__': | 
|  49   run_tests() |  49   run_tests() | 
| LEFT | RIGHT |