blob: 9b65d910cc9b3fb193942740d446470c4c3648a3 [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* 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.intellij.testFramework;
import com.intellij.ide.actions.ViewStructureAction;
import com.intellij.ide.util.FileStructurePopup;
import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase;
import com.intellij.ui.treeStructure.Tree;
import com.intellij.ui.treeStructure.filtered.FilteringTreeBuilder;
import com.intellij.ui.treeStructure.filtered.FilteringTreeStructure;
import com.intellij.util.ui.tree.TreeUtil;
import org.junit.Assert;
import org.junit.Before;
import javax.swing.tree.TreePath;
import java.io.File;
/**
* @author Konstantin Bulenkov
*/
public abstract class FileStructureTestBase extends CodeInsightFixtureTestCase {
protected FileStructurePopup myPopup;
@Before
public void setUp() throws Exception {
super.setUp();
myFixture.configureByFile(getFileName(getFileExtension()));
myPopup = ViewStructureAction.createPopup(
myFixture.getProject(),
TextEditorProvider.getInstance().getTextEditor(myFixture.getEditor()));
assert myPopup != null;
myPopup.createCenterPanel();
getBuilder().getUi().getUpdater().setPassThroughMode(true);
update();
}
protected abstract String getFileExtension();
@Override
public void tearDown() throws Exception {
Disposer.dispose(myPopup);
super.tearDown();
}
private String getFileName(String ext) {
return getTestName(false) + (StringUtil.isEmpty(ext) ? "" : "." + ext);
}
protected String getTreeFileName() {
return getFileName("tree");
}
protected void checkTree(String filter) throws Exception {
myPopup.setSearchFilterForTests(filter);
getBuilder().refilter(null, false, true);
getBuilder().queueUpdate();
TreeUtil.selectPath(getTree(), (TreePath)getSpeedSearch().findElement(filter));
checkTree();
}
protected void checkTree() throws Exception {
final String expected = FileUtil.loadFile(new File(getTestDataPath() + "/" + getTreeFileName()), true);
Assert.assertEquals(expected.trim(), PlatformTestUtil.print(getTree(), true).trim());
}
public void update() throws InterruptedException {
myPopup.getTreeBuilder().refilter().doWhenProcessed(new Runnable() {
@Override
public void run() {
getStructure().rebuild();
updateTree();
getBuilder().updateFromRoot();
TreeUtil.expandAll(getTree());
final FilteringTreeStructure.FilteringNode node = myPopup.selectPsiElement(myPopup.getCurrentElement(getFile()));
getBuilder().getUi().select(node, null);
}
});
}
protected Tree getTree() {
return myPopup.getTree();
}
protected FilteringTreeBuilder getBuilder() {
return myPopup.getTreeBuilder();
}
protected FileStructurePopup.MyTreeSpeedSearch getSpeedSearch() {
return (FileStructurePopup.MyTreeSpeedSearch)myPopup.getSpeedSearch();
}
protected void updateTree() {
updateRecursively(getRootNode());
}
protected FilteringTreeStructure getStructure() {
final FilteringTreeStructure structure = (FilteringTreeStructure)getBuilder().getTreeStructure();
assert structure != null;
return structure;
}
protected FilteringTreeStructure.FilteringNode getRootNode() {
return getStructure().getRootElement();
}
protected void updateRecursively(final FilteringTreeStructure.FilteringNode node) {
node.update();
for (FilteringTreeStructure.FilteringNode child : node.children()) {
updateRecursively(child);
}
}
}