From 59eb977b8ae18aff928d877f409ba9d463cf9c69 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sat, 26 Sep 2009 10:12:59 +0000 Subject: [PATCH] Text editor indent settings now used when generating event handlers in Python forms designer. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@5000 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/PythonDesignerGenerator.cs | 7 +- .../InsertEventHandlerTestFixtureBase.cs | 4 +- ...tEventHandlerWithSpaceIndentTestFixture.cs | 65 +++++++++++++++++++ .../Test/PythonBinding.Tests.csproj | 1 + 4 files changed, 73 insertions(+), 4 deletions(-) create mode 100644 src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertEventHandlerWithSpaceIndentTestFixture.cs diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerGenerator.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerGenerator.cs index e3ebed2942..ffaa639da5 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerGenerator.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonDesignerGenerator.cs @@ -132,7 +132,7 @@ namespace ICSharpCode.PythonBinding // Insert the event handler at the end of the class with an extra // new line before it. IDocument doc = viewContent.DesignerCodeFileDocument; - string eventHandler = CreateEventHandler(eventMethodName, body, "\t"); + string eventHandler = CreateEventHandler(eventMethodName, body, NRefactoryToPythonConverter.GetIndentString(textEditorProperties)); int line = doc.LineSegmentCollection.Count; LineSegment lastLineSegment = doc.GetLineSegment(line - 1); int offset = lastLineSegment.Offset + lastLineSegment.Length; @@ -229,6 +229,7 @@ namespace ICSharpCode.PythonBinding /// /// Returns the generated event handler. /// + /// The indent string to use for the event handler. protected string CreateEventHandler(string eventMethodName, string body, string indentation) { if (String.IsNullOrEmpty(body)) { @@ -241,9 +242,9 @@ namespace ICSharpCode.PythonBinding eventHandler.Append("def "); eventHandler.Append(eventMethodName); eventHandler.Append("(self, sender, e):"); - eventHandler.AppendLine(); + eventHandler.AppendLine(); eventHandler.Append(indentation); - eventHandler.Append("\t"); + eventHandler.Append(NRefactoryToPythonConverter.GetIndentString(textEditorProperties)); eventHandler.Append(body); return eventHandler.ToString(); diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertEventHandlerTestFixtureBase.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertEventHandlerTestFixtureBase.cs index e94e73a310..431477ac55 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertEventHandlerTestFixtureBase.cs +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertEventHandlerTestFixtureBase.cs @@ -26,11 +26,13 @@ namespace PythonBinding.Tests.Designer protected DerivedFormDesignerViewContent viewContent; protected string fileName = @"C:\Projects\Python\mainform.py"; protected DerivedPythonDesignerGenerator generator; + protected MockTextEditorProperties textEditorProperties; [TestFixtureSetUp] public void SetUpFixture() { - generator = new DerivedPythonDesignerGenerator(); + textEditorProperties = new MockTextEditorProperties(); + generator = new DerivedPythonDesignerGenerator(textEditorProperties); mockViewContent = new MockTextEditorViewContent(); viewContent = new DerivedFormDesignerViewContent(mockViewContent, new MockOpenedFile(fileName)); generator.Attach(viewContent); diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertEventHandlerWithSpaceIndentTestFixture.cs b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertEventHandlerWithSpaceIndentTestFixture.cs new file mode 100644 index 0000000000..57c603284d --- /dev/null +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/InsertEventHandlerWithSpaceIndentTestFixture.cs @@ -0,0 +1,65 @@ +// +// +// +// +// $Revision$ +// + +using System; +using ICSharpCode.PythonBinding; +using ICSharpCode.FormsDesigner; +using ICSharpCode.SharpDevelop.Dom; +using NUnit.Framework; +using PythonBinding.Tests.Utils; + +namespace PythonBinding.Tests.Designer +{ + /// + /// Tests the PythonDesignerGenerator uses the text editor properties for indentation when + /// inserting an event handler into the document. + /// + [TestFixture] + public class InsertEventHandlerWithSpaceIndentTestFixture : InsertEventHandlerTestFixtureBase + { + public override void AfterSetUpFixture() + { + textEditorProperties.ConvertTabsToSpaces = true; + textEditorProperties.IndentationSize = 4; + MockEventDescriptor mockEventDescriptor = new MockEventDescriptor("Click"); + insertedEventHandler = generator.InsertComponentEvent(null, mockEventDescriptor, "button1_click", String.Empty, out file, out position); + } + + [Test] + public void ExpectedCodeAfterEventHandlerInserted() + { + string expectedCode = GetTextEditorCode(); + string eventHandler = " def button1_click(self, sender, e):\r\n" + + " pass"; + expectedCode = expectedCode + "\r\n" + eventHandler; + + Assert.AreEqual(expectedCode, viewContent.DesignerCodeFileContent); + } + + /// + /// Note that the text editor code already has the + /// statement: + /// + /// "self._button1.Click += button1_click" + /// + /// This is generated by the form designer framework and not + /// by the designer generator. + /// + protected override string GetTextEditorCode() + { + return "from System.Windows.Forms import Form\r\n" + + "\r\n" + + "class MainForm(Form):\r\n" + + " def __init__(self):\r\n" + + " self.InitializeComponents()\r\n" + + " \r\n" + + " def InitializeComponents(self):\r\n" + + " self._button1 = System.Windows.Forms.Button()\r\n" + + " self.Controls.Add(self._button1)\r\n"; + } + } +} diff --git a/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj b/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj index de16d4dc5d..cbba547df8 100644 --- a/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj +++ b/src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj @@ -232,6 +232,7 @@ +