1 package org.jetbrains.plugins.gradle.sync;
4 import com.intellij.openapi.Disposable
5 import com.intellij.openapi.project.Project
6 import com.intellij.openapi.util.Disposer
7 import com.intellij.testFramework.SkipInHeadlessEnvironment
8 import com.intellij.util.containers.ContainerUtil
9 import org.jetbrains.plugins.gradle.testutil.ChangeBuilder
10 import org.jetbrains.plugins.gradle.testutil.GradleProjectBuilder
11 import org.jetbrains.plugins.gradle.testutil.IntellijProjectBuilder
12 import org.jetbrains.plugins.gradle.testutil.ProjectStructureChecker
13 import org.junit.After
14 import org.junit.Before
16 import org.picocontainer.defaults.DefaultPicoContainer
17 import org.jetbrains.plugins.gradle.diff.*
18 import static org.junit.Assert.assertEquals
21 * @author Denis Zhdanov
24 @SkipInHeadlessEnvironment
25 public class GradleProjectStructureChangesModelTest {
27 GradleProjectStructureChangesModel changesModel
28 GradleProjectStructureTreeModel treeModel
34 Disposable disposable = [dispose: { }] as Disposable
38 gradle = new GradleProjectBuilder()
39 intellij = new IntellijProjectBuilder()
40 changes = new ChangeBuilder()
41 treeChecker = new ProjectStructureChecker()
42 container = new DefaultPicoContainer()
43 container.registerComponentInstance(Project, intellij.project)
44 container.registerComponentInstance(PlatformFacade, intellij.platformFacade as PlatformFacade)
45 container.registerComponentImplementation(GradleProjectStructureChangesModel)
46 container.registerComponentImplementation(GradleStructureChangesCalculator, GradleProjectStructureChangesCalculator)
47 container.registerComponentImplementation(GradleModuleStructureChangesCalculator)
48 container.registerComponentImplementation(GradleLibraryDependencyStructureChangesCalculator)
49 container.registerComponentImplementation(GradleProjectStructureTreeModel)
51 changesModel = container.getComponentInstance(GradleProjectStructureChangesModel) as GradleProjectStructureChangesModel
55 public void tearDown() {
56 Disposer.dispose(disposable)
60 public void mergeGradleLocalToIntellij() {
61 // Configure initial projects state.
77 // Check that the initial projects state is correctly parsed.
80 lib(gradle: gradle.modules.dependencies.flatten().findAll { it.name == "lib2" })
90 // Define changed project state.
97 // Apply the changed project state and check if it's correctly parsed.
98 changesModel.update(gradle.project)
99 assertEquals([].toSet(), changesModel.changes)
108 @SuppressWarnings("GroovyAssignabilityCheck")
109 private def init(gradleProjectInit, intellijProjectInit) {
110 treeModel = container.getComponentInstance(GradleProjectStructureTreeModel) as GradleProjectStructureTreeModel
111 changesModel.addListener({ old, current ->
112 treeModel.update(current)
113 treeModel.pruneObsoleteNodes(ContainerUtil.subtract(old, current));
114 } as GradleProjectStructureChangeListener)
115 changesModel.update(gradle.project)
118 private def checkChanges(c) {
120 assertEquals(c(), changesModel.changes)
123 private def checkTree(c) {
124 def nodeBuilder = new NodeBuilder()
125 c.delegate = nodeBuilder
127 treeChecker.check(expected, treeModel.root)