scala-ide/scala-refactoring

`sbt test` in `scala-refactoring/org.scala-refactoring.library` Total 882, Failed 188

timcharper opened this issue · 6 comments

I'd like to hack on scala-refactoring. Is there a way to target a single test suite without having to run the entire suite via build.sh (which does work)? there a way to run tests? I looked for documentation

What's the preferred way of running tests?

I can run build.sh and all of works, but when running sbt test many tests fail.

[info] Test scala.tools.refactoring.tests.sourcegen.CustomFormattingTest.testSingleSpace ignored
[error] Test scala.tools.refactoring.tests.sourcegen.TreeChangesDiscovererTest.findChangedName3 failed: expected:<[DefDef(4): DefDef(4), NameTree(4) | DefDef(5): DefDef(5), NameTree(5) | DefDef(6): DefDef(6), NameTree(6])> but was:<[PackageDef(1): ModifierTree(6), NameTree(6), DefDef(6), DefDef(4), ModifierTree(5), Ident(1), Literal(6), NameTree(4), ModifierTree(4), Literal(5), DefDef(5), Template(3), ClassDef(3), NameTree(5), NameTree(3), PackageDef(1), Literal(4])>
[warn] Test assumption in test scala.tools.refactoring.tests.analysis.DeclarationIndexTest.referencesToLazyVal210 failed: org.junit.internal.AssumptionViolatedException: got: <false>, expected: is <true>
[warn] Test assumption in test scala.tools.refactoring.tests.analysis.DeclarationIndexTest.referencesToLazyVal211 failed: org.junit.internal.AssumptionViolatedException: got: <false>, expected: is <true>
[error] Test scala.tools.refactoring.tests.implementations.imports.OrganizeMissingImportsTest.missingSuperclass failed: java.util.NoSuchElementException: key not found: file424373220_0
[error]     at scala.collection.MapLike$class.default(MapLike.scala:228)
[error]     at scala.collection.AbstractMap.default(Map.scala:58)
[error]     at scala.collection.MapLike$class.apply(MapLike.scala:141)
[error]     at scala.tools.nsc.interactive.Global$$anon$4.scala$collection$mutable$SynchronizedMap$$super$apply(Global.scala:80)
[error]     at scala.collection.mutable.SynchronizedMap$class.apply(SynchronizedMap.scala:48)
[error]     at scala.tools.nsc.interactive.Global$$anon$4.apply(Global.scala:80)
[error]     at scala.tools.refactoring.tests.util.TestHelper$$anonfun$7.apply(TestHelper.scala:97)
[error]     at scala.tools.refactoring.tests.util.TestHelper$$anonfun$7.apply(TestHelper.scala:97)
[error]     at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
[error]     at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
[error]     at scala.collection.immutable.List.foreach(List.scala:318)
[error]     at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
[error]     at scala.collection.AbstractTraversable.map(Traversable.scala:105)
[error]     at scala.tools.refactoring.tests.util.TestHelper$class.selection(TestHelper.scala:97)
[error]     at scala.tools.refactoring.tests.implementations.imports.OrganizeMissingImportsTest.selection(OrganizeMissingImportsTest.scala:14)
[error]     at scala.tools.refactoring.tests.util.TestRefactoring$TestRefactoringImpl$$anonfun$preparationResult$1.apply(TestRefactoring.scala:46)
[error]     at scala.tools.refactoring.tests.util.TestRefactoring$TestRefactoringImpl$$anonfun$preparationResult$1.apply(TestRefactoring.scala:45)
[error]     at scala.tools.nsc.interactive.CompilerControl$class.ask(CompilerControl.scala:271)
[error]     at scala.tools.nsc.interactive.Global.ask(Global.scala:28)
[error]     at scala.tools.refactoring.tests.util.TestRefactoring$TestRefactoringImpl.preparationResult(TestRefactoring.scala:45)
[error]     at scala.tools.refactoring.tests.util.TestRefactoring$TestRefactoringImpl$$anonfun$performRefactoring$1.apply(TestRefactoring.scala:50)
[error]     at scala.tools.refactoring.tests.util.TestRefactoring$TestRefactoringImpl$$anonfun$performRefactoring$1.apply(TestRefactoring.scala:49)
[error]     at scala.tools.nsc.interactive.CompilerControl$class.ask(CompilerControl.scala:271)
[error]     at scala.tools.nsc.interactive.Global.ask(Global.scala:28)
[error]     at scala.tools.refactoring.tests.util.TestRefactoring$TestRefactoringImpl.performRefactoring(TestRefactoring.scala:49)
[error]     at scala.tools.refactoring.tests.implementations.imports.OrganizeMissingImportsTest$$anon$2.<init>(OrganizeMissingImportsTest.scala:21)
[error]     at scala.tools.refactoring.tests.implementations.imports.OrganizeMissingImportsTest.organize(OrganizeMissingImportsTest.scala:17)
[error]     at scala.tools.refactoring.tests.implementations.imports.OrganizeMissingImportsTest$$anonfun$missingSuperclass$1.apply(OrganizeMissingImportsTest.scala:106)
[error]     at scala.tools.refactoring.tests.implementations.imports.OrganizeMissingImportsTest$$anonfun$missingSuperclass$1.apply(OrganizeMissingImportsTest.scala:106)
[error]     at scala.tools.refactoring.tests.util.TestHelper$FileSet$$anonfun$2.apply(TestHelper.scala:61)
[error]     at scala.tools.refactoring.tests.util.TestHelper$FileSet$$anonfun$2.apply(TestHelper.scala:60)
[error]     at scala.tools.nsc.util.InterruptReq.execute(InterruptReq.scala:26)
[error]     at scala.tools.nsc.interactive.Global.pollForWork(Global.scala:340)
[error]     at scala.tools.nsc.interactive.Global.pollForWork(Global.scala:345)
[error]     at scala.tools.nsc.interactive.Global.pollForWork(Global.scala:345)
[error]     at scala.tools.nsc.interactive.Global.pollForWork(Global.scala:345)
[error]     at scala.tools.nsc.interactive.Global.pollForWork(Global.scala:345)
[error]     at scala.tools.nsc.interactive.Global.pollForWork(Global.scala:345)
[error]     at scala.tools.nsc.interactive.Global.pollForWork(Global.scala:345)
[error]     at scala.tools.nsc.interactive.Global.pollForWork(Global.scala:345)

