| /* |
| * Copyright 2000-2014 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.jetbrains.plugins.gradle.tooling.builder; |
| |
| import com.intellij.openapi.util.io.FileUtil; |
| import com.intellij.util.Function; |
| import com.intellij.util.containers.ContainerUtil; |
| import org.gradle.tooling.model.DomainObjectSet; |
| import org.gradle.tooling.model.idea.IdeaModule; |
| import org.gradle.tooling.model.idea.IdeaSourceDirectory; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.plugins.gradle.model.ExtIdeaContentRoot; |
| import org.jetbrains.plugins.gradle.model.ModuleExtendedModel; |
| import org.junit.Assert; |
| import org.junit.Test; |
| |
| import java.io.File; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.List; |
| import java.util.Set; |
| |
| import static org.junit.Assert.*; |
| |
| /** |
| * @author Vladislav.Soroka |
| * @since 1/16/14 |
| */ |
| public class ModuleExtendedModelBuilderImplTest extends AbstractModelBuilderTest { |
| |
| public ModuleExtendedModelBuilderImplTest(@NotNull String gradleVersion) { |
| super(gradleVersion); |
| } |
| |
| @Test |
| public void testGradleSourcesSetsInterpretation() throws Exception { |
| final int modulesSize = 9; |
| |
| DomainObjectSet<? extends IdeaModule> ideaModules = allModels.getIdeaProject().getModules(); |
| |
| List<ModuleExtendedModel> models = |
| ContainerUtil.mapNotNull(ideaModules, new Function<IdeaModule, ModuleExtendedModel>() { |
| @Override |
| public ModuleExtendedModel fun(IdeaModule module) { |
| ModuleExtendedModel moduleExtendedModel = allModels.getExtraProject(module, ModuleExtendedModel.class); |
| |
| assertNotNull(moduleExtendedModel); |
| |
| List<String> sourceDirectories = ContainerUtil.newArrayList(); |
| List<String> resourceDirectories = ContainerUtil.newArrayList(); |
| List<String> testResourceDirectories = ContainerUtil.newArrayList(); |
| List<String> testDirectories = ContainerUtil.newArrayList(); |
| List<String> excludeDirectories = ContainerUtil.newArrayList(); |
| |
| fillDirectories(moduleExtendedModel, |
| sourceDirectories, resourceDirectories, |
| testDirectories, testResourceDirectories, |
| excludeDirectories); |
| |
| if (module.getName().equals("defaultJavaModule") || module.getName().equals("moduleWithSourceSetDirBothAsResourceAndJava")) { |
| assertEquals(ContainerUtil.newArrayList("src/main/java"), sourceDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/main/resources"), resourceDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/test/java"), testDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/test/resources"), testResourceDirectories); |
| assertEquals(ContainerUtil.newArrayList(".gradle", "build"), excludeDirectories); |
| } |
| else if (module.getName().equals("moduleWithSourceSetDirBothAsResourceAndGroovy")) { |
| assertEquals(ContainerUtil.newArrayList("src/main/groovy", "src/main/java"), sourceDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/main/resources"), resourceDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/test/groovy", "src/test/java"), testDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/test/resources"), testResourceDirectories); |
| assertEquals(ContainerUtil.newArrayList(".gradle", "build"), excludeDirectories); |
| } |
| else if (module.getName().equals("moduleWithCustomSourceSet")) { |
| assertEquals(ContainerUtil.newArrayList("src/custom/java", "src/main/java"), sourceDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/custom/resources", "src/main/resources"), resourceDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/test/java"), testDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/test/resources"), testResourceDirectories); |
| assertEquals(ContainerUtil.newArrayList(".gradle", "build"), excludeDirectories); |
| } |
| else if (module.getName().equals("withIntegrationTests")) { |
| assertEquals(ContainerUtil.newArrayList("src/main/java"), sourceDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/main/resources"), resourceDirectories); |
| assertEquals(ContainerUtil.newArrayList( |
| "src/integration-test/java", "src/integrationTest/java", "src/test/java"), testDirectories); |
| assertEquals(ContainerUtil.newArrayList( |
| "src/integration-test/resources", |
| "src/integrationTest/resources", |
| "src/test/resources"), testResourceDirectories); |
| assertEquals(ContainerUtil.newArrayList(".gradle", "build"), excludeDirectories); |
| } |
| else if (module.getName().equals("testGradleSourcesSetsInterpretation")) { |
| assertTrue(sourceDirectories.isEmpty()); |
| assertTrue(resourceDirectories.isEmpty()); |
| assertTrue(testDirectories.isEmpty()); |
| assertTrue(testResourceDirectories.isEmpty()); |
| assertEquals(ContainerUtil.newArrayList(".gradle", "build"), excludeDirectories); |
| } |
| else if (module.getName().equals("withIdeaPluginCustomization1")) { |
| assertEquals(ContainerUtil.newArrayList("src/main/java"), sourceDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/main/resources"), resourceDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/intTest/java", "src/intTest/resources", "src/test/java"), testDirectories); |
| assertEquals(ContainerUtil.newArrayList("src/test/resources"), testResourceDirectories); |
| assertEquals(ContainerUtil.newArrayList(".gradle", "build", "some-extra-exclude-folder"), excludeDirectories); |
| } |
| else if (module.getName().equals("withIdeaPluginCustomization2")) { |
| assertEquals(ContainerUtil.newArrayList("src/main/java", "src/test/java", "src/test/resources"), sourceDirectories); |
| assertEquals(ContainerUtil.newArrayList("some-extra-resource-folder", "src/main/resources"), resourceDirectories); |
| assertTrue(testDirectories.isEmpty()); |
| assertEquals(ContainerUtil.newArrayList("some-extra-test-resource-folder"), testResourceDirectories); |
| assertEquals(ContainerUtil.newArrayList(".gradle", "build"), excludeDirectories); |
| } |
| else if (module.getName().equals("withIdeaPluginCustomization3")) { |
| assertEquals(ContainerUtil.newArrayList("src/main/java"), sourceDirectories); |
| assertEquals(ContainerUtil.newArrayList( |
| "src/awesome-test/resources", "src/main/resources"), resourceDirectories); |
| assertEquals(ContainerUtil.newArrayList( |
| "src/awesome-test/java", "src/awesome-with-resource-test/java", "src/test/java"), testDirectories); |
| assertEquals(ContainerUtil.newArrayList( |
| "src/awesome-with-resource-test/resources", "src/test/resources"), testResourceDirectories); |
| assertEquals(ContainerUtil.newArrayList(".gradle", "build"), excludeDirectories); |
| } |
| else { |
| fail(); |
| } |
| |
| return moduleExtendedModel; |
| } |
| }); |
| |
| assertEquals(modulesSize, models.size()); |
| } |
| |
| private void fillDirectories(final ModuleExtendedModel model, |
| List<String> sourceDirectories, List<String> resourceDirectories, |
| List<String> testDirectories, List<String> resourceTestDirectories, |
| List<String> excludeDirectories) { |
| for (ExtIdeaContentRoot contentRoot : model.getContentRoots()) { |
| sourceDirectories.addAll(getAllPaths(contentRoot.getSourceDirectories(), model.getName())); |
| resourceDirectories.addAll(getAllPaths(contentRoot.getResourceDirectories(), model.getName())); |
| testDirectories.addAll(getAllPaths(contentRoot.getTestDirectories(), model.getName())); |
| resourceTestDirectories.addAll(getAllPaths(contentRoot.getTestResourceDirectories(), model.getName())); |
| excludeDirectories.addAll(getAllPaths(contentRoot.getExcludeDirectories(), model.getName())); |
| } |
| } |
| |
| private Collection<? extends String> getAllPaths(Collection<? extends File> directories, final String moduleName) { |
| List<String> list = ContainerUtil.map2List(directories, new Function<File, String>() { |
| @Override |
| public String fun(File sourceDirectory) { |
| String path = |
| FileUtil.toCanonicalPath(FileUtil.getRelativePath(new File(testDir, moduleName), sourceDirectory)); |
| Assert.assertNotNull(path); |
| return path.substring(path.indexOf("/") + 1); |
| } |
| }); |
| Collections.sort(list); |
| return list; |
| } |
| |
| private Collection<? extends String> getAllPaths(DomainObjectSet<? extends IdeaSourceDirectory> directories, final String moduleName) { |
| List<String> list = ContainerUtil.map2List(directories, new Function<IdeaSourceDirectory, String>() { |
| @Override |
| public String fun(IdeaSourceDirectory sourceDirectory) { |
| String path = |
| FileUtil.toCanonicalPath(FileUtil.getRelativePath(new File(testDir, moduleName), sourceDirectory.getDirectory())); |
| Assert.assertNotNull(path); |
| return path.substring(path.indexOf("/") + 1); |
| } |
| }); |
| Collections.sort(list); |
| return list; |
| } |
| |
| @Override |
| protected Set<Class> getModels() { |
| return ContainerUtil.<Class>set(ModuleExtendedModel.class); |
| } |
| } |
| |