/** * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ /* * Created on May 5, 2005 * * @author Fabio Zadrozny */ package org.python.pydev.editor; import junit.framework.TestCase; import org.eclipse.jface.text.Document; import org.python.pydev.editor.autoedit.PyAutoIndentStrategy; import org.python.pydev.editor.autoedit.TestIndentPrefs; import com.aptana.shared_core.utils.DocCmd; /** * @author Fabio Zadrozny */ public class PyAutoIndentStrategyTest extends TestCase { private PyAutoIndentStrategy strategy; private String doc; private DocCmd docCmd; private String expected; public static void main(String[] args) { try { PyAutoIndentStrategyTest s = new PyAutoIndentStrategyTest("testt"); s.setUp(); s.testDedentElse(); s.tearDown(); junit.textui.TestRunner.run(PyAutoIndentStrategyTest.class); } catch (Throwable e) { e.printStackTrace(); } } /* * @see TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); } /* * @see TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); } /** * Constructor for PyAutoIndentStrategyTest. * @param arg0 */ public PyAutoIndentStrategyTest(String arg0) { super(arg0); strategy = new PyAutoIndentStrategy(); } public void testNewLineWithNewWithConstruct() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class C:\n" + " with a:" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testNewLineOnDocstring() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "def Raise(): \n" + " '''\n" + "" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength() - 1, 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testNewLineOnClass() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "\n" + "class C:\n" + " pass" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(1, 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n", docCmd.text); } public void testTab() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = " args = [ '-1', '-2',\n" + " "; DocCmd docCmd = new DocCmd(str.length(), 0, "\t"); strategy.customizeDocumentCommand(new Document(str), docCmd); assertEquals(" ", docCmd.text); } public void testForcedTab() { TestIndentPrefs prefs = new TestIndentPrefs(true, 4); prefs.setForceTabs(true); strategy.setIndentPrefs(prefs); String str = "class Tabs(object):\n" + "\tpass\n"; DocCmd docCmd = new DocCmd(str.length(), 0, "\t"); strategy.customizeDocumentCommand(new Document(str), docCmd); assertEquals("\t", docCmd.text); } public void testForcedTab2() { TestIndentPrefs prefs = new TestIndentPrefs(true, 4); prefs.setForceTabs(true); strategy.setIndentPrefs(prefs); String str = "class Tabs(object):\n" + "\ta=10"; DocCmd docCmd = new DocCmd(str.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(str), docCmd); assertEquals("\n\t", docCmd.text); } public void testForcedTab3() { TestIndentPrefs prefs = new TestIndentPrefs(true, 4); prefs.setForceTabs(true); strategy.setIndentPrefs(prefs); String str = "class Tabs(object):\n" + "\ta=10\n"; DocCmd docCmd = new DocCmd(str.length(), 0, " b=20"); strategy.customizeDocumentCommand(new Document(str), docCmd); assertEquals("\tb=20", docCmd.text); } public void testOffsetType() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "print 'aaa'"; DocCmd docCmd = new DocCmd(str.length() - "'aaa'".length(), 0, "\t"); strategy.customizeDocumentCommand(new Document(str), docCmd); assertEquals(" ", docCmd.text); } public void testOffsetType2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "\nprint 'aaa'"; //just to check in 2nd line (and not on the 1st -- which has different semantics) DocCmd docCmd = new DocCmd(str.length() - "'aaa'".length(), 0, "\t"); strategy.customizeDocumentCommand(new Document(str), docCmd); assertEquals(" ", docCmd.text); } public void testTab2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "class Foo:\n" + " def m" + ""; DocCmd docCmd = new DocCmd(str.length() - " def m".length(), 4, "\t"); Document document = new Document(str); strategy.customizeDocumentCommand(document, docCmd); assertEquals(" ", docCmd.text); assertEquals(str, document.get()); //as we already have a selection, nothing should be deleted } public void testTab3() { strategy.setIndentPrefs(new TestIndentPrefs(false, 4)); String str = "\tprint 'foo'"; DocCmd docCmd = new DocCmd(1, 0, "\t"); Document document = new Document(str); strategy.customizeDocumentCommand(document, docCmd); assertEquals("\t", docCmd.text); assertEquals(str, document.get()); //as we already have a selection, nothing should be deleted } public void testTab4() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class MyClass:\n" + " def NextMethod(self,\n" + " c):\n" + "\n" + //-3 :in this line "\n" + //-2 :this line "\n" + //-1 :and this one the indent should be the same (8 spaces) ""; for (int i = 3; i > 0; i--) { DocCmd docCmd = new DocCmd(str.length() - i, 0, "\t"); Document document = new Document(str); strategy.customizeDocumentCommand(document, docCmd); assertEquals("Error when dealing with len-" + i, " ", docCmd.text); assertEquals(str, document.get()); } } public void testSpaces() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); DocCmd docCmd = new DocCmd(0, 0, "\t"); strategy.customizeDocumentCommand(new Document(""), docCmd); assertEquals(" ", docCmd.text); docCmd = new DocCmd(0, 0, "\t\t"); strategy.customizeDocumentCommand(new Document(""), docCmd); assertEquals(" ", docCmd.text); docCmd = new DocCmd(0, 0, "\tabc"); strategy.customizeDocumentCommand(new Document(""), docCmd); assertEquals(" abc", docCmd.text); docCmd = new DocCmd(0, 0, "\tabc\t"); strategy.customizeDocumentCommand(new Document(""), docCmd); assertEquals(" abc ", docCmd.text); docCmd = new DocCmd(0, 0, " "); strategy.customizeDocumentCommand(new Document(""), docCmd); assertEquals(" ", docCmd.text); } public void testNewLineAfterReturn() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "def m1(self):\n" + " return 'foo'\n" + "#ffo" + "" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength() - "#ffo".length(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n", docCmd.text); } public void testIgnoreComment() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "titleEnd = ('[#')" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n", docCmd.text); } public void testIgnoreComment2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "titleEnd = ('''\n" + " [#''')" + //should wrap to the start ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n", docCmd.text); } public void testNewLineAfterOpeningParWithOtherContents() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "def m1( self,"; // |<-- should indent here in this case, and not on the parenthesis final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testNewLineAfterReturn2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "def m1(self):\n" + " return ('foo',"; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testMaintainIndent() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "def moo():\n" + " if not 1:\n" + " print 'foo'\n" + " print 'bla'" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength() - "print 'bla'".length(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testMaintainIndent2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "def moo():\n" + " if not 1:\n" + " print 'foo'\n" + " print 'bla'" + ""; final Document doc = new Document(str); int offset = doc.getLength() - " print 'bla'".length(); DocCmd docCmd = new DocCmd(offset, 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); assertEquals(offset + 2, docCmd.caretOffset); } public void testDontChangeCursorOffset() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "def moo():\n" + " if not 1:\n" + " print 'foo'" + ""; final Document doc = new Document(str); int offset = doc.getLength() - " 'foo'".length(); DocCmd docCmd = new DocCmd(offset, 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); assertEquals(-1, docCmd.caretOffset); //don't change it } public void testTabIndentToLevel() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "properties.create( \n" + " a,\n" + " \n" + "\n" + //cursor is here " b,\n" + ")" + ""; final Document doc = new Document(str); int offset = doc.getLength() - "\n b,\n)".length(); DocCmd docCmd = new DocCmd(offset, 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); } public void testTabIndentToLevel2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class ContaminantFont( Barrier, ModelBase ):\n" + " '''\n" + " This class contains information to edit a contaminant.\n" + " '''\n" + " properties.create( \n" + " \n" + " #defines where is the source (in the water or in the soil)\n" + " sourceLocation = SOURCE_LOCATION_WATER,\n" + " \n" + "" + //we're here (indent to the first level) ""; final Document doc = new Document(str); int offset = doc.getLength(); DocCmd docCmd = new DocCmd(offset, 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); } public void testTabIndentToLevel3() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class ContaminantFont( Barrier, ModelBase ):\n" + " '''\n" + " This class contains information to edit a contaminant.\n" + " '''\n" + " properties.create( \n" + " \n" + " #defines where is the source (in the water or in the soil)\n" + " sourceLocation = SOURCE_LOCATION_WATER,\n" + " \n" + " " + //now that we're already in the first level, indent to the current level ""; final Document doc = new Document(str); int offset = doc.getLength(); DocCmd docCmd = new DocCmd(offset, 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); } public void testNoAutoIndentClosingPar() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "newTuple = (\n" + " what(),\n" + //the next line should be indented to this one, and not to the start of the indent " )\n" + ""; final Document doc = new Document(str); String s = "\n" + " )\n"; DocCmd docCmd = new DocCmd(doc.getLength() - s.length(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testNoAutoIndentClosingPar2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "newTuple = (\n" + " what(),\n" + "\n" + //pressing tab in the start of this line will bring us to the 'what()' level. " )\n" + ""; final Document doc = new Document(str); String s = "\n" + " )\n"; DocCmd docCmd = new DocCmd(doc.getLength() - s.length(), 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); } public void testNewLineAfterLineWithComment() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "string1 = '01234546789[#]'" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n", docCmd.text); } public void testNewLine10() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "def M1(a):\n" + " doFoo(a,b(),\n" + " '',b)" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testNewLine11() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "def fun():\n" + " if True:\n" + " passif False: 'foo'" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength() - "if False: 'foo'".length(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testNewLine12() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "if False:print 'done'" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength() - "print 'done'".length(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testNewLine3() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "for a in b: " + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength() - 4, 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); String expected = "for a in b: "; assertEquals(expected, doc.get()); } public void testNewLine6() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "for v in w:\n" + " pass\n" + //dedent on pass ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n", docCmd.text); } public void testNewLine6a() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "def getSpilledComps( *dummy ):\n" + " return [self.component4]" + //dedent here ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n", docCmd.text); } public void testNewLine7() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class C:\n" + " a = 30\n" + "print C.a\n" + "\n" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n", docCmd.text); } public void testNewLine8() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class C:\n" + " pass\n" + " a = 30\n" + " " + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testIndent() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "while False:\n" + " if foo:" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength() - "if foo:".length(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testIndentAfterRet() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class Foo:\n" + " def m1():\n" + " for a in b:\n" + " if a = 20:\n" + " print 'foo'\n" + " return 30\n" + " " + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testIndentAfterRet2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class Foo:\n" + " def m1():\n" + " for a in b:\n" + " if a = 20:\n" + " print 'foo'\n" + " return 30\n" + " \n" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); } public void testNewLine9() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class C:\n" + " try:" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); } public void testNewLine4() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "def a():\n" + " print a" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength() - " print a".length(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); String expected = "" + "def a():\n" + " print a" + ""; assertEquals(expected, doc.get()); assertEquals("\n", docCmd.text); } public void testNewLine5() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "def a():\n" + " " + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength() - " ".length(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); String expected = "" + "def a():\n" + " " + ""; assertEquals(expected, doc.get()); assertEquals("\n", docCmd.text); } public void testNewLine() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "createintervention() #create " + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n", docCmd.text); } public void testNewLine2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "err)" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n", docCmd.text); } public void testTabInComment() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "#comment" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); // a single tab should go to the correct indent } public void testIndentingWithTab() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "class C:\n" + " def m1(self):\n" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); // a single tab should go to the correct indent } public void testIndentingWithTab2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class C:\n" + " pass\n" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); // a single tab should go to the correct indent } public void testIndentingWithTab3() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class C:\n" + " def m1(self): \n" + " print 1\n" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); // a single tab should go to the correct indent } public void testWithoutSmartIndent() { final TestIndentPrefs prefs = new TestIndentPrefs(true, 4); prefs.smartIndentAfterPar = false; strategy.setIndentPrefs(prefs); String str = "" + "class C:\n" + " def m1(self):" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\n"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("\n ", docCmd.text); // a single tab should go to the correct indent } public void testIndentingWithTab4() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class C:\n" + " def m1(self): \n" + " print 'a'\n" + " " + //now, a 'regular' tab should happen ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); // a single tab should go to the correct indent } public void testIndentingWithTab5() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class C:\n" + " def m1(self): \n" + " print 'a'\n" + " " + //now, only 1 space is missing to the correct indent ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength(), 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); // a single tab should go to the correct indent } public void testIndentingWithTab6() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class C:\n" + " def m1(self): \n" + "print 'a'" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength() - "print 'a'".length(), 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); // a single tab should go to the correct indent } public void testIndentingWithTab7() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "" + "class C:\n" + " def m1(self): \n" + " print 'a'" + ""; String expected = "" + "class C:\n" + " def m1(self): \n" + "print 'a'" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength() - " print 'a'".length(), 0, "\t"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals(" ", docCmd.text); // a single tab should go to the correct indent assertEquals(expected, doc.get()); // the spaces after the indent should be removed } public void testTabs() { strategy.setIndentPrefs(new TestIndentPrefs(false, 4)); DocCmd docCmd = new DocCmd(0, 0, "\t"); strategy.customizeDocumentCommand(new Document(""), docCmd); assertEquals("\t", docCmd.text); docCmd = new DocCmd(0, 0, "\t\t"); strategy.customizeDocumentCommand(new Document(""), docCmd); assertEquals("\t\t", docCmd.text); docCmd = new DocCmd(0, 0, "\tabc"); strategy.customizeDocumentCommand(new Document(""), docCmd); assertEquals("\tabc", docCmd.text); docCmd = new DocCmd(0, 0, "\tabc\t"); strategy.customizeDocumentCommand(new Document(""), docCmd); assertEquals("\tabc\t", docCmd.text); docCmd = new DocCmd(0, 0, " abc"); //paste strategy.customizeDocumentCommand(new Document(""), docCmd); assertEquals("\tabc", docCmd.text); } public void testCommentsIndent() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); doc = "class c: #some comment"; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testCommentsIndent2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); //test not indent more doc = " # comment:"; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + " "; assertEquals(expected, docCmd.text); //test indent more doc = " if False:"; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testIndentLevel3() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "a = (1, \n" + " 2,"; //should keep this indent, and not go to the opening bracket indent. DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testIndentLevel() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "def m1(): #some comment\n" + " print foo(a,\n" + " b)"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testIndentLevel2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "def m1(): #some comment\n" + " def metfoo(a,\n" + " b):"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testNoIndent() { TestIndentPrefs prefs = new TestIndentPrefs(true, 4); prefs.smartIndentAfterPar = false; strategy.setIndentPrefs(prefs); String doc = "" + "def m1(): \n"; DocCmd docCmd = new DocCmd(0, 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n"; assertEquals(expected, docCmd.text); } public void testDedent() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "def m1(): #some comment\n" + " return 10"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n"; assertEquals(expected, docCmd.text); //test ending with doc = "def m1(): #some comment\n" + " return"; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n"; assertEquals(expected, docCmd.text); //test not dedenting doc = "def m1(): #some comment\n" + " returnIs10 = 10"; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testIndentSpaces() { //test after class xxx:\n strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "class c:"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + " "; assertEquals(expected, docCmd.text); //test regular doc = " a = 2"; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + " "; assertEquals(expected, docCmd.text); //test after [ a,\n doc = "m = [a,"; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testAfterClosePar1() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "m = [a,"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testAfterCloseParOnlyIndent() { final TestIndentPrefs prefs = new TestIndentPrefs(true, 4); strategy.setIndentPrefs(prefs); prefs.indentToParLevel = false; String doc = "m = [a,"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testAfterCloseParOnlyIndent2() { final TestIndentPrefs prefs = new TestIndentPrefs(true, 4); strategy.setIndentPrefs(prefs); prefs.indentToParLevel = false; String doc = "" + "class A:\n" + " def m1(a,"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testAfterCloseParOnlyMultiIndent() { final TestIndentPrefs prefs = new TestIndentPrefs(true, 3); strategy.setIndentPrefs(prefs); prefs.indentToParLevel = false; prefs.indentAfterParWidth = 2; String doc = "" + "__author__ = ["; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testAfterClosePar2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "m = [a,\n" + " b,"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testAfterClosePar() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "m = [a, (#comment"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testAfterCloseParA() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); doc = "m = [a, otherCall(), ]"; docCmd = new DocCmd(doc.length() - 1, 0, "\n"); //right before the last ']' strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testIndent2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); doc = "m = [a, otherCall(), "; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testIndent2a() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); doc = "def m2(self):\n" + " m1(a, b(), )"; docCmd = new DocCmd(doc.length() - 1, 0, "\n"); //right before the last ')' strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testIndent2b() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); doc = "m = [a, otherCall(), ]"; docCmd = new DocCmd(doc.length() - 1, 0, "\n"); //right before the last ']' strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testIndent3() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "properties.create(a = newClass(),"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testIndent3a() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "properties.create(a = newClass(),\n" + " b = newClass(),"; //don't indent after the '(' in this line, but to the default one DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testIndent4() { //even if it does not end with ',' we should indent in parenthesis strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "properties.create(a = newClass(),\n" + " b = newClass("; //don't indent after the '(' in this line, but to the default one DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testDedent5() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "properties.create(a = newClass(),\n" + " b = newClass(\n" + " )"; //go to the last indentation DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + " "; assertEquals(expected, docCmd.text); } public void testNoSmartIndent() { TestIndentPrefs prefs = new TestIndentPrefs(false, 4, true); prefs.smartIndentAfterPar = false; strategy.setIndentPrefs(prefs); String doc = null; DocCmd docCmd = null; String expected = null; //test after [ a,\n doc = "m = [a,"; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n"; assertEquals(expected, docCmd.text); //test after \t[ a,\n doc = "\tm = [a,"; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + "\t"; assertEquals(expected, docCmd.text); //test after \t[ a,\n doc = "\tm = [a, "; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + "\t"; assertEquals(expected, docCmd.text); } public void testIndentTabs() { //test after class xxx:\n strategy.setIndentPrefs(new TestIndentPrefs(false, 4)); String doc = "class c:"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n" + "\t"; assertEquals(expected, docCmd.text); //test after class xxx: \n strategy.setIndentPrefs(new TestIndentPrefs(false, 4)); doc = "class c: "; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + "\t"; assertEquals(expected, docCmd.text); //test regular doc = "\ta = 2"; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + "\t"; assertEquals(expected, docCmd.text); //test after [ a,\n doc = "m = [a,"; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + "\t"; assertEquals(expected, docCmd.text); //test after \t[ a,\n doc = "\tm = [a,"; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + "\t\t"; assertEquals(expected, docCmd.text); //test after \t[ a,\n doc = "\tm = [a, "; docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "\n" + "\t\t"; assertEquals(expected, docCmd.text); } public void testAutoClose() { strategy.setIndentPrefs(new TestIndentPrefs(false, 4, true)); String doc = "class c(object): "; DocCmd docCmd = new DocCmd(doc.length(), 0, "["); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "[]"; assertEquals(expected, docCmd.text); } public void testAutoSelf() { TestIndentPrefs testIndentPrefs = new TestIndentPrefs(false, 4, true); testIndentPrefs.autoAddSelf = false; strategy.setIndentPrefs(testIndentPrefs); String doc = null; DocCmd docCmd = null; String expected = null; doc = "class c:\n" + " def met"; docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "():"; assertEquals(expected, docCmd.text); } public void testAutoSelf1() { strategy.setIndentPrefs(new TestIndentPrefs(false, 4, true)); String doc = "" + "def m1():\n" + " def m2():\n" + " pass\n" + " def m2" + ""; DocCmd docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "():"; assertEquals(expected, docCmd.text); } public void testAutoSelf2() { strategy.setIndentPrefs(new TestIndentPrefs(false, 4, true)); String doc = "" + "class A:\n" + "\n" + " @staticmethod\n" + " def m2():\n" + " pass\n" + " def m2" + ""; DocCmd docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "(self):"; assertEquals(expected, docCmd.text); } public void testAutoCls() { TestIndentPrefs testIndentPrefs = new TestIndentPrefs(false, 4, true); strategy.setIndentPrefs(testIndentPrefs); String doc = null; DocCmd docCmd = null; String expected = null; doc = "class c:\n" + " @classmethod\n" + " def met"; docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "(cls):"; assertEquals(expected, docCmd.text); } public void testNoAutoSelf() { TestIndentPrefs testIndentPrefs = new TestIndentPrefs(false, 4, true); strategy.setIndentPrefs(testIndentPrefs); String doc = null; DocCmd docCmd = null; String expected = null; doc = "class c:\n" + " def met(self):\n" + " def inner"; docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "():"; assertEquals(expected, docCmd.text); } public void testSmartIndent() { TestIndentPrefs testIndentPrefs = new TestIndentPrefs(true, 4); strategy.setIndentPrefs(testIndentPrefs); String doc = null; DocCmd docCmd = null; String expected = null; doc = "class SuperContainer:\n" + " def SuperMethod(self):\n" + " pass\n" + " " + ""; docCmd = new DocCmd(doc.length(), 0, "\t"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " "; assertEquals(expected, docCmd.text); } public void testNoAutoSelf2() { TestIndentPrefs testIndentPrefs = new TestIndentPrefs(false, 4, true); strategy.setIndentPrefs(testIndentPrefs); String doc = null; DocCmd docCmd = null; String expected = null; doc = "class c:\n" + " @staticmethod\n" + " def met"; docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "():"; assertEquals(expected, docCmd.text); } public void testNoAutoSelf3() { TestIndentPrefs testIndentPrefs = new TestIndentPrefs(false, 4, true); strategy.setIndentPrefs(testIndentPrefs); String doc = null; DocCmd docCmd = null; String expected = null; doc = "def testNotifyTwice(self):\n" + " class Foo(Subject):\n" + " pass\n" + "\n" + " class Foo(Foo):\n" + " pass\n" + "\n" + " pool = Pool()\n" + "\n" + " def OnAdd" + ""; docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "():"; assertEquals(expected, docCmd.text); } public void testNoAutoSelf4() { TestIndentPrefs testIndentPrefs = new TestIndentPrefs(false, 4, true); strategy.setIndentPrefs(testIndentPrefs); String doc = null; DocCmd docCmd = null; String expected = null; doc = "if True:\n" + " def foo" + ""; docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "():"; assertEquals(expected, docCmd.text); } /** * Tests automatically adding/replacing brackets, colons, and parentheses. * @see PyAutoIndentStrategy */ public void testAutoPar() { strategy.setIndentPrefs(new TestIndentPrefs(false, 4, true)); String doc = "class c"; DocCmd docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "():"; assertEquals(expected, docCmd.text); doc = "class c:\n" + " def met"; docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "(self):"; assertEquals(expected, docCmd.text); //same as above, but with tabs doc = "class c:\n" + "\tdef met"; docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "(self):"; assertEquals(expected, docCmd.text); doc = "class c(object): #"; docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "("; //in comment assertEquals(expected, docCmd.text); doc = "def a"; docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "():"; assertEquals(expected, docCmd.text); doc = "a"; docCmd = new DocCmd(doc.length(), 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "()"; assertEquals(expected, docCmd.text); doc = "a()"; docCmd = new DocCmd(doc.length() - 1, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "()"; assertEquals(expected, docCmd.text); // test very simple ':' detection doc = "def something():"; docCmd = new DocCmd(doc.length() - 1, 0, ":"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = ""; assertEquals(expected, docCmd.text); assertEquals(15, docCmd.offset); // test inputting ':' when you already have a ':', like at the end of a function declaraction doc = "class c:\n" + " def __init__(self):"; docCmd = new DocCmd(doc.length() - 1, 0, ":"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = ""; assertEquals(expected, docCmd.text); assertEquals(32, docCmd.caretOffset); // test inputting ':' at the end of a document doc = "class c:\n" + " def __init__(self)"; docCmd = new DocCmd(doc.length(), 0, ":"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = ":"; assertEquals(expected, docCmd.text); assertEquals(31, docCmd.offset); // test same as above, but with a comment doc = "class c:\n" + " def __init__(self): # comment"; docCmd = new DocCmd(doc.length() - 11, 0, ":"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = ""; assertEquals(expected, docCmd.text); assertEquals(32, docCmd.caretOffset); // test inputting ')' at the end of a document doc = "class c:\n" + " def __init__(self)"; docCmd = new DocCmd(doc.length(), 0, ")"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = ")"; assertEquals(expected, docCmd.text); assertEquals(-1, docCmd.caretOffset); // test inputting ')' at the end of a document when it should replace a ')' doc = "class c:\n" + " def __init__(self)"; docCmd = new DocCmd(doc.length() - 1, 0, ")"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = ""; assertEquals(expected, docCmd.text); assertEquals(31, docCmd.caretOffset); // test inputting ')' in the middle of the document doc = "def __init__(self):\n" + " pass"; docCmd = new DocCmd(17, 0, ")"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = ""; assertEquals(expected, docCmd.text); assertEquals(18, docCmd.caretOffset); // check very simple braces insertion doc = "()"; docCmd = new DocCmd(1, 0, ")"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = ""; assertEquals(expected, docCmd.text); assertEquals(2, docCmd.caretOffset); // check simple braces insertion not at end of document doc = "() "; docCmd = new DocCmd(1, 0, ")"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = ""; assertEquals(expected, docCmd.text); assertEquals(2, docCmd.caretOffset); // check insertion that should happen even being just before a ')' doc = "(() "; docCmd = new DocCmd(2, 0, ")"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = ")"; assertEquals(expected, docCmd.text); assertEquals(-1, docCmd.caretOffset); // check same stuff for brackets // check simple braces insertion not at end of document doc = "[] "; docCmd = new DocCmd(1, 0, "]"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = ""; assertEquals(expected, docCmd.text); assertEquals(2, docCmd.caretOffset); // two different kinds of braces next to each other doc = "([)"; docCmd = new DocCmd(2, 0, "]"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "]"; assertEquals(expected, docCmd.text); assertEquals(-1, docCmd.caretOffset); } public void testParens() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "isShown() #suite()" + ""; final Document doc = new Document(str); DocCmd docCmd = new DocCmd(doc.getLength() - ") #suite()".length(), 0, ")"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("", docCmd.text); assertEquals(9, docCmd.caretOffset); } public void testParens2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "isShown() #suite()'" + ""; final Document doc = new Document(str); int offset = doc.getLength() - ") #suite()'".length(); DocCmd docCmd = new DocCmd(offset, 0, ")"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("", docCmd.text); assertEquals(offset + 1, docCmd.caretOffset); } public void testParens3() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String str = "assert_('\\\\' in txt) a()"; final Document doc = new Document(str); int offset = doc.getLength() - ")".length(); DocCmd docCmd = new DocCmd(offset, 0, ")"); strategy.customizeDocumentCommand(doc, docCmd); assertEquals("", docCmd.text); assertEquals(offset + 1, docCmd.caretOffset); } public void testElse() { //first part of test - simple case strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); String strDoc = "if foo:\n" + " print a\n" + " else"; int initialOffset = strDoc.length(); DocCmd docCmd = new DocCmd(initialOffset, 0, ":"); Document doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); String expected = ":"; assertEquals(docCmd.offset, initialOffset - 4); assertEquals(expected, docCmd.text); assertEquals("if foo:\n" + " print a\n" + "else", doc.get()); //second part of test - should not dedent strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); strDoc = "if foo:\n" + " if somethingElse:" + " print a\n" + " else"; initialOffset = strDoc.length(); docCmd = new DocCmd(initialOffset, 0, ":"); doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); expected = ":"; assertEquals(expected, docCmd.text); assertEquals(docCmd.offset, initialOffset); assertEquals("if foo:\n" + " if somethingElse:" + " print a\n" + " else", doc.get()); } public void testElse2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); String strDoc = "" + "try:\n" + " print a\n" + "except RuntimeError:\n" + " a = 20\n" + " else"; int initialOffset = strDoc.length(); DocCmd docCmd = new DocCmd(initialOffset, 0, ":"); Document doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); String expected = ":"; assertEquals(docCmd.offset, initialOffset - 4); assertEquals(expected, docCmd.text); assertEquals("" + "try:\n" + " print a\n" + "except RuntimeError:\n" + " a = 20\n" + "else", doc.get()); } public void testTryExceptDedent() { //first part of test - simple case strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); String strDoc = "try:\n" + " print a\n" + " except"; int initialOffset = strDoc.length(); DocCmd docCmd = new DocCmd(initialOffset, 0, ":"); Document doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); String expected = ":"; assertEquals(docCmd.offset, initialOffset - 4); assertEquals(expected, docCmd.text); assertEquals("try:\n" + " print a\n" + "except", doc.get()); //second part of test - should also dedent strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); strDoc = "try:\n" + " if somethingElse:" + " print a\n" + " except"; initialOffset = strDoc.length(); docCmd = new DocCmd(initialOffset, 0, ":"); doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); expected = ":"; assertEquals(expected, docCmd.text); assertEquals(docCmd.offset, initialOffset - 4); assertEquals("try:\n" + " if somethingElse:" + " print a\n" + "except", doc.get()); } public void testElif() { //first part of test - simple case strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); String strDoc = "if foo:\n" + " print a\n" + " elif"; int initialOffset = strDoc.length(); DocCmd docCmd = new DocCmd(initialOffset, 0, " "); Document doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); String expected = " "; assertEquals(docCmd.offset, initialOffset - 4); assertEquals(expected, docCmd.text); assertEquals("if foo:\n" + " print a\n" + "elif", doc.get()); //second part of test - should not dedent strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); strDoc = "if foo:\n" + " if somethingElse:" + " print a\n" + " elif"; initialOffset = strDoc.length(); docCmd = new DocCmd(initialOffset, 0, " "); doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); expected = " "; assertEquals(expected, docCmd.text); assertEquals(docCmd.offset, initialOffset); assertEquals("if foo:\n" + " if somethingElse:" + " print a\n" + " elif", doc.get()); } public void testElif2() { //first part of test - simple case strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); String strDoc = "" + "if a:\n" + " try:\n" + " a = 10\n" + " except RuntimeError:\n" + " a = 29\n" + " elif"; int initialOffset = strDoc.length(); DocCmd docCmd = new DocCmd(initialOffset, 0, " "); Document doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); String expected = " "; assertEquals(docCmd.offset, initialOffset - 4); assertEquals(expected, docCmd.text); assertEquals("" + "if a:\n" + " try:\n" + " a = 10\n" + " except RuntimeError:\n" + " a = 29\n" + "elif", doc.get()); } public void testElseInFor() { //first part of test - simple case strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); String strDoc = "for i in []:\n" + " msg=\"success at %s\" % i\n" + " else" + ""; int initialOffset = strDoc.length(); DocCmd docCmd = new DocCmd(initialOffset, 0, ":"); Document doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); String expected = ":"; assertEquals(docCmd.offset, initialOffset - 4); assertEquals(expected, docCmd.text); assertEquals("for i in []:\n" + " msg=\"success at %s\" % i\n" + "else" + "", doc.get()); } public void testElseInTry() { //first part of test - simple case strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); String strDoc = "try:\n" + " print a\n" + "except:\n" + " pass\n" + " else"; int initialOffset = strDoc.length(); DocCmd docCmd = new DocCmd(initialOffset, 0, ":"); Document doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); String expected = ":"; assertEquals(docCmd.offset, initialOffset - 4); assertEquals(expected, docCmd.text); assertEquals("try:\n" + " print a\n" + "except:\n" + " pass\n" + "else", doc.get()); } public void testElifWithPar() { //first part of test - simple case strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); String strDoc = "if foo:\n" + " print a\n" + " elif"; int initialOffset = strDoc.length(); DocCmd docCmd = new DocCmd(initialOffset, 0, "("); Document doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); String expected = "()"; assertEquals(docCmd.offset, initialOffset - 4); assertEquals(expected, docCmd.text); assertEquals("if foo:\n" + " print a\n" + "elif", doc.get()); //second part of test - should not dedent strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); strDoc = "if foo:\n" + " if somethingElse:" + " print a\n" + " elif"; initialOffset = strDoc.length(); docCmd = new DocCmd(initialOffset, 0, "("); doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); expected = "()"; assertEquals(expected, docCmd.text); assertEquals(docCmd.offset, initialOffset); assertEquals("if foo:\n" + " if somethingElse:" + " print a\n" + " elif", doc.get()); } public void testAutoImportStr2() { strategy.setIndentPrefs(new TestIndentPrefs(false, 4, true)); String doc = "from ooooimport"; DocCmd docCmd = new DocCmd(doc.length() - "import".length(), 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = " "; assertEquals(expected, docCmd.text); } public void testAutoImportStr3() { strategy.setIndentPrefs(new TestIndentPrefs(false, 4, true)); String doc = "from oooo importFooo"; DocCmd docCmd = new DocCmd(doc.length() - "Fooo".length(), 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = " "; assertEquals(expected, docCmd.text); } public void testAutoImportStr() { strategy.setIndentPrefs(new TestIndentPrefs(false, 4, true)); String doc = "from xxx"; DocCmd docCmd = new DocCmd(doc.length(), 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = " import "; assertEquals(expected, docCmd.text); doc = "from xxx import"; docCmd = new DocCmd(doc.length(), 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " "; assertEquals(expected, docCmd.text); doc = "no from xxx"; docCmd = new DocCmd(doc.length(), 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " "; assertEquals(expected, docCmd.text); doc = "From xxx"; docCmd = new DocCmd(doc.length(), 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " "; assertEquals(expected, docCmd.text); doc = "from this space"; docCmd = new DocCmd(doc.length(), 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " "; assertEquals(expected, docCmd.text); doc = "from"; docCmd = new DocCmd(doc.length(), 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " "; assertEquals(expected, docCmd.text); doc = "from xxx import yyy"; docCmd = new DocCmd(8, 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " "; assertEquals(expected, docCmd.text); doc = "from_xxx"; docCmd = new DocCmd(doc.length(), 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " "; assertEquals(expected, docCmd.text); doc = "from importer"; docCmd = new DocCmd(doc.length(), 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " import "; assertEquals(expected, docCmd.text); doc = "from importer"; docCmd = new DocCmd(doc.length() - 2, 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " "; assertEquals(expected, docCmd.text); doc = "from myimporter"; docCmd = new DocCmd(doc.length(), 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " import "; assertEquals(expected, docCmd.text); doc = "from myimport"; docCmd = new DocCmd(doc.length(), 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " import "; assertEquals(expected, docCmd.text); doc = "from xxx #import yyy"; docCmd = new DocCmd(8, 0, " "); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = " import "; assertEquals(expected, docCmd.text); } public void testStringAddition() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); String doc = ""; DocCmd docCmd; String expected; doc = "var"; docCmd = new DocCmd(0, 0, "'"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "'"; //just a single one assertEquals(expected, docCmd.text); doc = "''"; docCmd = new DocCmd(doc.length() - 1, 0, "'"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = ""; //just walk with the cursor assertEquals(expected, docCmd.text); doc = "''"; docCmd = new DocCmd(0, 0, "'"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "'"; //don't walk with the cursor and add so that the document becomes ''' assertEquals(expected, docCmd.text); doc = ""; docCmd = new DocCmd(doc.length(), 0, "'"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "''"; assertEquals(expected, docCmd.text); doc = "'"; //already opened docCmd = new DocCmd(doc.length(), 0, "'"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "'"; assertEquals(expected, docCmd.text); doc = "#"; //on comment should not close docCmd = new DocCmd(doc.length(), 0, "'"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "'"; assertEquals(expected, docCmd.text); doc = "'ueuouo"; //already opened docCmd = new DocCmd(doc.length(), 0, "'"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "'"; assertEquals(expected, docCmd.text); doc = "'ueuouo' and "; //all is properly balanced, so, auto close it. docCmd = new DocCmd(doc.length(), 0, "'"); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "''"; assertEquals(expected, docCmd.text); doc = "'ueuouo'"; //already opened docCmd = new DocCmd(0, doc.length(), "'"); Document document = new Document(doc); strategy.customizeDocumentCommand(document, docCmd); assertEquals("''", docCmd.text); doc = "ueuo\nuo"; docCmd = new DocCmd(0, doc.length(), "\""); document = new Document(doc); strategy.customizeDocumentCommand(document, docCmd); assertEquals("\"\"", docCmd.text); doc = "a"; docCmd = new DocCmd(0, doc.length(), "\""); document = new Document(doc); strategy.customizeDocumentCommand(document, docCmd); assertEquals("\"\"", docCmd.text); doc = "')' "; docCmd = new DocCmd(0, doc.length(), "'"); document = new Document(doc); strategy.customizeDocumentCommand(document, docCmd); assertEquals("''", docCmd.text); } public void testCloseParens() { strategy.setIndentPrefs(new TestIndentPrefs(false, 4, true)); String doc = "()"; DocCmd docCmd = new DocCmd(doc.length() - 1, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "()"; assertEquals(expected, docCmd.text); doc = "[]"; docCmd = new DocCmd(doc.length() - 1, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "()"; assertEquals(expected, docCmd.text); doc = "((()))"; docCmd = new DocCmd(3, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "()"; assertEquals(expected, docCmd.text); doc = "((()))"; docCmd = new DocCmd(4, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "()"; assertEquals(expected, docCmd.text); doc = ","; docCmd = new DocCmd(0, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "()"; assertEquals(expected, docCmd.text); } public void testNoCloseParens() { strategy.setIndentPrefs(new TestIndentPrefs(false, 4, true)); String doc = "test"; DocCmd docCmd = new DocCmd(0, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "("; assertEquals(expected, docCmd.text); doc = "[][]"; docCmd = new DocCmd(2, 0, "["); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "["; assertEquals(expected, docCmd.text); doc = "(test"; docCmd = new DocCmd(0, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "("; assertEquals(expected, docCmd.text); doc = ")test"; docCmd = new DocCmd(0, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "("; assertEquals(expected, docCmd.text); doc = "()test"; docCmd = new DocCmd(0, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "("; assertEquals(expected, docCmd.text); doc = "())"; docCmd = new DocCmd(0, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "("; assertEquals(expected, docCmd.text); doc = "())"; docCmd = new DocCmd(1, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "("; assertEquals(expected, docCmd.text); doc = "(()))"; docCmd = new DocCmd(2, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "("; assertEquals(expected, docCmd.text); doc = "[]][]"; docCmd = new DocCmd(2, 0, "["); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "["; assertEquals(expected, docCmd.text); doc = "\n\n)"; docCmd = new DocCmd(0, 0, "("); strategy.customizeDocumentCommand(new Document(doc), docCmd); expected = "("; assertEquals(expected, docCmd.text); } public void testEncoding() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); String doc = ""; DocCmd docCmd = new DocCmd(0, 0, "\t(u'�', 'EUR')"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = " (u'�', 'EUR')"; assertEquals(expected, docCmd.text); } public void testIndentWrong() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "class Class:\n" + "\n" + " def Method(self):\n" + " if a:\n" + " pass\n" + " Call(attrs)\n" + "\n" + "\n"; DocCmd docCmd = new DocCmd(doc.length() - 1, 0, "\t"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = " "; assertEquals(expected, docCmd.text); } public void testIndentBeforeMethod() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "class Class:\n" + "\n" + " def Method(self):\n" + " if a:\n" + " pass\n" + " Call(attrs)\n" + "\n" + " def Foo(self):"; DocCmd docCmd = new DocCmd(doc.length() - "\n def Foo(self):".length(), 0, "\t"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = " "; assertEquals(expected, docCmd.text); } public void testIndentBeforeDecorator() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "class Class:\n" + "\n" + " def Method(self):\n" + " if a:\n" + " pass\n" + " Call(attrs)\n" + "\n" + " @Decorator"; DocCmd docCmd = new DocCmd(doc.length() - "\n @Decorator".length(), 0, "\t"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = " "; assertEquals(expected, docCmd.text); } public void testIndentBeforeMethodAlreadyPassed() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "class Class:\n" + "\n" + " def Method(self):\n" + " if a:\n" + " a=10\n" + " \n" + " def Foo(self):"; DocCmd docCmd = new DocCmd(doc.length() - "\n def Foo(self):".length(), 0, "\t"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = " "; assertEquals(expected, docCmd.text); } public void testIndentMatchingNextLineIfPreviousIsEmpty() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "class Class:\n" + "\n" + " def Method(self):\n" + " if a:\n" + " a=10\n" + "\n" + "\n" + " something:"; DocCmd docCmd = new DocCmd(doc.length() - "\n something:".length(), 0, "\t"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = " "; assertEquals(expected, docCmd.text); } public void testIndentMatchingNextLineIfPreviousIsEmpty2() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "class Class:\n" + "\n" + " def Method(self):\n" + " if a:\n" + " a=10\n" + "\n" + " \n" + " something:"; DocCmd docCmd = new DocCmd(doc.length() - "\n something:".length(), 0, "\t"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = " "; assertEquals(expected, docCmd.text); } public void testIndentMatchingNextLineIfPreviousIsEmpty3() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "class Class:\n" + "\n" + " def Method(self):\n" + " if a:\n" + " a=10\n" + "\n" + " \n" + " something:"; DocCmd docCmd = new DocCmd(doc.length() - " \n something:".length(), 0, "\t"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = " "; assertEquals(expected, docCmd.text); } public void testIndentAfterReturnWithContinuation() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "class Class:\n" + "\n" + " def Method(self):\n" + " return \\"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testIndentAfterReturnWithContinuation2() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "class Class:\n" + "\n" + " def Method(self):\n" + " return ("; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testIndentAfterStringEnd() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "class Class:\n" + "\n" + " def Method(self):\n" + " a = '''\n" + "some line\n" + "end line'''"; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testIndentAfterStringEnd2() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "class Class:\n" + "\n" + " def Method(self):\n" + " '''docstring'''" + ""; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testIndentAfterStringEnd3() throws Exception { strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "class Class:\n" + "\n" + " def Method(self):\n" + " '''docstring''' " + ""; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testIndentParens4() throws Exception { //https://sourceforge.net/tracker/?func=detail&aid=3217105&group_id=85796&atid=577329 strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "\n" + "def testIt():\n" + "\n" + " return [0.5 * ((A / B) ** 2 + \n" + " (C / D) ** 2) for E, F in G]" + //<return> before 'for' ""; DocCmd docCmd = new DocCmd(doc.length() - "for E, F in G]".length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testIndentParens5() throws Exception { //https://sourceforge.net/tracker/?func=detail&aid=3217105&group_id=85796&atid=577329 strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "\n" + "def testIt():\n" + "\n" + " return [0.5 * ((A / B) ** 2 + \n" + " (C / D) ** 2) for E, F in G]" + //keep the same level, not the one of the starting parens, as we didn't change the parens level! ""; DocCmd docCmd = new DocCmd(doc.length() - ") for E, F in G]".length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testIndentParens6() throws Exception { //https://sourceforge.net/tracker/?func=detail&aid=3217105&group_id=85796&atid=577329 strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "\n" + "def testIt():\n" + "\n" + " return [0.5 * ((A / B) ** 2 + \n" + " (C / D) ** 2" + //keep the same level, not the one of the starting parens, as we didn't change the parens level! ""; DocCmd docCmd = new DocCmd(doc.length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testIndentParens7() throws Exception { //https://sourceforge.net/tracker/?func=detail&aid=3217105&group_id=85796&atid=577329 strategy.setIndentPrefs(new TestIndentPrefs(true, 4)); String doc = "" + "newTuple = (\n" + " what()\n" + ")" + ""; DocCmd docCmd = new DocCmd(doc.length() - "\n)".length(), 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testIndentParens8() throws Exception { //https://sourceforge.net/tracker/?func=detail&aid=3217105&group_id=85796&atid=577329 TestIndentPrefs prefs = new TestIndentPrefs(true, 4); prefs.indentToParLevel = false; strategy.setIndentPrefs(prefs); String doc = "" + "\n" + "def testIt():\n" + "\n" + " a = [0.5 * ((A / B) ** 2 + \n" + " ( C / D) ** 2)]" + ""; DocCmd docCmd = new DocCmd(doc.length() - 1, 0, "\n"); strategy.customizeDocumentCommand(new Document(doc), docCmd); String expected = "\n "; assertEquals(expected, docCmd.text); } public void testDedentElse() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); String strDoc = "" + "if foo:\n" + " for line in a:\n" + " pass\n" + " image_area_right_area_and_quote_area = '\\n'.join(lines)\n" + " else" + ""; int initialOffset = strDoc.length(); DocCmd docCmd = new DocCmd(initialOffset, 0, ":"); Document doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); String expected = ":"; assertEquals("" + "if foo:\n" + " for line in a:\n" + " pass\n" + " image_area_right_area_and_quote_area = '\\n'.join(lines)\n" + "else" + "", doc.get()); assertEquals(docCmd.offset, initialOffset - 4); assertEquals(expected, docCmd.text); } public void testDedentElse2() { strategy.setIndentPrefs(new TestIndentPrefs(true, 4, true)); String strDoc = "" + "if foo:\n" + " for line in a:\n" + " pass\n" + " image_area_right_area_and_quote_area = (a,\n" + "b)\n" + " else" + ""; int initialOffset = strDoc.length(); DocCmd docCmd = new DocCmd(initialOffset, 0, ":"); Document doc = new Document(strDoc); strategy.customizeDocumentCommand(doc, docCmd); String expected = ":"; assertEquals("" + "if foo:\n" + " for line in a:\n" + " pass\n" + " image_area_right_area_and_quote_area = (a,\n" + "b)\n" + "else" + "", doc.get()); assertEquals(docCmd.offset, initialOffset - 4); assertEquals(expected, docCmd.text); } }