1414
1515package com .google .api .generator .gapic .protoparser ;
1616
17+ import static com .google .common .truth .Truth .assertThat ;
1718import static org .junit .Assert .assertEquals ;
19+ import static org .junit .Assert .assertThrows ;
1820
1921import com .google .api .generator .engine .ast .Reference ;
22+ import com .google .api .generator .gapic .model .LongrunningOperation ;
23+ import com .google .api .generator .gapic .model .Message ;
24+ import com .google .cloud .location .LocationsProto ;
25+ import com .google .protobuf .DescriptorProtos ;
2026import com .google .protobuf .Descriptors .Descriptor ;
2127import com .google .protobuf .Descriptors .FileDescriptor ;
2228import com .google .protobuf .Descriptors .MethodDescriptor ;
2329import com .google .protobuf .Descriptors .ServiceDescriptor ;
2430import com .google .showcase .v1beta1 .EchoOuterClass ;
31+ import com .google .test .collisions .CollisionsOuterClass ;
2532import com .google .testgapic .v1beta1 .NestedMessageProto ;
33+ import java .util .Map ;
2634import org .junit .Test ;
2735
2836public class TypeParserTest {
2937 // TODO(miraleung): Backfill with more tests (e.g. field, message, methods) for Parser.java.
38+
39+ private static final FileDescriptor COLLISIONS_FILE_DESCRIPTOR =
40+ CollisionsOuterClass .getDescriptor ();
41+ private static final FileDescriptor DESCRIPTOR_PROTOS_FILE_DESCRIPTOR =
42+ DescriptorProtos .getDescriptor ();
43+ private static final FileDescriptor LOCATION_PROTO_FILE_DESCRIPTOR =
44+ LocationsProto .getDescriptor ();
45+ private static final ServiceDescriptor COLLISIONS_SERVICE =
46+ COLLISIONS_FILE_DESCRIPTOR .getServices ().get (0 );
47+
3048 @ Test
3149 public void parseMessageType_basic () {
3250 FileDescriptor echoFileDescriptor = EchoOuterClass .getDescriptor ();
@@ -51,4 +69,73 @@ public void parseMessageType_nested() {
5169 Reference reference = TypeParser .parseMessageReference (messageDescriptor );
5270 assertEquals ("com.google.testgapic.v1beta1.Outer.Middle.Inner" , reference .fullName ());
5371 }
72+
73+ @ Test
74+ public void parseLroResponseMetadataType_shortName_shouldMatchSamePackage () {
75+ Map <String , Message > messageTypes = Parser .parseMessages (COLLISIONS_FILE_DESCRIPTOR );
76+ messageTypes .putAll (Parser .parseMessages (DESCRIPTOR_PROTOS_FILE_DESCRIPTOR ));
77+ messageTypes .putAll (Parser .parseMessages (LOCATION_PROTO_FILE_DESCRIPTOR ));
78+ MethodDescriptor shouldUseSamePackageTypesLro = COLLISIONS_SERVICE .getMethods ().get (0 );
79+
80+ assertEquals (COLLISIONS_SERVICE .getName (), "Collisions" );
81+ assertThat (messageTypes )
82+ .containsKey ("com.google.protobuf.DescriptorProtos.GeneratedCodeInfo.Annotation" );
83+ assertThat (messageTypes )
84+ .containsKey ("com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location" );
85+ assertThat (messageTypes ).containsKey ("com.google.cloud.location.Location" );
86+
87+ LongrunningOperation testLro =
88+ Parser .parseLro (
89+ TypeParser .getPackage (COLLISIONS_FILE_DESCRIPTOR ),
90+ shouldUseSamePackageTypesLro ,
91+ messageTypes );
92+
93+ assertThat (testLro .responseType ().reference ().fullName ())
94+ .isEqualTo ("com.google.test.collisions.Annotation" );
95+ assertThat (testLro .metadataType ().reference ().fullName ())
96+ .isEqualTo ("com.google.test.collisions.Location" );
97+ }
98+
99+ @ Test
100+ public void parseLroResponseMetadataType_shortName_shouldNotMatch () {
101+ Map <String , Message > messageTypes = Parser .parseMessages (COLLISIONS_FILE_DESCRIPTOR );
102+ messageTypes .putAll (Parser .parseMessages (DESCRIPTOR_PROTOS_FILE_DESCRIPTOR ));
103+ MethodDescriptor shortNameMatchShouldThrowLro = COLLISIONS_SERVICE .getMethods ().get (1 );
104+
105+ assertEquals (COLLISIONS_SERVICE .getName (), "Collisions" );
106+ assertThat (messageTypes )
107+ .containsKey ("com.google.protobuf.DescriptorProtos.ExtensionRangeOptions.Declaration" );
108+
109+ assertThrows (
110+ NullPointerException .class ,
111+ () ->
112+ Parser .parseLro (
113+ TypeParser .getPackage (COLLISIONS_FILE_DESCRIPTOR ),
114+ shortNameMatchShouldThrowLro ,
115+ messageTypes ));
116+ }
117+
118+ @ Test
119+ public void parseLroResponseMetadataType_shortName_withFullyQualifiedCollision () {
120+ Map <String , Message > messageTypes = Parser .parseMessages (COLLISIONS_FILE_DESCRIPTOR );
121+ messageTypes .putAll (Parser .parseMessages (DESCRIPTOR_PROTOS_FILE_DESCRIPTOR ));
122+ messageTypes .putAll (Parser .parseMessages (LOCATION_PROTO_FILE_DESCRIPTOR ));
123+ MethodDescriptor fullNameForDifferentPackageLro = COLLISIONS_SERVICE .getMethods ().get (2 );
124+
125+ assertEquals (COLLISIONS_SERVICE .getName (), "Collisions" );
126+ assertThat (messageTypes ).containsKey ("com.google.cloud.location.Location" );
127+ assertThat (messageTypes )
128+ .containsKey ("com.google.protobuf.DescriptorProtos.SourceCodeInfo.Location" );
129+
130+ LongrunningOperation testLro =
131+ Parser .parseLro (
132+ TypeParser .getPackage (COLLISIONS_FILE_DESCRIPTOR ),
133+ fullNameForDifferentPackageLro ,
134+ messageTypes );
135+
136+ assertThat (testLro .responseType ().reference ().fullName ())
137+ .isEqualTo ("com.google.cloud.location.Location" );
138+ assertThat (testLro .metadataType ().reference ().fullName ())
139+ .isEqualTo ("com.google.test.collisions.Location" );
140+ }
54141}
0 commit comments