/******************************************************************************* * Copyright (c) 2015 Pivotal, Inc. * 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 * * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.boot.properties.editor.test; import org.springframework.ide.eclipse.editor.support.completions.DocumentEdits; import junit.framework.TestCase; /** * @author Kris De Volder */ public class DocumentEditsTest extends TestCase { class TestSubject { private MockEditor editor; private DocumentEdits edits; private String orgText; public TestSubject(String contents) { this.orgText = contents; reset(); } public void reset() { this.editor = new MockPropertiesEditor(orgText, null); this.edits = new DocumentEdits(editor.document); } public void del(String snippet) { int start = orgText.indexOf(snippet); assertTrue(start>=0); int end = start + snippet.length(); edits.delete(start, end); } public void expect(String expect) throws Exception { editor.apply(edits); assertEquals(expect, editor.getText()); } public void insBefore(String before, String insert) { int offset = orgText.indexOf(before); assertTrue(offset>=0); edits.insert(offset, insert); } public void delLineAt(String snippet) throws Exception { int offset = orgText.indexOf(snippet); assertTrue(offset>=0); edits.deleteLineBackwardAtOffset(offset); } public void delLine(int i) throws Exception { edits.deleteLineBackward(0); } } public void testDeletes() throws Exception { TestSubject it; it = new TestSubject("0123456789<*>"); it.del("123"); it.del("567"); it.expect("04<*>89"); it = new TestSubject("0123456789<*>"); it.del("567"); it.del("123"); it.expect("0<*>489"); it = new TestSubject("0123456789<*>"); it.del("012345"); it.del("345"); it.expect("<*>6789"); it = new TestSubject("0123456789<*>"); it.del("345"); it.del("012345"); it.expect("<*>6789"); it = new TestSubject("0123456789<*>"); it.del("2345"); it.del("34567"); it.expect("01<*>89"); it = new TestSubject("0123456789<*>"); it.del("123"); it.del("234"); it.del("7"); it.expect("056<*>89"); } public void testInserts() throws Exception { TestSubject it; it = new TestSubject("The fox jumps over the dog!"); it.insBefore("fox", "quick "); it.insBefore("fox", "brown "); it.insBefore("dog", "lazy "); it.expect("The quick brown fox jumps over the lazy <*>dog!"); } public void testInsertAndDelete() throws Exception { TestSubject it; it = new TestSubject("The fox jumps over the dog!"); it.insBefore("fox", "quick "); //"The quick fox jumps..." it.del("The fox"); //" jumps..." it.insBefore("fox", "A rabbit");//"A rabbit jumps ..." it.expect("A rabbit<*> jumps over the dog!"); } public void testDeleteLine() throws Exception { TestSubject it; it = new TestSubject( "Line 0\n" + "Line 1\n" + "Line 2" ); it.delLineAt("0"); it.expect( "<*>Line 1\n" + "Line 2" ); it.reset(); it.delLineAt("1"); it.expect( "Line 0<*>\n" + "Line 2" ); it.reset(); it.delLineAt("2"); it.expect( "Line 0\n" + "Line 1<*>" ); it = new TestSubject("Line 0"); //special case: no newlines in document it.delLineAt("0"); it.expect("<*>"); it = new TestSubject(""); it.delLine(0); it.expect("<*>"); } }