| /* |
| * Copyright (C) 2013 The Android Open Source Project |
| * |
| * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php |
| * |
| * 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.ide.eclipse.adt.internal.wizards.exportgradle; |
| |
| import static com.android.sdklib.internal.project.ProjectProperties.PROPERTY_LIBRARY; |
| |
| import com.android.SdkConstants; |
| import com.android.ide.eclipse.adt.AdtPlugin; |
| import com.android.ide.eclipse.adt.AdtUtils; |
| import com.android.ide.eclipse.adt.internal.editors.layout.refactoring.AdtProjectTest; |
| import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper; |
| import com.android.ide.eclipse.adt.internal.sdk.ProjectState; |
| import com.android.ide.eclipse.adt.internal.sdk.Sdk; |
| import com.android.ide.eclipse.adt.internal.wizards.newproject.NewProjectCreator; |
| import com.android.ide.eclipse.adt.internal.wizards.newproject.NewProjectWizardState; |
| import com.android.ide.eclipse.adt.internal.wizards.newproject.NewProjectWizardState.Mode; |
| import com.android.sdklib.internal.project.ProjectPropertiesWorkingCopy; |
| import com.google.common.base.Charsets; |
| import com.google.common.io.Files; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.core.runtime.QualifiedName; |
| import org.eclipse.core.runtime.jobs.Job; |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jface.operation.IRunnableContext; |
| import org.eclipse.jface.operation.IRunnableWithProgress; |
| |
| import java.io.File; |
| import java.lang.reflect.InvocationTargetException; |
| import java.util.Collections; |
| |
| public class ExportGradleTest extends AdtProjectTest { |
| private QualifiedName ERROR_KEY = new QualifiedName(AdtPlugin.PLUGIN_ID, "JobErrorKey"); |
| private Throwable mLastThrown; |
| |
| @Override |
| public void setUp() throws Exception { |
| super.setUp(); |
| mLastThrown = null; |
| } |
| |
| @Override |
| protected boolean testCaseNeedsUniqueProject() { |
| return true; |
| } |
| |
| public void testSimpleAndroidApp() throws Throwable { |
| IProject project = getProject("simple-app"); |
| final IJavaProject javaProject = BaseProjectHelper.getJavaProject(project); |
| |
| final ProjectSetupBuilder builder = new ProjectSetupBuilder(); |
| builder.setProject(Collections.singletonList(javaProject)); |
| |
| Job job = new Job("Validate project") { |
| @Override |
| protected IStatus run(IProgressMonitor monitor) { |
| try { |
| BuildFileCreator.createBuildFiles(builder, null, monitor); |
| File buildfile = new File(javaProject.getResource().getLocation().toString(), |
| BuildFileCreator.BUILD_FILE); |
| assertTrue(buildfile.exists()); |
| String contents = Files.toString(buildfile, Charsets.UTF_8); |
| String expectedContents = |
| "buildscript {\n" + |
| " repositories {\n" + |
| " " + BuildFileCreator.MAVEN_REPOSITORY + "\n" + |
| " }\n" + |
| " dependencies {\n" + |
| " " + BuildFileCreator.PLUGIN_CLASSPATH + "\n" + |
| " }\n" + |
| "}\n" + |
| "apply plugin: 'android'\n" + |
| "\n" + |
| "dependencies {\n" + |
| "}\n" + |
| "\n" + |
| "android {\n" + |
| " compileSdkVersion 16\n" + |
| " buildToolsVersion \"16\"\n" + |
| "\n" + |
| " defaultConfig {\n" + |
| " minSdkVersion 1\n" + |
| " targetSdkVersion 1\n" + |
| " }\n" + |
| " sourceSets {\n" + |
| " main {\n" + |
| " manifest.srcFile 'AndroidManifest.xml'\n" + |
| " java.srcDirs = ['src']\n" + |
| " resources.srcDirs = ['src']\n" + |
| " aidl.srcDirs = ['src']\n" + |
| " renderscript.srcDirs = ['src']\n" + |
| " res.srcDirs = ['res']\n" + |
| " assets.srcDirs = ['assets']\n" + |
| " }\n" + |
| " instrumentTest.setRoot('tests')\n" + |
| " }\n" + |
| "}"; |
| |
| assertEqualsWhitespaceInsensitive(expectedContents, contents); |
| } catch (Throwable t) { |
| mLastThrown = t; |
| } |
| return null; |
| } |
| }; |
| job.schedule(1000); |
| job.join(); |
| Object property = job.getProperty(ERROR_KEY); |
| assertNull(property); |
| if (mLastThrown != null) { |
| throw mLastThrown; |
| } |
| } |
| |
| public void testSimpleAndroidLib() throws Throwable { |
| final IProject project = getProject("simple-library"); |
| ProjectState projectState = Sdk.getProjectState(project.getProject()); |
| ProjectPropertiesWorkingCopy propertiesWorkingCopy = projectState.getProperties().makeWorkingCopy(); |
| propertiesWorkingCopy.setProperty(PROPERTY_LIBRARY, "true"); |
| propertiesWorkingCopy.save(); |
| IResource projectProp = project.findMember(SdkConstants.FN_PROJECT_PROPERTIES); |
| if (projectProp != null) { |
| projectProp.refreshLocal(IResource.DEPTH_ZERO, new NullProgressMonitor()); |
| } |
| |
| Job job = new Job("Validate project") { |
| @Override |
| protected IStatus run(IProgressMonitor monitor) { |
| try { |
| IJavaProject javaProject = BaseProjectHelper.getJavaProject(project); |
| |
| final ProjectSetupBuilder builder = new ProjectSetupBuilder(); |
| builder.setProject(Collections.singletonList(javaProject)); |
| |
| BuildFileCreator.createBuildFiles(builder, null, monitor); |
| File buildfile = new File(javaProject.getResource().getLocation().toString(), |
| BuildFileCreator.BUILD_FILE); |
| assertTrue(buildfile.exists()); |
| String contents = Files.toString(buildfile, Charsets.UTF_8); |
| String expectedContents = |
| "buildscript {\n" + |
| " repositories {\n" + |
| " " + BuildFileCreator.MAVEN_REPOSITORY + "\n" + |
| " }\n" + |
| " dependencies {\n" + |
| " " + BuildFileCreator.PLUGIN_CLASSPATH + "\n" + |
| " }\n" + |
| "}\n" + |
| "apply plugin: 'android-library'\n" + |
| "\n" + |
| "dependencies {\n" + |
| "}\n" + |
| "\n" + |
| "android {\n" + |
| " compileSdkVersion 16\n" + |
| " buildToolsVersion \"16\"\n" + |
| "\n" + |
| " defaultConfig {\n" + |
| " minSdkVersion 1\n" + |
| " targetSdkVersion 1\n" + |
| " }\n" + |
| " sourceSets {\n" + |
| " main {\n" + |
| " manifest.srcFile 'AndroidManifest.xml'\n" + |
| " java.srcDirs = ['src']\n" + |
| " resources.srcDirs = ['src']\n" + |
| " aidl.srcDirs = ['src']\n" + |
| " renderscript.srcDirs = ['src']\n" + |
| " res.srcDirs = ['res']\n" + |
| " assets.srcDirs = ['assets']\n" + |
| " }\n" + |
| " instrumentTest.setRoot('tests')\n" + |
| " }\n" + |
| "}"; |
| |
| assertEqualsWhitespaceInsensitive(expectedContents, contents); |
| } catch (Throwable t) { |
| mLastThrown = t; |
| } |
| return null; |
| } |
| }; |
| job.schedule(1000); |
| job.join(); |
| Object property = job.getProperty(ERROR_KEY); |
| assertNull(property); |
| if (mLastThrown != null) { |
| throw mLastThrown; |
| } |
| } |
| |
| public void testPlainJavaProject() throws Throwable { |
| IProject project = getJavaProject("simple-java"); |
| final IJavaProject javaProject = BaseProjectHelper.getJavaProject(project); |
| |
| final ProjectSetupBuilder builder = new ProjectSetupBuilder(); |
| builder.setProject(Collections.singletonList(javaProject)); |
| |
| BuildFileCreator.createBuildFiles(builder, null, null); |
| Job job = new Job("Validate project") { |
| @Override |
| protected IStatus run(IProgressMonitor monitor) { |
| try { |
| File buildfile = new File(javaProject.getResource().getLocation().toString(), "build.gradle"); |
| assertTrue(buildfile.exists()); |
| String contents = Files.toString(buildfile, Charsets.UTF_8); |
| String expectedContents = |
| "apply plugin: 'java'\n" + |
| "sourceSets {\n" + |
| " main.java.srcDirs = ['src']\n" + |
| "}"; |
| |
| assertEqualsWhitespaceInsensitive(expectedContents, contents); |
| } catch (Throwable t) { |
| mLastThrown = t; |
| } |
| return null; |
| } |
| }; |
| job.schedule(1000); |
| job.join(); |
| Object property = job.getProperty(ERROR_KEY); |
| assertNull(property); |
| if (mLastThrown != null) { |
| throw mLastThrown; |
| } |
| } |
| |
| protected IProject getProject(String projectName) { |
| IProject project = createProject(projectName); |
| assertNotNull(project); |
| if (!testCaseNeedsUniqueProject() && !testNeedsUniqueProject()) { |
| addCleanupDir(AdtUtils.getAbsolutePath(project).toFile()); |
| } |
| addCleanupDir(project.getFullPath().toFile()); |
| return project; |
| } |
| |
| protected IProject getJavaProject(String projectName) { |
| IProject project = createJavaProject(projectName); |
| assertNotNull(project); |
| if (!testCaseNeedsUniqueProject() && !testNeedsUniqueProject()) { |
| addCleanupDir(AdtUtils.getAbsolutePath(project).toFile()); |
| } |
| addCleanupDir(project.getFullPath().toFile()); |
| return project; |
| } |
| |
| protected IProject createJavaProject(String name) { |
| IRunnableContext context = new IRunnableContext() { |
| @Override |
| public void run(boolean fork, boolean cancelable, IRunnableWithProgress runnable) |
| throws InvocationTargetException, InterruptedException { |
| runnable.run(new NullProgressMonitor()); |
| } |
| }; |
| NewProjectWizardState state = new NewProjectWizardState(Mode.ANY); |
| state.projectName = name; |
| state.packageName = TEST_PROJECT_PACKAGE; |
| state.activityName = name; |
| state.applicationName = name; |
| state.createActivity = false; |
| state.useDefaultLocation = true; |
| if (getMinSdk() != -1) { |
| state.minSdk = Integer.toString(getMinSdk()); |
| } |
| |
| NewProjectCreator creator = new NewProjectCreator(state, context); |
| creator.createJavaProjects(); |
| return validateProjectExists(name); |
| } |
| |
| /** |
| * Compares two strings, disregarding whitespace. This makes the test less brittle with respect |
| * to insignificant changes. |
| */ |
| protected void assertEqualsWhitespaceInsensitive(String a, String b) { |
| a = stripWhitespace(a); |
| b = stripWhitespace(b); |
| assertEquals("Expected:\n" + a + "\nbut was:\n" + b + "\n\n", a, b); |
| } |
| |
| protected String stripWhitespace(String s) { |
| return s.replaceAll("\\s",""); |
| } |
| } |