blob: b92e31dee16f96ca5e929e408c435f6d544026f3 [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* 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 com.android.tools.idea.templates;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.util.io.FileUtil;
import org.jetbrains.android.AndroidTestCase;
import org.jetbrains.annotations.Nullable;
import java.io.File;
/**
* Test gradle merging by PSI tree implementation
*/
public class GradleFileMergerTest extends AndroidTestCase {
public void testProjectDisposal() throws Exception {
Project[] openProjects = ProjectManager.getInstance().getOpenProjects();
checkFileMerge("templates/Base.gradle", "templates/NewFlavor.gradle", "templates/MergedNewFlavor.gradle", null);
Project[] postMergeOpenProjects = ProjectManager.getInstance().getOpenProjects();
assertFalse(postMergeOpenProjects.length > openProjects.length);
for (Project p : postMergeOpenProjects) {
if (p.getName().equals("MergingOnly")) {
fail();
}
}
}
public void testInsertFlavor() throws Exception {
checkFileMerge("templates/Base.gradle",
"templates/NewFlavor.gradle",
"templates/MergedNewFlavor.gradle");
}
public void testInsertBuildType() throws Exception {
checkFileMerge("templates/Base.gradle",
"templates/NewBuildType.gradle",
"templates/MergedNewBuildType.gradle");
}
public void testMergeDependencies() throws Exception {
checkDependencyMerge("templates/Base.gradle", "templates/NewDependencies.gradle", "templates/MergedNewDependencies.gradle");
}
public void testMergeCloudDependencies() throws Exception {
checkDependencyMerge("templates/Base.gradle", "templates/CloudDependencies.gradle", "templates/MergedCloudDependencies.gradle");
}
public void testMergeCloudDependenciesDuplicate() throws Exception {
checkDependencyMerge("templates/Base.gradle", "templates/CloudDependenciesDuplicate.gradle",
"templates/MergedCloudDependenciesDuplicate.gradle");
}
public void testMergeCloudDependenciesExclude() throws Exception {
checkDependencyMerge("templates/BaseExclude.gradle", "templates/CloudDependencies.gradle",
"templates/MergedCloudDependenciesExclude.gradle");
}
private void checkDependencyMerge(String destPath, String srcPath, String goldenPath) {
File destFile = new File(getTestDataPath(), FileUtil.toSystemDependentName(destPath));
String dest = TemplateUtils.readTextFile(destFile);
assertNotNull(dest);
File srcFile = new File(getTestDataPath(), FileUtil.toSystemDependentName(srcPath));
String source = TemplateUtils.readTextFile(srcFile);
assertNotNull(source);
File goldenFile = new File(getTestDataPath(), FileUtil.toSystemDependentName(goldenPath));
String golden = TemplateUtils.readTextFile(goldenFile);
assertNotNull(golden);
// Strip comments from merged file
assertEquals(golden.replaceAll("\\s+","\n"),
GradleFileMerger.mergeGradleFiles(source, dest, getProject()).replaceAll("\\s+//.*", "").replaceAll("\\s+", "\n"));
}
public void testRemapFlavorAssetDir() throws Exception {
checkFileMerge("templates/Base.gradle",
"templates/RemapFlavorAssetDir.gradle",
"templates/MergedRemapFlavorAssetDir.gradle");
}
public void testRenameAndroidManifestFile() throws Exception {
checkFileMerge("templates/Base.gradle",
"templates/RenameManifest.gradle",
"templates/MergedRenameManifest.gradle");
}
private void checkFileMerge(@Nullable String destPath, @Nullable String srcPath, @Nullable String goldenPath) throws Exception {
checkFileMerge(destPath, srcPath, goldenPath, getProject());
}
private static void checkFileMerge(@Nullable String destPath, @Nullable String srcPath, @Nullable String goldenPath,
@Nullable Project project) throws Exception {
String source = "";
String dest = "";
String golden = "";
if (destPath != null) {
File destFile = new File(getTestDataPath(), FileUtil.toSystemDependentName(destPath));
dest = TemplateUtils.readTextFile(destFile);
assertNotNull(dest);
}
if (srcPath != null) {
File srcFile = new File(getTestDataPath(), FileUtil.toSystemDependentName(srcPath));
source = TemplateUtils.readTextFile(srcFile);
assertNotNull(source);
}
if (goldenPath != null) {
File goldenFile = new File(getTestDataPath(), FileUtil.toSystemDependentName(goldenPath));
golden = TemplateUtils.readTextFile(goldenFile);
assertNotNull(golden);
}
assertEquals(golden.replaceAll("\\s+","\n"),
GradleFileMerger.mergeGradleFiles(source, dest, project).replaceAll("\\s+", "\n"));
}
}