コード例 #1
0
 def test_get_enum_expression_with_generics(self):
     generictype = DataType("GT")
     A = EnumType("A", generic_types={generictype: None})
     A.add_case("a", [generictype])
     concretetype = DataType("CT")
     concretetype.newvalue = unittest.mock.MagicMock(
         return_value="concrete")
     self.assertEqual(
         A.specialize(GT=concretetype).newvalue(), "A<CT>.a(concrete)")
コード例 #2
0
 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})
コード例 #3
0
 def test_failable_initializer(self):
     A = EnumType("A")
     A.add_case("b", [])
     tree = SemanticParseTree(statement, [
         SemanticParseTree(EnumDeclaration(), [
             "enum ",
             Enum(), " {",
             EOL(),
             SemanticParseTree(case_statements, ["case ", Case()]),
             EOL(), "}"
         ]),
         Expression(A)
     ])
     tree.annotate()
     failable_initializer(tree)
     self.assertEqual(
         "enum A {\n\tinit?() { self = A.b }\n\n\tcase b\n}.init()!",
         tree.string())
コード例 #4
0
 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})
コード例 #5
0
 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}
     )
コード例 #6
0
 def test_get_enum_expression_with_too_few_generics_throws(self):
     generictype = DataType("GT")
     A = EnumType("A", generic_types={generictype: None})
     A.add_case("a", [generictype])
     with self.assertRaises(AssertionError):
         A.newvalue()
コード例 #7
0
 def test_get_enum_expression_with_associated_value(self):
     A = EnumType("A")
     av = DataType("AV")
     av.newvalue = unittest.mock.MagicMock(return_value="3")
     A.add_case("a", [av])
     self.assertEqual(A.newvalue(), "A.a(3)")
コード例 #8
0
 def test_get_enum_expression_with_inferred_type(self):
     A = EnumType("A")
     A.add_case("a", [])
     self.assertEqual(A.newvalue(type_inferred=True), ".a")
コード例 #9
0
 def test_get_enum_expression(self):
     A = EnumType("A")
     A.add_case("a", [])
     self.assertEqual(A.newvalue(), "A.a")
コード例 #10
0
 def test_build_enum(self):
     A = EnumType("A")
     A.add_case("a", [])
     A.add_case("b", [])
     A.add_case("c", [])
     self.assertEqual(len(A.cases), 3)
コード例 #11
0
 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})