14
14
15
15
package com .google .api .generator .gapic .protoparser ;
16
16
17
+ import static com .google .common .truth .Truth .assertThat ;
17
18
import static org .junit .Assert .assertEquals ;
19
+ import static org .junit .Assert .assertThrows ;
18
20
19
21
import 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 ;
20
26
import com .google .protobuf .Descriptors .Descriptor ;
21
27
import com .google .protobuf .Descriptors .FileDescriptor ;
22
28
import com .google .protobuf .Descriptors .MethodDescriptor ;
23
29
import com .google .protobuf .Descriptors .ServiceDescriptor ;
24
30
import com .google .showcase .v1beta1 .EchoOuterClass ;
31
+ import com .google .test .collisions .CollisionsOuterClass ;
25
32
import com .google .testgapic .v1beta1 .NestedMessageProto ;
33
+ import java .util .Map ;
26
34
import org .junit .Test ;
27
35
28
36
public class TypeParserTest {
29
37
// 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
+
30
48
@ Test
31
49
public void parseMessageType_basic () {
32
50
FileDescriptor echoFileDescriptor = EchoOuterClass .getDescriptor ();
@@ -51,4 +69,73 @@ public void parseMessageType_nested() {
51
69
Reference reference = TypeParser .parseMessageReference (messageDescriptor );
52
70
assertEquals ("com.google.testgapic.v1beta1.Outer.Middle.Inner" , reference .fullName ());
53
71
}
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
+ }
54
141
}
0 commit comments