/******************************************************************************* * Copyright (c) 2006, 2010 Wind River Systems, Inc. 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: * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.ui.tests.callhierarchy; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWTException; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.IViewReference; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMManager; import org.eclipse.cdt.core.index.IIndex; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.testplugin.CProjectHelper; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.testplugin.EditorTestHelper; import org.eclipse.cdt.ui.tests.BaseUITestCase; import org.eclipse.cdt.internal.ui.callhierarchy.CHViewPart; import org.eclipse.cdt.internal.ui.callhierarchy.CallHierarchyUI; import org.eclipse.cdt.internal.ui.editor.CEditor; public class CallHierarchyBaseTest extends BaseUITestCase { protected static final int INDEXER_WAIT_TIME = 8000; private static int sProjectCounter= 0; protected ICProject fCProject; protected IIndex fIndex; public CallHierarchyBaseTest(String name) { super(name); } @Override protected void setUp() throws Exception { super.setUp(); CallHierarchyUI.setIsJUnitTest(true); String prjName= "chTest"+sProjectCounter++; fCProject= CProjectHelper.createCCProject(prjName, "bin", IPDOMManager.ID_FAST_INDEXER); CCorePlugin.getIndexManager().joinIndexer(INDEXER_WAIT_TIME, npm()); fIndex= CCorePlugin.getIndexManager().getIndex(fCProject); IWorkbenchPage page= PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); IViewReference[] refs= page.getViewReferences(); for (IViewReference viewReference : refs) { page.setPartState(viewReference, IWorkbenchPage.STATE_RESTORED); } } @Override protected void tearDown() throws Exception { closeAllEditors(); if (fCProject != null) { CProjectHelper.delete(fCProject); } super.tearDown(); } protected IProject getProject() { return fCProject.getProject(); } protected CEditor openEditor(IFile file) throws PartInitException { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); CEditor editor= (CEditor) IDE.openEditor(page, file); EditorTestHelper.joinReconciler(EditorTestHelper.getSourceViewer(editor), 100, 500, 10); return editor; } protected void openCallHierarchy(CEditor editor) { CallHierarchyUI.open(editor, (ITextSelection) editor.getSelectionProvider().getSelection()); } protected void openCallHierarchy(CEditor editor, boolean showReferencedBy) { CallHierarchyUI.setIsJUnitTest(true); CallHierarchyUI.open(editor, (ITextSelection) editor.getSelectionProvider().getSelection()); runEventQueue(0); CHViewPart ch= null; IWorkbenchPage page = editor.getSite().getPage(); for (int i = 0; i < 400; i++) { ch= (CHViewPart)page.findView(CUIPlugin.ID_CALL_HIERARCHY); if (ch != null) break; runEventQueue(10); } assertNotNull(ch); ch.onSetShowReferencedBy(showReferencedBy); } protected TreeViewer getCHTreeViewer() { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); runEventQueue(0); CHViewPart ch= null; for (int i=0; i<50; i++) { ch= (CHViewPart)page.findView(CUIPlugin.ID_CALL_HIERARCHY); if (ch != null) break; runEventQueue(10); } assertNotNull(ch); return ch.getTreeViewer(); } protected TreeItem checkTreeNode(TreeItem root, int i1, String label) { TreeItem item= null; try { for (int i=0; i<200; i++) { item= root.getItem(i1); try { String text= item.getText(); if (!"...".equals(text) && !"".equals(text)) { break; } } catch (SWTException e) { // in case widget was disposed, item may be replaced } runEventQueue(10); } } catch (IllegalArgumentException e) { assertNull("Tree node " + label + " does not exist!", label); return null; } assertNotNull("Unexpected tree node " + item.getText(), label); assertEquals(label, item.getText()); return item; } }