-
Notifications
You must be signed in to change notification settings - Fork 309
/
JavaDependsOnScalaBothAreOkTest.scala
67 lines (55 loc) · 2.18 KB
/
JavaDependsOnScalaBothAreOkTest.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package org.scalaide.core
package sbtbuilder
import org.junit.BeforeClass
import org.scalaide.core.testsetup.SDTTestUtils
import org.junit.Assert._
import org.junit.Test
import org.eclipse.core.resources.IFile
import org.eclipse.core.runtime.NullProgressMonitor
import org.eclipse.core.resources.IncrementalProjectBuilder
import org.eclipse.core.resources.IMarker
object JavaDependsOnScalaBothAreOkTest extends testsetup.TestProjectSetup("javaDependsOnScalaBothAreOk") {
@BeforeClass def setup(): Unit = {
SDTTestUtils.enableAutoBuild(false)
}
}
class JavaDependsOnScalaBothAreOkTest {
import JavaDependsOnScalaBothAreOkTest._
@Test def shouldCreateProjectFromOkJavaAndSpoilAndFixIt(): Unit = {
val TypeBMustImplementFoo = 1
cleanProject()
import SDTTestUtils._
val aClass = compilationUnit("main/A.scala")
val bClass = compilationUnit("main/B.java")
def rebuildAndCollectProblems(): List[IMarker] = {
project.underlying.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, new NullProgressMonitor)
getProblemMarkers(aClass, bClass)
}
step("first compile scala and dependent java classes") {
val problems = rebuildAndCollectProblems()
assertTrue("No build error expected, got: " + markersMessages(problems), problems.isEmpty)
}
step("then extends java B with abstract A") {
changeContentOfFile(bClass.getResource().getAdapter(classOf[IFile]).asInstanceOf[IFile], changed_main_B)
val problems = rebuildAndCollectProblems()
assertTrue("One build error expected, got: " + markersMessages(problems), problems.length == TypeBMustImplementFoo)
}
step("and then give body to 'foo' in abstract A") {
changeContentOfFile(aClass.getResource().getAdapter(classOf[IFile]).asInstanceOf[IFile], changed_main_A)
val problems = rebuildAndCollectProblems()
assertTrue("No build error expected, got: " + markersMessages(problems), problems.isEmpty)
}
}
private def step(description: String)(runInStep: => Unit): Unit = runInStep
lazy val changed_main_A = """
package main
abstract class A {
def foo(s: String): Unit = {}
}
"""
lazy val changed_main_B = """
package main;
public class B extends A {
}
"""
}