/******************************************************************************* * Copyright (c) 2006 IBM Corporation. * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.pdom.tests; import junit.framework.Test; import junit.framework.TestSuite; import org.eclipse.cdt.core.dom.ast.ICompositeType; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.internal.core.CCoreInternals; import org.eclipse.cdt.internal.core.pdom.PDOM; /** * Tests for verifying whether the PDOM correctly stores information about * C++ structs and unions. */ public class CPPCompositeTypeTests extends PDOMTestBase { private ICProject project; private PDOM pdom; public static Test suite() { return new TestSuite(CPPCompositeTypeTests.class); } protected void setUp() throws Exception { CPPCompositeTypeTests foo = null; project = createProject("compositeTypeTests"); pdom = (PDOM) CCoreInternals.getPDOMManager().getPDOM(project); pdom.acquireReadLock(); } protected void tearDown() throws Exception { pdom.releaseReadLock(); } public void testSimpleStructure() throws Exception { assertType(pdom, "SimpleStructure", ICompositeType.class); } public void testSimpleStructureDeclarations() throws Exception { assertDeclarationCount(pdom, "SimpleStructure", 1); assertDeclarationCount(pdom, "SimpleStructure::ssa", 1); } public void testSimpleStructureDefinitions() throws Exception { assertDefinitionCount(pdom, "SimpleStructure", 1); assertDefinitionCount(pdom, "SimpleStructure::ssa", 1); } public void testSimpleStructureReferences() throws Exception { assertReferenceCount(pdom, "SimpleStructure", 2); assertReferenceCount(pdom, "SimpleStructure::ssa", 2); } public void testDeepStructure() throws Exception { assertType(pdom, "Structure1", ICompositeType.class); assertType(pdom, "Structure1::Structure2", ICompositeType.class); assertType(pdom, "Structure1::Structure2::Structure3", ICompositeType.class); } public void testDeepStructureDeclarations() throws Exception { assertDeclarationCount(pdom, "Structure1", 1); assertDeclarationCount(pdom, "Structure1::Structure2", 1); assertDeclarationCount(pdom, "Structure1::Structure2::Structure3", 1); } public void testDeepStructureMemberDeclarations() throws Exception { assertDeclarationCount(pdom, "Structure1::s1a", 1); assertDeclarationCount(pdom, "Structure1::s1b", 1); assertDeclarationCount(pdom, "Structure1::s1c", 1); assertDeclarationCount(pdom, "Structure1::Structure2::s2b", 1); assertDeclarationCount(pdom, "Structure1::Structure2::Structure3::s3a", 1); } public void testDeepStructureDefinitions() throws Exception { assertDefinitionCount(pdom, "Structure1", 1); assertDefinitionCount(pdom, "Structure1::Structure2", 1); assertDefinitionCount(pdom, "Structure1::Structure2::Structure3", 1); } public void testDeepStructureMemberDefinitions() throws Exception { assertDefinitionCount(pdom, "Structure1::s1a", 1); assertDefinitionCount(pdom, "Structure1::s1b", 1); assertDefinitionCount(pdom, "Structure1::s1c", 1); assertDefinitionCount(pdom, "Structure1::Structure2::s2b", 1); assertDefinitionCount(pdom, "Structure1::Structure2::Structure3::s3a", 1); } public void testDeepStructureReferences() throws Exception { assertReferenceCount(pdom, "Structure1", 6); assertReferenceCount(pdom, "Structure1::Structure2", 4); assertReferenceCount(pdom, "Structure1::Structure2::Structure3", 2); } public void testDeepStructureMemberReferences() throws Exception { assertReferenceCount(pdom, "Structure1::s1a", 2); assertReferenceCount(pdom, "Structure1::s1b", 3); assertReferenceCount(pdom, "Structure1::s1c", 14); assertReferenceCount(pdom, "Structure1::Structure2::s2b", 12); assertReferenceCount(pdom, "Structure1::Structure2::Structure3::s3a", 8); } public void testUnionDeclarations() throws Exception { assertDeclarationCount(pdom, "Union1", 1); assertDeclarationCount(pdom, "Union1::Union2", 1); } public void testUnionDefinitions() throws Exception { assertDefinitionCount(pdom, "Union1", 1); assertDefinitionCount(pdom, "Union1::Union2", 1); } public void testUnionReferences() throws Exception { assertReferenceCount(pdom, "Union1", 4); assertReferenceCount(pdom, "Union1::Union2", 2); } public void testUnionMemberDeclarations() throws Exception { assertDeclarationCount(pdom, "Union1::u1a", 1); assertDeclarationCount(pdom, "Union1::u1d", 1); } public void testUnionMemberDefinitions() throws Exception { assertDefinitionCount(pdom, "Union1::u1a", 1); assertDefinitionCount(pdom, "Union1::u1d", 1); } public void testUnionMemberReferences() throws Exception { assertReferenceCount(pdom, "Union1::u1a", 2); assertReferenceCount(pdom, "Union1::u1d", 1); } public void testMixedDeclarations() throws Exception { assertDeclarationCount(pdom, "MixedS1::MixedU1", 1); assertDeclarationCount(pdom, "MixedS1::MixedU1::MixedS2", 1); assertDeclarationCount(pdom, "MixedS1::MixedU1::MixedU2", 1); assertDeclarationCount(pdom, "MixedS1::MixedS3", 1); } public void testMixedDefinitions() throws Exception { assertDefinitionCount(pdom, "MixedS1::MixedU1", 1); assertDefinitionCount(pdom, "MixedS1::MixedU1::MixedS2", 1); assertDefinitionCount(pdom, "MixedS1::MixedU1::MixedU2", 1); assertDefinitionCount(pdom, "MixedS1::MixedS3", 1); } public void testMixedReferences() throws Exception { assertReferenceCount(pdom, "MixedS1::MixedU1", 6); assertReferenceCount(pdom, "MixedS1::MixedU1::MixedS2", 2); assertReferenceCount(pdom, "MixedS1::MixedU1::MixedU2", 2); assertReferenceCount(pdom, "MixedS1::MixedS3", 2); } public void testMixedMemberDeclarations() throws Exception { assertDeclarationCount(pdom, "MixedS1::MixedU1::mu1a", 1); assertDeclarationCount(pdom, "MixedS1::MixedU1::MixedS2::ms2a", 1); assertDeclarationCount(pdom, "MixedS1::MixedU1::MixedU2::mu2a", 1); assertDeclarationCount(pdom, "MixedS1::MixedS3::ms3a", 1); } public void testMixedMemberDefinitions() throws Exception { assertDefinitionCount(pdom, "MixedS1::MixedU1::mu1a", 1); assertDefinitionCount(pdom, "MixedS1::MixedU1::MixedS2::ms2a", 1); assertDefinitionCount(pdom, "MixedS1::MixedU1::MixedU2::mu2a", 1); assertDefinitionCount(pdom, "MixedS1::MixedS3::ms3a", 1); } public void testMixedMemberReferences() throws Exception { assertReferenceCount(pdom, "MixedS1::MixedU1::mu1a", 2); assertReferenceCount(pdom, "MixedS1::MixedU1::MixedS2::ms2a", 2); assertReferenceCount(pdom, "MixedS1::MixedU1::MixedU2::mu2a", 2); assertReferenceCount(pdom, "MixedS1::MixedS3::ms3a", 2); } }