comparison tests/run-tests.py @ 11040:8f951ed6c63c

run-tests: add --view switch to use external diff viewer
author Matt Mackall <mpm@selenic.com>
date Thu, 29 Apr 2010 22:04:05 -0500
parents cf0a309f6c4d
children e5c79e31feb6
comparison
equal deleted inserted replaced
11039:cf0a309f6c4d 11040:8f951ed6c63c
130 parser.add_option("--tmpdir", type="string", 130 parser.add_option("--tmpdir", type="string",
131 help="run tests in the given temporary directory" 131 help="run tests in the given temporary directory"
132 " (implies --keep-tmpdir)") 132 " (implies --keep-tmpdir)")
133 parser.add_option("-v", "--verbose", action="store_true", 133 parser.add_option("-v", "--verbose", action="store_true",
134 help="output verbose messages") 134 help="output verbose messages")
135 parser.add_option("--view", type="string",
136 help="external diff viewer")
135 parser.add_option("--with-hg", type="string", 137 parser.add_option("--with-hg", type="string",
136 metavar="HG", 138 metavar="HG",
137 help="test using specified hg script rather than a " 139 help="test using specified hg script rather than a "
138 "temporary installation") 140 "temporary installation")
139 parser.add_option("-3", "--py3k-warnings", action="store_true", 141 parser.add_option("-3", "--py3k-warnings", action="store_true",
571 signal.alarm(0) 573 signal.alarm(0)
572 574
573 mark = '.' 575 mark = '.'
574 576
575 skipped = (ret == SKIPPED_STATUS) 577 skipped = (ret == SKIPPED_STATUS)
578
576 # If we're not in --debug mode and reference output file exists, 579 # If we're not in --debug mode and reference output file exists,
577 # check test output against it. 580 # check test output against it.
578 if options.debug: 581 if options.debug:
579 refout = None # to match out == None 582 refout = None # to match out == None
580 elif os.path.exists(ref): 583 elif os.path.exists(ref):
581 f = open(ref, "r") 584 f = open(ref, "r")
582 refout = splitnewlines(f.read()) 585 refout = splitnewlines(f.read())
583 f.close() 586 f.close()
584 else: 587 else:
585 refout = [] 588 refout = []
589
590 if (ret != 0 or out != refout) and not skipped and not options.debug:
591 # Save errors to a file for diagnosis
592 f = open(err, "wb")
593 for line in out:
594 f.write(line)
595 f.close()
586 596
587 if skipped: 597 if skipped:
588 mark = 's' 598 mark = 's'
589 if out is None: # debug mode: nothing to parse 599 if out is None: # debug mode: nothing to parse
590 missing = ['unknown'] 600 missing = ['unknown']
603 if ret: 613 if ret:
604 fail("output changed and returned error code %d" % ret) 614 fail("output changed and returned error code %d" % ret)
605 else: 615 else:
606 fail("output changed") 616 fail("output changed")
607 if not options.nodiff: 617 if not options.nodiff:
608 showdiff(refout, out, ref, err) 618 if options.view:
619 os.system("%s %s %s" % (options.view, ref, err))
620 else:
621 showdiff(refout, out, ref, err)
609 ret = 1 622 ret = 1
610 elif ret: 623 elif ret:
611 mark = '!' 624 mark = '!'
612 fail("returned error code %d" % ret) 625 fail("returned error code %d" % ret)
613 626
614 if not options.verbose: 627 if not options.verbose:
615 sys.stdout.write(mark) 628 sys.stdout.write(mark)
616 sys.stdout.flush() 629 sys.stdout.flush()
617
618 if ret != 0 and not skipped and not options.debug:
619 # Save errors to a file for diagnosis
620 f = open(err, "wb")
621 for line in out:
622 f.write(line)
623 f.close()
624 630
625 killdaemons() 631 killdaemons()
626 632
627 os.chdir(TESTDIR) 633 os.chdir(TESTDIR)
628 if not options.keep_tmpdir: 634 if not options.keep_tmpdir: