Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 91620539 authored by Paul Duffin's avatar Paul Duffin Committed by Automerger Merge Worker
Browse files

Merge "signature_trie: Avoid unnecessary wrapping and unwrapping of values" am: ffd5b32a

parents d4a37e07 ffd5b32a
Loading
Loading
Loading
Loading
+5 −10
Original line number Diff line number Diff line
@@ -45,7 +45,9 @@ class Node:
        :return: A list of iterables of all the values associated with
            this node and its children.
        """
        raise NotImplementedError("Please Implement this method")
        values = []
        self.append_values(values, selector)
        return values

    def append_values(self, values, selector):
        """Append the values associated with this node and its children.
@@ -313,12 +315,8 @@ class InteriorNode(Node):
                node = node.nodes[element]
            else:
                return []
        return chain.from_iterable(node.values(selector))

    def values(self, selector):
        values = []
        self.append_values(values, selector)
        return values
        return node.values(selector)

    def append_values(self, values, selector):
        for key, node in self.nodes.items():
@@ -336,11 +334,8 @@ class Leaf(Node):
    # The value associated with this leaf.
    value: typing.Any

    def values(self, selector):
        return [[self.value]]

    def append_values(self, values, selector):
        values.append([self.value])
        values.append(self.value)

    def child_nodes(self):
        return []
+21 −0
Original line number Diff line number Diff line
@@ -150,6 +150,27 @@ class TestSignatureToElements(unittest.TestCase):
            str(context.exception))


class TestValues(unittest.TestCase):
    def test_add_then_get(self):
        trie = signature_trie()
        trie.add("La/b/C;->l()", 1)
        trie.add("La/b/C$D;->m()", "A")
        trie.add("La/b/C$D;->n()", {})

        package_a_node = next(iter(trie.child_nodes()))
        self.assertEqual("package", package_a_node.type)
        self.assertEqual("a", package_a_node.selector)

        package_b_node = next(iter(package_a_node.child_nodes()))
        self.assertEqual("package", package_b_node.type)
        self.assertEqual("a/b", package_b_node.selector)

        class_c_node = next(iter(package_b_node.child_nodes()))
        self.assertEqual("class", class_c_node.type)
        self.assertEqual("a/b/C", class_c_node.selector)

        self.assertEqual([1, "A", {}], class_c_node.values(lambda _: True))

class TestGetMatchingRows(unittest.TestCase):
    extractInput = """
Ljava/lang/Character$UnicodeScript;->of(I)Ljava/lang/Character$UnicodeScript;