| /******************************************************************************* |
| * Copyright (c) 2005, 2016 IBM Corporation 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 |
| * |
| *******************************************************************************/ |
| package org.eclipse.dltk.ruby.ui.tests.folding; |
| |
| import java.util.Map; |
| |
| import org.eclipse.dltk.ast.ASTNode; |
| import org.eclipse.dltk.ruby.internal.ui.RubyPreferenceConstants; |
| import org.eclipse.dltk.ruby.internal.ui.text.folding.RubyFoldingStructureProvider; |
| import org.eclipse.dltk.ruby.ui.tests.internal.RubyUITestsPlugin; |
| import org.eclipse.dltk.ruby.ui.tests.internal.TestUtils; |
| import org.eclipse.dltk.ui.PreferenceConstants; |
| import org.eclipse.jface.preference.IPreferenceStore; |
| import org.eclipse.jface.text.Document; |
| import org.eclipse.jface.text.IDocument; |
| import org.eclipse.jface.text.Position; |
| import org.eclipse.jface.text.source.Annotation; |
| import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel; |
| |
| import junit.framework.TestCase; |
| |
| public class RubyFoldingTest extends TestCase { |
| |
| private class MyRubyASTFoldingStructureProvider extends |
| RubyFoldingStructureProvider { |
| public boolean codeFolding = true; |
| public boolean commentFolding = true; |
| |
| @Override |
| protected FoldingStructureComputationContext createInitialContext() { |
| initializePreferences(fStore); |
| fCommentsFolding = commentFolding; |
| return createContext(true); |
| } |
| |
| @Override |
| protected FoldingStructureComputationContext createContext( |
| boolean allowCollapse) { |
| ProjectionAnnotationModel model = new ProjectionAnnotationModel(); |
| |
| IDocument doc = getDocument(); |
| if (doc == null) |
| return null; |
| |
| return new FoldingStructureComputationContext(doc, model, |
| allowCollapse); |
| } |
| |
| Document fDocument; |
| |
| public void setDocument(Document doc) { |
| fDocument = doc; |
| } |
| |
| protected IDocument getDocument() { |
| return fDocument; |
| } |
| |
| public Map<Annotation, Position> testComputeFoldingStructure(String contents, |
| FoldingStructureComputationContext ctx) { |
| super.computeFoldingStructure(contents, ctx); |
| return ctx.getMap(); |
| } |
| |
| @Override |
| protected boolean mayCollapse(ASTNode s, |
| FoldingStructureComputationContext ctx) { |
| return codeFolding && super.mayCollapse(s, ctx); |
| } |
| |
| }; |
| |
| IPreferenceStore fStore; |
| MyRubyASTFoldingStructureProvider provider; |
| |
| @Override |
| protected void setUp() throws Exception { |
| super.setUp(); |
| fStore = RubyUITestsPlugin.getDefault().getPreferenceStore(); |
| RubyPreferenceConstants.initializeDefaultValues(fStore); |
| provider = new MyRubyASTFoldingStructureProvider(); |
| } |
| |
| public void test0() throws Exception { |
| fStore.setValue(PreferenceConstants.EDITOR_FOLDING_LINES_LIMIT, 2); |
| String content = "#ab\n#dc\n"; |
| Document document = new Document(content); |
| TestUtils.installStuff(document); |
| provider.setDocument(document); |
| Map<Annotation, Position> result = provider.testComputeFoldingStructure(content, |
| provider |
| .createInitialContext()); |
| assertEquals(1, result.size()); |
| } |
| |
| public void test177924a() throws Exception { |
| fStore.setValue(PreferenceConstants.EDITOR_FOLDING_LINES_LIMIT, 2); |
| String content = TestUtils.getData("resources/folding/b177924.rb"); |
| Document document = new Document(content); |
| TestUtils.installStuff(document); |
| provider.setDocument(document); |
| Map<Annotation, Position> result = provider.testComputeFoldingStructure(content, |
| provider |
| .createInitialContext()); |
| assertEquals(3 + 3, result.size()); |
| } |
| |
| public void test177924b() throws Exception { |
| fStore.setValue(PreferenceConstants.EDITOR_FOLDING_LINES_LIMIT, 4); |
| String content = TestUtils.getData("resources/folding/b177924.rb"); |
| Document document = new Document(content); |
| TestUtils.installStuff(document); |
| provider.setDocument(document); |
| Map<Annotation, Position> result = provider.testComputeFoldingStructure(content, |
| provider |
| .createInitialContext()); |
| assertEquals(2 + 3, result.size()); |
| } |
| |
| public void test193174a() throws Exception { |
| fStore.setValue(PreferenceConstants.EDITOR_FOLDING_LINES_LIMIT, 2); |
| String content = TestUtils.getData("resources/folding/b193174.rb"); |
| Document document = new Document(content); |
| TestUtils.installStuff(document); |
| provider.codeFolding = false; |
| provider.setDocument(document); |
| Map<Annotation, Position> result = provider.testComputeFoldingStructure(content, |
| provider |
| .createInitialContext()); |
| assertEquals(27, result.size()); |
| } |
| |
| public void test193174b() throws Exception { |
| fStore.setValue(PreferenceConstants.EDITOR_FOLDING_LINES_LIMIT, 2); |
| String content = TestUtils.getData("resources/folding/b193174.rb"); |
| Document document = new Document(content); |
| TestUtils.installStuff(document); |
| provider.commentFolding = false; |
| provider.setDocument(document); |
| Map<Annotation, Position> result = provider.testComputeFoldingStructure(content, |
| provider |
| .createInitialContext()); |
| assertEquals(73 + 13 + 1, result.size()); |
| } |
| |
| public void test193174c() throws Exception { |
| fStore.setValue(PreferenceConstants.EDITOR_FOLDING_LINES_LIMIT, 2); |
| String content = TestUtils.getData("resources/folding/b193174.rb"); |
| Document document = new Document(content); |
| TestUtils.installStuff(document); |
| provider.setDocument(document); |
| Map<Annotation, Position> result = provider.testComputeFoldingStructure(content, |
| provider |
| .createInitialContext()); |
| assertEquals(100 + 13 + 1, result.size()); |
| } |
| } |