| /* |
| * 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.npw; |
| |
| import com.android.tools.idea.npw.AssetStudioAssetGenerator; |
| import com.android.tools.idea.npw.NewProjectWizardState; |
| import com.android.tools.idea.npw.TemplateWizardModuleBuilder; |
| import com.android.tools.idea.templates.AndroidGradleTestCase; |
| import com.android.tools.idea.templates.TemplateManager; |
| import com.android.tools.idea.templates.TemplateUtils; |
| import com.intellij.ide.util.projectWizard.ModuleWizardStep; |
| import com.intellij.openapi.application.ApplicationManager; |
| import com.intellij.openapi.util.io.FileUtil; |
| |
| import java.io.File; |
| import java.util.ArrayList; |
| |
| import static com.android.tools.idea.templates.Template.CATEGORY_PROJECTS; |
| import static com.android.tools.idea.templates.TemplateMetadata.*; |
| import static com.android.tools.idea.npw.AssetStudioAssetGenerator.ATTR_ASSET_TYPE; |
| import static com.android.tools.idea.npw.NewModuleWizardState.ATTR_CREATE_ACTIVITY; |
| import static com.android.tools.idea.npw.NewModuleWizardState.ATTR_PROJECT_LOCATION; |
| import static com.android.tools.idea.npw.FormFactorUtils.ATTR_MODULE_NAME; |
| |
| |
| /** |
| * Tests for creating modules |
| */ |
| public class TemplateWizardModuleBuilderTest extends AndroidGradleTestCase { |
| |
| File myProjectRoot; |
| |
| public void testConstructor() throws Exception { |
| // Null project means creating a new project |
| TemplateWizardModuleBuilder moduleBuilder1 = new TemplateWizardModuleBuilder( |
| null, null, null, null, new ArrayList<ModuleWizardStep>(), getTestRootDisposable(), false); |
| assertTrue(moduleBuilder1.myWizardState.getBoolean(ATTR_IS_LAUNCHER)); |
| assertEquals(NewProjectWizardState.getProjectFileDirectory(), moduleBuilder1.myWizardState.get(ATTR_PROJECT_LOCATION)); |
| assertDoesntContain(moduleBuilder1.myWizardState.myHidden, ATTR_MODULE_NAME); |
| |
| assertNotNull(moduleBuilder1.myWizardState.get(ATTR_GRADLE_VERSION)); |
| assertNotNull(moduleBuilder1.myWizardState.get(ATTR_GRADLE_PLUGIN_VERSION)); |
| |
| assertEquals(AssetStudioAssetGenerator.AssetType.LAUNCHER.name(), moduleBuilder1.myWizardState.getString(ATTR_ASSET_TYPE)); |
| assertTrue(moduleBuilder1.myInitializationComplete); |
| |
| // Non-null project means we're adding a module to an existing project |
| TemplateWizardModuleBuilder moduleBuilder2 = new TemplateWizardModuleBuilder( |
| null, null, getProject(), null, new ArrayList<ModuleWizardStep>(), getTestRootDisposable(), true); |
| assertFalse(moduleBuilder2.myWizardState.getBoolean(ATTR_IS_LAUNCHER)); |
| assertContainsElements(moduleBuilder2.myWizardState.myHidden, ATTR_MODULE_NAME); |
| |
| assertNotNull(moduleBuilder2.myWizardState.get(ATTR_PROJECT_LOCATION)); |
| assertEquals(FileUtil.toSystemIndependentName(getProject().getBasePath()), |
| moduleBuilder2.myWizardState.getString(ATTR_PROJECT_LOCATION)); |
| } |
| |
| private TemplateWizardModuleBuilder setUpModuleCreator(String templateName) { |
| myProjectRoot = new File(getProject().getBasePath()); |
| File templateFile = new File(TemplateManager.getTemplateRootFolder(), |
| FileUtil.join(CATEGORY_PROJECTS, templateName)); |
| assertTrue(templateFile.exists()); |
| |
| final TemplateWizardModuleBuilder moduleBuilder = new TemplateWizardModuleBuilder( |
| templateFile, null, getProject(), null, new ArrayList<ModuleWizardStep>(), getTestRootDisposable(), false); |
| |
| moduleBuilder.myWizardState.put(ATTR_IS_LIBRARY_MODULE, false); |
| moduleBuilder.myWizardState.put(ATTR_PACKAGE_NAME, "com.test.foo"); |
| moduleBuilder.myWizardState.put(ATTR_CREATE_ACTIVITY, false); |
| moduleBuilder.myWizardState.put(ATTR_MODULE_NAME, "app"); |
| moduleBuilder.myWizardState.put(ATTR_CREATE_ICONS, false); |
| |
| return moduleBuilder; |
| } |
| |
| public void testCreateAndroidApplicationModule() throws Exception { |
| final TemplateWizardModuleBuilder moduleBuilder = setUpModuleCreator(NewProjectWizardState.MODULE_TEMPLATE_NAME); |
| |
| ApplicationManager.getApplication().runWriteAction(new Runnable() { |
| @Override |
| public void run() { |
| moduleBuilder.getDefaultPath().createModule(); |
| assertFilesExist(myProjectRoot, |
| "settings.gradle", |
| "app", |
| "app/src/main/java/com/test/foo", |
| "app/src/main/AndroidManifest.xml", |
| "app/src/main/res", |
| "app/libs", |
| "app/.gitignore", |
| "app/build.gradle", |
| "app/proguard-rules.pro"); |
| File buildGradleFile = new File(myProjectRoot, FileUtil.join("app", "build.gradle")); |
| String contents = TemplateUtils.readTextFile(buildGradleFile); |
| assertNotNull(contents); |
| assertFalse(contents.contains("android-library")); |
| assertTrue(contents.contains("apply plugin: 'com.android.application'")); |
| |
| File settingsGradleFile = new File(myProjectRoot, "settings.gradle"); |
| contents = TemplateUtils.readTextFile(settingsGradleFile); |
| assertNotNull(contents); |
| assertTrue(contents.contains("app")); |
| } |
| }); |
| } |
| |
| public void testCreateAndroidLibraryModule() throws Exception { |
| final TemplateWizardModuleBuilder moduleBuilder = setUpModuleCreator(NewProjectWizardState.MODULE_TEMPLATE_NAME); |
| |
| moduleBuilder.myWizardState.put(ATTR_IS_LIBRARY_MODULE, true); |
| moduleBuilder.myWizardState.put(ATTR_MODULE_NAME, "lib"); |
| |
| ApplicationManager.getApplication().runWriteAction(new Runnable() { |
| @Override |
| public void run() { |
| moduleBuilder.getDefaultPath().createModule(); |
| assertFilesExist(myProjectRoot, |
| "settings.gradle", |
| "lib", |
| "lib/src/main/java/com/test/foo", |
| "lib/src/main/AndroidManifest.xml", |
| "lib/src/main/res", |
| "lib/libs", |
| "lib/.gitignore", |
| "lib/build.gradle", |
| "lib/proguard-rules.pro"); |
| File buildGradleFile = new File(myProjectRoot, FileUtil.join("lib", "build.gradle")); |
| String contents = TemplateUtils.readTextFile(buildGradleFile); |
| assertNotNull(contents); |
| assertTrue(contents.contains("apply plugin: 'com.android.library'")); |
| |
| File settingsGradleFile = new File(myProjectRoot, "settings.gradle"); |
| contents = TemplateUtils.readTextFile(settingsGradleFile); |
| assertNotNull(contents); |
| assertTrue(contents.contains("lib")); |
| } |
| }); |
| } |
| |
| public void testCreateJavaLibraryModule() throws Exception { |
| final TemplateWizardModuleBuilder moduleBuilder = setUpModuleCreator("NewJavaLibrary"); |
| |
| moduleBuilder.myWizardState.put(ATTR_MODULE_NAME, "lib"); |
| moduleBuilder.myWizardState.put("className", "FooClass"); |
| |
| ApplicationManager.getApplication().runWriteAction(new Runnable() { |
| @Override |
| public void run() { |
| moduleBuilder.getDefaultPath().createModule(); |
| assertFilesExist(myProjectRoot, |
| "lib", |
| "lib/src/main/java/com/test/foo/FooClass.java", |
| "lib/libs", |
| "lib/.gitignore", |
| "lib/build.gradle"); |
| File buildGradleFile = new File(myProjectRoot, FileUtil.join("lib", "build.gradle")); |
| String contents = TemplateUtils.readTextFile(buildGradleFile); |
| assertNotNull(contents); |
| assertFalse(contents.contains("android")); |
| assertTrue(contents.contains("apply plugin: 'java'")); |
| |
| File settingsGradleFile = new File(myProjectRoot, "settings.gradle"); |
| contents = TemplateUtils.readTextFile(settingsGradleFile); |
| assertNotNull(contents); |
| assertTrue(contents.contains("lib")); |
| } |
| }); |
| } |
| } |