def test_deeply_nested_type_is_accessible(self): A = EnumType("A") scope = Scope() scope.add_child(Scope()) scope.children[0].add_child(Scope()) scope.children[0].children[0].add_child(Scope()) scope.children[0].children[0].children[0].add_child(Scope(datatype=A)) self.assertSetEqual(set(scope.accessible_types()), {A})
def test_importing_standard_library_exposes_expected_values(self): scope = Scope() scope.import_standard_library() self.assertSetEqual(set(scope.accessible_types()), {Bool, Int, Optional}) self.assertSetEqual( set(scope.accessible_functions().keys()), {"&+", "&*", ">", "=="}, ) self.assertSetEqual(set(scope.accessible_variables()), set())
def test_enclosing_sibling_type_is_accessible(self): A = EnumType("A") grandparent = Scope() parent = Scope() grandparent.add_child(parent) uncle = Scope(datatype=A) grandparent.add_child(uncle) child = Scope() parent.add_child(child) self.assertSetEqual(set(child.accessible_types()), {A})
def test_accessible_types_access_level_filter(self): A = EnumType("A", access=AccessLevel.public) B = EnumType("B", access=AccessLevel.internal) C = EnumType("C", access=AccessLevel.fileprivate) root = Scope() root.add_child(Scope(None, A)) root.add_child(Scope(None, B)) root.add_child(Scope(None, C)) self.assertSetEqual( set(root.accessible_types(at_least=AccessLevel.fileprivate)), {A, B, C} ) self.assertSetEqual( set(root.accessible_types(at_least=AccessLevel.internal)), {A, B} ) self.assertSetEqual( set(root.accessible_types(at_least=AccessLevel.public)), {A} )
def test_accessible_types_include_self_filter(self): A = EnumType("A") root = Scope(datatype=A) self.assertSetEqual(set(root.accessible_types()), set()) self.assertSetEqual(set(root.accessible_types(include_self=False)), set()) self.assertSetEqual(set(root.accessible_types(include_self=True)), {A})