##// END OF EJS Templates
run-tests: make attributes of TestRunner internal...
Gregory Szorc -
r21534:3ece55d1 default
parent child Browse files
Show More
@@ -1338,13 +1338,13 b' class TestRunner(object):'
1338
1338
1339 def __init__(self):
1339 def __init__(self):
1340 self.options = None
1340 self.options = None
1341 self.testdir = None
1341 self._testdir = None
1342 self.hgtmp = None
1342 self._hgtmp = None
1343 self.inst = None
1343 self._installdir = None
1344 self.bindir = None
1344 self._bindir = None
1345 self.tmpbinddir = None
1345 self._tmpbinddir = None
1346 self.pythondir = None
1346 self._pythondir = None
1347 self.coveragefile = None
1347 self._coveragefile = None
1348 self._createdfiles = []
1348 self._createdfiles = []
1349 self._hgpath = None
1349 self._hgpath = None
1350
1350
@@ -1382,7 +1382,7 b' class TestRunner(object):'
1382 return val
1382 return val
1383 tests.sort(key=sortkey)
1383 tests.sort(key=sortkey)
1384
1384
1385 self.testdir = os.environ['TESTDIR'] = os.getcwd()
1385 self._testdir = os.environ['TESTDIR'] = os.getcwd()
1386
1386
1387 if 'PYTHONHASHSEED' not in os.environ:
1387 if 'PYTHONHASHSEED' not in os.environ:
1388 # use a random python hash seed all the time
1388 # use a random python hash seed all the time
@@ -1412,41 +1412,41 b' class TestRunner(object):'
1412 # in all lowercase, which causes troubles with paths (issue3490)
1412 # in all lowercase, which causes troubles with paths (issue3490)
1413 d = os.getenv('TMP')
1413 d = os.getenv('TMP')
1414 tmpdir = tempfile.mkdtemp('', 'hgtests.', d)
1414 tmpdir = tempfile.mkdtemp('', 'hgtests.', d)
1415 self.hgtmp = os.environ['HGTMP'] = os.path.realpath(tmpdir)
1415 self._hgtmp = os.environ['HGTMP'] = os.path.realpath(tmpdir)
1416
1416
1417 if self.options.with_hg:
1417 if self.options.with_hg:
1418 self.inst = None
1418 self._installdir = None
1419 self.bindir = os.path.dirname(os.path.realpath(
1419 self._bindir = os.path.dirname(os.path.realpath(
1420 self.options.with_hg))
1420 self.options.with_hg))
1421 self.tmpbindir = os.path.join(self.hgtmp, 'install', 'bin')
1421 self._tmpbindir = os.path.join(self._hgtmp, 'install', 'bin')
1422 os.makedirs(self.tmpbindir)
1422 os.makedirs(self._tmpbindir)
1423
1423
1424 # This looks redundant with how Python initializes sys.path from
1424 # This looks redundant with how Python initializes sys.path from
1425 # the location of the script being executed. Needed because the
1425 # the location of the script being executed. Needed because the
1426 # "hg" specified by --with-hg is not the only Python script
1426 # "hg" specified by --with-hg is not the only Python script
1427 # executed in the test suite that needs to import 'mercurial'
1427 # executed in the test suite that needs to import 'mercurial'
1428 # ... which means it's not really redundant at all.
1428 # ... which means it's not really redundant at all.
1429 self.pythondir = self.bindir
1429 self._pythondir = self._bindir
1430 else:
1430 else:
1431 self.inst = os.path.join(self.hgtmp, "install")
1431 self._installdir = os.path.join(self._hgtmp, "install")
1432 self.bindir = os.environ["BINDIR"] = os.path.join(self.inst,
1432 self._bindir = os.environ["BINDIR"] = \
1433 "bin")
1433 os.path.join(self._installdir, "bin")
1434 self.tmpbindir = self.bindir
1434 self._tmpbindir = self._bindir
1435 self.pythondir = os.path.join(self.inst, "lib", "python")
1435 self._pythondir = os.path.join(self._installdir, "lib", "python")
1436
1436
1437 os.environ["BINDIR"] = self.bindir
1437 os.environ["BINDIR"] = self._bindir
1438 os.environ["PYTHON"] = PYTHON
1438 os.environ["PYTHON"] = PYTHON
1439
1439
1440 path = [self.bindir] + os.environ["PATH"].split(os.pathsep)
1440 path = [self._bindir] + os.environ["PATH"].split(os.pathsep)
1441 if self.tmpbindir != self.bindir:
1441 if self._tmpbindir != self._bindir:
1442 path = [self.tmpbindir] + path
1442 path = [self._tmpbindir] + path
1443 os.environ["PATH"] = os.pathsep.join(path)
1443 os.environ["PATH"] = os.pathsep.join(path)
1444
1444
1445 # Include TESTDIR in PYTHONPATH so that out-of-tree extensions
1445 # Include TESTDIR in PYTHONPATH so that out-of-tree extensions
1446 # can run .../tests/run-tests.py test-foo where test-foo
1446 # can run .../tests/run-tests.py test-foo where test-foo
1447 # adds an extension to HGRC. Also include run-test.py directory to
1447 # adds an extension to HGRC. Also include run-test.py directory to
1448 # import modules like heredoctest.
1448 # import modules like heredoctest.
1449 pypath = [self.pythondir, self.testdir,
1449 pypath = [self._pythondir, self._testdir,
1450 os.path.abspath(os.path.dirname(__file__))]
1450 os.path.abspath(os.path.dirname(__file__))]
1451 # We have to augment PYTHONPATH, rather than simply replacing
1451 # We have to augment PYTHONPATH, rather than simply replacing
1452 # it, in case external libraries are only available via current
1452 # it, in case external libraries are only available via current
@@ -1457,10 +1457,10 b' class TestRunner(object):'
1457 pypath.append(oldpypath)
1457 pypath.append(oldpypath)
1458 os.environ[IMPL_PATH] = os.pathsep.join(pypath)
1458 os.environ[IMPL_PATH] = os.pathsep.join(pypath)
1459
1459
1460 self.coveragefile = os.path.join(self.testdir, '.coverage')
1460 self._coveragefile = os.path.join(self._testdir, '.coverage')
1461
1461
1462 vlog("# Using TESTDIR", self.testdir)
1462 vlog("# Using TESTDIR", self._testdir)
1463 vlog("# Using HGTMP", self.hgtmp)
1463 vlog("# Using HGTMP", self._hgtmp)
1464 vlog("# Using PATH", os.environ["PATH"])
1464 vlog("# Using PATH", os.environ["PATH"])
1465 vlog("# Using", IMPL_PATH, os.environ[IMPL_PATH])
1465 vlog("# Using", IMPL_PATH, os.environ[IMPL_PATH])
1466
1466
@@ -1491,7 +1491,7 b' class TestRunner(object):'
1491
1491
1492 def _runtests(self, tests):
1492 def _runtests(self, tests):
1493 try:
1493 try:
1494 if self.inst:
1494 if self._installdir:
1495 self._installhg()
1495 self._installhg()
1496 self._checkhglib("Testing")
1496 self._checkhglib("Testing")
1497 else:
1497 else:
@@ -1512,7 +1512,7 b' class TestRunner(object):'
1512 failed = False
1512 failed = False
1513 warned = False
1513 warned = False
1514
1514
1515 suite = TestSuite(self.testdir,
1515 suite = TestSuite(self._testdir,
1516 jobs=self.options.jobs,
1516 jobs=self.options.jobs,
1517 whitelist=self.options.whitelisted,
1517 whitelist=self.options.whitelisted,
1518 blacklist=self.options.blacklist,
1518 blacklist=self.options.blacklist,
@@ -1551,8 +1551,8 b' class TestRunner(object):'
1551 testcls = cls
1551 testcls = cls
1552 break
1552 break
1553
1553
1554 refpath = os.path.join(self.testdir, test)
1554 refpath = os.path.join(self._testdir, test)
1555 tmpdir = os.path.join(self.hgtmp, 'child%d' % count)
1555 tmpdir = os.path.join(self._hgtmp, 'child%d' % count)
1556
1556
1557 return testcls(refpath, tmpdir,
1557 return testcls(refpath, tmpdir,
1558 keeptmpdir=self.options.keep_tmpdir,
1558 keeptmpdir=self.options.keep_tmpdir,
@@ -1569,8 +1569,8 b' class TestRunner(object):'
1569 if self.options.keep_tmpdir:
1569 if self.options.keep_tmpdir:
1570 return
1570 return
1571
1571
1572 vlog("# Cleaning up HGTMP", self.hgtmp)
1572 vlog("# Cleaning up HGTMP", self._hgtmp)
1573 shutil.rmtree(self.hgtmp, True)
1573 shutil.rmtree(self._hgtmp, True)
1574 for f in self._createdfiles:
1574 for f in self._createdfiles:
1575 try:
1575 try:
1576 os.remove(f)
1576 os.remove(f)
@@ -1584,7 +1584,7 b' class TestRunner(object):'
1584 if getattr(os, 'symlink', None):
1584 if getattr(os, 'symlink', None):
1585 vlog("# Making python executable in test path a symlink to '%s'" %
1585 vlog("# Making python executable in test path a symlink to '%s'" %
1586 sys.executable)
1586 sys.executable)
1587 mypython = os.path.join(self.tmpbindir, pyexename)
1587 mypython = os.path.join(self._tmpbindir, pyexename)
1588 try:
1588 try:
1589 if os.readlink(mypython) == sys.executable:
1589 if os.readlink(mypython) == sys.executable:
1590 return
1590 return
@@ -1640,9 +1640,9 b' class TestRunner(object):'
1640 ' --install-scripts="%(bindir)s" %(nohome)s >%(logfile)s 2>&1'
1640 ' --install-scripts="%(bindir)s" %(nohome)s >%(logfile)s 2>&1'
1641 % {'exe': sys.executable, 'py3': py3, 'pure': pure,
1641 % {'exe': sys.executable, 'py3': py3, 'pure': pure,
1642 'compiler': compiler,
1642 'compiler': compiler,
1643 'base': os.path.join(self.hgtmp, "build"),
1643 'base': os.path.join(self._hgtmp, "build"),
1644 'prefix': self.inst, 'libdir': self.pythondir,
1644 'prefix': self._installdir, 'libdir': self._pythondir,
1645 'bindir': self.bindir,
1645 'bindir': self._bindir,
1646 'nohome': nohome, 'logfile': installerrs})
1646 'nohome': nohome, 'logfile': installerrs})
1647 vlog("# Running", cmd)
1647 vlog("# Running", cmd)
1648 if os.system(cmd) == 0:
1648 if os.system(cmd) == 0:
@@ -1654,22 +1654,22 b' class TestRunner(object):'
1654 print line,
1654 print line,
1655 f.close()
1655 f.close()
1656 sys.exit(1)
1656 sys.exit(1)
1657 os.chdir(self.testdir)
1657 os.chdir(self._testdir)
1658
1658
1659 self._usecorrectpython()
1659 self._usecorrectpython()
1660
1660
1661 if self.options.py3k_warnings and not self.options.anycoverage:
1661 if self.options.py3k_warnings and not self.options.anycoverage:
1662 vlog("# Updating hg command to enable Py3k Warnings switch")
1662 vlog("# Updating hg command to enable Py3k Warnings switch")
1663 f = open(os.path.join(self.bindir, 'hg'), 'r')
1663 f = open(os.path.join(self._bindir, 'hg'), 'r')
1664 lines = [line.rstrip() for line in f]
1664 lines = [line.rstrip() for line in f]
1665 lines[0] += ' -3'
1665 lines[0] += ' -3'
1666 f.close()
1666 f.close()
1667 f = open(os.path.join(self.bindir, 'hg'), 'w')
1667 f = open(os.path.join(self._bindir, 'hg'), 'w')
1668 for line in lines:
1668 for line in lines:
1669 f.write(line + '\n')
1669 f.write(line + '\n')
1670 f.close()
1670 f.close()
1671
1671
1672 hgbat = os.path.join(self.bindir, 'hg.bat')
1672 hgbat = os.path.join(self._bindir, 'hg.bat')
1673 if os.path.isfile(hgbat):
1673 if os.path.isfile(hgbat):
1674 # hg.bat expects to be put in bin/scripts while run-tests.py
1674 # hg.bat expects to be put in bin/scripts while run-tests.py
1675 # installation layout put it in bin/ directly. Fix it
1675 # installation layout put it in bin/ directly. Fix it
@@ -1686,20 +1686,20 b' class TestRunner(object):'
1686 print 'WARNING: cannot fix hg.bat reference to python.exe'
1686 print 'WARNING: cannot fix hg.bat reference to python.exe'
1687
1687
1688 if self.options.anycoverage:
1688 if self.options.anycoverage:
1689 custom = os.path.join(self.testdir, 'sitecustomize.py')
1689 custom = os.path.join(self._testdir, 'sitecustomize.py')
1690 target = os.path.join(self.pythondir, 'sitecustomize.py')
1690 target = os.path.join(self._pythondir, 'sitecustomize.py')
1691 vlog('# Installing coverage trigger to %s' % target)
1691 vlog('# Installing coverage trigger to %s' % target)
1692 shutil.copyfile(custom, target)
1692 shutil.copyfile(custom, target)
1693 rc = os.path.join(self.testdir, '.coveragerc')
1693 rc = os.path.join(self._testdir, '.coveragerc')
1694 vlog('# Installing coverage rc to %s' % rc)
1694 vlog('# Installing coverage rc to %s' % rc)
1695 os.environ['COVERAGE_PROCESS_START'] = rc
1695 os.environ['COVERAGE_PROCESS_START'] = rc
1696 fn = os.path.join(self.inst, '..', '.coverage')
1696 fn = os.path.join(self._installdir, '..', '.coverage')
1697 os.environ['COVERAGE_FILE'] = fn
1697 os.environ['COVERAGE_FILE'] = fn
1698
1698
1699 def _checkhglib(self, verb):
1699 def _checkhglib(self, verb):
1700 """Ensure that the 'mercurial' package imported by python is
1700 """Ensure that the 'mercurial' package imported by python is
1701 the one we expect it to be. If not, print a warning to stderr."""
1701 the one we expect it to be. If not, print a warning to stderr."""
1702 expecthg = os.path.join(self.pythondir, 'mercurial')
1702 expecthg = os.path.join(self._pythondir, 'mercurial')
1703 actualhg = self._gethgpath()
1703 actualhg = self._gethgpath()
1704 if os.path.abspath(actualhg) != os.path.abspath(expecthg):
1704 if os.path.abspath(actualhg) != os.path.abspath(expecthg):
1705 sys.stderr.write('warning: %s with unexpected mercurial lib: %s\n'
1705 sys.stderr.write('warning: %s with unexpected mercurial lib: %s\n'
@@ -1722,7 +1722,7 b' class TestRunner(object):'
1722
1722
1723 def _outputcoverage(self):
1723 def _outputcoverage(self):
1724 vlog('# Producing coverage report')
1724 vlog('# Producing coverage report')
1725 os.chdir(self.pythondir)
1725 os.chdir(self._pythondir)
1726
1726
1727 def covrun(*args):
1727 def covrun(*args):
1728 cmd = 'coverage %s' % ' '.join(args)
1728 cmd = 'coverage %s' % ' '.join(args)
@@ -1731,14 +1731,14 b' class TestRunner(object):'
1731
1731
1732 covrun('-c')
1732 covrun('-c')
1733 omit = ','.join(os.path.join(x, '*') for x in
1733 omit = ','.join(os.path.join(x, '*') for x in
1734 [self.bindir, self.testdir])
1734 [self._bindir, self._testdir])
1735 covrun('-i', '-r', '"--omit=%s"' % omit) # report
1735 covrun('-i', '-r', '"--omit=%s"' % omit) # report
1736 if self.options.htmlcov:
1736 if self.options.htmlcov:
1737 htmldir = os.path.join(self.testdir, 'htmlcov')
1737 htmldir = os.path.join(self._testdir, 'htmlcov')
1738 covrun('-i', '-b', '"--directory=%s"' % htmldir,
1738 covrun('-i', '-b', '"--directory=%s"' % htmldir,
1739 '"--omit=%s"' % omit)
1739 '"--omit=%s"' % omit)
1740 if self.options.annotate:
1740 if self.options.annotate:
1741 adir = os.path.join(self.testdir, 'annotated')
1741 adir = os.path.join(self._testdir, 'annotated')
1742 if not os.path.isdir(adir):
1742 if not os.path.isdir(adir):
1743 os.mkdir(adir)
1743 os.mkdir(adir)
1744 covrun('-i', '-a', '"--directory=%s"' % adir, '"--omit=%s"' % omit)
1744 covrun('-i', '-a', '"--directory=%s"' % adir, '"--omit=%s"' % omit)
General Comments 0
You need to be logged in to leave comments. Login now