1
0
mirror of https://github.com/openSUSE/osc.git synced 2024-12-25 01:16:14 +01:00
github.com_openSUSE_osc/tests/test_commandline.py

702 lines
25 KiB
Python

import os
import shutil
import tempfile
import unittest
from osc.commandline import pop_project_package_from_args
from osc.commandline import pop_project_package_repository_arch_from_args
from osc.commandline import pop_project_package_targetproject_targetpackage_from_args
from osc.commandline import pop_repository_arch_from_args
from osc.oscerr import NoWorkingCopy, OscValueError
from osc.store import Store
class TestPopProjectPackageFromArgs(unittest.TestCase):
def _write_store(self, project=None, package=None):
store = Store(self.tmpdir, check=False)
if project:
store.project = project
store.is_project = True
if package:
store.package = package
store.is_project = False
store.is_package = True
def setUp(self):
self.tmpdir = tempfile.mkdtemp(prefix="osc_test")
os.chdir(self.tmpdir)
def tearDown(self):
try:
shutil.rmtree(self.tmpdir)
except OSError:
pass
def test_individual_args(self):
args = ["project", "package", "another-arg"]
project, package = pop_project_package_from_args(args)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(args, ["another-arg"])
def test_slash_separator(self):
args = ["project/package", "another-arg"]
project, package = pop_project_package_from_args(args)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(args, ["another-arg"])
args = ["project/", "another-arg"]
project, package = pop_project_package_from_args(args)
self.assertEqual(project, "project")
self.assertEqual(package, "")
self.assertEqual(args, ["another-arg"])
args = ["/", "another-arg"]
project, package = pop_project_package_from_args(args)
self.assertEqual(project, "")
self.assertEqual(package, "")
self.assertEqual(args, ["another-arg"])
def test_missing_project(self):
args = []
self.assertRaises(
OscValueError,
pop_project_package_from_args,
args,
)
def test_optional_project(self):
args = []
project, package = pop_project_package_from_args(
args, project_is_optional=True,
)
self.assertEqual(project, None)
self.assertEqual(package, None)
self.assertEqual(args, [])
def test_default_project(self):
args = []
project, package = pop_project_package_from_args(
args, default_project="default-project", package_is_optional=True
)
self.assertEqual(project, "default-project")
self.assertEqual(package, None)
self.assertEqual(args, [])
def test_missing_package(self):
args = ["project"]
self.assertRaises(
OscValueError,
pop_project_package_from_args,
args,
)
def test_optional_package(self):
args = ["project"]
project, package = pop_project_package_from_args(
args, package_is_optional=True,
)
self.assertEqual(project, "project")
self.assertEqual(package, None)
self.assertEqual(args, [])
def test_default_package(self):
args = ["project"]
project, package = pop_project_package_from_args(
args, package_is_optional=True, default_package="default-package",
)
self.assertEqual(project, "project")
self.assertEqual(package, "default-package")
self.assertEqual(args, [])
def test_default_project_package(self):
args = []
project, package = pop_project_package_from_args(
args,
default_project="default-project",
default_package="default-package",
package_is_optional=True,
)
self.assertEqual(project, "default-project")
self.assertEqual(package, "default-package")
self.assertEqual(args, [])
def test_no_working_copy(self):
args = [".", "."]
self.assertRaises(NoWorkingCopy, pop_project_package_from_args, args)
args = [".", "package"]
self.assertRaises(NoWorkingCopy, pop_project_package_from_args, args)
args = ["project", "."]
self.assertRaises(NoWorkingCopy, pop_project_package_from_args, args)
def test_project_and_package_from_project_working_copy(self):
self._write_store("store_project")
args = [".", ".", "another-arg"]
self.assertRaises(NoWorkingCopy, pop_project_package_from_args, args)
args = ["."]
project, package = pop_project_package_from_args(args, package_is_optional=True)
self.assertEqual(project, "store_project")
self.assertEqual(package, None)
self.assertEqual(args, [])
args = []
self.assertRaises(
NoWorkingCopy,
pop_project_package_from_args,
args,
default_project=".",
default_package=".",
)
args = []
project, package = pop_project_package_from_args(
args, default_project=".", default_package=".", package_is_optional=True
)
self.assertEqual(project, "store_project")
self.assertEqual(package, None)
self.assertEqual(args, [])
def test_project_and_package_from_package_working_copy(self):
self._write_store("store_project", "store_package")
args = [".", ".", "another-arg"]
project, package = pop_project_package_from_args(args)
self.assertEqual(project, "store_project")
self.assertEqual(package, "store_package")
self.assertEqual(args, ["another-arg"])
args = ["."]
project, package = pop_project_package_from_args(args, package_is_optional=True)
self.assertEqual(project, "store_project")
self.assertEqual(package, None)
self.assertEqual(args, [])
args = []
project, package = pop_project_package_from_args(
args, default_project=".", default_package="."
)
self.assertEqual(project, "store_project")
self.assertEqual(package, "store_package")
self.assertEqual(args, [])
args = []
project, package = pop_project_package_from_args(
args, default_project=".", default_package=".", package_is_optional=True
)
self.assertEqual(project, "store_project")
self.assertEqual(package, "store_package")
self.assertEqual(args, [])
def test_project_requires_to_specify_package(self):
args = ["project"]
self.assertRaises(
OscValueError,
pop_project_package_from_args,
args,
default_project=".",
default_package=".",
)
# The project from store is ignored because we've specified one.
# Specifying a package is expected.
self._write_store("store_project")
args = ["project"]
self.assertRaises(
OscValueError,
pop_project_package_from_args,
args,
default_project=".",
default_package=".",
)
class TestPopRepositoryArchFromArgs(unittest.TestCase):
def test_individial_args(self):
args = ["repo", "arch", "another-arg"]
repo, arch = pop_repository_arch_from_args(args)
self.assertEqual(repo, "repo")
self.assertEqual(arch, "arch")
self.assertEqual(args, ["another-arg"])
def test_slash_separator(self):
args = ["repo/arch", "another-arg"]
repo, arch = pop_repository_arch_from_args(args)
self.assertEqual(repo, "repo")
self.assertEqual(arch, "arch")
self.assertEqual(args, ["another-arg"])
args = ["repo/", "another-arg"]
repo, arch = pop_repository_arch_from_args(args)
self.assertEqual(repo, "repo")
self.assertEqual(arch, "")
self.assertEqual(args, ["another-arg"])
args = ["/", "another-arg"]
repo, arch = pop_repository_arch_from_args(args)
self.assertEqual(repo, "")
self.assertEqual(arch, "")
self.assertEqual(args, ["another-arg"])
def test_missing_repository(self):
args = []
self.assertRaises(OscValueError, pop_repository_arch_from_args, args)
def test_optional_repository(self):
args = []
repo, arch = pop_repository_arch_from_args(args, repository_is_optional=True)
self.assertEqual(repo, None)
self.assertEqual(arch, None)
self.assertEqual(args, [])
def test_default_repository(self):
args = []
repo, arch = pop_repository_arch_from_args(args, default_repository="repo", arch_is_optional=True)
self.assertEqual(repo, "repo")
self.assertEqual(arch, None)
self.assertEqual(args, [])
def test_missing_arch(self):
args = ["repo"]
self.assertRaises(OscValueError, pop_repository_arch_from_args, args)
def test_optional_arch(self):
args = ["repo"]
repo, arch = pop_repository_arch_from_args(args, arch_is_optional=True)
self.assertEqual(repo, "repo")
self.assertEqual(arch, None)
self.assertEqual(args, [])
def test_default_arch(self):
args = ["repo"]
repo, arch = pop_repository_arch_from_args(args, default_arch="arch")
self.assertEqual(repo, "repo")
self.assertEqual(arch, "arch")
self.assertEqual(args, [])
class TestPopProjectPackageRepositoryArchFromArgs(unittest.TestCase):
def _write_store(self, project=None, package=None):
store = Store(self.tmpdir, check=False)
if project:
store.project = project
store.is_project = True
if package:
store.package = package
store.is_project = False
store.is_package = True
def setUp(self):
self.tmpdir = tempfile.mkdtemp(prefix="osc_test")
os.chdir(self.tmpdir)
def tearDown(self):
try:
shutil.rmtree(self.tmpdir)
except OSError:
pass
def test_individual_args(self):
args = ["project", "package", "repo", "arch", "another-arg"]
project, package, repo, arch = pop_project_package_repository_arch_from_args(
args
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(repo, "repo")
self.assertEqual(arch, "arch")
self.assertEqual(args, ["another-arg"])
def test_slash_separator(self):
args = ["project/package", "repo/arch", "another-arg"]
project, package, repo, arch = pop_project_package_repository_arch_from_args(
args
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(repo, "repo")
self.assertEqual(arch, "arch")
self.assertEqual(args, ["another-arg"])
def test_missing_project(self):
args = []
self.assertRaises(
OscValueError, pop_project_package_repository_arch_from_args, args
)
def test_optional_project(self):
args = []
project, package, repo, arch = pop_project_package_repository_arch_from_args(
args, project_is_optional=True
)
self.assertEqual(project, None)
self.assertEqual(package, None)
self.assertEqual(repo, None)
self.assertEqual(arch, None)
self.assertEqual(args, [])
def test_default_project(self):
args = []
project, package, repo, arch = pop_project_package_repository_arch_from_args(
args, default_project="project", package_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, None)
self.assertEqual(repo, None)
self.assertEqual(arch, None)
self.assertEqual(args, [])
def test_missing_package(self):
args = ["project"]
self.assertRaises(
OscValueError, pop_project_package_repository_arch_from_args, args
)
def test_optional_package(self):
args = ["project"]
project, package, repo, arch = pop_project_package_repository_arch_from_args(
args, package_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, None)
self.assertEqual(repo, None)
self.assertEqual(arch, None)
self.assertEqual(args, [])
def test_default_package(self):
args = ["project"]
project, package, repo, arch = pop_project_package_repository_arch_from_args(
args, default_package="package", repository_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(repo, None)
self.assertEqual(arch, None)
self.assertEqual(args, [])
def test_missing_repository(self):
args = ["project", "package"]
self.assertRaises(
OscValueError, pop_project_package_repository_arch_from_args, args
)
def test_optional_repository(self):
args = ["project", "package"]
project, package, repo, arch = pop_project_package_repository_arch_from_args(
args, repository_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(repo, None)
self.assertEqual(arch, None)
self.assertEqual(args, [])
def test_default_repository(self):
args = ["project", "package"]
project, package, repo, arch = pop_project_package_repository_arch_from_args(
args, default_repository="repository", arch_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(repo, "repository")
self.assertEqual(arch, None)
self.assertEqual(args, [])
def test_missing_arch(self):
args = ["project", "package", "repo"]
self.assertRaises(
OscValueError, pop_project_package_repository_arch_from_args, args
)
def test_optional_arch(self):
args = ["project", "package", "repository"]
project, package, repo, arch = pop_project_package_repository_arch_from_args(
args, arch_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(repo, "repository")
self.assertEqual(arch, None)
self.assertEqual(args, [])
def test_default_arch(self):
args = ["project", "package", "repository"]
project, package, repo, arch = pop_project_package_repository_arch_from_args(
args, default_arch="arch"
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(repo, "repository")
self.assertEqual(arch, "arch")
self.assertEqual(args, [])
def test_no_working_copy(self):
args = ["repo", "arch"]
self.assertRaises(
NoWorkingCopy,
pop_project_package_repository_arch_from_args,
args,
default_project=".",
default_package=".",
)
def test_working_copy(self):
self._write_store("store_project", "store_package")
args = ["repo", "arch"]
project, package, repo, arch = pop_project_package_repository_arch_from_args(
args,
default_project=".",
default_package=".",
)
self.assertEqual(project, "store_project")
self.assertEqual(package, "store_package")
self.assertEqual(repo, "repo")
self.assertEqual(arch, "arch")
def test_working_copy_extra_arg(self):
self._write_store("store_project", "store_package")
args = ["repo", "arch", "another-arg"]
# example of invalid usage, working copy is not used when there's 3+ args; [project, package, ...] are expected
self.assertRaises(
OscValueError,
pop_project_package_repository_arch_from_args,
args,
default_project=".",
default_package=".",
)
def test_working_copy_optional_arch(self):
self._write_store("store_project", "store_package")
args = ["repository"]
project, package, repo, arch = pop_project_package_repository_arch_from_args(
args,
default_project=".",
default_package=".",
arch_is_optional=True,
)
self.assertEqual(project, "store_project")
self.assertEqual(package, "store_package")
self.assertEqual(repo, "repository")
self.assertEqual(arch, None)
class TestPopProjectPackageTargetProjectTargetPackageFromArgs(unittest.TestCase):
def _write_store(self, project=None, package=None):
store = Store(self.tmpdir, check=False)
if project:
store.project = project
store.is_project = True
if package:
store.package = package
store.is_project = False
store.is_package = True
def setUp(self):
self.tmpdir = tempfile.mkdtemp(prefix="osc_test")
os.chdir(self.tmpdir)
def tearDown(self):
try:
shutil.rmtree(self.tmpdir)
except OSError:
pass
def test_individual_args(self):
args = ["project", "package", "target-project", "target-package", "another-arg"]
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(target_project, "target-project")
self.assertEqual(target_package, "target-package")
self.assertEqual(args, ["another-arg"])
def test_slash_separator(self):
args = ["project/package", "target-project/target-package", "another-arg"]
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(target_project, "target-project")
self.assertEqual(target_package, "target-package")
self.assertEqual(args, ["another-arg"])
def test_missing_project(self):
args = []
self.assertRaises(
OscValueError, pop_project_package_targetproject_targetpackage_from_args, args
)
def test_optional_project(self):
args = []
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args, project_is_optional=True
)
self.assertEqual(project, None)
self.assertEqual(package, None)
self.assertEqual(target_project, None)
self.assertEqual(target_package, None)
self.assertEqual(args, [])
def test_default_project(self):
args = []
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args, default_project="project", package_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, None)
self.assertEqual(target_project, None)
self.assertEqual(target_package, None)
self.assertEqual(args, [])
def test_missing_package(self):
args = ["project"]
self.assertRaises(
OscValueError, pop_project_package_targetproject_targetpackage_from_args, args
)
def test_optional_package(self):
args = ["project"]
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args, package_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, None)
self.assertEqual(target_project, None)
self.assertEqual(target_package, None)
self.assertEqual(args, [])
def test_default_package(self):
args = ["project"]
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args, default_package="package", target_project_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(target_project, None)
self.assertEqual(target_package, None)
self.assertEqual(args, [])
def test_missing_target_project(self):
args = ["project", "package"]
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args, target_project_is_optional=True, target_package_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(target_project, None)
self.assertEqual(target_package, None)
self.assertEqual(args, [])
def test_optional_target_project(self):
args = ["project", "package"]
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args, target_project_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(target_project, None)
self.assertEqual(target_package, None)
self.assertEqual(args, [])
def test_default_target_project(self):
args = ["project", "package"]
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args, default_target_project="package", target_package_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(target_project, "package")
self.assertEqual(target_package, None)
self.assertEqual(args, [])
def test_missing_target_package(self):
args = ["project", "package", "target-project"]
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args, target_package_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(target_project, "target-project")
self.assertEqual(target_package, None)
self.assertEqual(args, [])
def test_optional_target_package(self):
args = ["project", "package", "target-project"]
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args, target_package_is_optional=True
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(target_project, "target-project")
self.assertEqual(target_package, None)
self.assertEqual(args, [])
def test_default_target_package(self):
args = ["project", "package", "target-project"]
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args, default_target_package="target-package"
)
self.assertEqual(project, "project")
self.assertEqual(package, "package")
self.assertEqual(target_project, "target-project")
self.assertEqual(target_package, "target-package")
self.assertEqual(args, [])
def test_no_working_copy(self):
args = ["target-project", "target-package"]
self.assertRaises(
NoWorkingCopy,
pop_project_package_targetproject_targetpackage_from_args,
args,
default_project=".",
default_package=".",
)
def test_working_copy(self):
self._write_store("store_project", "store_package")
args = ["target-project", "target-package"]
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args,
default_project=".",
default_package=".",
)
self.assertEqual(project, "store_project")
self.assertEqual(package, "store_package")
self.assertEqual(target_project, "target-project")
self.assertEqual(target_package, "target-package")
def test_working_copy_missing_target_package(self):
self._write_store("store_project", "store_package")
args = ["target-project"]
project, package, target_project, target_package = pop_project_package_targetproject_targetpackage_from_args(
args,
default_project=".",
default_package=".",
target_package_is_optional=True,
)
self.assertEqual(project, "store_project")
self.assertEqual(package, "store_package")
self.assertEqual(target_project, "target-project")
self.assertEqual(target_package, None)
def test_working_copy_extra_arg(self):
self._write_store("store_project", "store_package")
args = ["target-project", "target-package", "another-arg"]
# example of invalid usage, working copy is not used when there's 3+ args; [project, package, ...] are expected
self.assertRaises(
OscValueError,
pop_project_package_targetproject_targetpackage_from_args,
args,
)
if __name__ == "__main__":
unittest.main()