diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.tests')
2 files changed, 292 insertions, 1 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/AdtProjectTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/AdtProjectTest.java index 8dd83d7..9c48ccd 100644 --- a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/AdtProjectTest.java +++ b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/editors/layout/refactoring/AdtProjectTest.java @@ -317,7 +317,7 @@ public abstract class AdtProjectTest extends SdkLoadingTestCase { assertNotNull(target); } - private static IProject validateProjectExists(String name) { + protected static IProject validateProjectExists(String name) { IProject iproject = getProject(name); assertTrue(String.format("%s project not created", name), iproject.exists()); assertTrue(String.format("%s project not opened", name), iproject.isOpen()); diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/wizards/exportgradle/ExportGradleTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/wizards/exportgradle/ExportGradleTest.java new file mode 100644 index 0000000..2cbde5a --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.tests/src/com/android/ide/eclipse/adt/internal/wizards/exportgradle/ExportGradleTest.java @@ -0,0 +1,291 @@ +/* + * 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 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 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.collect.Sets; +import com.google.common.io.Files; + +import java.io.File; +import java.lang.reflect.InvocationTargetException; + +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); + Job job = new Job("Validate project") { + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + BuildFileCreator.createBuildFiles(Sets.newHashSet(javaProject), null, null); + File buildfile = new File(javaProject.getResource().getLocation().toString(), "build.gradle"); + 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); + + BuildFileCreator.createBuildFiles(Sets.newHashSet(javaProject), null, null); + File buildfile = new File(javaProject.getResource().getLocation().toString(), "build.gradle"); + 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); + BuildFileCreator.createBuildFiles(Sets.newHashSet(javaProject), 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",""); + } +}
\ No newline at end of file |