openrewrite / rewrite-testing-frameworks

OpenRewrite recipes that perform common Java testing migration tasks.
Apache License 2.0
73 stars 64 forks source link

JUnit to AssertJ not changing assertEquals #235

Closed timtebeek closed 2 years ago

timtebeek commented 2 years ago

This might be a bug, as there is indeed a recipe to convert assertEquals.

Steps to reproduce:

  1. Create a new Spring Boot starter project using Java 17 & Maven
  2. Add two assertions to the test class
    
    package com.example.demo;

+import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;

+import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest class DemoApplicationTests { @Test void test() {

I would expect both assertEquals calls to be rewritten to assertThat. But neither is updated, with this message in the logs:

[INFO] --- rewrite-maven-plugin:4.25.3:run (default-cli) @ demo ---
[INFO] Using active recipe(s) [org.openrewrite.java.testing.assertj.JUnitToAssertj]
[INFO] Using active styles(s) []
[INFO] Validating active recipes...
[INFO] Project [demo] Resolving Poms...
[INFO] Project [demo] Parsing Source Files
[INFO] Running recipe(s)...
-[WARNING] Cannot invoke "java.io.InputStream.read(byte[])" because "is" is null

This is with 17.0.3-tem through SDKman on Ubuntu 22.04; with 11.0.15-tem the last line changes to [WARNING].

timtebeek commented 2 years ago

This is the full stacktrace on Java 17:

java.lang.NullPointerException: Cannot invoke "java.io.InputStream.read(byte[])" because "is" is null
    at org.openrewrite.internal.StringUtils.readFully (StringUtils.java:275)
    at org.openrewrite.Parser$Input.fromResource (Parser.java:156)
    at org.openrewrite.java.testing.assertj.JUnitAssertEqualsToAssertThat$AssertEqualsToAssertThatVisitor.lambda$static$0 (JUnitAssertEqualsToAssertThat.java:65)
    at org.openrewrite.java.internal.template.JavaTemplateParser.compileTemplate (JavaTemplateParser.java:247)
    at org.openrewrite.java.internal.template.JavaTemplateParser.parseBlockStatements (JavaTemplateParser.java:166)
    at org.openrewrite.java.JavaTemplate$2.maybeReplaceStatement (JavaTemplate.java:475)
    at org.openrewrite.java.JavaTemplate$2.visitMethodInvocation (JavaTemplate.java:455)
    at org.openrewrite.java.JavaTemplate$2.visitMethodInvocation (JavaTemplate.java:103)
    at org.openrewrite.java.tree.J$MethodInvocation.acceptJava (J.java:3295)
    at org.openrewrite.java.tree.J.accept (J.java:53)
    at org.openrewrite.TreeVisitor.visit (TreeVisitor.java:214)
    at org.openrewrite.TreeVisitor.visit (TreeVisitor.java:155)
    at org.openrewrite.java.JavaTemplate.withTemplate (JavaTemplate.java:513)
    at org.openrewrite.java.JavaTemplate.withTemplate (JavaTemplate.java:43)
    at org.openrewrite.java.tree.J.withTemplate (J.java:80)
    at org.openrewrite.java.testing.assertj.JUnitAssertEqualsToAssertThat$AssertEqualsToAssertThatVisitor.visitMethodInvocation (JUnitAssertEqualsToAssertThat.java:81)
    at org.openrewrite.java.testing.assertj.JUnitAssertEqualsToAssertThat$AssertEqualsToAssertThatVisitor.visitMethodInvocation (JUnitAssertEqualsToAssertThat.java:63)
    at org.openrewrite.java.tree.J$MethodInvocation.acceptJava (J.java:3295)
    at org.openrewrite.java.tree.J.accept (J.java:53)
    at org.openrewrite.TreeVisitor.visit (TreeVisitor.java:214)
    at org.openrewrite.TreeVisitor.visitAndCast (TreeVisitor.java:288)
    at org.openrewrite.java.JavaVisitor.visitRightPadded (JavaVisitor.java:1233)
    at org.openrewrite.java.JavaVisitor.lambda$visitBlock$4 (JavaVisitor.java:372)
    at org.openrewrite.internal.ListUtils.lambda$map$0 (ListUtils.java:138)
    at org.openrewrite.internal.ListUtils.map (ListUtils.java:120)
    at org.openrewrite.internal.ListUtils.map (ListUtils.java:138)
    at org.openrewrite.java.JavaVisitor.visitBlock (JavaVisitor.java:371)
    at org.openrewrite.java.JavaIsoVisitor.visitBlock (JavaIsoVisitor.java:94)
    at org.openrewrite.java.JavaIsoVisitor.visitBlock (JavaIsoVisitor.java:31)
    at org.openrewrite.java.tree.J$Block.acceptJava (J.java:720)
    at org.openrewrite.java.tree.J.accept (J.java:53)
    at org.openrewrite.TreeVisitor.visit (TreeVisitor.java:214)
    at org.openrewrite.TreeVisitor.visitAndCast (TreeVisitor.java:288)
    at org.openrewrite.java.JavaVisitor.visitMethodDeclaration (JavaVisitor.java:813)
    at org.openrewrite.java.JavaIsoVisitor.visitMethodDeclaration (JavaIsoVisitor.java:225)
    at org.openrewrite.java.JavaIsoVisitor.visitMethodDeclaration (JavaIsoVisitor.java:31)
    at org.openrewrite.java.tree.J$MethodDeclaration.acceptJava (J.java:3042)
    at org.openrewrite.java.tree.J.accept (J.java:53)
    at org.openrewrite.TreeVisitor.visit (TreeVisitor.java:214)
    at org.openrewrite.TreeVisitor.visitAndCast (TreeVisitor.java:288)
    at org.openrewrite.java.JavaVisitor.visitRightPadded (JavaVisitor.java:1233)
    at org.openrewrite.java.JavaVisitor.lambda$visitBlock$4 (JavaVisitor.java:372)
    at org.openrewrite.internal.ListUtils.lambda$map$0 (ListUtils.java:138)
    at org.openrewrite.internal.ListUtils.map (ListUtils.java:120)
    at org.openrewrite.internal.ListUtils.map (ListUtils.java:138)
    at org.openrewrite.java.JavaVisitor.visitBlock (JavaVisitor.java:371)
    at org.openrewrite.java.JavaIsoVisitor.visitBlock (JavaIsoVisitor.java:94)
    at org.openrewrite.java.JavaIsoVisitor.visitBlock (JavaIsoVisitor.java:31)
    at org.openrewrite.java.tree.J$Block.acceptJava (J.java:720)
    at org.openrewrite.java.tree.J.accept (J.java:53)
    at org.openrewrite.TreeVisitor.visit (TreeVisitor.java:214)
    at org.openrewrite.TreeVisitor.visitAndCast (TreeVisitor.java:288)
    at org.openrewrite.java.JavaVisitor.visitClassDeclaration (JavaVisitor.java:452)
    at org.openrewrite.java.JavaIsoVisitor.visitClassDeclaration (JavaIsoVisitor.java:114)
    at org.openrewrite.java.JavaIsoVisitor.visitClassDeclaration (JavaIsoVisitor.java:31)
    at org.openrewrite.java.tree.J$ClassDeclaration.acceptJava (J.java:992)
    at org.openrewrite.java.tree.J.accept (J.java:53)
    at org.openrewrite.TreeVisitor.visit (TreeVisitor.java:214)
    at org.openrewrite.TreeVisitor.visitAndCast (TreeVisitor.java:288)
    at org.openrewrite.java.JavaVisitor.lambda$visitCompilationUnit$10 (JavaVisitor.java:471)
    at org.openrewrite.internal.ListUtils.lambda$map$0 (ListUtils.java:138)
    at org.openrewrite.internal.ListUtils.map (ListUtils.java:120)
    at org.openrewrite.internal.ListUtils.map (ListUtils.java:138)
    at org.openrewrite.java.JavaVisitor.visitCompilationUnit (JavaVisitor.java:471)
    at org.openrewrite.java.JavaIsoVisitor.visitCompilationUnit (JavaIsoVisitor.java:119)
    at org.openrewrite.java.JavaIsoVisitor.visitCompilationUnit (JavaIsoVisitor.java:31)
    at org.openrewrite.java.JavaVisitor.visitJavaSourceFile (JavaVisitor.java:459)
    at org.openrewrite.java.JavaIsoVisitor.visitJavaSourceFile (JavaIsoVisitor.java:39)
    at org.openrewrite.java.JavaIsoVisitor.visitJavaSourceFile (JavaIsoVisitor.java:31)
    at org.openrewrite.java.tree.J$CompilationUnit.acceptJava (J.java:1226)
    at org.openrewrite.java.tree.J.accept (J.java:53)
    at org.openrewrite.TreeVisitor.visit (TreeVisitor.java:214)
    at org.openrewrite.RecipeScheduler.lambda$scheduleVisit$5 (RecipeScheduler.java:245)
    at org.openrewrite.RecipeScheduler.lambda$mapAsync$0 (RecipeScheduler.java:49)
    at org.openrewrite.scheduling.ForkJoinScheduler.lambda$schedule$0 (ForkJoinScheduler.java:41)
    at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec (ForkJoinTask.java:1375)
    at java.util.concurrent.ForkJoinTask.doExec (ForkJoinTask.java:373)
    at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec (ForkJoinPool.java:1182)
    at java.util.concurrent.ForkJoinPool.scan (ForkJoinPool.java:1655)
    at java.util.concurrent.ForkJoinPool.runWorker (ForkJoinPool.java:1622)
    at java.util.concurrent.ForkJoinWorkerThread.run (ForkJoinWorkerThread.java:165)

Might not be specific to the testing module; can this issue be moved or should it be recreated?

timtebeek commented 2 years ago

Not seen with newer versions of maven plugin.