#!/usr/bin/python import hashlib import operator import os import shutil import stat import subprocess import sys import tempfile def rel_to_abs(rel_path): return os.path.join(script_path, rel_path) java_exec = 'java -Xms1024m -server -XX:+TieredCompilation' tests_dir = 'tests' jar_name = 'jsdoc_validator.jar' script_path = os.path.dirname(os.path.abspath(__file__)) tests_path = rel_to_abs(tests_dir) validator_jar_file = rel_to_abs(jar_name) golden_file = os.path.join(tests_path, 'golden.dat') test_files = [ os.path.join(tests_path, f) for f in os.listdir(tests_path) if f.endswith('.js') and os.path.isfile(os.path.join(tests_path, f)) ] validator_command = "%s -jar %s %s" % (java_exec, validator_jar_file, " ".join(sorted(test_files))) def run_and_communicate(command, error_template): proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) (out, _) = proc.communicate() if proc.returncode: print >> sys.stderr, error_template % proc.returncode sys.exit(proc.returncode) return out def help(): print 'usage: %s [option]' % os.path.basename(__file__) print 'Options:' print '--generate-golden: Re-generate golden file' print '--dump: Dump the test results to stdout' def main(): need_golden = False need_dump = False if len(sys.argv) > 1: if sys.argv[1] == '--generate-golden': need_golden = True elif sys.argv[1] == '--dump': need_dump = True else: help() return result = run_and_communicate(validator_command, "Error running validator: %d") result = result.replace(script_path, "") # pylint: disable=E1103 if need_dump: print result return if need_golden: with open(golden_file, 'wt') as golden: golden.write(result) else: with open(golden_file, 'rt') as golden: golden_text = golden.read() if golden_text == result: print 'OK' else: print 'ERROR: Golden output mismatch' if __name__ == '__main__': main()