/*******************************************************************************
* 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 org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IBasicType;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IField;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMember;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.internal.core.CCoreInternals;
import org.eclipse.cdt.internal.core.pdom.PDOM;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
/**
* Tests for verifying whether the PDOM correctly stores information about
* C++ class data members.
*/
public class CPPFieldTests extends PDOMTestBase {
protected PDOM pdom;
protected ICProject project;
public static Test suite() {
return suite(CPPFieldTests.class);
}
protected void setUp() throws Exception {
project = createProject("fieldTests");
pdom = (PDOM) CCoreInternals.getPDOMManager().getPDOM(project);
pdom.acquireReadLock();
}
protected void tearDown() throws Exception {
pdom.releaseReadLock();
if (project != null) {
project.getProject().delete(IResource.FORCE | IResource.ALWAYS_DELETE_PROJECT_CONTENT, new NullProgressMonitor());
}
}
public void testFieldDeclarations() throws Exception {
assertDeclarationCount(pdom, "Class1::c1a", 1);
}
public void testFieldDefinitions() throws Exception {
assertDefinitionCount(pdom, "Class1::c1a", 1);
}
public void testFieldReferences() throws Exception {
assertReferenceCount(pdom, "Class1::c1a", 4);
}
public void testInheritedFieldDeclarations() throws Exception {
assertDeclarationCount(pdom, "Class2::c1a", 0);
}
public void testInheritedFieldDefinitions() throws Exception {
assertDefinitionCount(pdom, "Class2::c1a", 0);
}
public void testInheritedFieldReferences() throws Exception {
assertReferenceCount(pdom, "Class2::c1a", 0);
}
public void testDefaultPrivateField() throws Exception {
assertVisibility(pdom, "Class1::defaultField", ICPPMember.v_private);
}
public void testPrivateField() throws Exception {
assertVisibility(pdom, "Class1::privateField", ICPPMember.v_private);
}
public void testProtectedField() throws Exception {
assertVisibility(pdom, "Class1::protectedField", ICPPMember.v_protected);
}
public void testPublicField() throws Exception {
assertVisibility(pdom, "Class1::publicField", ICPPMember.v_public);
}
public void testMutableField() throws Exception {
IBinding[] bindings = findQualifiedName(pdom, "Class1::mutableField");
assertEquals(1, bindings.length);
ICPPField field = (ICPPField) bindings[0];
assertTrue(field.isMutable());
}
public void testStaticField() throws Exception {
IBinding[] bindings = findQualifiedName(pdom, "Class1::staticField");
assertEquals(1, bindings.length);
ICPPField field = (ICPPField) bindings[0];
assertTrue(field.isStatic());
}
public void testIntField() throws Exception {
assertFieldType(pdom, "Class1::c1a", IBasicType.t_int);
}
public void testDoubleField() throws Exception {
assertFieldType(pdom, "Class1::c1b", IBasicType.t_double);
}
public void testCharField() throws Exception {
assertFieldType(pdom, "Class2::c2a", IBasicType.t_char);
}
public void testFloatField() throws Exception {
assertFieldType(pdom, "Class2::c2b", IBasicType.t_float);
}
private void assertFieldType(PDOM pdom, String name, int type) throws CoreException, DOMException {
IBinding[] bindings = findQualifiedName(pdom, name);
assertEquals(1, bindings.length);
IField field = (IField) bindings[0];
assertEquals(type, ((IBasicType) field.getType()).getType());
}
}