| /********************************************************************** |
| * Copyright (c) 2002,2003 QNX Software Systems and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Common Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/cpl-v10.html |
| * |
| * Contributors: |
| * QNX Software Systems - Initial API and implementation |
| ***********************************************************************/ |
| package org.eclipse.cdt.core.model.tests; |
| |
| import junit.framework.TestCase; |
| import junit.framework.TestSuite; |
| |
| import org.eclipse.cdt.core.model.CoreModel; |
| import org.eclipse.cdt.core.model.ElementChangedEvent; |
| import org.eclipse.cdt.core.model.ICElementDelta; |
| import org.eclipse.cdt.core.model.ICPathEntry; |
| import org.eclipse.cdt.core.model.ICProject; |
| import org.eclipse.cdt.core.model.IElementChangedListener; |
| import org.eclipse.cdt.testplugin.CProjectHelper; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IWorkspace; |
| import org.eclipse.core.resources.IWorkspaceDescription; |
| import org.eclipse.core.resources.IWorkspaceRoot; |
| import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.NullProgressMonitor; |
| import org.eclipse.core.runtime.Path; |
| |
| /* |
| * CPathEntryTest |
| */ |
| public class CPathEntryTest extends TestCase { |
| IWorkspace workspace; |
| IWorkspaceRoot root; |
| IProject project_c, project_cc; |
| NullProgressMonitor monitor; |
| String pluginRoot; |
| |
| class CElementListener implements IElementChangedListener { |
| |
| int count = 0; |
| |
| void processDelta(ICElementDelta delta) { |
| if (delta == null) { |
| return ; |
| } |
| int flags = delta.getFlags(); |
| int kind = delta.getKind(); |
| if (kind == ICElementDelta.CHANGED ) { |
| if ((flags & ICElementDelta.F_ADDED_TO_CPATHENTRY) != 0) { |
| count++; |
| } |
| } |
| ICElementDelta[] affectedChildren= delta.getAffectedChildren(); |
| for (int i= 0; i < affectedChildren.length; i++) { |
| processDelta(affectedChildren[i]); |
| } |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.cdt.core.model.IElementChangedListener#elementChanged(org.eclipse.cdt.core.model.ElementChangedEvent) |
| */ |
| public void elementChanged(ElementChangedEvent event) { |
| processDelta(event.getDelta()); |
| } |
| |
| } |
| |
| /** |
| * Constructor for CModelTests. |
| * |
| * @param name |
| */ |
| public CPathEntryTest(String name) { |
| super(name); |
| } |
| |
| /** |
| * Sets up the test fixture. |
| * |
| * Called before every test case method. |
| * |
| */ |
| protected void setUp() throws CoreException { |
| /*************************************************************************************************************************** |
| * The test of the tests assume that they have a working workspace and workspace root object to use to create |
| * projects/files in, so we need to get them setup first. |
| */ |
| IWorkspaceDescription desc; |
| workspace = ResourcesPlugin.getWorkspace(); |
| root = workspace.getRoot(); |
| monitor = new NullProgressMonitor(); |
| if (workspace == null) |
| fail("Workspace was not setup"); |
| if (root == null) |
| fail("Workspace root was not setup"); |
| pluginRoot = org.eclipse.core.runtime.Platform.getPlugin("org.eclipse.cdt.core.tests").find(new Path("/")).getFile(); |
| desc = workspace.getDescription(); |
| desc.setAutoBuilding(false); |
| workspace.setDescription(desc); |
| |
| } |
| |
| /** |
| * Tears down the test fixture. |
| * |
| * Called after every test case method. |
| */ |
| protected void tearDown() { |
| // release resources here and clean-up |
| } |
| |
| public static TestSuite suite() { |
| return new TestSuite(CPathEntryTest.class); |
| } |
| |
| public static void main(String[] args) { |
| junit.textui.TestRunner.run(suite()); |
| } |
| |
| /******************************************************************************************************************************* |
| * Check if the CPathEntry's are generated. |
| * |
| * @see CProjectHelper#createCProject |
| */ |
| public void testCPathEntries() throws CoreException { |
| ICProject testProject; |
| testProject = CProjectHelper.createCProject("cpathtest", "none"); |
| if (testProject == null) |
| fail("Unable to create project"); |
| ICPathEntry[] entries = testProject.getResolvedCPathEntries(); |
| assertTrue("No cpathentries", entries.length == 0); |
| entries = new ICPathEntry[3]; |
| entries[0] = CoreModel.newIncludeEntry(new Path("cpathtest"), new Path("/usr/include"), true); |
| entries[1] = CoreModel.newIncludeEntry(new Path("cpaththest/foo.c"), new Path("/usr/include"), true); |
| entries[2] = CoreModel.newLibraryEntry(new Path("/usr/lib/libc.so.1"), null, null, null); |
| testProject.setRawCPathEntries(entries, new NullProgressMonitor()); |
| entries = testProject.getResolvedCPathEntries(); |
| assertTrue("Tree cpathenties", entries.length == 3); |
| } |
| |
| /******************************************************************************************************************************* |
| * Check if the CPathEntry's are generated. |
| * |
| * @see CProjectHelper#createCProject |
| */ |
| public void testCPathEntriesDelta() throws CoreException { |
| ICProject testProject; |
| testProject = CProjectHelper.createCProject("cpathtest2", "none"); |
| if (testProject == null) |
| fail("Unable to create project"); |
| ICPathEntry[] entries = new ICPathEntry[3]; |
| entries[0] = CoreModel.newIncludeEntry(new Path("cpathtest"), new Path("/usr/include"), true); |
| entries[1] = CoreModel.newIncludeEntry(new Path("cpaththest/foo.c"), new Path("/usr/include"), true); |
| entries[2] = CoreModel.newLibraryEntry(new Path("/usr/lib/libc.so.1"), null, null, null); |
| final int count = 0; |
| CElementListener listener = new CElementListener(); |
| CoreModel.getDefault().addElementChangedListener(listener); |
| testProject.setRawCPathEntries(entries, new NullProgressMonitor()); |
| entries = testProject.getResolvedCPathEntries(); |
| assertTrue("Tree cpathenties", listener.count == 2); |
| } |
| } |