avocado-framework/avocado

View on GitHub
selftests/unit/parameters.py

Summary

Maintainability
A
0 mins
Test Coverage
import unittest

from avocado.core import parameters, tree


class Parameters(unittest.TestCase):
    def test_greedy_path_to_re(self):
        params = parameters.AvocadoParams([tree.TreeNode()], ["/run"])
        self.assertEqual(params._greedy_path_to_re("").pattern, "^$")
        self.assertEqual(params._greedy_path_to_re("/").pattern, "/$")
        self.assertEqual(params._greedy_path_to_re("/foo/bar").pattern, "/foo/bar$")
        self.assertEqual(params._greedy_path_to_re("foo/bar").pattern, "foo/bar$")
        self.assertEqual(params._greedy_path_to_re("/*/foo").pattern, "/[^/]*/foo$")
        self.assertEqual(params._greedy_path_to_re("foo/*").pattern, "foo/")
        self.assertEqual(params._greedy_path_to_re("/foo/*").pattern, "/foo/")

    def test_same_origin_of_different_nodes(self):
        # ideally we have one tree, therefore shared key
        # have identical origin (id of the origin env)
        node_foo = tree.TreeNode().get_node("/foo", True)
        node_root = node_foo.parent
        node_root.value = {"timeout": 1}
        node_bar = node_root.get_node("/bar", True)
        params1 = parameters.AvocadoParams([node_foo, node_bar], "/")
        self.assertEqual(params1.get("timeout"), 1)
        self.assertEqual(params1.get("timeout", "/foo/"), 1)
        self.assertEqual(params1.get("timeout", "/bar/"), 1)
        # Sometimes we get multiple trees, but if they claim the origin
        # is of the same path, let's trust it (even when the values
        # differ)
        # note: This is an artificial example which should not happen
        # in production. Anyway in json-variants-loader we do create
        # only leave-nodes without connecting the parents, which result
        # in same paths with different node objects. Let's make sure
        # they behave correctly.
        node_baz = tree.TreeNode().get_node("/baz", True)
        node_baz.parent.value = {"timeout": 2}
        params2 = parameters.AvocadoParams([node_foo, node_baz], "/")
        self.assertEqual(params2.get("timeout"), 1)
        self.assertEqual(params2.get("timeout", "/foo/"), 1)
        self.assertEqual(params2.get("timeout", "/baz/"), 2)
        # Note: Different origin of the same value, which should produce
        # a crash, are tested in yaml2mux selftest


if __name__ == "__main__":
    unittest.main()