/******************************************************************************* * Copyright (c) 2005, 2015 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marc-Andre Laperle (Ericsson) - initial API and implementation adapted from GCCBuildCommandParserTest *******************************************************************************/ package org.eclipse.cdt.autotools.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.util.List; import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.settings.model.CIncludePathEntry; import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICLanguageSettingEntry; import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescriptionManager; import org.eclipse.cdt.core.testplugin.ResourceHelper; import org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuildCommandParser; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.junit.Test; /** * Test cases to test libtool build command parser. */ public class LibtoolGCCBuildCommandParserTest { // ID of the parser taken from the extension point private static final String BUILD_COMMAND_PARSER_EXT = "org.eclipse.cdt.autotools.core.LibtoolGCCBuildCommandParser"; //$NON-NLS-1$ /** * Helper method to fetch configuration descriptions. */ private ICConfigurationDescription[] getConfigurationDescriptions(IProject project) { CoreModel coreModel = CoreModel.getDefault(); ICProjectDescriptionManager mngr = coreModel.getProjectDescriptionManager(); // project description ICProjectDescription projectDescription = mngr.getProjectDescription(project, false); assertNotNull(projectDescription); assertEquals(1, projectDescription.getConfigurations().length); // configuration description ICConfigurationDescription[] cfgDescriptions = projectDescription.getConfigurations(); return cfgDescriptions; } /** * Test possible variations of libtool/compiler command. */ @Test public void testProcessLine() throws Exception { // Create model project and accompanied descriptions String projectName = "testProcessLine"; IProject project = ResourceHelper.createCDTProjectWithConfig(projectName); ICConfigurationDescription[] cfgDescriptions = getConfigurationDescriptions(project); ICConfigurationDescription cfgDescription = cfgDescriptions[0]; IFile file1 = ResourceHelper.createFile(project, "file1.cpp"); IFile file2 = ResourceHelper.createFile(project, "file2.cpp"); IFile file3 = ResourceHelper.createFile(project, "file3.cpp"); String languageId = LanguageSettingsManager.getLanguages(file1, cfgDescription).get(0); // create GCCBuildCommandParser GCCBuildCommandParser parser = (GCCBuildCommandParser) LanguageSettingsManager .getExtensionProviderCopy(BUILD_COMMAND_PARSER_EXT, true); // parse line parser.startup(cfgDescription, null); parser.processLine("libtool: compile: gcc -I/path0 file1.cpp"); parser.processLine("libtool: compile: g++ -I/path0 file2.cpp"); parser.processLine("libtool: compile: cc -I/path0 file3.cpp"); parser.shutdown(); List<ICLanguageSettingEntry> entries = parser.getSettingEntries(cfgDescription, file1, languageId); assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); entries = parser.getSettingEntries(cfgDescription, file2, languageId); assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); entries = parser.getSettingEntries(cfgDescription, file3, languageId); assertEquals(new CIncludePathEntry("/path0", 0), entries.get(0)); } }