IDEA-131718 Syntax errors make code foldings unfold

This commit is contained in:
Dmitry Batrak
2015-12-08 15:12:42 +03:00
parent 4cd2828364
commit da6e56f6e6
5 changed files with 133 additions and 4 deletions
@@ -20,6 +20,7 @@ import com.intellij.codeInsight.completion.CompletionContributor;
import com.intellij.codeInsight.daemon.*;
import com.intellij.codeInsight.daemon.impl.quickfix.DeleteCatchFix;
import com.intellij.codeInsight.daemon.quickFix.LightQuickFixTestCase;
import com.intellij.codeInsight.folding.CodeFoldingManager;
import com.intellij.codeInsight.generation.actions.CommentByLineCommentAction;
import com.intellij.codeInsight.hint.EditorHintListener;
import com.intellij.codeInsight.intention.AbstractIntentionAction;
@@ -2078,5 +2079,54 @@ public class DaemonRespondToChangesTest extends DaemonAnalyzerTestCase {
assertEmpty(visibleHints);
}
public void testCodeFoldingPassRestartsOnRegionUnfolding() throws Exception {
DaemonCodeAnalyzerSettings settings = DaemonCodeAnalyzerSettings.getInstance();
int savedDelay = settings.AUTOREPARSE_DELAY;
settings.AUTOREPARSE_DELAY = 0;
try {
configureByText(StdFileTypes.JAVA, "class Foo {\n" +
" void m() {\n" +
"\n" +
" }\n" +
"}");
CodeFoldingManager.getInstance(getProject()).buildInitialFoldings(myEditor);
EditorTestUtil.executeAction(myEditor, IdeActions.ACTION_COLLAPSE_ALL_REGIONS);
waitForDaemon();
checkFoldingState("[FoldRegion +(25:33), placeholder='{...}']");
new WriteCommandAction<Void>(myProject){
@Override
protected void run(@NotNull Result<Void> result) throws Throwable {
myEditor.getDocument().insertString(0, "/*");
}
}.execute();
waitForDaemon();
checkFoldingState("[FoldRegion -(0:37), placeholder='/.../', FoldRegion +(27:35), placeholder='{...}']");
EditorTestUtil.executeAction(myEditor, IdeActions.ACTION_EXPAND_ALL_REGIONS);
waitForDaemon();
checkFoldingState("[FoldRegion -(0:37), placeholder='/.../']");
}
finally {
settings.AUTOREPARSE_DELAY = savedDelay;
}
}
private void checkFoldingState(String expected) {
assertEquals(expected, Arrays.toString(myEditor.getFoldingModel().getAllFoldRegions()));
}
private void waitForDaemon() {
long deadline = System.currentTimeMillis() + 10000;
while (!myDaemonCodeAnalyzer.isRunning()) {
if (System.currentTimeMillis() > deadline) fail("Too long waiting for daemon to start");
UIUtil.dispatchAllInvocationEvents();
}
while (myDaemonCodeAnalyzer.isRunning()) {
if (System.currentTimeMillis() > deadline) fail("Too long waiting for daemon to finish");
UIUtil.dispatchAllInvocationEvents();
}
}
}