Skip to content

Commit bd7ec84

Browse files
AssertThrowsOnLastStatement: Support calls with lambda parameters (#859)
Added `J.Lambda` to the list of expression types that should be skipped in the `extractExpressionArguments` method: ```java if (e instanceof J.Identifier || e instanceof J.Literal || e instanceof J.Empty || e instanceof J.Lambda) { return e; } ``` Lambdas are effectively "constant" expressions that don't need to be extracted into separate variables - they're anonymous functions that don't depend on mutable state that would change during the extraction.
1 parent 959c88b commit bd7ec84

File tree

2 files changed

+80
-21
lines changed

2 files changed

+80
-21
lines changed

src/main/java/org/openrewrite/java/testing/junit5/AssertThrowsOnLastStatement.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ private Statement extractExpressionArguments(Statement lambdaStatement, List<Sta
148148
J.MethodInvocation mi = (J.MethodInvocation) lambdaStatement;
149149
Map<String, Integer> generatedVariableSuffixes = new HashMap<>();
150150
return mi.withArguments(ListUtils.map(mi.getArguments(), e -> {
151-
if (e instanceof J.Identifier || e instanceof J.Literal || e instanceof J.Empty || e == null) {
151+
if (e instanceof J.Identifier || e instanceof J.Literal || e instanceof J.Empty || e instanceof J.Lambda) {
152152
return e;
153153
}
154154

src/test/java/org/openrewrite/java/testing/junit5/AssertThrowsOnLastStatementTest.java

Lines changed: 79 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public void defaults(RecipeSpec spec) {
3939
@DocumentExample
4040
@Test
4141
void applyToLastStatementWithDeclaringVariableThreeLines() {
42-
//language=java
4342
rewriteRun(
43+
//language=java
4444
java(
4545
"""
4646
import org.junit.jupiter.api.Test;
@@ -89,8 +89,8 @@ void foo() {
8989

9090
@Test
9191
void applyToLastStatementWithDeclaringVariableThreeLinesHasLineBefore() {
92-
//language=java
9392
rewriteRun(
93+
//language=java
9494
java(
9595
"""
9696
import org.junit.jupiter.api.Test;
@@ -141,8 +141,8 @@ void foo() {
141141

142142
@Test
143143
void applyToLastStatementNoDeclaringVariableTwoLinesNoLinesAfter() {
144-
//language=java
145144
rewriteRun(
145+
//language=java
146146
java(
147147
"""
148148
import org.junit.jupiter.api.Test;
@@ -185,8 +185,8 @@ void foo() {
185185

186186
@Test
187187
void applyToLastStatementHasMessage() {
188-
//language=java
189188
rewriteRun(
189+
//language=java
190190
java(
191191
"""
192192
import org.junit.jupiter.api.Test;
@@ -230,8 +230,8 @@ void foo() {
230230

231231
@Test
232232
void makeNoChangesAsOneLine() {
233-
//language=java
234233
rewriteRun(
234+
//language=java
235235
java(
236236
"""
237237
import org.junit.jupiter.api.Test;
@@ -257,8 +257,8 @@ void foo() {
257257
@Issue("https://github.com/openrewrite/rewrite-testing-frameworks/issues/618")
258258
@Test
259259
void bodyNull() {
260-
//language=java
261260
rewriteRun(
261+
//language=java
262262
java(
263263
"""
264264
import org.junit.jupiter.api.Test;
@@ -283,8 +283,8 @@ interface InnerInterface {
283283

284284
@Test
285285
void lastStatementHasArgumentWhichIsMethodCall() {
286-
//language=java
287286
rewriteRun(
287+
//language=java
288288
java(
289289
"""
290290
import org.junit.jupiter.api.Test;
@@ -336,8 +336,8 @@ void test() {
336336

337337
@Test
338338
void lastStatementHasArgumentWhichIsChainedMethodCall() {
339-
//language=java
340339
rewriteRun(
340+
//language=java
341341
java(
342342
"""
343343
import org.junit.jupiter.api.Test;
@@ -391,8 +391,8 @@ void test() {
391391

392392
@Test
393393
void lastStatementHasArgumentWhichIsExpression() {
394-
//language=java
395394
rewriteRun(
395+
//language=java
396396
java(
397397
"""
398398
import org.junit.jupiter.api.Test;
@@ -444,17 +444,18 @@ void test() {
444444

445445
@Test
446446
void lastStatementHasArgumentWhichNeedImport() {
447-
//language=java
448447
rewriteRun(
448+
//language=java
449449
java(
450450
"""
451-
import java.nio.file.Path;
451+
import java.nio.file.Path;
452452
453-
class Tester {
454-
public static void testThing(Path path) {}
455-
}
456-
"""
453+
class Tester {
454+
public static void testThing(Path path) {}
455+
}
456+
"""
457457
),
458+
//language=java
458459
java(
459460
"""
460461
import org.junit.jupiter.api.Test;
@@ -507,8 +508,8 @@ void test() {
507508

508509
@Test
509510
void lastStatementHasArgumentWhichNeedImportFromSource() {
510-
//language=java
511511
rewriteRun(
512+
//language=java
512513
java(
513514
"""
514515
package org.test.other;
@@ -521,6 +522,7 @@ public static void testThing(SomeObject someObject) {}
521522
}
522523
"""
523524
),
525+
//language=java
524526
java(
525527
"""
526528
package org.test;
@@ -575,8 +577,8 @@ void test() {
575577

576578
@Test
577579
void uniqueVariableNames() {
578-
//language=java
579580
rewriteRun(
581+
//language=java
580582
java(
581583
"""
582584
import org.junit.jupiter.api.Test;
@@ -627,8 +629,8 @@ void testThing(String one, String two) {}
627629

628630
@Test
629631
void variableNameAlreadyExists() {
630-
//language=java
631632
rewriteRun(
633+
//language=java
632634
java(
633635
"""
634636
import org.junit.jupiter.api.Test;
@@ -687,8 +689,8 @@ void testThing(String one, String two) {}
687689

688690
@Test
689691
void duplicateVariableNames() {
690-
//language=java
691692
rewriteRun(
693+
//language=java
692694
java(
693695
"""
694696
import org.junit.jupiter.api.Test;
@@ -739,8 +741,8 @@ void testThing(String one, String two, String three, String four) {}
739741

740742
@Test
741743
void lambdaWithSingleStatementStillExtractsVariable() {
742-
//language=java
743744
rewriteRun(
745+
//language=java
744746
java(
745747
"""
746748
import org.junit.jupiter.api.Test;
@@ -781,4 +783,61 @@ void testThing(String one) {}
781783
)
782784
);
783785
}
786+
787+
@Issue("https://github.com/openrewrite/rewrite-testing-frameworks/issues/858")
788+
@Test
789+
void lastStatementWithLambdaArguments() {
790+
rewriteRun(
791+
spec -> spec.parser(JavaParser.fromJavaVersion()
792+
.classpathFromResources(new InMemoryExecutionContext(), "junit-jupiter-api-5", "assertj-core-3")),
793+
//language=java
794+
java(
795+
"""
796+
import org.junit.jupiter.api.Test;
797+
798+
import static org.assertj.core.api.Assertions.assertThat;
799+
import static org.junit.jupiter.api.Assertions.assertThrows;
800+
801+
class MyTest {
802+
803+
@Test
804+
void test() {
805+
assertThrows(Exception.class, () -> {
806+
doA();
807+
assertThat(getB()).satisfies(
808+
arg -> assertThat(arg).isNotNull(),
809+
arg -> assertThat(arg).isEqualTo("expected")
810+
);
811+
});
812+
}
813+
814+
void doA() {}
815+
String getB() { return "B"; }
816+
}
817+
""",
818+
"""
819+
import org.junit.jupiter.api.Test;
820+
821+
import static org.assertj.core.api.Assertions.assertThat;
822+
import static org.junit.jupiter.api.Assertions.assertThrows;
823+
824+
class MyTest {
825+
826+
@Test
827+
void test() {
828+
doA();
829+
assertThrows(Exception.class, () ->
830+
assertThat(getB()).satisfies(
831+
arg -> assertThat(arg).isNotNull(),
832+
arg -> assertThat(arg).isEqualTo("expected")
833+
));
834+
}
835+
836+
void doA() {}
837+
String getB() { return "B"; }
838+
}
839+
"""
840+
)
841+
);
842+
}
784843
}

0 commit comments

Comments
 (0)