3 SÉLjž9ã @sædZdZy ddlZWnek r0ddlZYnXddlmZddlmZddlm Z ddlm Z ddlm Z dd lm Z dd lm Z dd lmZdd lmZdd lmZdZGdd„dejƒZGdd„dejƒZedkrâejƒdS)zàUnittest that directly tests the output of the pure-Python protocol compiler. See //google/protobuf/internal/reflection_test.py for a test which further ensures that we can use Python protocol message objects as we expect. z#robinson@google.com (Will Robinson)éN)Útest_bad_identifiers_pb2)Úunittest_custom_options_pb2)Úunittest_import_pb2)Úunittest_import_public_pb2)Úunittest_mset_pb2)Úunittest_mset_wire_format_pb2)Ú unittest_no_generic_services_pb2)Ú unittest_pb2)Úservice)Úsymbol_databasei c@s¼eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-S).Ú GeneratorTestcCs(d}tj}|j|jj|jj|jƒdS)NÚoptional_nested_message)r Ú TestAllTypesÚ assertEqualÚ NestedMessageÚ DESCRIPTORÚfields_by_nameZ message_type)ÚselfÚ field_nameZ proto_type©rú$/usr/lib/python3.6/generator_test.pyÚtestNestedMessageDescriptor@s z)GeneratorTest.testNestedMessageDescriptorcCs�|jdtjƒ|jdtjƒ|jdtjƒtjƒ}|jd|jƒ|jdtjjƒ|jd|jƒ|jdtjjƒ|jd|jƒ|jdtjjƒdS)Néééééé) rr Z FOREIGN_FOOZ FOREIGN_BARZ FOREIGN_BAZrÚFOOZBARZBAZ)rÚprotorrrÚ testEnumsGszGeneratorTest.testEnumscsÎtjƒ}dd„‰‡fdd„}|j||jƒƒ|j|jdkƒ|j||jƒƒ|j|jdkƒ|jˆ|jƒƒ|j||jƒƒ|j|jdkƒ|j||jƒƒ|j|jdkƒ|jˆ|jƒƒ|j d|j ƒdS)NcSs||kS)Nr)ÚvalrrrÚisnan\sz5GeneratorTest.testExtremeDefaultValues..isnancsˆ|ƒ oˆ|dƒS)Nrr)r!)r"rrÚisinf_sz5GeneratorTest.testExtremeDefaultValues..isinfrz? ? ?? ?? ??? ??/ ??-) r ZTestExtremeDefaultValuesÚ assertTrueZ inf_doubleZneg_inf_doubleZ nan_doubleZ inf_floatZ neg_inf_floatZ nan_floatrZ cpp_trigraph)rÚmessager#r)r"rÚtestExtremeDefaultValuesWs z&GeneratorTest.testExtremeDefaultValuescs>tjj}dddddœ‰t‡fdd„|jDƒƒ}|jˆ|ƒdS)NFT)Zoptional_int32Zrepeated_int32r Z default_int32cs"g|]}|jˆkr|j|jf‘qSr)ÚnameZhas_default_value)Ú.0Úf)Úexpected_has_default_by_namerrú {sz6GeneratorTest.testHasDefaultValues..)r rrÚdictÚfieldsr)rÚdescZhas_default_by_namer)r*rÚtestHasDefaultValuesps  z"GeneratorTest.testHasDefaultValuescCs.|jtjjtjjƒ|jtjjjtjjƒdS)N)rr Úoptional_int32_extensionÚcontaining_typeÚTestAllExtensionsrÚ TestRequiredÚsingle)rrrrÚ'testContainingTypeBehaviorForExtensions€s   z5GeneratorTest.testContainingTypeBehaviorForExtensionscCs*|jtjjdƒ|jtjjjtjjƒdS)N)rr r0Zextension_scoper3r4r)rrrrÚtestExtensionScope†s  z GeneratorTest.testExtensionScopecCsB|jtjjƒ|jtjjjƒtjj}|jd}|j|j ƒdS)NÚa)r$r r0Z is_extensionr3r4rr)rZmessage_descriptorZnon_extension_descriptorrrrÚtestIsExtensionŒs  zGeneratorTest.testIsExtensioncCstjƒ}|j|jjƒjƒdS)N)rZTestMessageSetr$rÚ GetOptionsZmessage_set_wire_format)rrrrrÚ testOptions”szGeneratorTest.testOptionscCs*tjƒ}|jjdjƒ}|j|dk ƒdS)NZAnEnum)rZTestMessageWithCustomOptionsrÚenum_types_by_namer9r$)rrZ enum_optionsrrrÚtestMessageWithCustomOptions˜sz*GeneratorTest.testMessageWithCustomOptionscCs\|jttjjjƒttjjjtjjjtjjjgƒƒ|jtj jjgƒ|jtjjjjgƒdS)N) rÚsetr rrZ nested_typesrÚ OptionalGroupÚ RepeatedGroupÚTestEmptyMessage)rrrrÚtestNestedTypesŸs zGeneratorTest.testNestedTypescCst|jtjjjdkƒ|jtjjjdkƒ|jtjjjjtjjƒ|jtjjjjtjjƒ|jtjjjjtjjƒdS)N) r$r r@rr1rrrr?)rrrrÚtestContainingType«s     z GeneratorTest.testContainingTypecCs*|jtjjdkƒ|jtjjtjjƒdS)N)r$r Ú _FOREIGNENUMr1rÚ_TESTALLTYPES_NESTEDENUMrr)rrrrÚ"testContainingTypeInEnumDescriptorºs z0GeneratorTest.testContainingTypeInEnumDescriptorcCs||jtjjjjdƒtjjj}|j|jjdƒ|jtjjjjdƒ|jtj jjdƒ|jtj jjdƒ|jtj jjdƒdS)NÚprotobuf_unittestZprotobuf_unittest_import) rr rrÚfileÚpackagerrZ ImportMessagerCrDZ _IMPORTENUM)rr.rrrÚ testPackage¿s    zGeneratorTest.testPackagecCsJ|jtjjjgƒ|jtjjjdtfgƒ|jtjjjdddtfgƒdS) Nré*é+é/é”i)rJrK)rLrM)rr rrZextension_rangesr2Ú MAX_EXTENSIONZTestMultipleExtensionRanges)rrrrÚtestExtensionRangeÒs z GeneratorTest.testExtensionRangecCsr|jtjjdƒ|jtjjdƒ|jtjjdkƒ|jtjjtjgƒ|jtjjt jgƒ|jtjj t jgƒdS)Nzgoogle/protobuf/unittest.protorF) rr rr'rHÚ assertFalseZ serialized_pbZ dependenciesrrZpublic_dependencies)rrrrÚtestFileDescriptorÜs      z GeneratorTest.testFileDescriptorcCsR|jttdƒƒ|jttdƒƒ|jttdƒƒttdƒrN|jttjtjƒƒdS)NZ TestMessagerZtest_extensionÚ TestService)r$ÚhasattrrrPÚ issubclassrRr ZService)rrrrÚtestNoGenericServicesçs   z#GeneratorTest.testNoGenericServicescCs6tj}|jtj|jtjjƒ|jtjj|jkƒdS)N)r rrZ _TESTALLTYPESZmessage_types_by_namer'rPZ_TESTALLTYPES_NESTEDMESSAGE)rÚ file_typerrrÚtestMessageTypesByNameòsz$GeneratorTest.testMessageTypesByNamecCs"tj}|jtj|jtjjƒdS)N)r rrrCr;r')rrVrrrÚtestEnumTypesByNameþsz!GeneratorTest.testEnumTypesByNamecCs"tj}|jtj|jtjjƒdS)N)r rrZmy_extension_stringZextensions_by_namer')rrVrrrÚtestExtensionsByNamesz"GeneratorTest.testExtensionsByNamecCsDtjƒ}|jd|jjƒtjƒ}|jd|jƒ|jtjtjkƒdS)Nr) r rrZoptional_public_import_messageÚerZPublicImportMessager$r)rZall_type_protoZpublic_import_protorrrÚtestPublicImports s zGeneratorTest.testPublicImportscCs\tjƒ}|j|jtjdƒ|j|jtjdƒ|j|jtjdƒ|j|jtjdƒdS)NZfooZbarZbazZqux)rZTestBadIdentifiersrZ Extensionsr%Z descriptorZ reflectionr )rr%rrrÚtestBadIdentifierssz GeneratorTest.testBadIdentifierscCsætjj}|jdt|jƒƒ|jd|jdjƒ|jd|jdjƒ|j||jdj ƒ|j|jd|j dƒt ddddgƒ}|j|t dd „|jdj Dƒƒƒx@|j jƒD]2\}}||krÒ|j|jd|jƒq¬|j|jƒq¬WdS) NrZ oneof_fieldrZ oneof_uint32Zoneof_nested_messageZ oneof_stringZ oneof_bytescSsg|] }|j‘qSr)r')r(Zfieldrrrr+-sz+GeneratorTest.testOneof..)r rrrÚlenZoneofsr'ÚindexZassertIsr1Zoneofs_by_namer=r-rÚitemsZcontaining_oneofZ assertIsNone)rr.Z nested_namesrZ field_descrrrÚ testOneof"s zGeneratorTest.testOneofN)Ú__name__Ú __module__Ú __qualname__rr r&r/r5r6r8r:r<rArBrErIrOrQrUrWrXrYr[r\r`rrrrr >s,       r c@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚSymbolDatabaseRegistrationTestz?Checks that messages, enums and files are correctly registered.c CsŽ|jtjtjƒjdƒƒ|jtjjtjƒjdƒƒ|jtƒ�tjƒjdƒWdQRX|jtjj tjƒjdƒƒ|jtjj tjƒjdƒƒdS)Nzprotobuf_unittest.TestAllTypesz,protobuf_unittest.TestAllTypes.NestedMessagezprotobuf_unittest.NestedMessagez,protobuf_unittest.TestAllTypes.OptionalGroupz,protobuf_unittest.TestAllTypes.RepeatedGroup) rr rr ÚDefaultZ GetSymbolrZ assertRaisesÚKeyErrorr>r?)rrrrÚ testGetSymbol8s"  z,SymbolDatabaseRegistrationTest.testGetSymbolcCs8|jdtjƒjjdƒjƒ|jdtjƒjjdƒjƒdS)Nzprotobuf_unittest.ForeignEnumz)protobuf_unittest.TestAllTypes.NestedEnum)rr reÚpoolZFindEnumTypeByNameZ full_name)rrrrr Ks   z(SymbolDatabaseRegistrationTest.testEnumscCs|jdtjƒjjdƒjƒdS)Nzgoogle/protobuf/unittest.proto)rr rerhZFindFileByNamer')rrrrÚtestFindFileByNameUs z1SymbolDatabaseRegistrationTest.testFindFileByNameN)rarbrcÚ__doc__rgr rirrrrrd5s rdÚ__main__)rjÚ __author__Z unittest2ZunittestÚ ImportErrorZgoogle.protobuf.internalrZgoogle.protobufrrrrrrr r r rNZTestCaser rdraÚmainrrrrÚ's*           x&