@@ -103,11 +103,11 @@ public class ServiceClientTestClassComposer {
103103 private static final String GRPC_TESTING_PACKAGE = "com.google.api.gax.grpc.testing" ;
104104 private static final String MOCK_SERVICE_CLASS_NAME_PATTERN = "Mock%s" ;
105105 private static final String MOCK_SERVICE_VAR_NAME_PATTERN = "mock%s" ;
106+ private static final String PAGED_RESPONSE_TYPE_NAME_PATTERN = "%sPagedResponse" ;
106107 private static final String SERVICE_CLIENT_CLASS_NAME_PATTERN = "%sClient" ;
107108 private static final String SERVICE_HELPER_VAR_NAME = "mockServiceHelper" ;
108109 private static final String SERVICE_SETTINGS_CLASS_NAME_PATTERN = "%sSettings" ;
109110 private static final String STUB_SETTINGS_PATTERN = "%sSettings" ;
110- private static final String PAGED_RESPONSE_TYPE_NAME_PATTERN = "%sPagedResponse" ;
111111
112112 private static final ServiceClientTestClassComposer INSTANCE =
113113 new ServiceClientTestClassComposer ();
@@ -424,18 +424,18 @@ private static List<MethodDefinition> createTestMethods(
424424 javaMethods .add (
425425 createRpcTestMethod (
426426 method ,
427+ service ,
427428 Collections .emptyList (),
428429 0 ,
429- service .name (),
430430 classMemberVarExprs ,
431431 resourceNames ,
432432 messageTypes ));
433433 javaMethods .add (
434434 createRpcExceptionTestMethod (
435435 method ,
436+ service ,
436437 Collections .emptyList (),
437438 0 ,
438- service .name (),
439439 classMemberVarExprs ,
440440 resourceNames ,
441441 messageTypes ));
@@ -444,18 +444,18 @@ private static List<MethodDefinition> createTestMethods(
444444 javaMethods .add (
445445 createRpcTestMethod (
446446 method ,
447+ service ,
447448 method .methodSignatures ().get (i ),
448449 i ,
449- service .name (),
450450 classMemberVarExprs ,
451451 resourceNames ,
452452 messageTypes ));
453453 javaMethods .add (
454454 createRpcExceptionTestMethod (
455455 method ,
456+ service ,
456457 method .methodSignatures ().get (i ),
457458 i ,
458- service .name (),
459459 classMemberVarExprs ,
460460 resourceNames ,
461461 messageTypes ));
@@ -467,12 +467,14 @@ private static List<MethodDefinition> createTestMethods(
467467
468468 private static MethodDefinition createRpcTestMethod (
469469 Method method ,
470+ Service service ,
470471 List <MethodArgument > methodSignature ,
471472 int variantIndex ,
472- String serviceName ,
473473 Map <String , VariableExpr > classMemberVarExprs ,
474474 Map <String , ResourceName > resourceNames ,
475475 Map <String , Message > messageTypes ) {
476+ String serviceName = service .name ();
477+
476478 if (!method .stream ().equals (Method .Stream .NONE )) {
477479 return createStreamingRpcTestMethod (
478480 method , serviceName , classMemberVarExprs , resourceNames , messageTypes );
@@ -514,9 +516,17 @@ private static MethodDefinition createRpcTestMethod(
514516 Variable .builder ().setType (methodOutputType ).setName ("expectedResponse" ).build ());
515517 Expr expectedResponseValExpr = null ;
516518 if (method .isPaged ()) {
519+ Message methodOutputMessage = messageTypes .get (method .outputType ().reference ().name ());
520+ Field firstRepeatedField = methodOutputMessage .findAndUnwrapFirstRepeatedField ();
521+ Preconditions .checkNotNull (
522+ firstRepeatedField ,
523+ String .format (
524+ "Expected paged RPC %s to have a repeated field in the response %s but found none" ,
525+ method .name (), methodOutputMessage .name ()));
526+
517527 expectedResponseValExpr =
518528 DefaultValueComposer .createSimplePagedResponse (
519- method .outputType (), responsesElementVarExpr );
529+ method .outputType (), firstRepeatedField . name (), responsesElementVarExpr );
520530 } else {
521531 if (messageTypes .containsKey (methodOutputType .reference ().name ())) {
522532 expectedResponseValExpr =
@@ -619,7 +629,8 @@ private static MethodDefinition createRpcTestMethod(
619629 VariableExpr actualResponseVarExpr =
620630 VariableExpr .withVariable (
621631 Variable .builder ()
622- .setType (methodOutputType )
632+ .setType (
633+ method .isPaged () ? getPagedResponseType (service , method ) : methodOutputType )
623634 .setName (method .isPaged () ? "pagedListResponse" : "actualResponse" )
624635 .build ());
625636 Expr rpcJavaMethodInvocationExpr =
@@ -699,12 +710,21 @@ private static MethodDefinition createRpcTestMethod(
699710 .build ());
700711
701712 // Assert the responses are equivalent.
713+ Message methodOutputMessage = messageTypes .get (method .outputType ().reference ().name ());
714+ Field firstRepeatedField = methodOutputMessage .findAndUnwrapFirstRepeatedField ();
715+ Preconditions .checkNotNull (
716+ firstRepeatedField ,
717+ String .format (
718+ "Expected paged RPC %s to have a repeated field in the response %s but found none" ,
719+ method .name (), methodOutputMessage .name ()));
720+
702721 Expr zeroExpr =
703722 ValueExpr .withValue (PrimitiveValue .builder ().setType (TypeNode .INT ).setValue ("0" ).build ());
704723 Expr expectedPagedResponseExpr =
705724 MethodInvocationExpr .builder ()
706725 .setExprReferenceExpr (expectedResponseVarExpr )
707- .setMethodName ("getResponsesList" )
726+ .setMethodName (
727+ String .format ("get%sList" , JavaStyle .toUpperCamelCase (firstRepeatedField .name ())))
708728 .build ();
709729 expectedPagedResponseExpr =
710730 MethodInvocationExpr .builder ()
@@ -1160,12 +1180,14 @@ private static MethodDefinition createStreamingRpcTestMethod(
11601180
11611181 private static MethodDefinition createRpcExceptionTestMethod (
11621182 Method method ,
1183+ Service service ,
11631184 List <MethodArgument > methodSignature ,
11641185 int variantIndex ,
1165- String serviceName ,
11661186 Map <String , VariableExpr > classMemberVarExprs ,
11671187 Map <String , ResourceName > resourceNames ,
11681188 Map <String , Message > messageTypes ) {
1189+ String serviceName = service .name ();
1190+
11691191 VariableExpr exceptionVarExpr =
11701192 VariableExpr .withVariable (
11711193 Variable .builder ()
@@ -1833,6 +1855,16 @@ private static TypeNode getCallableType(Method protoMethod) {
18331855 ConcreteReference .builder ().setClazz (callableClazz ).setGenerics (generics ).build ());
18341856 }
18351857
1858+ private static TypeNode getPagedResponseType (Service service , Method method ) {
1859+ return TypeNode .withReference (
1860+ VaporReference .builder ()
1861+ .setName (String .format (PAGED_RESPONSE_TYPE_NAME_PATTERN , method .name ()))
1862+ .setPakkage (service .pakkage ())
1863+ .setEnclosingClassName (getClientClassName (service .name ()))
1864+ .setIsStaticImport (true )
1865+ .build ());
1866+ }
1867+
18361868 private static String getCallableMethodName (Method protoMethod ) {
18371869 Preconditions .checkState (
18381870 !protoMethod .stream ().equals (Method .Stream .NONE ),
0 commit comments