/*
* Copyright (c) 2013, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.eclipse.org/legal/epl-v10.html
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.dart.engine.services.internal.refactoring;
import com.google.dart.engine.AnalysisEngine;
import com.google.dart.engine.ast.SimpleIdentifier;
import com.google.dart.engine.context.AnalysisContext;
import com.google.dart.engine.element.Element;
import com.google.dart.engine.element.PrefixElement;
import com.google.dart.engine.internal.index.IndexContributor;
import com.google.dart.engine.services.change.Change;
import com.google.dart.engine.services.refactoring.RefactoringFactory;
import com.google.dart.engine.services.refactoring.RenameRefactoring;
import com.google.dart.engine.source.DartUriResolver;
import com.google.dart.engine.source.SourceFactory;
/**
* Abstract test for testing {@link RenameRefactoring}s.
*/
public abstract class RenameRefactoringImplTest extends RefactoringImplTest {
protected RenameRefactoring refactoring;
protected Change refactoringChange;
/**
* Asserts that {@link #refactoring} status is OK.
*/
protected final void assertRefactoringStatusOK() throws Exception {
assertRefactoringStatusOK(refactoring);
}
/**
* Checks that all conditions are <code>OK</code> and applying {@link Change} to the
* {@link #testUnit} is same source as given lines.
*/
protected final void assertSuccessfulRename(String... lines) throws Exception {
assertRefactoringStatusOK();
refactoringChange = refactoring.createChange(pm);
assertTestChangeResult(refactoringChange, makeSource(lines));
}
/**
* @return the {@link RenameRefactoring} for given {@link Element}.
*/
protected final void createRenameRefactoring(Element element) {
refactoring = RefactoringFactory.createRenameRefactoring(searchEngine, element);
}
/**
* @return the {@link RenameRefactoring} for {@link Element} of the {@link SimpleIdentifier} at
* the given search pattern.
*/
protected final void createRenameRefactoring(String search) {
SimpleIdentifier identifier = findIdentifier(search);
Element element = identifier.getBestElement();
if (element instanceof PrefixElement) {
element = IndexContributor.getImportElement(identifier);
}
createRenameRefactoring(element);
}
/**
* @return new {@link AnalysisContext} with SDK.
*/
protected final AnalysisContext newAnalysisContext() {
AnalysisContext context = AnalysisEngine.getInstance().createAnalysisContext();
SourceFactory sourceFactory = new SourceFactory(new DartUriResolver(defaultSdk));
context.setSourceFactory(sourceFactory);
return context;
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
refactoring = null;
refactoringChange = null;
}
}