def test_enums_do_not_have_message_fields(self, enum_mod): node = extract_node(""" from {} import Variable Variable.ParseFromString("blah") """.format(enum_mod)) msg = make_message(node.func, 'Variable', 'ParseFromString') self.assert_adds_messages(node, msg)
def test_issue16_missing_toplevel_enum(self, nested_enum_mod): node = extract_node(""" import {} as sut sut.UNO """.format(nested_enum_mod)) msg = make_message(node, nested_enum_mod, 'UNO') self.assert_adds_messages(node, msg)
def test_messages_do_not_have_enum_fields(self, nested_enum_mod): node = extract_node(""" from {} import Message Message.Value("ONE") """.format(nested_enum_mod)) msg = make_message(node.func, 'Message', 'Value') self.assert_adds_messages(node, msg)
def test_nested_message_with_unrelated_enum_does_not_warn( self, nested_plus_enum_mod): self.assert_no_messages( extract_node(""" from {} import Outer inner = Outer.Inner(inner_field='foo') #@ """.format(nested_plus_enum_mod)))
def test_star_import_enum_should_warn(self, enum_mod): node = extract_node(""" from {} import * Variable.should_warn #@ """.format(enum_mod)) msg = make_message(node, enum_mod + '.Variable', 'should_warn') self.assert_adds_messages(node, msg)
def test_missing_value_uniferable_no_error(self, enum_mod): node = extract_node(""" from {} import Variable a = get_external() Variable.Value(a) """.format(enum_mod)) self.assert_no_messages(node)
def test_imports_of_wellknown_types(self, wkt_mod): node = extract_node(""" from {} import UsesTimestamp msg = UsesTimestamp() msg.ts.GetCurrentTime() """.format(wkt_mod)) self.assert_no_messages(node)
def test_issue21_nested_enum_annassign(self, nested_enum_mod): self.assert_no_messages( extract_node(""" import {} as sut def fun(type_: sut.Message.Inner): pass """.format(nested_enum_mod)))
def test_name_from_uninferable_no_warn(self, enum_mod): node = extract_node(""" from {} import Variable b = get_external_value() Variable.Name(b) """.format(enum_mod)) self.assert_no_messages(node)
def test_issue16_nested_enum_definition_warns(self, nested_enum_mod): node = extract_node(""" import {} as sut sut.Message.should_warn """.format(nested_enum_mod)) msg = make_message(node, nested_enum_mod + '.Message', 'should_warn') self.assert_adds_messages(node, msg)
def test_fixme_issue16_nested_enum_definition_no_errors( self, nested_enum_mod): self.assert_no_messages( extract_node(""" import {} as sut sut.Message.UNO """.format(nested_enum_mod)))
def test_issue21_missing_field_on_nested_enum(self, nested_enum_mod): node = extract_node(""" import {} as sut sut.Message.Inner.NOPE = 123 """.format(nested_enum_mod)) msg = make_message(node.targets[0], 'Inner', 'NOPE') self.assert_adds_messages(node, msg)
def test_issue16_nested_enum_definition_direct_reference_no_errors( self, nested_enum_mod): self.assert_no_messages( extract_node(""" import {mod} as sut {mod}.Message.Inner.UNO """.format(mod=nested_enum_mod)))
def test_nested_enum_dict(self): outer = extract_node(""" from fixture.innerclass_dict_pb2 import OuterClass enum = OuterClass.InnerEnum.ENUM_1 outer = OuterClass(enum=enum) """) with self.assertNoMessages(): self.walk(outer.root())
def test_reexported_protobuf_message_definition_warns(self, outer_mod): node = extract_node(""" import outer t = outer.Test() t.should_warn = 123 #@ """) msg = make_message(node, 'outer.Test', 'should_warn') self.assert_adds_messages(node, msg)
def test_issue16_package_missing_toplevel_enum(self, package_nested_enum_mod): node = extract_node(""" import {mod} {mod}.UNO """.format(mod=nested_enum_mod)) msg = make_message(node, nested_enum_mod, 'UNO') self.assert_adds_messages(node, msg)
def test_nested_enum_dict(self, innerclass_dict_mod): outer = extract_node(""" from {} import OuterClass enum = OuterClass.InnerEnum.ENUM_1 outer = OuterClass(enum=enum) """.format(innerclass_dict_mod)) with self.assertNoMessages(): self.walk(outer.root())
def test_issue16_package_nested_enum_definition_warns( self, package_nested_enum_mod): node = extract_node(""" import {mod} {mod}.Message.should_warn """.format(mod=package_nested_enum_mod)) msg = make_message(node, 'Message', 'should_warn') self.assert_adds_messages(node, msg)
def test_issue10_imported_message_warns(self, parent_mod): node = extract_node(""" from {} import Parent p = Parent() p.child.should_warn = 123 #@ """.format(parent_mod)) msg = make_message(node.targets[0], 'Child', 'should_warn') self.assert_adds_messages(node, msg)
def test_looks_like_enum_value_should_not_warn(self, enum_mod): node = extract_node(""" class Variable(object): def Value(*args): pass Variable.Value('should_not_warn', 'even_with_extra_args') """.format(enum_mod)) self.assert_no_messages(node)
def test_import_enum_missing_attribute_by_value_warns(self, enum_mod): node = extract_node(""" from {} import Variable Variable.Value('should_warn') #@ """.format(enum_mod)) msg = pylint.testutils.Message('protobuf-enum-value', node=node, args=('should_warn', 'Variable')) self.assert_adds_messages(node, msg)
def test_names_are_not_values(self, enum_mod): node = extract_node(""" from {} import Variable Variable.Name('CONTINUOUS') """.format(enum_mod)) msg = pylint.testutils.Message('protobuf-enum-value', node=node, args=('CONTINUOUS', 'Variable')) self.assert_adds_messages(node, msg)
def test_name_from_invalid_value_warns(self, enum_mod): node = extract_node(""" from {} import Variable Variable.Name(123) """.format(enum_mod)) msg = pylint.testutils.Message('protobuf-enum-value', node=node, args=(123, 'Variable')) self.assert_adds_messages(node, msg)
def test_missing_value_on_nested_enum_warns(self, nested_enum_mod): node = extract_node(""" from {} import Message Message.Inner.Value('should_warn') """.format(nested_enum_mod)) msg = pylint.testutils.Message('protobuf-enum-value', node=node, args=('should_warn', 'Inner')) self.assert_adds_messages(node, msg)
def test_import_enum_missing_attributes_warns(self, enum_mod): node = extract_node(""" from {} import Variable print( Variable.should_warn #@ ) """.format(enum_mod)) msg = make_message(node, enum_mod + '.Variable', 'should_warn') self.assert_adds_messages(node, msg)
def test_issue18_renamed_from_import_no_assertion_error(self, parent_mod): node = extract_node(""" import {0} import {0} as foo p = {0}.Parent() p.should_warn = 123 """.format(parent_mod)) msg = make_message(node.targets[0], 'Parent', 'should_warn') self.assert_adds_messages(node, msg)
def test_import_enum_attributes_no_errors(self, enum_mod): self.assert_no_messages( extract_node(""" from {} import Variable print(Variable.DISCRETE) """.format(enum_mod)))
def test_issue16_toplevel_enum(self, nested_enum_mod): self.assert_no_messages( extract_node(""" import {mod} {mod}.ONE """.format(mod=nested_enum_mod)))
def test_import_enum_values_no_errors(self, enum_mod): self.assert_no_messages( extract_node(""" from {} import DISCRETE print(DISCRETE) """.format(enum_mod)))
def test_issue16_nested_enum_definition_no_errors(self, nested_enum_mod): self.assert_no_messages( extract_node(""" import {mod} {mod}.Message.UNO """.format(mod=nested_enum_mod)))