test_ok2/testing/test_parseopt.py

113 lines
4.0 KiB
Python

import py
from pytest.plugin import config as parseopt
class TestParser:
def test_no_help_by_default(self, capsys):
parser = parseopt.Parser(usage="xyz")
py.test.raises(SystemExit, 'parser.parse(["-h"])')
out, err = capsys.readouterr()
assert err.find("no such option") != -1
def test_group_add_and_get(self):
parser = parseopt.Parser()
group = parser.getgroup("hello", description="desc")
assert group.name == "hello"
assert group.description == "desc"
def test_getgroup_simple(self):
parser = parseopt.Parser()
group = parser.getgroup("hello", description="desc")
assert group.name == "hello"
assert group.description == "desc"
group2 = parser.getgroup("hello")
assert group2 is group
def test_group_ordering(self):
parser = parseopt.Parser()
group0 = parser.getgroup("1")
group1 = parser.getgroup("2")
group1 = parser.getgroup("3", after="1")
groups = parser._groups
groups_names = [x.name for x in groups]
assert groups_names == list("132")
def test_group_addoption(self):
group = parseopt.OptionGroup("hello")
group.addoption("--option1", action="store_true")
assert len(group.options) == 1
assert isinstance(group.options[0], py.std.optparse.Option)
def test_group_shortopt_lowercase(self):
parser = parseopt.Parser()
group = parser.getgroup("hello")
py.test.raises(ValueError, """
group.addoption("-x", action="store_true")
""")
assert len(group.options) == 0
group._addoption("-x", action="store_true")
assert len(group.options) == 1
def test_parser_addoption(self):
parser = parseopt.Parser()
group = parser.getgroup("custom options")
assert len(group.options) == 0
group.addoption("--option1", action="store_true")
assert len(group.options) == 1
def test_parse(self):
parser = parseopt.Parser()
parser.addoption("--hello", dest="hello", action="store")
option, args = parser.parse(['--hello', 'world'])
assert option.hello == "world"
assert not args
def test_parse(self):
parser = parseopt.Parser()
option, args = parser.parse([py.path.local()])
assert args[0] == py.path.local()
def test_parse_will_set_default(self):
parser = parseopt.Parser()
parser.addoption("--hello", dest="hello", default="x", action="store")
option, args = parser.parse([])
assert option.hello == "x"
del option.hello
args = parser.parse_setoption([], option)
assert option.hello == "x"
def test_parse_setoption(self):
parser = parseopt.Parser()
parser.addoption("--hello", dest="hello", action="store")
parser.addoption("--world", dest="world", default=42)
class A: pass
option = A()
args = parser.parse_setoption(['--hello', 'world'], option)
assert option.hello == "world"
assert option.world == 42
assert not args
def test_parse_defaultgetter(self):
def defaultget(option):
if option.type == "int":
option.default = 42
elif option.type == "string":
option.default = "world"
parser = parseopt.Parser(processopt=defaultget)
parser.addoption("--this", dest="this", type="int", action="store")
parser.addoption("--hello", dest="hello", type="string", action="store")
parser.addoption("--no", dest="no", action="store_true")
option, args = parser.parse([])
assert option.hello == "world"
assert option.this == 42
@py.test.mark.skipif("sys.version_info < (2,5)")
def test_addoption_parser_epilog(testdir):
testdir.makeconftest("""
def pytest_addoption(parser):
parser.hints.append("hello world")
""")
result = testdir.runpytest('--help')
#assert result.ret != 0
result.stdout.fnmatch_lines(["*hint: hello world*"])