| /******************************************************************************* |
| * Copyright (c) 2017 QNX Software Systems and others. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| *******************************************************************************/ |
| package org.eclipse.cdt.cmake.ui.internal.tests; |
| |
| import static org.eclipse.swtbot.eclipse.finder.matchers.WidgetMatcherFactory.withPartName; |
| import static org.junit.Assert.assertTrue; |
| |
| import org.eclipse.cdt.cmake.core.CMakeNature; |
| import org.eclipse.cdt.core.CCorePlugin; |
| import org.eclipse.cdt.core.index.IIndexManager; |
| import org.eclipse.cdt.core.model.CoreModel; |
| import org.eclipse.cdt.core.model.ICProject; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot; |
| import org.eclipse.swtbot.eclipse.finder.waits.Conditions; |
| import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView; |
| import org.eclipse.swtbot.swt.finder.utils.SWTBotPreferences; |
| import org.eclipse.swtbot.swt.finder.widgets.SWTBotShell; |
| import org.eclipse.swtbot.swt.finder.widgets.SWTBotTable; |
| import org.eclipse.swtbot.swt.finder.widgets.SWTBotTableItem; |
| import org.junit.Before; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| |
| @SuppressWarnings("nls") |
| public class NewCMakeProjectTest { |
| |
| private static SWTWorkbenchBot bot; |
| |
| @BeforeClass |
| public static void beforeClass() { |
| SWTBotPreferences.KEYBOARD_LAYOUT = "EN_US"; |
| SWTBotPreferences.TIMEOUT = 10000; |
| bot = new SWTWorkbenchBot(); |
| } |
| |
| @Before |
| public void before() { |
| bot.resetWorkbench(); |
| |
| for (SWTBotView view : bot.views(withPartName("Welcome"))) { |
| view.close(); |
| } |
| } |
| |
| @Test(timeout = 60000) |
| public void createCMakeProject() throws Exception { |
| // open C++ perspective |
| if (!"C/C++".equals(bot.activePerspective().getLabel())) { |
| bot.perspectiveByLabel("C/C++").activate(); |
| } |
| |
| // Activate C/C++ wizard |
| bot.menu("File").menu("New").menu("C/C++ Project").click(); |
| bot.shell("New C/C++ Project").activate(); |
| |
| // Double click on the template |
| SWTBotTable templateTable = bot.table(); |
| bot.getDisplay().syncExec(() -> { |
| for (int i = 0; i < templateTable.rowCount(); ++i) { |
| SWTBotTableItem item = templateTable.getTableItem(i); |
| if ("CMake Project".equals(item.widget.getData(SWTBotPreferences.DEFAULT_KEY))) { |
| item.doubleClick(); |
| break; |
| } |
| } |
| }); |
| |
| // Select the shell again since magic wizardry happened |
| SWTBotShell newProjectShell = bot.shell("New CMake Project").activate(); |
| bot.waitUntil(Conditions.shellIsActive("New CMake Project")); |
| newProjectShell.setFocus(); |
| |
| // Create the project |
| String projectName = "CMakeTestProj"; |
| bot.textWithLabel("Project name:").setText(projectName); |
| bot.button("Finish").click(); |
| bot.waitUntil(Conditions.shellCloses(newProjectShell)); |
| |
| // Make sure it shows up in Project Explorer |
| SWTBotView explorer = bot.viewByPartName("Project Explorer"); |
| explorer.show(); |
| explorer.setFocus(); |
| bot.tree().getTreeItem(projectName); |
| |
| // Make sure the project indexer completes. At that point we're stable. |
| IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); |
| ICProject cproject = CoreModel.getDefault().create(project); |
| IIndexManager indexManager = CCorePlugin.getIndexManager(); |
| while (!indexManager.isProjectContentSynced(cproject)) { |
| Thread.sleep(1000); |
| } |
| |
| // Make sure it has the right nature |
| assertTrue(project.hasNature(CMakeNature.ID)); |
| } |
| |
| } |