|
66 | 66 | import java.util.stream.Collectors;
|
67 | 67 |
|
68 | 68 | public class ServiceClientTestClassComposer extends AbstractServiceClientTestClassComposer {
|
| 69 | + |
69 | 70 | private static final String SERVICE_HELPER_VAR_NAME = "mockServiceHelper";
|
70 | 71 | private static final String CHANNEL_PROVIDER_VAR_NAME = "channelProvider";
|
71 | 72 |
|
@@ -359,12 +360,12 @@ protected MethodDefinition createTearDownMethod(
|
359 | 360 | @Override
|
360 | 361 | protected List<Statement> constructRpcTestCheckerLogic(
|
361 | 362 | Method method,
|
| 363 | + List<MethodArgument> methodSignature, |
362 | 364 | Service service,
|
363 | 365 | boolean isRequestArg,
|
364 | 366 | Map<String, VariableExpr> classMemberVarExprs,
|
365 |
| - VariableExpr requestVarExpr, |
366 |
| - Message requestMessage, |
367 |
| - List<VariableExpr> argExprs) { |
| 367 | + VariableExpr requestVarExpr, // Nullable |
| 368 | + Message requestMessage) { |
368 | 369 | List<Expr> methodExprs = new ArrayList<>();
|
369 | 370 | List<Statement> methodStatements = new ArrayList<>();
|
370 | 371 |
|
@@ -435,71 +436,33 @@ protected List<Statement> constructRpcTestCheckerLogic(
|
435 | 436 | Preconditions.checkNotNull(requestVarExpr);
|
436 | 437 | Preconditions.checkNotNull(requestMessage);
|
437 | 438 | for (Field field : requestMessage.fields()) {
|
438 |
| - String fieldGetterMethodNamePatternTemp = "get%s"; |
439 |
| - if (field.isRepeated()) { |
440 |
| - fieldGetterMethodNamePatternTemp = field.isMap() ? "get%sMap" : "get%sList"; |
441 |
| - } |
442 |
| - final String fieldGetterMethodNamePattern = fieldGetterMethodNamePatternTemp; |
443 |
| - Function<VariableExpr, Expr> checkExprFn = |
444 |
| - v -> |
445 |
| - MethodInvocationExpr.builder() |
446 |
| - .setExprReferenceExpr(v) |
447 |
| - .setMethodName( |
448 |
| - String.format( |
449 |
| - fieldGetterMethodNamePattern, JavaStyle.toUpperCamelCase(field.name()))) |
450 |
| - .build(); |
451 |
| - Expr expectedFieldExpr = checkExprFn.apply(requestVarExpr); |
452 |
| - Expr actualFieldExpr = checkExprFn.apply(actualRequestVarExpr); |
453 |
| - List<Expr> assertEqualsArguments = new ArrayList<>(); |
454 |
| - assertEqualsArguments.add(expectedFieldExpr); |
455 |
| - assertEqualsArguments.add(actualFieldExpr); |
456 |
| - if (TypeNode.isFloatingPointType(field.type())) { |
457 |
| - boolean isFloat = field.type().equals(TypeNode.FLOAT); |
458 |
| - assertEqualsArguments.add( |
459 |
| - ValueExpr.withValue( |
460 |
| - PrimitiveValue.builder() |
461 |
| - .setType(isFloat ? TypeNode.FLOAT : TypeNode.DOUBLE) |
462 |
| - .setValue(String.format("0.0001%s", isFloat ? "f" : "")) |
463 |
| - .build())); |
464 |
| - } |
465 |
| - methodExprs.add( |
466 |
| - MethodInvocationExpr.builder() |
467 |
| - .setStaticReferenceType(FIXED_TYPESTORE.get("Assert")) |
468 |
| - .setMethodName("assertEquals") |
469 |
| - .setArguments(assertEqualsArguments) |
470 |
| - .build()); |
| 439 | + Expr expectedFieldExpr = createGetter(requestVarExpr, field); |
| 440 | + Expr actualFieldExpr = createGetter(actualRequestVarExpr, field); |
| 441 | + methodExprs.add(createAssertEquals(expectedFieldExpr, actualFieldExpr, field.type())); |
471 | 442 | }
|
472 | 443 | } else {
|
473 |
| - for (VariableExpr argVarExpr : argExprs) { |
474 |
| - Variable variable = argVarExpr.variable(); |
475 |
| - String fieldGetterMethodNamePattern = "get%s"; |
476 |
| - if (LIST_TYPE.isSupertypeOrEquals(variable.type())) { |
477 |
| - fieldGetterMethodNamePattern = "get%sList"; |
478 |
| - } else if (MAP_TYPE.isSupertypeOrEquals(variable.type())) { |
479 |
| - fieldGetterMethodNamePattern = "get%sMap"; |
| 444 | + for (MethodArgument arg : methodSignature) { |
| 445 | + Expr root = actualRequestVarExpr; |
| 446 | + for (Field field : arg.nestedFields()) { |
| 447 | + root = createGetter(root, field); |
480 | 448 | }
|
481 |
| - Expr actualFieldExpr = |
482 |
| - MethodInvocationExpr.builder() |
483 |
| - .setExprReferenceExpr(actualRequestVarExpr) |
484 |
| - .setMethodName( |
485 |
| - String.format( |
486 |
| - fieldGetterMethodNamePattern, |
487 |
| - JavaStyle.toUpperCamelCase(variable.identifier().name()))) |
488 |
| - .build(); |
489 |
| - Expr expectedFieldExpr = argVarExpr; |
490 |
| - if (RESOURCE_NAME_TYPE.isSupertypeOrEquals(argVarExpr.type())) { |
| 449 | + MethodInvocationExpr actual = createGetter(root, arg.field()); |
| 450 | + |
| 451 | + Expr expectedFieldExpr = |
| 452 | + VariableExpr.withVariable( |
| 453 | + Variable.builder() |
| 454 | + .setName(JavaStyle.toLowerCamelCase(arg.name())) |
| 455 | + .setType(arg.type()) |
| 456 | + .build()); |
| 457 | + if (RESOURCE_NAME_TYPE.isSupertypeOrEquals(arg.type())) { |
491 | 458 | expectedFieldExpr =
|
492 | 459 | MethodInvocationExpr.builder()
|
493 |
| - .setExprReferenceExpr(argVarExpr) |
| 460 | + .setExprReferenceExpr(expectedFieldExpr) |
494 | 461 | .setMethodName("toString")
|
495 | 462 | .build();
|
496 | 463 | }
|
497 |
| - methodExprs.add( |
498 |
| - MethodInvocationExpr.builder() |
499 |
| - .setStaticReferenceType(FIXED_TYPESTORE.get("Assert")) |
500 |
| - .setMethodName("assertEquals") |
501 |
| - .setArguments(expectedFieldExpr, actualFieldExpr) |
502 |
| - .build()); |
| 464 | + |
| 465 | + methodExprs.add(createAssertEquals(expectedFieldExpr, actual, arg.type())); |
503 | 466 | }
|
504 | 467 | }
|
505 | 468 |
|
@@ -533,6 +496,49 @@ protected List<Statement> constructRpcTestCheckerLogic(
|
533 | 496 | return methodStatements;
|
534 | 497 | }
|
535 | 498 |
|
| 499 | + private static MethodInvocationExpr createAssertEquals( |
| 500 | + Expr expected, Expr actual, TypeNode type) { |
| 501 | + |
| 502 | + ArrayList<Expr> assertionArgs = new ArrayList<>(); |
| 503 | + assertionArgs.add(expected); |
| 504 | + assertionArgs.add(actual); |
| 505 | + |
| 506 | + if (TypeNode.isFloatingPointType(type)) { |
| 507 | + boolean isFloat = type.equals(TypeNode.FLOAT); |
| 508 | + assertionArgs.add( |
| 509 | + ValueExpr.withValue( |
| 510 | + PrimitiveValue.builder() |
| 511 | + .setType(isFloat ? TypeNode.FLOAT : TypeNode.DOUBLE) |
| 512 | + .setValue(String.format("0.0001%s", isFloat ? "f" : "")) |
| 513 | + .build())); |
| 514 | + } |
| 515 | + |
| 516 | + return MethodInvocationExpr.builder() |
| 517 | + .setStaticReferenceType(FIXED_TYPESTORE.get("Assert")) |
| 518 | + .setMethodName("assertEquals") |
| 519 | + .setArguments(assertionArgs) |
| 520 | + .build(); |
| 521 | + } |
| 522 | + |
| 523 | + private static MethodInvocationExpr createGetter(Expr exprReference, Field field) { |
| 524 | + return MethodInvocationExpr.builder() |
| 525 | + .setExprReferenceExpr(exprReference) |
| 526 | + .setMethodName( |
| 527 | + String.format( |
| 528 | + createGetterNamePattern(field.type()), JavaStyle.toUpperCamelCase(field.name()))) |
| 529 | + .build(); |
| 530 | + } |
| 531 | + |
| 532 | + private static String createGetterNamePattern(TypeNode type) { |
| 533 | + String fieldGetterMethodNamePattern = "get%s"; |
| 534 | + if (LIST_TYPE.isSupertypeOrEquals(type)) { |
| 535 | + fieldGetterMethodNamePattern = "get%sList"; |
| 536 | + } else if (MAP_TYPE.isSupertypeOrEquals(type)) { |
| 537 | + fieldGetterMethodNamePattern = "get%sMap"; |
| 538 | + } |
| 539 | + return fieldGetterMethodNamePattern; |
| 540 | + } |
| 541 | + |
536 | 542 | @Override
|
537 | 543 | protected MethodDefinition createStreamingRpcTestMethod(
|
538 | 544 | Service service,
|
|
0 commit comments