Exemple #1
0
def run_test_dir  (path):
    global total_incorrect_tests, total_correct_tests
    global incorrect_tests_succeeded, correct_tests_succeeded
    contents = os.listdir(path)
    contents.sort()
    parser = fullparser.RelaxNGParser()
    if 'i.rng' in contents:
        total_incorrect_tests += 1
        filename = os.path.join(path, 'i.rng')
        stream = open(filename)
        try:
            schema = parser.parse(stream, filename)
        except RuntimeError:
            # We reported an error
            print 'ok'
            incorrect_tests_succeeded += 1
        except:
            # Unexpected exception
            typ, value, traceback = sys.exc_info()
            print 'unexpected exception on parse: %s %s' % (typ, value)
        else:
            # Nothing reported
            print 'no error reported on parse'

    else:
        # Assume it's a correct test
        total_correct_tests += 1
        filename = os.path.join(path, 'c.rng')
        stream = open(filename)
        try:
            schema = parser.parse(stream, filename)
        except RuntimeError:
            # We reported an error
            print 'parse error'
            return
        except RuntimeError:
            # Unexpected exception
            typ, value, traceback = sys.exc_info()
            print 'unexpected exception on parse: %s' % typ
            return

        # Nothing reported
        print 'parse ok,',
        correct_tests_succeeded += 1

        # Try validating various files
        valid_ok = 1
        for filename in contents:
            if not filename.endswith('.xml'):
                continue
            total_correct_tests += 1

            # Read the document to be validated
            stream = open(os.path.join(path, filename))
            document = util.get_rng_document(stream)

            # Validate it
            try:
                result = schema.is_valid(document)
            except:
                typ, value, traceback = sys.exc_info()
                print 'unexpected exception on %s: %s, %s' % (filename, typ,
                                                              value)
                valid_ok = 0
            else:
                if filename.find('.v.') == -1:
                    # Input file expected to be invalid
                    if result:
                        print 'not reported as invalid: %s' % filename
                        valid_ok = 0
                    else:
                        correct_tests_succeeded += 1
                else:
                    # Input file expected to be valid
                    if not result:
                        print 'not reported as valid: %s' % filename
                        valid_ok = 0
                    else:
                        correct_tests_succeeded += 1
                    
        if valid_ok: 
            print 'validation ok'