Mercurial > hg > truffle
comparison mx/commands.py @ 8406:2bfb9644dcc2
unittest: call wrapper to avoid long command lines
on windows there's a restriction of ~32k characters for
the whole command line.
fwiw, linux/bsd have also restrictions, but it is
unlikely that we'll ever hit that (2097k characters
on my linux machine).
author | Bernhard Urban <bernhard.urban@jku.at> |
---|---|
date | Mon, 18 Mar 2013 19:18:42 +0100 |
parents | a3c30d467f96 |
children | 87346100d7a5 c3657d00e343 |
comparison
equal
deleted
inserted
replaced
8405:743d0ac1fc81 | 8406:2bfb9644dcc2 |
---|---|
25 # questions. | 25 # questions. |
26 # | 26 # |
27 # ---------------------------------------------------------------------------------------------------- | 27 # ---------------------------------------------------------------------------------------------------- |
28 | 28 |
29 import os, sys, shutil, zipfile, tempfile, re, time, datetime, platform, subprocess, multiprocessing | 29 import os, sys, shutil, zipfile, tempfile, re, time, datetime, platform, subprocess, multiprocessing |
30 from os.path import join, exists, dirname, basename | 30 from os.path import join, exists, dirname, basename, getmtime |
31 from argparse import ArgumentParser, REMAINDER | 31 from argparse import ArgumentParser, REMAINDER |
32 import mx | 32 import mx |
33 import sanitycheck | 33 import sanitycheck |
34 import json | 34 import json |
35 | 35 |
717 """ | 717 """ |
718 | 718 |
719 matches = lambda line : len([a for a in annotations if line == a or line.startswith(a + '(')]) != 0 | 719 matches = lambda line : len([a for a in annotations if line == a or line.startswith(a + '(')]) != 0 |
720 return p.find_classes_with_matching_source_line(pkgRoot, matches, includeInnerClasses) | 720 return p.find_classes_with_matching_source_line(pkgRoot, matches, includeInnerClasses) |
721 | 721 |
722 def _run_tests(args, harness, annotations): | 722 def _run_tests(args, harness, annotations, testfile): |
723 pos = [a for a in args if a[0] != '-' and a[0] != '@' ] | 723 pos = [a for a in args if a[0] != '-' and a[0] != '@' ] |
724 neg = [a[1:] for a in args if a[0] == '-'] | 724 neg = [a[1:] for a in args if a[0] == '-'] |
725 vmArgs = [a[1:] for a in args if a[0] == '@'] | 725 vmArgs = [a[1:] for a in args if a[0] == '@'] |
726 | 726 |
727 def containsAny(c, substrings): | 727 def containsAny(c, substrings): |
740 classes = [c for c in classes if not containsAny(c, neg)] | 740 classes = [c for c in classes if not containsAny(c, neg)] |
741 | 741 |
742 projectscp = mx.classpath([pcp.name for pcp in mx.projects()]) | 742 projectscp = mx.classpath([pcp.name for pcp in mx.projects()]) |
743 | 743 |
744 if len(classes) != 0: | 744 if len(classes) != 0: |
745 harness(projectscp, vmArgs, classes) | 745 f_testfile = open(testfile, 'w') |
746 for c in classes: | |
747 f_testfile.write(c + '\n') | |
748 f_testfile.close() | |
749 harness(projectscp, vmArgs) | |
746 | 750 |
747 def _unittest(args, annotations): | 751 def _unittest(args, annotations): |
748 def harness(projectscp, vmArgs, classes): | 752 mxdir = dirname(__file__) |
753 name = 'JUnitWrapper' | |
754 javaSource = join(mxdir, name + '.java') | |
755 javaClass = join(mxdir, name + '.class') | |
756 (_, testfile) = tempfile.mkstemp(".testclasses", "graal") | |
757 | |
758 def harness(projectscp, vmArgs): | |
759 if not exists(javaClass) or getmtime(javaClass) < getmtime(javaSource): | |
760 subprocess.check_call([mx.java().javac, '-cp', projectscp, '-d', mxdir, javaSource]) | |
749 prefixArgs = ['-XX:-BootstrapGraal', '-esa', '-ea'] | 761 prefixArgs = ['-XX:-BootstrapGraal', '-esa', '-ea'] |
750 vm(prefixArgs + vmArgs + ['-cp', projectscp, 'org.junit.runner.JUnitCore'] + classes) | 762 vm(prefixArgs + vmArgs + ['-cp', projectscp + ':' + mxdir, name] + [testfile]) |
751 _run_tests(args, harness, annotations) | 763 |
764 _run_tests(args, harness, annotations, testfile) | |
765 os.remove(testfile) | |
752 | 766 |
753 def unittest(args): | 767 def unittest(args): |
754 """run the JUnit tests (all testcases) | 768 """run the JUnit tests (all testcases) |
755 | 769 |
756 If filters are supplied, only tests whose fully qualified name | 770 If filters are supplied, only tests whose fully qualified name |