aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna (cybertailor) Vyalkova <cyber+gentoo@sysrq.in>2024-11-26 20:44:31 +0500
committerSebastian Pipping <sping@gentoo.org>2025-01-31 18:40:45 +0100
commitd697c3ac24cc324a62c68553e99f2d7aba491e5d (patch)
treefe143da9fd459a73d79424f3d29e9ffda192ed95
parentpyproject.toml: Officially support Python 3.11 and 3.12 (diff)
downloadmetagen-master.tar.gz
metagen-master.tar.bz2
metagen-master.zip
Add unit tests for testing CLIHEADmaster
This replaces custom shellscript runner. Signed-off-by: Anna (cybertailor) Vyalkova <cyber+gentoo@sysrq.in> Signed-off-by: Sebastian Pipping <sping@gentoo.org>
-rw-r--r--MANIFEST.in1
-rwxr-xr-xmetagen/test_cli51
-rw-r--r--metagen/tests/test_cli.py61
3 files changed, 61 insertions, 52 deletions
diff --git a/MANIFEST.in b/MANIFEST.in
index 00690d6..9a2248f 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,2 +1 @@
include docs/*
-include metagen/test_cli
diff --git a/metagen/test_cli b/metagen/test_cli
deleted file mode 100755
index fb394ca..0000000
--- a/metagen/test_cli
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/bash
-metagen() {
- PYTHONPATH=. python3 -m metagen "$@"
-}
-
-handle_error() {
- ret=$?
- echo FAILED. >&2
- exit ${ret}
-}
-trap handle_error ERR
-
-unset ECHANGELOG_USER
-PS4='# '
-set -x
-########################################
-# BEGIN tests
-########################################
-
-
-#Should fail as -t ... is missing
-! metagen -m -Q
-! metagen -e mail@example.org -Q
-
-#Should fail if ECHANGELOG_USER not set:
-ECHANGELOG_USER='First Last <mail@example.org>' metagen -m -Q -t person
-! metagen -m -Q -t person
-
-metagen -e "someguy@gentoo.org" -d "Maint desc" -Q -t person
-
-metagen -e "someguy@gentoo.org" -n "Jon Doe" -d "Maint desc" -Q -t person
-
-#Should fail if ECHANGELOG_USER not set:
-ECHANGELOG_USER='First Last <mail@example.org>' metagen -m -e "foo@bar.com" -d "Foo bar.","Chow fun" -Q -t person
-! metagen -m -e "foo@bar.com" -d "Foo bar.","Chow fun" -Q -t person
-
-#Should fail:
-! metagen -Q -t person
-
-#Should fail:
-! metagen -l "Long desc" -Q -t person
-
-#Should fail:
-! metagen -d "Maintainer desc" -Q -t person
-
-
-########################################
-# END tests
-########################################
-echo
-echo PASSED.
diff --git a/metagen/tests/test_cli.py b/metagen/tests/test_cli.py
new file mode 100644
index 0000000..603f475
--- /dev/null
+++ b/metagen/tests/test_cli.py
@@ -0,0 +1,61 @@
+import os
+import sys
+import unittest
+from contextlib import redirect_stdout
+from io import StringIO
+from unittest.mock import patch
+
+from metagen.__main__ import main
+
+
+class TestCli(unittest.TestCase):
+
+ def test_missing_type(self):
+ self.assertExitFail("-m", "-Q")
+ self.assertExitFail("-e", "mail@example.org", "-Q")
+
+ def test_echangelog_user(self):
+ test_env = {"ECHANGELOG_USER": "First Last <mail@example.org>"}
+ test_args = ["-m", "-Q", "-t", "person"]
+
+ with patch.dict(os.environ, test_env):
+ self.assertExitSuccess(*test_args)
+
+ with patch.dict(os.environ, clear=True):
+ self.assertExitFail(*test_args)
+
+ def test_maint_desc(self):
+ self.assertExitSuccess("-e", "someguy@gentoo.org",
+ "-d", "Maint desc", "-Q", "-t", "person")
+ self.assertExitSuccess("-e", "someguy@gentoo.org",
+ "-d", "Maint desc", "-n", "Jon Doe",
+ "-Q", "-t", "person")
+
+ def test_echangelog_user_long(self):
+ test_env = {"ECHANGELOG_USER": "First Last <mail@example.org>"}
+ test_args = ["-m", "-e", "foo@bar.com",
+ "-d", "Foo bar.,Chow fun", "-Q", "-t", "person"]
+
+ with patch.dict(os.environ, test_env):
+ self.assertExitSuccess(*test_args)
+
+ with patch.dict(os.environ, clear=True):
+ self.assertExitFail(*test_args)
+
+ def test_missing_email(self):
+ self.assertExitFail("-Q", "-t", "person")
+ self.assertExitFail("-l", "Long desc", "-Q", "-t", "person")
+ self.assertExitFail("-d", "Maintainer desc", "-Q", "-t", "person")
+
+ def assertExitFail(self, *args):
+ with self.assertRaises(SystemExit) as cm:
+ self._run_metagen(*args)
+ self.assertEqual(cm.exception.code, 1)
+
+ def assertExitSuccess(self, *args):
+ self._run_metagen(*args)
+
+ def _run_metagen(self, *args):
+ with redirect_stdout(StringIO()):
+ with patch.object(sys, "argv", ["metagen", *args]):
+ main()