blob: 8a1936a51dfb31d15046f8eea3901ae142d95af1 [file] [log] [blame]
/*
* 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);
}
}