def test_accessible_functions_access_level_filter(self): scope = Scope() scope.declare_func(AccessLevel.public, "foo", {}, Int) scope.declare_func(AccessLevel.internal, "bar", {}, Int) scope.declare_func(AccessLevel.private, "baz", {}, Int) self.assertSetEqual( set(scope.accessible_functions(at_least=AccessLevel.public).keys()), {"foo"} ) self.assertSetEqual( set(scope.accessible_functions(at_least=AccessLevel.internal).keys()), {"foo", "bar"} ) self.assertSetEqual( set(scope.accessible_functions(at_least=AccessLevel.private).keys()), {"foo", "bar", "baz"} )
def test_accessible_functions_hides_private_static_methods(self): root = Scope() A = DataType("A", static_methods={ "a": FunctionType(AccessLevel.private, {}, Int), "b": FunctionType(AccessLevel.fileprivate, {}, Int), }) root.add_child(Scope(datatype=A)) self.assertSetEqual({"A.b"}, set(root.accessible_functions().keys()))
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_declared_function_is_accessible(self): scope = Scope() scope.declare_func(AccessLevel.internal, "foo", {"x": Int}, Int) self.assertDictEqual( scope.accessible_functions(), { "foo": FunctionType(AccessLevel.internal, {"x": Int}, Int), } )