com.google.dart.tools.ui.internal.text.dart.DartDocAutoIndentStrategyTest.java Source code

Java tutorial

Introduction

Here is the source code for com.google.dart.tools.ui.internal.text.dart.DartDocAutoIndentStrategyTest.java

Source

/*
 * Copyright (c) 2014, 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.tools.ui.internal.text.dart;

import com.google.dart.engine.EngineTestCase;
import com.google.dart.tools.internal.corext.refactoring.util.ReflectionUtils;
import com.google.dart.tools.ui.DartToolsPlugin;
import com.google.dart.tools.ui.internal.text.dartdoc.DartDocAutoIndentStrategy;
import com.google.dart.tools.ui.text.DartPartitions;
import com.google.dart.tools.ui.text.DartTextTools;

import org.apache.commons.lang3.StringUtils;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.DocumentCommand;
import org.eclipse.jface.text.IDocument;

import static org.fest.assertions.Assertions.assertThat;

public class DartDocAutoIndentStrategyTest extends EngineTestCase {
    private static final String EOL = System.getProperty("line.separator", "\n");

    private static void assert_customizeDocumentCommand(String initial, String newText, String expected) {
        int initialOffset = initial.indexOf('!');
        int expectedOffset = expected.indexOf('!');
        assertTrue("No cursor position in initial: " + initial, initialOffset != -1);
        assertTrue("No cursor position in expected: " + expected, expectedOffset != -1);
        initial = StringUtils.remove(initial, '!');
        expected = StringUtils.remove(expected, '!');
        // prepare document
        IDocument document = new Document(initial);
        {
            DartTextTools tools = DartToolsPlugin.getDefault().getDartTextTools();
            tools.setupDartDocumentPartitioner(document, DartPartitions.DART_PARTITIONING);
        }
        // handle command
        DocumentCommand command = new DocumentCommand() {
        };
        command.caretOffset = -1;
        command.doit = true;
        command.offset = initialOffset;
        command.text = newText;
        // execute command
        DartDocAutoIndentStrategy strategy = new DartDocAutoIndentStrategy(DartPartitions.DART_PARTITIONING);
        strategy.customizeDocumentCommand(document, command);
        // update document
        ReflectionUtils.invokeMethod(command, "execute(org.eclipse.jface.text.IDocument)", document);
        // check new content
        String actual = document.get();
        assertEquals(expected, actual);
        // check caret offset
        int actualOffset = command.caretOffset;
        if (actualOffset == -1) {
            actualOffset = initialOffset + command.text.length();
        }
        assertThat(actualOffset).isEqualTo(expectedOffset);
    }

    private static void assertSmartInsertAfterNewLine(String initial, String expected) {
        assert_customizeDocumentCommand(initial, EOL, expected);
    }

    public void test_afterStart_beforeEnd_hasEOL_beforeEOF() throws Exception {
        assertSmartInsertAfterNewLine(createSource(//
                "/**!*/", ""),
                createSource(//
                        "/**", " * !", " */", ""));
    }

    public void test_afterStart_beforeEnd_noEOL_beforeEOF() throws Exception {
        assertSmartInsertAfterNewLine(createSource(//
                "/**!*/"),
                createSource(//
                        "/**", " * !", " */"));
    }

    public void test_hasInnerComment() throws Exception {
        assertSmartInsertAfterNewLine(createSource(//
                "/**", " * !", " * This /* comment */ causes used to /* cause */ a problems.", " */", ""),
                createSource(//
                        "/**", " * ", " * !", " * This /* comment */ causes used to /* cause */ a problems.", " */",
                        ""));
    }

    public void test_inEmptyLine() throws Exception {
        assertSmartInsertAfterNewLine(createSource(//
                "/**", "!", " */", ""),
                createSource(//
                        "/**", "", " * !", " */", ""));
    }

    public void test_inMiddleLine() throws Exception {
        assertSmartInsertAfterNewLine(createSource(//
                "/**", " * ab!cd", " */", ""),
                createSource(//
                        "/**", " * ab", " * !cd", " */", ""));
    }

    public void test_newComment_method() throws Exception {
        assertSmartInsertAfterNewLine(createSource(//
                "class A {", "  /**!", "  foo() {}", "}"),
                createSource(//
                        "class A {", "  /**", "   * !", "   */", "  foo() {}", "}"));
    }

    public void test_newComment_multiLine_notDoc() throws Exception {
        assertSmartInsertAfterNewLine(createSource(//
                "class A {", "  /*!", "  foo() {}", "}"),
                createSource(//
                        "class A {", "  /*", "   * !", "   */", "  foo() {}", "}"));
    }

    public void test_newComment_topLevel() throws Exception {
        assertSmartInsertAfterNewLine(createSource(//
                "/**!", "main() {", "}"),
                createSource(//
                        "/**", " * !", " */", "main() {", "}"));
    }
}