Specs2 tests with JUnit runner are not recognized if there is package/directory mismatch
Scala IDE has a bug where if the package name does not match the directory name, it doesn't recognize the specs2 test.
Steps to reproduce:
Create a play project.
`play eclipse`
Import project into Eclipse.
Add the following class to the test folder, at the root directory (note that the package "foo" does not match the directory):
```scala
package foo
import org.specs2.mutable._
import org.specs2.runner._
import org.junit.runner._
import play.api.test._
import play.api.test.Helpers._
@RunWith(classOf[JUnitRunner])
class SampleSpec extends SpecificationWithJUnit {
"Application" should {
"run the simplest possible test" in new WithApplication{
route(FakeRequest(GET, "/boum")) must beNone
}
}
}
```
Right click on the editor and scroll down to "Run As" -- you will not see "Scala JUnit Test".
Now create a "foo" subdirectory and move SampleSpec.scala to that directory.
Close everything down and start up the project again (I think there's a code weaving thing that goes on here that is cached)
Open up everything and right click on SampleSpec.scala again. You will see "Run As" shows "Scala JUnit Test" and the JUnit test can be run.
Scala plugin version: 3.0.1.v-2_10-201307181517-b1c1861
Scala compiler version: 2.10.2.v20130530-074427-VFINAL-60d462ef6e
Scala library version: 2.10.2.v20130530-074427-VFINAL-60d462ef6e
Eclipse version: 3.7.2.v201202080800
Log output:
2013-08-21 14:11:44,751 WARN [Worker-13] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$javascript : Unsupported major.minor version 51.0
2013-08-21 14:11:44,752 WARN [Worker-13] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes : Unsupported major.minor version 51.0
2013-08-21 14:11:44,753 WARN [Worker-13] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$ref : Unsupported major.minor version 51.0
2013-08-21 14:19:45,056 WARN [Worker-25] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$javascript : Unsupported major.minor version 51.0
2013-08-21 14:19:45,056 WARN [Worker-25] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes : Unsupported major.minor version 51.0
2013-08-21 14:19:45,057 WARN [Worker-25] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$ref : Unsupported major.minor version 51.0
2013-08-21 14:20:16,475 WARN [ModalContext] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:20:42,969 WARN [ModalContext] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:27:18,371 WARN [ModalContext] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:28:09,481 WARN [main] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:28:09,682 WARN [main] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:31:01,350 WARN [main] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:31:01,686 WARN [main] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:31:36,525 WARN [Worker-7] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:32:02,111 WARN [Worker-0] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:32:27,994 WARN [Worker-9] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:41:18,490 WARN [Worker-12] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$javascript : Unsupported major.minor version 51.0
2013-08-21 14:41:18,491 WARN [Worker-12] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes : Unsupported major.minor version 51.0
2013-08-21 14:41:18,492 WARN [Worker-12] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$ref : Unsupported major.minor version 51.0
Steps to reproduce:
Create a play project.
`play eclipse`
Import project into Eclipse.
Add the following class to the test folder, at the root directory (note that the package "foo" does not match the directory):
```scala
package foo
import org.specs2.mutable._
import org.specs2.runner._
import org.junit.runner._
import play.api.test._
import play.api.test.Helpers._
@RunWith(classOf[JUnitRunner])
class SampleSpec extends SpecificationWithJUnit {
"Application" should {
"run the simplest possible test" in new WithApplication{
route(FakeRequest(GET, "/boum")) must beNone
}
}
}
```
Right click on the editor and scroll down to "Run As" -- you will not see "Scala JUnit Test".
Now create a "foo" subdirectory and move SampleSpec.scala to that directory.
Close everything down and start up the project again (I think there's a code weaving thing that goes on here that is cached)
Open up everything and right click on SampleSpec.scala again. You will see "Run As" shows "Scala JUnit Test" and the JUnit test can be run.
Scala plugin version: 3.0.1.v-2_10-201307181517-b1c1861
Scala compiler version: 2.10.2.v20130530-074427-VFINAL-60d462ef6e
Scala library version: 2.10.2.v20130530-074427-VFINAL-60d462ef6e
Eclipse version: 3.7.2.v201202080800
Log output:
2013-08-21 14:11:44,751 WARN [Worker-13] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$javascript : Unsupported major.minor version 51.0
2013-08-21 14:11:44,752 WARN [Worker-13] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes : Unsupported major.minor version 51.0
2013-08-21 14:11:44,753 WARN [Worker-13] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$ref : Unsupported major.minor version 51.0
2013-08-21 14:19:45,056 WARN [Worker-25] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$javascript : Unsupported major.minor version 51.0
2013-08-21 14:19:45,056 WARN [Worker-25] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes : Unsupported major.minor version 51.0
2013-08-21 14:19:45,057 WARN [Worker-25] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$ref : Unsupported major.minor version 51.0
2013-08-21 14:20:16,475 WARN [ModalContext] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:20:42,969 WARN [ModalContext] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:27:18,371 WARN [ModalContext] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:28:09,481 WARN [main] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:28:09,682 WARN [main] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:31:01,350 WARN [main] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:31:01,686 WARN [main] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:31:36,525 WARN [Worker-7] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:32:02,111 WARN [Worker-0] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:32:27,994 WARN [Worker-9] - ImplicitHighlightingPresenter - Timeout while waiting for `askLoadedTyped` during implicit highlighting.
2013-08-21 14:41:18,490 WARN [Worker-12] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$javascript : Unsupported major.minor version 51.0
2013-08-21 14:41:18,491 WARN [Worker-12] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes : Unsupported major.minor version 51.0
2013-08-21 14:41:18,492 WARN [Worker-12] - EclipseSbtBuildManager - Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$ref : Unsupported major.minor version 51.0
Leave a comment
Thanks Will. This is a limitation of the presentation compiler, and it's very unlikely it can be fixed in the foreseeable future.
on 2013-08-28 12:21 *
By Iulian Dragos
@will_sargent, It seems there is a mismatch between the Java version used by Sbt and the one in Eclipse:
I believe your Eclipse project uses Java 6, and Sbt picks up Java 7. But I don't think this has any impact on the underlying bug.
Error reading API from class file : java.lang.UnsupportedClassVersionError: controllers/routes$javascript : Unsupported major.minor version 51.0
I believe your Eclipse project uses Java 6, and Sbt picks up Java 7. But I don't think this has any impact on the underlying bug.
on 2013-08-28 21:26 *
By will_sargent
I noticed it, but it only happens on the routes file, and is an artifact of bouncing between JDKs while testing JDK 8. I think you're right that the presentation compiler doesn't recognize it. For reference, the Play bug is https://github.com/playframework/playframework/pull/1324