예제 #1
0
 def testAnyStrInstanceAgainstAnyStr(self):
   right = self.vm.convert.name_to_value("typing.AnyStr")
   dummy_instance = abstract.Instance(self.vm.convert.tuple_type, self.vm)
   left = abstract.TypeParameterInstance(right, dummy_instance, self.vm)
   for result in self._match_var(left, right):
     self.assertItemsEqual([(name, var.data) for name, var in result.items()],
                           [("AnyStr", [left])])
예제 #2
0
 def test_type_parameter_instance_bad_attribute(self):
   t = abstract.TypeParameter(abstract_utils.T, self._vm)
   t_instance = abstract.TypeParameterInstance(
       t, self._vm.convert.primitive_class_instances[str], self._vm)
   node, var = self._vm.attribute_handler.get_attribute(
       self._vm.root_cfg_node, t_instance, "rumpelstiltskin")
   self.assertIs(node, self._vm.root_cfg_node)
   self.assertIsNone(var)
예제 #3
0
 def test_type_parameter_instance(self):
   t = abstract.TypeParameter(abstract_utils.T, self._vm)
   t_instance = abstract.TypeParameterInstance(
       t, self._vm.convert.primitive_class_instances[str], self._vm)
   node, var = self._vm.attribute_handler.get_attribute(
       self._vm.root_cfg_node, t_instance, "upper")
   self.assertIs(node, self._vm.root_cfg_node)
   attr, = var.data
   self.assertIsInstance(attr, abstract.PyTDFunction)
예제 #4
0
 def test_call_empty_type_parameter_instance(self):
   instance = abstract.Instance(self._vm.convert.list_type, self._vm)
   t = abstract.TypeParameter(abstract_utils.T, self._vm)
   t_instance = abstract.TypeParameterInstance(t, instance, self._vm)
   node, ret = t_instance.call(self._node, t_instance.to_binding(self._node),
                               function.Args(posargs=()))
   self.assertIs(node, self._node)
   retval, = ret.data
   self.assertIs(retval, self._vm.convert.empty)
예제 #5
0
 def test_empty_type_parameter_instance(self):
   t = abstract.TypeParameter(
       abstract_utils.T, self._vm, bound=self._vm.convert.int_type)
   instance = abstract.Instance(self._vm.convert.list_type, self._vm)
   t_instance = abstract.TypeParameterInstance(t, instance, self._vm)
   node, var = self._vm.attribute_handler.get_attribute(
       self._vm.root_cfg_node, t_instance, "real")
   self.assertIs(node, self._vm.root_cfg_node)
   attr, = var.data
   self.assertIs(attr, self._vm.convert.primitive_class_instances[int])
예제 #6
0
 def test_type_parameter_instance_set_attribute(self):
   t = abstract.TypeParameter(abstract_utils.T, self._vm)
   t_instance = abstract.TypeParameterInstance(
       t, self._vm.convert.primitive_class_instances[str], self._vm)
   node = self._vm.attribute_handler.set_attribute(
       self._vm.root_cfg_node, t_instance, "rumpelstiltskin",
       self._vm.new_unsolvable(self._vm.root_cfg_node))
   self.assertIs(node, self._vm.root_cfg_node)
   self.assertEqual(
       str(self._vm.errorlog).strip(),
       "Can't assign attribute 'rumpelstiltskin' on str [not-writable]")
예제 #7
0
 def testCallEmptyTypeParameterInstance(self):
   instance = abstract.Instance(self._vm.convert.list_type, self._vm)
   instance.initialize_type_parameter(
       self._node, abstract.T, self._vm.program.NewVariable())
   t = abstract.TypeParameter(abstract.T, self._vm)
   t_instance = abstract.TypeParameterInstance(t, instance, self._vm)
   node, ret = t_instance.call(self._node, t_instance.to_binding(self._node),
                               abstract.FunctionArgs(posargs=()))
   self.assertIs(node, self._node)
   retval, = ret.data
   self.assertIs(retval, self._vm.convert.empty)
예제 #8
0
 def test_call_type_parameter_instance(self):
   instance = abstract.Instance(self._vm.convert.list_type, self._vm)
   instance.merge_instance_type_parameter(
       self._vm.root_cfg_node, abstract_utils.T,
       self._vm.convert.int_type.to_variable(self._vm.root_cfg_node))
   t = abstract.TypeParameter(abstract_utils.T, self._vm)
   t_instance = abstract.TypeParameterInstance(t, instance, self._vm)
   node, ret = t_instance.call(self._node, t_instance.to_binding(self._node),
                               function.Args(posargs=()))
   self.assertIs(node, self._node)
   retval, = ret.data
   self.assertEqual(retval.cls, self._vm.convert.int_type)
예제 #9
0
 def testCallTypeParameterInstance(self):
   instance = abstract.Instance(self._vm.convert.list_type, self._vm)
   instance.initialize_type_parameter(
       self._node, abstract.T,
       self._vm.convert.int_type.to_variable(self._vm.root_cfg_node))
   t = abstract.TypeParameter(abstract.T, self._vm)
   t_instance = abstract.TypeParameterInstance(t, instance, self._vm)
   node, ret = t_instance.call(self._node, t_instance.to_binding(self._node),
                               abstract.FunctionArgs(posargs=()))
   self.assertIs(node, self._node)
   retval, = ret.data
   self.assertListEqual(retval.cls.data, [self._vm.convert.int_type])
예제 #10
0
 def test_call_type_parameter_instance_with_wrong_args(self):
   instance = abstract.Instance(self._vm.convert.list_type, self._vm)
   instance.merge_instance_type_parameter(
       self._vm.root_cfg_node, abstract_utils.T,
       self._vm.convert.int_type.to_variable(self._vm.root_cfg_node))
   t = abstract.TypeParameter(abstract_utils.T, self._vm)
   t_instance = abstract.TypeParameterInstance(t, instance, self._vm)
   posargs = (self._vm.new_unsolvable(self._node),) * 3
   node, ret = t_instance.call(self._node, t_instance.to_binding(self._node),
                               function.Args(posargs=posargs))
   self.assertIs(node, self._node)
   self.assertTrue(ret.bindings)
   error, = self._vm.errorlog
   self.assertEqual(error.name, "wrong-arg-count")
예제 #11
0
 def testCallTypeParameterInstanceWithWrongArgs(self):
   instance = abstract.Instance(self._vm.convert.list_type, self._vm)
   instance.initialize_type_parameter(
       self._node, abstract.T,
       self._vm.convert.int_type.to_variable(self._vm.root_cfg_node))
   t = abstract.TypeParameter(abstract.T, self._vm)
   t_instance = abstract.TypeParameterInstance(t, instance, self._vm)
   posargs = (self._vm.convert.create_new_unsolvable(self._node),) * 3
   node, ret = t_instance.call(self._node, t_instance.to_binding(self._node),
                               abstract.FunctionArgs(posargs=posargs))
   self.assertIs(node, self._node)
   self.assertTrue(ret.bindings)
   error, = self._vm.errorlog
   self.assertEqual(error.name, "wrong-arg-count")