def run_build_system(self, extra_args="", subdir="", stdout=None, stderr="", status=0, match=None, pass_toolset=None, use_test_config=None, ignore_toolset_requirements=None, expected_duration=None, **kw): self.last_build_time_start = time.time() try: if os.path.isabs(subdir): if stderr: print "You must pass a relative directory to subdir <"+subdir+">." status = 1 return self.previous_tree = tree.build_tree(self.workdir) if match is None: match = self.match if pass_toolset is None: pass_toolset = self.pass_toolset if use_test_config is None: use_test_config = self.use_test_config if ignore_toolset_requirements is None: ignore_toolset_requirements = self.ignore_toolset_requirements try: kw['program'] = [] kw['program'] += self.program if extra_args: kw['program'] += extra_args.split(" ") if pass_toolset: kw['program'].append("toolset=" + self.toolset) if use_test_config: kw['program'].append('--test-config="%s"' % os.path.join(self.original_workdir, "test-config.jam")) if ignore_toolset_requirements: kw['program'].append("--ignore-toolset-requirements") kw['chdir'] = subdir apply(TestCmd.TestCmd.run, [self], kw) except: self.dump_stdio() raise finally: self.last_build_time_finish = time.time() if (status != None) and _failed(self, status): expect = '' if status != 0: expect = " (expected %d)" % status annotation("failure", '"%s" returned %d%s' % (kw['program'], _status(self), expect)) annotation("reason", "unexpected status returned by bjam") self.fail_test(1) if not (stdout is None) and not match(self.stdout(), stdout): annotation("failure", "Unexpected stdout") annotation("Expected STDOUT", stdout) annotation("Actual STDOUT", self.stdout()) stderr = self.stderr() if stderr: annotation("STDERR", stderr) self.maybe_do_diff(self.stdout(), stdout) self.fail_test(1, dump_stdio=False) # Intel tends to produce some messages to stderr which make tests fail. intel_workaround = re.compile("^xi(link|lib): executing.*\n", re.M) actual_stderr = re.sub(intel_workaround, "", self.stderr()) if not (stderr is None) and not match(actual_stderr, stderr): annotation("failure", "Unexpected stderr") annotation("Expected STDERR", stderr) annotation("Actual STDERR", self.stderr()) annotation("STDOUT", self.stdout()) self.maybe_do_diff(actual_stderr, stderr) self.fail_test(1, dump_stdio=False) if not expected_duration is None: actual_duration = self.last_build_time_finish - self.last_build_time_start if (actual_duration > expected_duration): print "Test run lasted %f seconds while it was expected to " \ "finish in under %f seconds." % (actual_duration, expected_duration) self.fail_test(1, dump_stdio=False) self.tree = tree.build_tree(self.workdir) self.difference = tree.trees_difference(self.previous_tree, self.tree) self.difference.ignore_directories() self.unexpected_difference = copy.deepcopy(self.difference)
def run_build_system( self, extra_args='', subdir='', stdout = None, stderr = '', status = 0, match = None, pass_toolset = None, **kw): if os.path.isabs(subdir): if stderr: print "You must pass a relative directory to subdir <"+subdir+">." status = 1 return self.previous_tree = build_tree(self.workdir) if match is None: match = self.match if pass_toolset is None: pass_toolset = self.pass_toolset try: kw['program'] = [] kw['program'] += self.program if extra_args: kw['program'] += extra_args.split(" ") if pass_toolset: kw['program'].append(self.toolset) kw['chdir'] = subdir apply(TestCmd.TestCmd.run, [self], kw) except: self.dump_stdio() raise if status != None and _failed(self, status): expect = '' if status != 0: expect = " (expected %d)" % status print '"%s" returned %d%s' % ( kw['program'], _status(self), expect) self.fail_test(1) if not stdout is None and not match(self.stdout(), stdout): print "Expected STDOUT ==========" print stdout print "Actual STDOUT ============" print self.stdout() stderr = self.stderr() if stderr: print "STDERR ===================" print stderr self.maybe_do_diff(self.stdout(), stdout) self.fail_test(1, dump_stdio = 0) # Intel tends to produce some message to stderr, which makes tests # fail intel_workaround = re.compile("^xi(link|lib): executing.*\n", re.M) actual_stderr = re.sub(intel_workaround, "", self.stderr()) if not stderr is None and not match(actual_stderr, stderr): print "STDOUT ===================" print self.stdout() print "Expected STDERR ==========" print stderr print "Actual STDERR ============" print actual_stderr self.maybe_do_diff(actual_stderr, stderr) self.fail_test(1, dump_stdio = 0) self.tree = build_tree(self.workdir) self.difference = trees_difference(self.previous_tree, self.tree) self.difference.ignore_directories() self.unexpected_difference = copy.deepcopy(self.difference) self.last_build_time = time.time()
def run_build_system(self, extra_args='', subdir='', stdout=None, stderr='', status=0, match=None, pass_toolset=None, **kw): self.previous_tree = build_tree(self.workdir) if match is None: match = self.match if pass_toolset is None: pass_toolset = self.pass_toolset try: if pass_toolset: kw['program'] = self.program + ' ' + self.toolset + ' ' + extra_args else: kw['program'] = self.program + ' ' + extra_args kw['chdir'] = subdir apply(TestCmd.TestCmd.run, [self], kw) except: print "STDOUT ============" print self.stdout() print "STDERR ============" print self.stderr() raise if status != None and _failed(self, status): expect = '' if status != 0: expect = " (expected %d)" % status print '"%s %s" returned %d%s' % (self.program, extra_args, _status(self), expect) print "STDOUT ============" print self.stdout() print "STDERR ============" print self.stderr() self.fail_test(1) if not stdout is None and not match(self.stdout(), stdout): print "Expected STDOUT ==========" print stdout print "Actual STDOUT ============" print self.stdout() stderr = self.stderr() if stderr: print "STDERR ===================" print stderr self.maybe_do_diff(self.stdout(), stdout) self.fail_test(1) if not stderr is None and not match(self.stderr(), stderr): print "STDOUT ===================" print self.stdout() print "Expected STDERR ==========" print stderr print "Actual STDERR ============" print self.stderr() self.maybe_do_diff(self.stderr(), stderr) self.fail_test(1) self.tree = build_tree(self.workdir) self.difference = trees_difference(self.previous_tree, self.tree) self.difference.ignore_directories() self.unexpected_difference = copy.deepcopy(self.difference) self.last_build_time = time.time()
def run_build_system( self, extra_args='', subdir='', stdout = None, stderr = '', status = 0, match = None, pass_toolset = None, **kw): self.previous_tree = build_tree(self.workdir) if match is None: match = self.match if pass_toolset is None: pass_toolset = self.pass_toolset try: if pass_toolset: kw['program'] = self.program + ' ' + self.toolset + ' ' + extra_args else: kw['program'] = self.program + ' ' + extra_args kw['chdir'] = subdir apply(TestCmd.TestCmd.run, [self], kw) except: print "STDOUT ============" print self.stdout() print "STDERR ============" print self.stderr() raise if status != None and _failed(self, status): expect = '' if status != 0: expect = " (expected %d)" % status print '"%s %s" returned %d%s' % ( self.program, extra_args, _status(self), expect) print "STDOUT ============" print self.stdout() print "STDERR ============" print self.stderr() self.fail_test(1) if not stdout is None and not match(self.stdout(), stdout): print "Expected STDOUT ==========" print stdout print "Actual STDOUT ============" print self.stdout() stderr = self.stderr() if stderr: print "STDERR ===================" print stderr self.maybe_do_diff(self.stdout(), stdout) self.fail_test(1) if not stderr is None and not match(self.stderr(), stderr): print "STDOUT ===================" print self.stdout() print "Expected STDERR ==========" print stderr print "Actual STDERR ============" print self.stderr() self.maybe_do_diff(self.stderr(), stderr) self.fail_test(1) self.tree = build_tree(self.workdir) self.difference = trees_difference(self.previous_tree, self.tree) self.difference.ignore_directories() self.unexpected_difference = copy.deepcopy(self.difference) self.last_build_time = time.time()
def run_build_system(self, extra_args='', subdir='', stdout=None, stderr='', status=0, match=None, pass_toolset=None, **kw): self.previous_tree = build_tree(self.workdir) if match is None: match = self.match if pass_toolset is None: pass_toolset = self.pass_toolset try: kw['program'] = [] kw['program'] += self.program if extra_args: kw['program'] += extra_args.split(" ") if pass_toolset: kw['program'].append(self.toolset) kw['chdir'] = subdir apply(TestCmd.TestCmd.run, [self], kw) except: self.dump_stdio() raise if status != None and _failed(self, status): expect = '' if status != 0: expect = " (expected %d)" % status print '"%s" returned %d%s' % (kw['program'], _status(self), expect) self.fail_test(1) if not stdout is None and not match(self.stdout(), stdout): print "Expected STDOUT ==========" print stdout print "Actual STDOUT ============" print self.stdout() stderr = self.stderr() if stderr: print "STDERR ===================" print stderr self.maybe_do_diff(self.stdout(), stdout) self.fail_test(1, dump_stdio=0) # Intel tends to produce some message to stderr, which makes tests # fail intel_workaround = re.compile("^xi(link|lib): executing.*\n", re.M) actual_stderr = re.sub(intel_workaround, "", self.stderr()) if not stderr is None and not match(actual_stderr, stderr): print "STDOUT ===================" print self.stdout() print "Expected STDERR ==========" print stderr print "Actual STDERR ============" print actual_stderr self.maybe_do_diff(actual_stderr, stderr) self.fail_test(1, dump_stdio=0) self.tree = build_tree(self.workdir) self.difference = trees_difference(self.previous_tree, self.tree) self.difference.ignore_directories() self.unexpected_difference = copy.deepcopy(self.difference) self.last_build_time = time.time()