aboutsummaryrefslogtreecommitdiff
path: root/dep/tests/test_dep.py
diff options
context:
space:
mode:
Diffstat (limited to 'dep/tests/test_dep.py')
-rw-r--r--dep/tests/test_dep.py134
1 files changed, 134 insertions, 0 deletions
diff --git a/dep/tests/test_dep.py b/dep/tests/test_dep.py
new file mode 100644
index 00000000..5c877c4d
--- /dev/null
+++ b/dep/tests/test_dep.py
@@ -0,0 +1,134 @@
+"""Test deps.
+
+Testing adds more requirements, as we use Pytest. That is not needed for running though.
+
+"""
+import json
+import os
+import sys
+import pytest
+
+import dep
+from dep import Line, Brew, Version, MissingDependencyError, ConMan, HostOSVersion
+
+here = os.path.dirname(os.path.realpath(__file__))
+
+
+def test_simple_brew():
+ """End-to-end test of a simple brew dependency."""
+ dep.parse_dependencies(['./tests/Dependencies0'])
+
+
+def test_main():
+ """End-to-end test of larger dependency file."""
+ sys.argv = ['/bin/deps', 'verify', './tests/Dependencies1']
+ with pytest.raises(dep.MalformedDependency):
+ dep.main()
+
+
+def test_brew_cmake_requirement(mocker):
+ """Detailed check of a brew cmake dependency."""
+ line = Line("foo.c", 10, "brew cmake <= 3.10.0", "test")
+
+ b = Brew(line, "brew")
+ b.parse()
+ assert b.operator == "<="
+ assert b.command == "brew"
+ assert b.package == "cmake"
+ assert b.version_text == "3.10.0"
+ mocker.patch('dep.brew_cmd')
+ dep.brew_cmd.return_value = json.load(open(here + '/assets/brew_cmake_installed.json'))
+ b.verify_and_act()
+ assert dep.brew_cmd.called
+
+
+def test_brew_ninja_not_installed_requirement(mocker):
+ """Detailed check of a unmatched brew requirement."""
+ line = Line("foo.c", 11, "brew ninja <= 1.8.2", "We use ninja as clang's build system.")
+
+ b = Brew(line, "brew")
+ b.parse()
+ assert b.operator == "<="
+ assert b.command == "brew"
+ assert b.package == "ninja"
+ assert b.version_text == "1.8.2"
+ mocker.patch('dep.brew_cmd')
+ dep.brew_cmd.return_value = json.load(open(here + '/assets/brew_ninja_not_installed.json'))
+ # The package is not installed
+ with pytest.raises(MissingDependencyError) as exception_info:
+ b.verify_and_act()
+
+ assert "missing dependency: brew ninja v1.8.2, found nothing installed" in str(exception_info)
+ assert dep.brew_cmd.called
+
+
+def test_versions():
+ """Unittests for the version comparison objects."""
+ v1 = Version("3.2.1")
+ v2 = Version("3.3.1")
+ v3 = Version("3.2")
+ v4 = Version("3.2")
+
+ # Check the values are parsed correctly.
+ assert v1.text == "3.2.1"
+ assert v1.numeric == [3, 2, 1]
+ assert v3.text == "3.2"
+ assert v3.numeric == [3, 2]
+
+ # Check the operators work correctly.
+ assert v2 > v1
+ assert v1 < v2
+ assert v2 >= v1
+ assert v1 <= v2
+ assert v3 == v4
+
+ # Check that versions with different number of digits compare correctly.
+ assert v2 > v3
+ assert v3 < v2
+
+ # TODO fix different digit comparisons.
+ # assert v4 == v1
+ assert v3 >= v4
+
+
+def test_self_version_requirement():
+ """Unittest of the self version check."""
+ line = Line("foo.c", 10, "config_manager <= 0.1", "test")
+
+ b = ConMan(line, "config_manager")
+ b.parse()
+ assert b.operator == "<="
+ assert b.command == "config_manager"
+ assert b.version_text == "0.1"
+
+ b.verify_and_act()
+
+ line = Line("foo.c", 10, "config_manager <= 0.0.1", "test")
+ bad = ConMan(line, "config_manager")
+ bad.parse()
+ with pytest.raises(MissingDependencyError):
+ bad.verify_and_act()
+ line = Line("foo.c", 10, "config_manager == " + dep.VERSION, "test")
+ good = ConMan(line, "config_manager")
+ good.parse()
+ good.verify_and_act()
+
+
+def test_host_os_version_requirement(mocker):
+ """Unittest of the host os version check."""
+ line = Line("foo.c", 11, "os_version == 10.13.2", "test")
+ mocker.patch('dep.platform.mac_ver')
+ dep.platform.mac_ver.return_value = ('10.13.2', "", "")
+ b = HostOSVersion(line, "os_version")
+ b.parse()
+ assert b.operator == "=="
+ assert b.command == "os_version"
+ assert b.version_text == "10.13.2"
+
+ b.verify_and_act()
+
+ line = Line("foo.c", 10, "os_version == 10.13.1", "test")
+ bad = HostOSVersion(line, "os_version")
+ bad.parse()
+ with pytest.raises(MissingDependencyError):
+ bad.verify_and_act()