Hi Tim

Unfortunately, I haven't been able to get the tests running under sbt, and it hasn't been a priority for me because I work with the Scala IDE and Maven (but a patch that fixes this in sbt would be very welcome of course!).

If you don't use the Scala IDE, then you can also use Maven to execute a single test:

-Dtest=scala.tools.refactoring.tests.implementations.ExtractMethodTest#extractBlock

I hope this helps, and I'm looking forward to your contributions :-)

Mirko, just need to jump in here. ;)

How do you execute tests in the Scala IDE? I didn't get that to work. I tried to execute the tests as "JUnit Plugin-in Test with Equinox Weaving" and the normal parameters set for the IDE (run as app in headless mode and the option -Dsdtcore.headless). I get only the following error message:

java.lang.ClassCastException: scala.tools.nsc.settings.MutableSettings$PathSetting cannot be cast to scala.reflect.internal.settings.MutableSettings$SettingValue
    at scala.tools.refactoring.util.CompilerInstance.compiler$lzycompute(CompilerProvider.scala:39)
    at scala.tools.refactoring.util.CompilerInstance.compiler(CompilerProvider.scala:22)
    at scala.tools.refactoring.util.CompilerProvider$class.$init$(CompilerProvider.scala:98)
    at scala.tools.refactoring.tests.implementations.ExtractMethodTest.<init>(ExtractMethodTest.scala:14)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:195)
    at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:244)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:241)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:62)
    at org.eclipse.pde.internal.junit.runtime.CoreTestApplication.run(CoreTestApplication.java:23)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.eclipse.equinox.internal.app.EclipseAppContainer.callMethodWithException(EclipseAppContainer.java:587)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:198)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1426)

All needed plugins are enabled (I think). Have you seen that error before or do you execute the tests with special parameters (I use 2.10)?

Oh they're not plug-in tests, just plain JUnit tests.

That was it. Works fine now, thanks!

I wasn't aware that SBT runs the tests in parallel. For performance reasons, i'm reusing instances of the scala presentation compiler for mutliple tests, but this doesn't work well when sbt runs the tests in parallel. Disabling this fixes everything :-)

I actually had a hunch that was it and was the first place I planned to look. Nice work!