Skip to content

Commit

Permalink
[ggj][codegen][test] fix: space out codegen in ServiceClientTest (#379)
Browse files Browse the repository at this point in the history
* fix: refactor requestBuilder into separate method in ServiceClientClassComposer

* feat: add EmptyLineStatement

* fix: space out lines in ServiceStubSettings

* fix: space out codegen in GrpcServiceStub

* fix: privately-scoped vars in ServiceClientTest codegen

* fix: space out codegen in ServiceClientTest
  • Loading branch information
miraleung committed Oct 10, 2020
1 parent 46ad436 commit 0bc35df
Show file tree
Hide file tree
Showing 2 changed files with 201 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import com.google.api.generator.engine.ast.ClassDefinition;
import com.google.api.generator.engine.ast.CommentStatement;
import com.google.api.generator.engine.ast.ConcreteReference;
import com.google.api.generator.engine.ast.EmptyLineStatement;
import com.google.api.generator.engine.ast.EnumRefExpr;
import com.google.api.generator.engine.ast.Expr;
import com.google.api.generator.engine.ast.ExprStatement;
Expand Down Expand Up @@ -94,6 +95,8 @@

// TODO(miraleung): Refactor classComposer.
public class ServiceClientTestClassComposer {
private static final Statement EMPTY_LINE_STATEMENT = EmptyLineStatement.create();

private static final String CHANNEL_PROVIDER_VAR_NAME = "channelProvider";
private static final String CLASS_NAME_PATTERN = "%sClientTest";
private static final String CLIENT_VAR_NAME = "client";
Expand Down Expand Up @@ -565,7 +568,11 @@ private static MethodDefinition createRpcTestMethod(
.setArguments(expectedResponseVarExpr)
.build());
}
// TODO(miraleung): Empty line here.
List<Statement> methodStatements = new ArrayList<>();
methodStatements.addAll(
methodExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
methodExprs.clear();
methodStatements.add(EMPTY_LINE_STATEMENT);

// Construct the request or method arguments.
boolean isRequestArg = methodSignature.isEmpty();
Expand Down Expand Up @@ -602,7 +609,10 @@ private static MethodDefinition createRpcTestMethod(
.build());
}
}
// TODO(miraleung): Empty line here.
methodStatements.addAll(
methodExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
methodExprs.clear();
methodStatements.add(EMPTY_LINE_STATEMENT);

// Call the RPC Java method.
VariableExpr actualResponseVarExpr =
Expand Down Expand Up @@ -658,11 +668,19 @@ private static MethodDefinition createRpcTestMethod(
.setArguments(iterateAllExpr)
.setReturnType(resourcesVarExpr.type())
.build();
methodExprs.add(
AssignmentExpr.builder()
.setVariableExpr(resourcesVarExpr)
.setValueExpr(resourcesValExpr)
.build());

methodStatements.addAll(
methodExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
methodExprs.clear();
methodStatements.add(EMPTY_LINE_STATEMENT);

methodStatements.add(
ExprStatement.withExpr(
AssignmentExpr.builder()
.setVariableExpr(resourcesVarExpr.toBuilder().setIsDecl(true).build())
.setValueExpr(resourcesValExpr)
.build()));
methodStatements.add(EMPTY_LINE_STATEMENT);

// Assert the size is equivalent.
methodExprs.add(
Expand Down Expand Up @@ -714,7 +732,10 @@ private static MethodDefinition createRpcTestMethod(
.setArguments(expectedResponseVarExpr, actualResponseVarExpr)
.build());
}
// TODO(miraleung): Empty line here.
methodStatements.addAll(
methodExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
methodExprs.clear();
methodStatements.add(EMPTY_LINE_STATEMENT);

// Construct the request checker logic.
VariableExpr actualRequestsVarExpr =
Expand Down Expand Up @@ -773,7 +794,10 @@ private static MethodDefinition createRpcTestMethod(
.setVariableExpr(actualRequestVarExpr.toBuilder().setIsDecl(true).build())
.setValueExpr(getFirstRequestExpr)
.build());
// TODO(miraleung): Empty line here.
methodStatements.addAll(
methodExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
methodExprs.clear();
methodStatements.add(EMPTY_LINE_STATEMENT);

// Assert field equality.
if (isRequestArg) {
Expand Down Expand Up @@ -860,6 +884,9 @@ private static MethodDefinition createRpcTestMethod(
.setMethodName("assertTrue")
.setArguments(headerSentExpr)
.build());
methodStatements.addAll(
methodExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
methodExprs.clear();

String testMethodName =
String.format(
Expand All @@ -871,8 +898,7 @@ private static MethodDefinition createRpcTestMethod(
.setScope(ScopeNode.PUBLIC)
.setReturnType(TypeNode.VOID)
.setName(testMethodName)
.setBody(
methodExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()))
.setBody(methodStatements)
.build();
}

Expand Down Expand Up @@ -937,7 +963,6 @@ private static MethodDefinition createStreamingRpcTestMethod(
.setArguments(expectedResponseVarExpr)
.build());
}
// TODO(miraleung): Empty line here.

// Construct the request or method arguments.
VariableExpr requestVarExpr =
Expand All @@ -954,6 +979,12 @@ private static MethodDefinition createStreamingRpcTestMethod(
.setValueExpr(valExpr)
.build());

List<Statement> methodStatements = new ArrayList<>();
methodStatements.addAll(
methodExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
methodExprs.clear();
methodStatements.add(EMPTY_LINE_STATEMENT);

// Construct the mock stream observer.
VariableExpr responseObserverVarExpr =
VariableExpr.withVariable(
Expand All @@ -967,15 +998,17 @@ private static MethodDefinition createStreamingRpcTestMethod(
.setName("responseObserver")
.build());

methodExprs.add(
AssignmentExpr.builder()
.setVariableExpr(responseObserverVarExpr.toBuilder().setIsDecl(true).build())
.setValueExpr(
NewObjectExpr.builder()
.setType(STATIC_TYPES.get("MockStreamObserver"))
.setIsGeneric(true)
.build())
.build());
methodStatements.add(
ExprStatement.withExpr(
AssignmentExpr.builder()
.setVariableExpr(responseObserverVarExpr.toBuilder().setIsDecl(true).build())
.setValueExpr(
NewObjectExpr.builder()
.setType(STATIC_TYPES.get("MockStreamObserver"))
.setIsGeneric(true)
.build())
.build()));
methodStatements.add(EMPTY_LINE_STATEMENT);

// Build the callable variable and assign it.
VariableExpr callableVarExpr =
Expand Down Expand Up @@ -1025,7 +1058,11 @@ private static MethodDefinition createStreamingRpcTestMethod(
.build())
.build());

// TODO(miraleung): Empty line here.
methodStatements.addAll(
methodExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
methodExprs.clear();
methodStatements.add(EMPTY_LINE_STATEMENT);

methodExprs.add(
MethodInvocationExpr.builder()
.setExprReferenceExpr(requestObserverVarExpr)
Expand All @@ -1038,6 +1075,10 @@ private static MethodDefinition createStreamingRpcTestMethod(
.setMethodName("onCompleted")
.build());
}
methodStatements.addAll(
methodExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
methodExprs.clear();
methodStatements.add(EMPTY_LINE_STATEMENT);

// Check the actual responses.
VariableExpr actualResponsesVarExpr =
Expand Down Expand Up @@ -1101,14 +1142,18 @@ private static MethodDefinition createStreamingRpcTestMethod(
.setArguments(expectedResponseVarExpr, actualResponseExpr)
.build());

methodStatements.addAll(
methodExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
methodExprs.clear();
methodStatements.add(EMPTY_LINE_STATEMENT);

String testMethodName = String.format("%sTest", JavaStyle.toLowerCamelCase(method.name()));
return MethodDefinition.builder()
.setAnnotations(Arrays.asList(TEST_ANNOTATION))
.setScope(ScopeNode.PUBLIC)
.setReturnType(TypeNode.VOID)
.setName(testMethodName)
.setBody(
methodExprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()))
.setBody(methodStatements)
.build();
}

Expand Down Expand Up @@ -1193,12 +1238,14 @@ private static List<Statement> createStreamingRpcExceptionTestStatements(
DefaultValueComposer.createSimpleMessageBuilderExpr(
requestMessage, resourceNames, messageTypes);

List<Expr> exprs = new ArrayList<>();
exprs.add(
AssignmentExpr.builder()
.setVariableExpr(requestVarExpr.toBuilder().setIsDecl(true).build())
.setValueExpr(valExpr)
.build());
List<Statement> statements = new ArrayList<>();
statements.add(
ExprStatement.withExpr(
AssignmentExpr.builder()
.setVariableExpr(requestVarExpr.toBuilder().setIsDecl(true).build())
.setValueExpr(valExpr)
.build()));
statements.add(EMPTY_LINE_STATEMENT);

// Build the responseObserver variable.
VariableExpr responseObserverVarExpr =
Expand All @@ -1213,15 +1260,17 @@ private static List<Statement> createStreamingRpcExceptionTestStatements(
.setName("responseObserver")
.build());

exprs.add(
AssignmentExpr.builder()
.setVariableExpr(responseObserverVarExpr.toBuilder().setIsDecl(true).build())
.setValueExpr(
NewObjectExpr.builder()
.setType(STATIC_TYPES.get("MockStreamObserver"))
.setIsGeneric(true)
.build())
.build());
statements.add(
ExprStatement.withExpr(
AssignmentExpr.builder()
.setVariableExpr(responseObserverVarExpr.toBuilder().setIsDecl(true).build())
.setValueExpr(
NewObjectExpr.builder()
.setType(STATIC_TYPES.get("MockStreamObserver"))
.setIsGeneric(true)
.build())
.build()));
statements.add(EMPTY_LINE_STATEMENT);

// Build the callable variable and assign it.
VariableExpr callableVarExpr =
Expand All @@ -1233,17 +1282,22 @@ private static List<Statement> createStreamingRpcExceptionTestStatements(
.setMethodName(String.format("%sCallable", JavaStyle.toLowerCamelCase(method.name())))
.setReturnType(callableVarExpr.type())
.build();

List<Expr> exprs = new ArrayList<>();
exprs.add(
AssignmentExpr.builder()
.setVariableExpr(callableVarExpr.toBuilder().setIsDecl(true).build())
.setValueExpr(streamingCallExpr)
.build());

if (method.stream().equals(Method.Stream.SERVER)) {
exprs.add(streamingCallExpr);
} else {
exprs.add(
AssignmentExpr.builder()
.setVariableExpr(callableVarExpr.toBuilder().setIsDecl(true).build())
.setValueExpr(streamingCallExpr)
MethodInvocationExpr.builder()
.setExprReferenceExpr(callableVarExpr)
.setMethodName("serverStreamingCall")
.setArguments(requestVarExpr, responseObserverVarExpr)
.build());
}

if (!method.stream().equals(Method.Stream.SERVER)) {
} else {
// Call the streaming-variant callable method.
VariableExpr requestObserverVarExpr =
VariableExpr.withVariable(
Expand All @@ -1268,13 +1322,22 @@ private static List<Statement> createStreamingRpcExceptionTestStatements(
.build())
.build());

statements.addAll(
exprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
exprs.clear();
statements.add(EMPTY_LINE_STATEMENT);

exprs.add(
MethodInvocationExpr.builder()
.setExprReferenceExpr(requestObserverVarExpr)
.setMethodName("onNext")
.setArguments(requestVarExpr)
.build());
}
statements.addAll(
exprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
exprs.clear();
statements.add(EMPTY_LINE_STATEMENT);

List<Expr> tryBodyExprs = new ArrayList<>();
// TODO(v2): This variable is unused in the generated test, it can be deleted.
Expand Down Expand Up @@ -1333,9 +1396,6 @@ private static List<Statement> createStreamingRpcExceptionTestStatements(
.setCatchBody(createRpcLroExceptionTestCatchBody(catchExceptionVarExpr, true))
.build();

List<Statement> statements = new ArrayList<>();
statements.addAll(
exprs.stream().map(e -> ExprStatement.withExpr(e)).collect(Collectors.toList()));
statements.add(tryCatchBlock);
return statements;
}
Expand Down Expand Up @@ -1435,7 +1495,7 @@ private static List<Statement> createRpcExceptionTestStatements(
.setCatchBody(catchBody)
.build();

return Arrays.asList(tryCatchBlock);
return Arrays.asList(EMPTY_LINE_STATEMENT, tryCatchBlock);
}

private static List<Statement> createRpcLroExceptionTestCatchBody(
Expand Down
Loading

0 comments on commit 0bc35df

Please sign in to comment.