xfstestsdb: Create the root xfstestsdb Command
Signed-off-by: Anna Schumaker <anna@nowheycreamery.com>
This commit is contained in:
parent
bc8b6bdff8
commit
c210eff9b9
|
@ -0,0 +1 @@
|
|||
*__pycache__*
|
|
@ -0,0 +1,15 @@
|
|||
# Copyright 2023 (c) Anna Schumaker.
|
||||
|
||||
clean:
|
||||
find . -type d -name __pycache__ -exec rm -r {} \+
|
||||
|
||||
.PHONY: flake8
|
||||
flake8:
|
||||
flake8
|
||||
|
||||
.PHONY: pytest
|
||||
pytest:
|
||||
pytest
|
||||
|
||||
.PHONY: tests
|
||||
tests: pytest flake8
|
|
@ -0,0 +1,3 @@
|
|||
[pytest]
|
||||
testpaths = xfstestsdb/ tests/
|
||||
addopts= -rP
|
|
@ -0,0 +1,2 @@
|
|||
# Copyright 2023 (c) Anna Schumaker.
|
||||
"""Needed to initialize tests correctly."""
|
|
@ -0,0 +1,50 @@
|
|||
# Copyright 2023 (c) Anna Schumaker.
|
||||
"""Tests the `xfstestsdb` command."""
|
||||
import io
|
||||
import argparse
|
||||
import unittest
|
||||
import unittest.mock
|
||||
import xfstestsdb
|
||||
|
||||
|
||||
class TestXfstestsdb(unittest.TestCase):
|
||||
"""Tests the xfstestsdb command operation."""
|
||||
|
||||
def setUp(self):
|
||||
"""Set up common variables."""
|
||||
self.xfstestsdb = xfstestsdb.Command()
|
||||
|
||||
def test_init(self):
|
||||
"""Test that the xfstestsdb instance is set up properly."""
|
||||
self.assertIsInstance(self.xfstestsdb.parser, argparse.ArgumentParser)
|
||||
self.assertIsInstance(self.xfstestsdb.subparser, argparse.Action)
|
||||
|
||||
@unittest.mock.patch("sys.stdout", new_callable=io.StringIO)
|
||||
def test_run_empty(self, mock_stdout: io.StringIO):
|
||||
"""Test calling xfstestdb.run() with an empty argument list."""
|
||||
self.xfstestsdb.run([])
|
||||
self.assertRegex(mock_stdout.getvalue(),
|
||||
r"^usage: pytest \[\-h\] \[\-\-version\]"
|
||||
r"\s+\{.*?} ...$")
|
||||
|
||||
def test_run(self):
|
||||
"""Test running the xfstestsdb."""
|
||||
parser = self.xfstestsdb.subparser.add_parser("test-run", help="help")
|
||||
test_passed = False
|
||||
|
||||
def test_func(args: argparse.Namespace) -> None:
|
||||
nonlocal test_passed
|
||||
test_passed = True
|
||||
parser.set_defaults(function=test_func)
|
||||
|
||||
self.xfstestsdb.run(["test-run"])
|
||||
self.assertTrue(test_passed)
|
||||
|
||||
@unittest.mock.patch("sys.stdout", new_callable=io.StringIO)
|
||||
def test_version(self, mock_stdout: io.StringIO):
|
||||
"""Test printing version information."""
|
||||
self.assertEqual(xfstestsdb.MAJOR, 1)
|
||||
self.assertEqual(xfstestsdb.MINOR, 0)
|
||||
|
||||
self.xfstestsdb.run(["--version"])
|
||||
self.assertEqual(mock_stdout.getvalue(), "xfstestsdb v1.0-debug\n")
|
|
@ -0,0 +1,6 @@
|
|||
#!/usr/bin/python
|
||||
# Copyright 2023 (c) Anna Schumaker.
|
||||
"""The entrypoint for the xfstestsdb tool."""
|
||||
import xfstestsdb
|
||||
|
||||
xfstestsdb.Command().run()
|
|
@ -0,0 +1,28 @@
|
|||
# Copyright 2023 (c) Anna Schumaker
|
||||
"""Implements the toplevel xfstestsdb command."""
|
||||
import argparse
|
||||
|
||||
MAJOR = 1
|
||||
MINOR = 0
|
||||
|
||||
|
||||
class Command:
|
||||
"""The root xfstestsdb command."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
"""Initialize the xfstestsdb command."""
|
||||
self.parser = argparse.ArgumentParser()
|
||||
self.parser.set_defaults(function=lambda x: self.parser.print_usage())
|
||||
self.parser.add_argument("--version", action="store_true",
|
||||
help="show version number and exit")
|
||||
self.subparser = self.parser.add_subparsers(title="commands")
|
||||
self.commands = {}
|
||||
|
||||
def run(self, args: list = None) -> None:
|
||||
"""Run the xfstestsdb command."""
|
||||
parsed = self.parser.parse_args(args)
|
||||
if parsed.version:
|
||||
print(f"xfstestsdb v{MAJOR}.{MINOR}"
|
||||
f"{'-debug' if __debug__ else ''}")
|
||||
else:
|
||||
parsed.function(parsed)
|
Loading…
Reference in New Issue