<commit_before>import os
import subprocess
import re
import sys
try:
    import xmlrunner
except:
    print "xmlrunner needs to be installed to run these tests"

SKIPPED_DIRS = ["sansrealspace", "calculatorview"]
SANSVIEW_DIR = os.pardir
COMMAND_SEP = ';'
if os.name == 'nt':
    COMMAND_SEP = '&'

def run_tests():
    passed = 0
    failed = 0
    n_tests = 0
    n_errors = 0
    n_failures = 0
    
    for d in os.listdir(SANSVIEW_DIR):
        
        # Check for modules to be skipped
        if d in SKIPPED_DIRS:
            continue
        
        # Go through modules looking for unit tests
        module_dir = os.path.join(os.getcwd(),SANSVIEW_DIR,d,"test")
        if os.path.isdir(module_dir):
            for f in os.listdir(module_dir):
                file_path = os.path.join(module_dir,f)
                if os.path.isfile(file_path) and f.startswith("utest_") and f.endswith(".py"):
                    module_name,_ = os.path.splitext(f)
                    code = "cd %s%s%s -c \"import sys;import xmlrunner;import unittest;sys.path.insert(0, '%s');" % (module_dir, COMMAND_SEP, sys.executable, module_dir)
                    code += "from %s import *;" % module_name
                    code += "unittest.main(testRunner=xmlrunner.XMLTestRunner(output='logs'))\""
                    proc = subprocess.Popen(code, shell=True, stdout=subprocess.PIPE, stderr = subprocess.STDOUT)
                    std_out, std_err = proc.communicate()
                    has_failed = True
                    m = re.search("Ran ([0-9]+) test", std_out)
                    if m is not None:
                        has_failed = False
                        n_tests += int(m.group(1))

                    m = re.search("FAILED \(errors=([0-9]+)\)", std_out)
                    if m is not None:
                        has_failed = True
                        n_errors += int(m.group(1))
                    
                    m = re.search("FAILED \(failures=([0-9]+)\)", std_out)
                    if m is not None:
                        has_failed = True
                        n_failures += int(m.group(1))
                    
                    if has_failed:
                        failed += 1
                        print "Result for %s (%s): FAILED" % (module_name, module_dir)
                        print std_out
                    else:
                        passed += 1
                        print "Result for %s: SUCCESS" % module_name
                        
    print "\n----------------------------------------------"
    print "Results by test modules:"
    print "    PASSED: %d" % passed
    ratio = 100.0*failed/(failed+passed)
    print "    FAILED: %d    (%2.2g%%)" % (failed,ratio) 
    
    print "Results by tests:"
    print "    Tests run:    %d" % n_tests
    print "    Tests failed: %d" % n_failures
    print "    Test errors:  %d" % n_errors 
    print "----------------------------------------------"
    

if __name__ == '__main__':
    run_tests()                    <commit_msg>Re #5 Add info if developer doesn't have xmlrunner<commit_after>import os
import subprocess
import re
import sys
try:
    import xmlrunner
except:
    print "xmlrunner needs to be installed to run these tests"
    print "Try easy_install unittest-xml-reporting"

SKIPPED_DIRS = ["sansrealspace", "calculatorview"]
SANSVIEW_DIR = os.pardir
COMMAND_SEP = ';'
if os.name == 'nt':
    COMMAND_SEP = '&'

def run_tests():
    passed = 0
    failed = 0
    n_tests = 0
    n_errors = 0
    n_failures = 0
    
    for d in os.listdir(SANSVIEW_DIR):
        
        # Check for modules to be skipped
        if d in SKIPPED_DIRS:
            continue
        
        # Go through modules looking for unit tests
        module_dir = os.path.join(os.getcwd(),SANSVIEW_DIR,d,"test")
        if os.path.isdir(module_dir):
            for f in os.listdir(module_dir):
                file_path = os.path.join(module_dir,f)
                if os.path.isfile(file_path) and f.startswith("utest_") and f.endswith(".py"):
                    module_name,_ = os.path.splitext(f)
                    code = "cd %s%s%s -c \"import sys;import xmlrunner;import unittest;sys.path.insert(0, '%s');" % (module_dir, COMMAND_SEP, sys.executable, module_dir)
                    code += "from %s import *;" % module_name
                    code += "unittest.main(testRunner=xmlrunner.XMLTestRunner(output='logs'))\""
                    proc = subprocess.Popen(code, shell=True, stdout=subprocess.PIPE, stderr = subprocess.STDOUT)
                    std_out, std_err = proc.communicate()
                    has_failed = True
                    m = re.search("Ran ([0-9]+) test", std_out)
                    if m is not None:
                        has_failed = False
                        n_tests += int(m.group(1))

                    m = re.search("FAILED \(errors=([0-9]+)\)", std_out)
                    if m is not None:
                        has_failed = True
                        n_errors += int(m.group(1))
                    
                    m = re.search("FAILED \(failures=([0-9]+)\)", std_out)
                    if m is not None:
                        has_failed = True
                        n_failures += int(m.group(1))
                    
                    if has_failed:
                        failed += 1
                        print "Result for %s (%s): FAILED" % (module_name, module_dir)
                        print std_out
                    else:
                        passed += 1
                        print "Result for %s: SUCCESS" % module_name
                        
    print "\n----------------------------------------------"
    print "Results by test modules:"
    print "    PASSED: %d" % passed
    ratio = 100.0*failed/(failed+passed)
    print "    FAILED: %d    (%2.2g%%)" % (failed,ratio) 
    
    print "Results by tests:"
    print "    Tests run:    %d" % n_tests
    print "    Tests failed: %d" % n_failures
    print "    Test errors:  %d" % n_errors 
    print "----------------------------------------------"
    

if __name__ == '__main__':
    run_tests()                    
{'fraction_non_alphanumeric': 0.13516572352465642, 'fraction_numerical': 0.007599029911075182, 'mean_word_length': 1.3637753152464653, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 10}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7521133', 'n_tokens_mistral': 1873, 'n_tokens_neox': 1764, 'n_words': 452}