/*******************************************************************************
* Copyright (c) 2008, 2011 Institute for Software, HSR Hochschule fuer Technik
* Rapperswil, University of applied sciences 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:
* Institute for Software - initial API and implementation
* Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.ui.tests.refactoring;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.Properties;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.RefactoringStatusEntry;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.IPDOMManager;
import org.eclipse.cdt.core.index.IIndexManager;
import org.eclipse.cdt.ui.testplugin.CTestPlugin;
import org.eclipse.cdt.internal.ui.refactoring.RefactoringASTCache;
/**
* @author Emanuel Graf
*/
public abstract class RefactoringTest extends RefactoringBaseTest {
private static final String CONFIG_FILE_NAME = ".config"; //$NON-NLS-1$
protected String fileName;
protected RefactoringASTCache astCache;
public RefactoringTest(String name, Collection<TestSourceFile> files) {
super(name, files);
initializeConfiguration(files);
}
protected abstract void configureRefactoring(Properties refactoringProperties);
@Override
protected void setUp() throws Exception {
super.setUp();
CCorePlugin.getIndexManager().setIndexerId(cproject, IPDOMManager.ID_FAST_INDEXER);
CTestPlugin.getDefault().getLog().addLogListener(this);
CCorePlugin.getIndexManager().reindex(cproject);
boolean joined = CCorePlugin.getIndexManager().joinIndexer(IIndexManager.FOREVER, NULL_PROGRESS_MONITOR);
assertTrue(joined);
astCache = new RefactoringASTCache();
}
@Override
protected void tearDown() throws Exception {
astCache.dispose();
super.tearDown();
}
private void initializeConfiguration(Collection<TestSourceFile> files) {
TestSourceFile configFile = null;
for (TestSourceFile currentFile : files) {
if (currentFile.getName().equals(CONFIG_FILE_NAME)) {
configFile = currentFile;
}
}
Properties refactoringProperties = new Properties();
try {
if (configFile != null) {
refactoringProperties.load(new ByteArrayInputStream(configFile.getSource().getBytes()));
}
} catch (IOException e) {
// Property initialization failed
}
initCommonFields(refactoringProperties);
configureRefactoring(refactoringProperties);
files.remove(configFile);
}
private void initCommonFields(Properties refactoringProperties) {
fileName = refactoringProperties.getProperty("filename", "A.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
}
protected void assertConditionsOk(RefactoringStatus conditions) {
assertTrue(conditions.isOK() ? "OK" : "Error or Warning in Conditions: " + conditions.getEntries()[0].getMessage(), //$NON-NLS-1$ //$NON-NLS-2$
conditions.isOK());
}
protected void assertConditionsWarning(RefactoringStatus conditions, int number) {
if (number > 0) {
assertTrue("Warning in Condition expected", conditions.hasWarning()); //$NON-NLS-1$
}
RefactoringStatusEntry[] entries = conditions.getEntries();
int count = 0;
for (RefactoringStatusEntry entry : entries) {
if (entry.isWarning()) {
++count;
}
}
assertEquals(number + " Warnings expected found " + count, count, number); //$NON-NLS-1$
}
protected void assertConditionsInfo(RefactoringStatus status, int number) {
if (number > 0) {
assertTrue("Info in Condition expected", status.hasInfo()); //$NON-NLS-1$
}
RefactoringStatusEntry[] entries = status.getEntries();
int count = 0;
for (RefactoringStatusEntry entry : entries) {
if (entry.isInfo()) {
++count;
}
}
assertEquals(number + " Infos expected found " + count, number, count); //$NON-NLS-1$
}
protected void assertConditionsError(RefactoringStatus status, int number) {
if (number > 0) {
assertTrue("Error in Condition expected", status.hasError()); //$NON-NLS-1$
}
RefactoringStatusEntry[] entries = status.getEntries();
int count = 0;
for (RefactoringStatusEntry entry : entries) {
if (entry.isError()) {
++count;
}
}
assertEquals(number + " Errors expected found " + count, number, count); //$NON-NLS-1$
}
protected void assertConditionsFatalError(RefactoringStatus status, int number) {
if (number > 0) {
assertTrue("Fatal Error in Condition expected", status.hasFatalError()); //$NON-NLS-1$
}
RefactoringStatusEntry[] entries = status.getEntries();
int count = 0;
for (RefactoringStatusEntry entry : entries) {
if (entry.isFatalError()) {
++count;
}
}
assertEquals(number + " Fatal Errors expected found " + count, number, count); //$NON-NLS-1$
}
protected void assertConditionsFatalError(RefactoringStatus conditions) {
assertTrue("Fatal Error in Condition expected", conditions.hasFatalError()); //$NON-NLS-1$
}
}