summaryrefslogtreecommitdiff
path: root/platform/platform-tests/testSrc/com/intellij/codeInsight/folding/impl/CompositeFoldingBuilderTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-tests/testSrc/com/intellij/codeInsight/folding/impl/CompositeFoldingBuilderTest.java')
-rw-r--r--platform/platform-tests/testSrc/com/intellij/codeInsight/folding/impl/CompositeFoldingBuilderTest.java91
1 files changed, 91 insertions, 0 deletions
diff --git a/platform/platform-tests/testSrc/com/intellij/codeInsight/folding/impl/CompositeFoldingBuilderTest.java b/platform/platform-tests/testSrc/com/intellij/codeInsight/folding/impl/CompositeFoldingBuilderTest.java
new file mode 100644
index 000000000000..000ab69e0335
--- /dev/null
+++ b/platform/platform-tests/testSrc/com/intellij/codeInsight/folding/impl/CompositeFoldingBuilderTest.java
@@ -0,0 +1,91 @@
+
+/*
+ * 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.codeInsight.folding.impl;
+
+import com.intellij.lang.ASTNode;
+import com.intellij.lang.folding.*;
+import com.intellij.openapi.editor.Document;
+import com.intellij.openapi.editor.impl.AbstractEditorTest;
+import com.intellij.openapi.fileTypes.PlainTextLanguage;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.psi.PsiElement;
+import com.intellij.testFramework.TestFileType;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Collection;
+import java.util.List;
+
+import static com.intellij.testFramework.PlatformTestCase.initPlatformLangPrefix;
+
+public class CompositeFoldingBuilderTest extends AbstractEditorTest {
+ static {
+ initPlatformLangPrefix();
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ init("Some plain text to fold", TestFileType.TEXT);
+ }
+
+ public void testAllowOnlyOneDescriptorPerTextRange() {
+ final FoldingBuilder first = createDummyFoldingBuilder("plain", "mountain");
+ final FoldingBuilder second = createDummyFoldingBuilder("plain", "tree");
+
+ LanguageFolding.INSTANCE.addExplicitExtension(PlainTextLanguage.INSTANCE, first);
+ LanguageFolding.INSTANCE.addExplicitExtension(PlainTextLanguage.INSTANCE, second);
+
+ try {
+ FoldingUpdate.FoldingMap foldingMap = FoldingUpdate.getFoldingsFor(getProject(), getFile(), getEditor().getDocument(), false);
+ Collection<FoldingDescriptor> descriptors = foldingMap.get(getFile());
+
+ assert descriptors.size() == 1: "Only one descriptor allowed for the same text range. Descriptors: " + descriptors;
+ }
+ finally {
+ LanguageFolding.INSTANCE.removeExplicitExtension(PlainTextLanguage.INSTANCE, first);
+ LanguageFolding.INSTANCE.removeExplicitExtension(PlainTextLanguage.INSTANCE, second);
+ }
+ }
+
+ @NotNull
+ private FoldingBuilder createDummyFoldingBuilder(final String textToFold, final String placeholderText) {
+ return new CustomFoldingBuilder() {
+ @Override
+ protected void buildLanguageFoldRegions(
+ @NotNull List<FoldingDescriptor> descriptors,
+ @NotNull PsiElement root,
+ @NotNull Document document,
+ boolean quick)
+ {
+ final int index = root.getText().indexOf(textToFold);
+ descriptors.add(new NamedFoldingDescriptor(root, index, index + textToFold.length(), null, placeholderText));
+ }
+
+ @Override
+ protected String getLanguagePlaceholderText(@NotNull ASTNode node, @NotNull TextRange range) {
+ return "";
+ }
+
+ @Override
+ protected boolean isRegionCollapsedByDefault(@NotNull ASTNode node) {
+ return true;
+ }
+ };
+ }
+
+
+}