Ejemplo n.º 1
0
 def test_callable_with_args(self):
   ast = self._load_ast("a", """
     from typing import Callable
     x = ...  # type: Callable[[int, bool], str]
   """)
   x = ast.Lookup("a.x").type
   cls = self._vm.convert.constant_to_value(x, {}, self._vm.root_cfg_node)
   instance = self._vm.convert.constant_to_value(
       abstract_utils.AsInstance(x), {}, self._vm.root_cfg_node)
   self.assertIsInstance(cls, abstract.CallableClass)
   six.assertCountEqual(
       self,
       cls.formal_type_parameters.items(),
       [(0, self._vm.convert.int_type),
        (1, self._vm.convert.primitive_classes[bool]),
        (abstract_utils.ARGS, abstract.Union(
            [cls.formal_type_parameters[0], cls.formal_type_parameters[1]],
            self._vm)),
        (abstract_utils.RET, self._vm.convert.str_type)])
   self.assertIsInstance(instance, abstract.Instance)
   self.assertEqual(instance.cls, cls)
   six.assertCountEqual(
       self,
       [(name, set(var.data))
        for name, var in instance.instance_type_parameters.items()],
       [(abstract_utils.full_type_name(instance, abstract_utils.ARGS),
         {self._vm.convert.primitive_class_instances[int],
          self._vm.convert.primitive_class_instances[bool]}),
        (abstract_utils.full_type_name(instance, abstract_utils.RET),
         {self._vm.convert.primitive_class_instances[str]})])
Ejemplo n.º 2
0
 def test_plain_callable(self):
   ast = self._load_ast("a", """
     from typing import Callable
     x = ...  # type: Callable[..., int]
   """)
   x = ast.Lookup("a.x").type
   cls = self._vm.convert.constant_to_value(x, {}, self._vm.root_cfg_node)
   instance = self._vm.convert.constant_to_value(
       abstract_utils.AsInstance(x), {}, self._vm.root_cfg_node)
   self.assertIsInstance(cls, abstract.ParameterizedClass)
   six.assertCountEqual(self, cls.formal_type_parameters.items(),
                        [(abstract_utils.ARGS, self._vm.convert.unsolvable),
                         (abstract_utils.RET, self._vm.convert.int_type)])
   self.assertIsInstance(instance, abstract.Instance)
   self.assertEqual(instance.cls, cls.base_cls)
   six.assertCountEqual(
       self,
       [(name, var.data)
        for name, var in instance.instance_type_parameters.items()],
       [(abstract_utils.full_type_name(instance, abstract_utils.ARGS),
         [self._vm.convert.unsolvable]),
        (abstract_utils.full_type_name(instance, abstract_utils.RET),
         [self._vm.convert.primitive_class_instances[int]])])