Mercurial > hgsubversion
comparison tests/test_util.py @ 716:38ebf7714cdf
requiresoption: raise SkipTest if available
This has the unfortunate (I guess?) side effect that you can no longer
use pure unittest to run skipped tests if nose or unittest2 is
installed.
| author | Augie Fackler <durin42@gmail.com> |
|---|---|
| date | Sat, 02 Oct 2010 16:44:37 -0500 |
| parents | c33293a34752 |
| children | ae5968ffe6fe |
comparison
equal
deleted
inserted
replaced
| 715:c33293a34752 | 716:38ebf7714cdf |
|---|---|
| 23 from mercurial import i18n | 23 from mercurial import i18n |
| 24 from mercurial import node | 24 from mercurial import node |
| 25 from mercurial import ui | 25 from mercurial import ui |
| 26 from mercurial import extensions | 26 from mercurial import extensions |
| 27 | 27 |
| 28 try: | |
| 29 from unittest2 import SkipTest | |
| 30 except ImportError: | |
| 31 try: | |
| 32 from nose import SkipTest | |
| 33 except ImportError: | |
| 34 SkipTest = None | |
| 35 | |
| 28 from hgsubversion import util | 36 from hgsubversion import util |
| 29 | 37 |
| 30 # Documentation for Subprocess.Popen() says: | 38 # Documentation for Subprocess.Popen() says: |
| 31 # "Note that on Windows, you cannot set close_fds to true and | 39 # "Note that on Windows, you cannot set close_fds to true and |
| 32 # also redirect the standard handles by setting stdin, stdout or | 40 # also redirect the standard handles by setting stdin, stdout or |
| 92 '''Skip a test if commands.clone does not take the specified option.''' | 100 '''Skip a test if commands.clone does not take the specified option.''' |
| 93 def decorator(fn): | 101 def decorator(fn): |
| 94 for entry in cmdutil.findcmd('clone', commands.table)[1][1]: | 102 for entry in cmdutil.findcmd('clone', commands.table)[1][1]: |
| 95 if entry[1] == option: | 103 if entry[1] == option: |
| 96 return fn | 104 return fn |
| 105 # no match found, so skip | |
| 106 if SkipTest: | |
| 107 def skip(*args, **kwargs): | |
| 108 raise SkipTest('test requires clone to accept %s' % option) | |
| 109 skip.__name__ = fn.__name__ | |
| 110 return skip | |
| 111 # no skipping support, so erase decorated method | |
| 112 return | |
| 97 if not isinstance(option, str): | 113 if not isinstance(option, str): |
| 98 raise TypeError('requiresoption takes a string argument') | 114 raise TypeError('requiresoption takes a string argument') |
| 99 return decorator | 115 return decorator |
| 100 | 116 |
| 101 def filtermanifest(manifest): | 117 def filtermanifest(manifest): |
