/******************************************************************************* * Copyright (c) 2004, 2008 Intel 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: * Intel Corporation - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.ui.tests.chelp; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.cdt.core.dom.IPDOMManager; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.testplugin.CProjectHelper; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.ICHelpBook; import org.eclipse.cdt.ui.ICHelpResourceDescriptor; import org.eclipse.cdt.ui.IFunctionSummary; import org.eclipse.cdt.ui.text.ICHelpInvocationContext; import org.eclipse.cdt.internal.ui.CHelpProviderManager; import org.eclipse.cdt.internal.ui.text.CHelpBookDescriptor; import org.eclipse.cdt.internal.ui.text.CHelpSettings; /** * * CHelpProvider tests */ public class CHelpTest extends TestCase { public final static String TEST_EXTENSION_ID_PREFIX = "org.eclipse.cdt.ui.tests.chelp.extension"; //$NON-NLS-1$ private final static String C_PROJECT_NAME = "cHelpTestProject"; //$NON-NLS-1$ private final static String CC_PROJECT_NAME = "ccHelpTestProject"; //$NON-NLS-1$ private final static String BIN_DIR_NAME = "bin"; //$NON-NLS-1$ private ICProject fCProject = null; private ICProject fCCProject = null; private ICHelpInvocationContext fDefaultCCHelpContext = null; private ICHelpInvocationContext fDefaultCHelpContext = null; private ICHelpInvocationContext getDefaultCCHelpContext() throws CoreException{ if(fDefaultCCHelpContext == null){ final IProject project = getCCProject().getProject(); fDefaultCCHelpContext = new ICHelpInvocationContext(){ public IProject getProject(){ return project; } public ITranslationUnit getTranslationUnit(){ return null; } }; } return fDefaultCCHelpContext; } private ICHelpInvocationContext getDefaultCHelpContext() throws CoreException{ if(fDefaultCHelpContext == null){ final IProject project = getCProject().getProject(); fDefaultCHelpContext = new ICHelpInvocationContext(){ public IProject getProject(){ return project; } public ITranslationUnit getTranslationUnit(){ return null; } }; } return fDefaultCHelpContext; } private ICProject getCProject() throws CoreException{ if(fCProject == null) fCProject = CProjectHelper.createCProject(C_PROJECT_NAME, BIN_DIR_NAME, IPDOMManager.ID_NO_INDEXER); return fCProject; } private ICProject getCCProject() throws CoreException{ if(fCCProject == null) fCCProject = CProjectHelper.createCCProject(CC_PROJECT_NAME, BIN_DIR_NAME, IPDOMManager.ID_NO_INDEXER); return fCCProject; } public static Test suite() { return new TestSuite(CHelpTest.class); } @Override protected void setUp() throws Exception { super.setUp(); CHelpTestInfoProvider.fgEnabled= true; } @Override protected void tearDown() throws Exception { CHelpTestInfoProvider.fgEnabled= false; super.tearDown(); } public void testCHelpProviderManagerGeneral(){ CHelpProviderManager mngr = CHelpProviderManager.getDefault(); if(mngr == null) fail("manager not created"); //$NON-NLS-1$ if(mngr != CHelpProviderManager.getDefault()) fail("getDefault returned an other instance of manager"); //$NON-NLS-1$ try{ ICHelpInvocationContext cContext = getDefaultCHelpContext(); ICHelpInvocationContext ccContext = getDefaultCCHelpContext(); String requestedName = "dummyName"; //$NON-NLS-1$ CHelpProviderManager.getDefault().getMatchingFunctions(cContext,requestedName); CHelpProviderManager.getDefault().getMatchingFunctions(ccContext,requestedName); CHelpProviderManager.getDefault().getFunctionInfo(cContext,requestedName); CHelpProviderManager.getDefault().getFunctionInfo(ccContext,requestedName); CHelpProviderManager.getDefault().getHelpResources(cContext,requestedName); CHelpProviderManager.getDefault().getHelpResources(ccContext,requestedName); IConfigurationElement configElements[] = Platform.getExtensionRegistry().getConfigurationElementsFor(CUIPlugin.PLUGIN_ID, CHelpSettings.CONTRIBUTION_EXTENSION); int numExts = 0; for(int i = 0; i < configElements.length; i++){ String id = configElements[i].getAttribute("id"); //$NON-NLS-1$ if(id.startsWith(TEST_EXTENSION_ID_PREFIX)) numExts++; } assertTrue("number of provider instances created (" + CHelpTestInfoProvider.getNumProviders() + ") is not equal to number of extensions (" + numExts + ")",numExts == CHelpTestInfoProvider.getNumProviders()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ }catch(CoreException e){ fail("CoreException occured: " + e.getMessage()); //$NON-NLS-1$ } } public void testGetMatchingFunctions(){ if(!CHelpProviderTester.getDefault().onlyTestInfoProvidersAvailable()){ //this test assumes that only CHelpTestInfoProviders are available return; } try{ ICHelpInvocationContext cContext = getDefaultCHelpContext(); ICHelpInvocationContext ccContext = getDefaultCCHelpContext(); String requestedName = "dummyName"; //$NON-NLS-1$ IFunctionSummary summaries[] = CHelpProviderManager.getDefault().getMatchingFunctions(cContext,requestedName); CHelpProviderTester.getDefault().checkMatchingFunctions(summaries, cContext, requestedName); summaries = CHelpProviderManager.getDefault().getMatchingFunctions(ccContext,requestedName); CHelpProviderTester.getDefault().checkMatchingFunctions(summaries, ccContext, requestedName); } catch(CoreException e){ fail("CoreException occured: " + e.getMessage()); //$NON-NLS-1$ } } public void testGetFunctionInfo(){ if(!CHelpProviderTester.getDefault().onlyTestInfoProvidersAvailable()){ //this test assumes that only CHelpTestInfoProviders are available return; } try{ ICHelpInvocationContext cContext = getDefaultCHelpContext(); ICHelpInvocationContext ccContext = getDefaultCCHelpContext(); String requestedName = "dummyName"; //$NON-NLS-1$ IFunctionSummary summary = CHelpProviderManager.getDefault().getFunctionInfo(cContext,requestedName); CHelpProviderTester.getDefault().checkFunctionInfo(summary, cContext, requestedName); summary = CHelpProviderManager.getDefault().getFunctionInfo(ccContext,requestedName); CHelpProviderTester.getDefault().checkFunctionInfo(summary, ccContext, requestedName); } catch(CoreException e){ fail("CoreException occured: " + e.getMessage()); //$NON-NLS-1$ } } public void testGetHelpResources(){ if(!CHelpProviderTester.getDefault().onlyTestInfoProvidersAvailable()){ //this test assumes that only CHelpTestInfoProviders are available return; } try{ ICHelpInvocationContext cContext = getDefaultCHelpContext(); ICHelpInvocationContext ccContext = getDefaultCCHelpContext(); String requestedName = "dummyName"; //$NON-NLS-1$ ICHelpResourceDescriptor resourceDes[] = CHelpProviderManager.getDefault().getHelpResources(cContext,requestedName); CHelpProviderTester.getDefault().checkHelpResources(resourceDes, cContext, requestedName); resourceDes = CHelpProviderManager.getDefault().getHelpResources(ccContext,requestedName); CHelpProviderTester.getDefault().checkHelpResources(resourceDes, ccContext, requestedName); } catch(CoreException e){ fail("CoreException occured: " + e.getMessage()); //$NON-NLS-1$ } } public void testCHelpBookDescriptors(){ CHelpProviderManager mngr = CHelpProviderManager.getDefault(); try{ CHelpBookDescriptor ccBookDescriptors[] = mngr.getCHelpBookDescriptors(getDefaultCCHelpContext()); CHelpBookDescriptor cBookDescriptors[] = mngr.getCHelpBookDescriptors(getDefaultCHelpContext()); assertTrue("CC book descriptors length (" + ccBookDescriptors.length + ") is less than C book descriptors length (" + cBookDescriptors.length + ")", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ ccBookDescriptors.length >= cBookDescriptors.length); for(int i = 0; i < cBookDescriptors.length; i++){ CHelpBookDescriptor curBookDes = cBookDescriptors[i]; assertTrue("book \"" + curBookDes.getCHelpBook().getTitle() + "\" of type HELP_TYPE_CPP in book descriptors for C project \"" + getDefaultCHelpContext().getProject().getName() + "\"", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ curBookDes.getCHelpBook().getCHelpType() != ICHelpBook.HELP_TYPE_CPP); int j = 0; for(; j < ccBookDescriptors.length; j++){ if(ccBookDescriptors[j].getCHelpBook().getTitle().equals(curBookDes.getCHelpBook().getTitle())) break; } assertTrue("book \"" + curBookDes.getCHelpBook().getTitle() + "\" was not found in CC books",j < ccBookDescriptors.length); //$NON-NLS-1$ //$NON-NLS-2$ } for(int i = 0; i < ccBookDescriptors.length; i++){ CHelpBookDescriptor curBookDes = ccBookDescriptors[i]; int j = 0; for(; j < cBookDescriptors.length; j++){ if(cBookDescriptors[j].getCHelpBook().getTitle().equals(curBookDes.getCHelpBook().getTitle())) break; } assertTrue("book \"" + curBookDes.getCHelpBook().getTitle() + "\" of type HELP_TYPE_C was not found in C books", //$NON-NLS-1$ //$NON-NLS-2$ j < cBookDescriptors.length || curBookDes.getCHelpBook().getCHelpType() == ICHelpBook.HELP_TYPE_CPP); } } catch(CoreException e){ fail("CoreException occured: " + e.getMessage()); //$NON-NLS-1$ } } }