Browse Source
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3978 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61shortcuts
36 changed files with 1279 additions and 1904 deletions
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,46 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.ComponentModel; |
||||||
|
using System.ComponentModel.Design; |
||||||
|
using System.Drawing; |
||||||
|
using System.Windows.Forms; |
||||||
|
using ICSharpCode.PythonBinding; |
||||||
|
using IronPython.Compiler.Ast; |
||||||
|
using NUnit.Framework; |
||||||
|
using PythonBinding.Tests.Utils; |
||||||
|
|
||||||
|
namespace PythonBinding.Tests.Designer |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Tests that the string "System.Array" can be converted to an array.
|
||||||
|
/// </summary>
|
||||||
|
[TestFixture] |
||||||
|
public class DeserializeStringArrayTestFixture : DeserializeAssignmentTestFixtureBase |
||||||
|
{ |
||||||
|
public override string GetPythonCode() |
||||||
|
{ |
||||||
|
return "self.Items = System.Array[System.String](\r\n" + |
||||||
|
" [\"a\",\r\n" + |
||||||
|
" \"b\"])"; |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void DeserializedObjectIsExpectedArray() |
||||||
|
{ |
||||||
|
string[] expectedArray = new string[] {"a", "b"}; |
||||||
|
Assert.AreEqual(expectedArray, deserializedObject); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void StringTypeResolved() |
||||||
|
{ |
||||||
|
Assert.AreEqual("System.String", componentCreator.LastTypeNameResolved); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,52 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.ComponentModel; |
||||||
|
using System.ComponentModel.Design; |
||||||
|
using System.Drawing; |
||||||
|
using System.Windows.Forms; |
||||||
|
using ICSharpCode.PythonBinding; |
||||||
|
using IronPython.Compiler.Ast; |
||||||
|
using NUnit.Framework; |
||||||
|
using PythonBinding.Tests.Utils; |
||||||
|
|
||||||
|
namespace PythonBinding.Tests.Designer |
||||||
|
{ |
||||||
|
[TestFixture] |
||||||
|
public class DeserializeToolStripItemArrayTestFixture : DeserializeAssignmentTestFixtureBase |
||||||
|
{ |
||||||
|
ToolStripMenuItem fileMenuItem; |
||||||
|
ToolStripMenuItem editMenuItem; |
||||||
|
|
||||||
|
public override string GetPythonCode() |
||||||
|
{ |
||||||
|
fileMenuItem = (ToolStripMenuItem)componentCreator.CreateComponent(typeof(ToolStripMenuItem), "fileToolStripMenuItem"); |
||||||
|
editMenuItem = (ToolStripMenuItem)componentCreator.CreateComponent(typeof(ToolStripMenuItem), "editToolStripMenuItem"); |
||||||
|
|
||||||
|
componentCreator.Add(fileMenuItem, "fileToolStripMenuItem"); |
||||||
|
componentCreator.Add(editMenuItem, "editToolStripMenuItem"); |
||||||
|
|
||||||
|
return "self.Items = System.Array[System.Windows.Forms.ToolStripItem](\r\n" + |
||||||
|
" [self._fileToolStripMenuItem,\r\n" + |
||||||
|
" self._editToolStripMenuItem])"; |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void DeserializedObjectIsExpectedCustomColor() |
||||||
|
{ |
||||||
|
ToolStripItem[] expectedArray = new ToolStripItem[] {fileMenuItem, editMenuItem}; |
||||||
|
Assert.AreEqual(expectedArray, deserializedObject); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void StringTypeResolved() |
||||||
|
{ |
||||||
|
Assert.AreEqual("System.Windows.Forms.ToolStripItem", componentCreator.LastTypeNameResolved); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,141 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using System.ComponentModel; |
||||||
|
using System.ComponentModel.Design; |
||||||
|
using System.ComponentModel.Design.Serialization; |
||||||
|
using System.Drawing; |
||||||
|
using System.Windows.Forms; |
||||||
|
using ICSharpCode.PythonBinding; |
||||||
|
using NUnit.Framework; |
||||||
|
using PythonBinding.Tests.Utils; |
||||||
|
|
||||||
|
namespace PythonBinding.Tests.Designer |
||||||
|
{ |
||||||
|
[TestFixture] |
||||||
|
public class GenerateMenuStripItemsFormTestFixture |
||||||
|
{ |
||||||
|
string generatedPythonCode; |
||||||
|
|
||||||
|
[TestFixtureSetUp] |
||||||
|
public void SetUpFixture() |
||||||
|
{ |
||||||
|
using (DesignSurface designSurface = new DesignSurface(typeof(Form))) { |
||||||
|
IDesignerHost host = (IDesignerHost)designSurface.GetService(typeof(IDesignerHost)); |
||||||
|
IEventBindingService eventBindingService = new MockEventBindingService(host); |
||||||
|
Form form = (Form)host.RootComponent; |
||||||
|
form.ClientSize = new Size(200, 300); |
||||||
|
|
||||||
|
PropertyDescriptorCollection descriptors = TypeDescriptor.GetProperties(form); |
||||||
|
PropertyDescriptor namePropertyDescriptor = descriptors.Find("Name", false); |
||||||
|
namePropertyDescriptor.SetValue(form, "MainForm"); |
||||||
|
|
||||||
|
// Add menu strip.
|
||||||
|
MenuStrip menuStrip = (MenuStrip)host.CreateComponent(typeof(MenuStrip), "menuStrip1"); |
||||||
|
menuStrip.Text = "menuStrip1"; |
||||||
|
menuStrip.TabIndex = 0; |
||||||
|
menuStrip.Location = new Point(0, 0); |
||||||
|
menuStrip.Size = new System.Drawing.Size(200, 24); |
||||||
|
|
||||||
|
// Add menu strip items.
|
||||||
|
ToolStripMenuItem fileMenuItem = (ToolStripMenuItem)host.CreateComponent(typeof(ToolStripMenuItem), "fileToolStripMenuItem"); |
||||||
|
fileMenuItem.Size = new Size(37, 20); |
||||||
|
fileMenuItem.Text = "&File"; |
||||||
|
|
||||||
|
ToolStripMenuItem openMenuItem = (ToolStripMenuItem)host.CreateComponent(typeof(ToolStripMenuItem), "openToolStripMenuItem"); |
||||||
|
openMenuItem.Size = new Size(37, 20); |
||||||
|
openMenuItem.Text = "&Open"; |
||||||
|
|
||||||
|
ToolStripMenuItem exitMenuItem = (ToolStripMenuItem)host.CreateComponent(typeof(ToolStripMenuItem), "exitToolStripMenuItem"); |
||||||
|
exitMenuItem.Size = new Size(37, 20); |
||||||
|
exitMenuItem.Text = "E&xit"; |
||||||
|
fileMenuItem.DropDownItems.Add(openMenuItem); |
||||||
|
fileMenuItem.DropDownItems.Add(exitMenuItem); |
||||||
|
|
||||||
|
// Add non-sited component.
|
||||||
|
fileMenuItem.DropDownItems.Add(new ToolStripMenuItem()); |
||||||
|
|
||||||
|
menuStrip.Items.Add(fileMenuItem); |
||||||
|
|
||||||
|
ToolStripMenuItem editMenuItem = (ToolStripMenuItem)host.CreateComponent(typeof(ToolStripMenuItem), "editToolStripMenuItem"); |
||||||
|
editMenuItem.Size = new Size(39, 20); |
||||||
|
editMenuItem.Text = "&Edit"; |
||||||
|
menuStrip.Items.Add(editMenuItem); |
||||||
|
|
||||||
|
form.Controls.Add(menuStrip); |
||||||
|
|
||||||
|
PythonForm pythonForm = new PythonForm(" "); |
||||||
|
generatedPythonCode = pythonForm.GenerateInitializeComponentMethod(form); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GeneratedCode() |
||||||
|
{ |
||||||
|
string expectedCode = "def InitializeComponent(self):\r\n" + |
||||||
|
" self._menuStrip1 = System.Windows.Forms.MenuStrip()\r\n" + |
||||||
|
" self._fileToolStripMenuItem = System.Windows.Forms.ToolStripMenuItem()\r\n" + |
||||||
|
" self._openToolStripMenuItem = System.Windows.Forms.ToolStripMenuItem()\r\n" + |
||||||
|
" self._exitToolStripMenuItem = System.Windows.Forms.ToolStripMenuItem()\r\n" + |
||||||
|
" self._editToolStripMenuItem = System.Windows.Forms.ToolStripMenuItem()\r\n" + |
||||||
|
" self._menuStrip1.SuspendLayout()\r\n" + |
||||||
|
" self.SuspendLayout()\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" # menuStrip1\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" self._menuStrip1.Location = System.Drawing.Point(0, 0)\r\n" + |
||||||
|
" self._menuStrip1.Name = \"menuStrip1\"\r\n" + |
||||||
|
" self._menuStrip1.Size = System.Drawing.Size(200, 24)\r\n" + |
||||||
|
" self._menuStrip1.TabIndex = 0\r\n" + |
||||||
|
" self._menuStrip1.Text = \"menuStrip1\"\r\n" + |
||||||
|
" self._menuStrip1.Items.AddRange(System.Array[System.Windows.Forms.ToolStripItem](\r\n" + |
||||||
|
" [self._fileToolStripMenuItem,\r\n" + |
||||||
|
" self._editToolStripMenuItem]))\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" # fileToolStripMenuItem\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" self._fileToolStripMenuItem.Name = \"fileToolStripMenuItem\"\r\n" + |
||||||
|
" self._fileToolStripMenuItem.Size = System.Drawing.Size(37, 20)\r\n" + |
||||||
|
" self._fileToolStripMenuItem.Text = \"&File\"\r\n" + |
||||||
|
" self._fileToolStripMenuItem.DropDownItems.AddRange(System.Array[System.Windows.Forms.ToolStripItem](\r\n" + |
||||||
|
" [self._openToolStripMenuItem,\r\n" + |
||||||
|
" self._exitToolStripMenuItem]))\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" # openToolStripMenuItem\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" self._openToolStripMenuItem.Name = \"openToolStripMenuItem\"\r\n" + |
||||||
|
" self._openToolStripMenuItem.Size = System.Drawing.Size(37, 20)\r\n" + |
||||||
|
" self._openToolStripMenuItem.Text = \"&Open\"\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" # exitToolStripMenuItem\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" self._exitToolStripMenuItem.Name = \"exitToolStripMenuItem\"\r\n" + |
||||||
|
" self._exitToolStripMenuItem.Size = System.Drawing.Size(37, 20)\r\n" + |
||||||
|
" self._exitToolStripMenuItem.Text = \"E&xit\"\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" # editToolStripMenuItem\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" self._editToolStripMenuItem.Name = \"editToolStripMenuItem\"\r\n" + |
||||||
|
" self._editToolStripMenuItem.Size = System.Drawing.Size(39, 20)\r\n" + |
||||||
|
" self._editToolStripMenuItem.Text = \"&Edit\"\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" # MainForm\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" + |
||||||
|
" self.Name = \"MainForm\"\r\n" + |
||||||
|
" self.Controls.Add(self._menuStrip1)\r\n" + |
||||||
|
" self._menuStrip1.ResumeLayout(False)\r\n" + |
||||||
|
" self._menuStrip1.PerformLayout()\r\n" + |
||||||
|
" self.ResumeLayout(False)\r\n" + |
||||||
|
" self.PerformLayout()\r\n"; |
||||||
|
|
||||||
|
Assert.AreEqual(expectedCode, generatedPythonCode); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,79 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.ComponentModel; |
||||||
|
using System.ComponentModel.Design.Serialization; |
||||||
|
using System.Windows.Forms; |
||||||
|
using ICSharpCode.PythonBinding; |
||||||
|
using NUnit.Framework; |
||||||
|
using PythonBinding.Tests.Utils; |
||||||
|
|
||||||
|
namespace PythonBinding.Tests.Designer |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Tests the GetComponent method of the PythonDesignerLoader.
|
||||||
|
/// </summary>
|
||||||
|
[TestFixture] |
||||||
|
public class GetComponentFromDesignerLoaderTestFixture |
||||||
|
{ |
||||||
|
PythonDesignerLoader loader; |
||||||
|
TextBox textBox; |
||||||
|
MockDesignerLoaderHost host; |
||||||
|
Label label; |
||||||
|
|
||||||
|
[SetUp] |
||||||
|
public void Init() |
||||||
|
{ |
||||||
|
host = new MockDesignerLoaderHost(); |
||||||
|
loader = new PythonDesignerLoader(new MockDesignerGenerator()); |
||||||
|
loader.BeginLoad(host); |
||||||
|
|
||||||
|
textBox = (TextBox)loader.CreateComponent(typeof(TextBox), "textBox1"); |
||||||
|
label = (Label)loader.CreateComponent(typeof(Label), "label1"); |
||||||
|
loader.Add(label, "label1"); |
||||||
|
} |
||||||
|
|
||||||
|
[TearDown] |
||||||
|
public void TearDown() |
||||||
|
{ |
||||||
|
if (textBox != null) { |
||||||
|
textBox.Dispose(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void LabelAddedToContainer() |
||||||
|
{ |
||||||
|
Assert.AreEqual(label, host.Container.Components["label1"]); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void TextBoxIsNotAddedToContainer() |
||||||
|
{ |
||||||
|
Assert.IsNull(host.Container.Components["textBox1"]); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetUnknownCreatedComponent() |
||||||
|
{ |
||||||
|
Assert.IsNull(loader.GetComponent("unknown")); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetTextBoxComponent() |
||||||
|
{ |
||||||
|
Assert.IsNull(loader.GetComponent("textBox1")); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetLabelComponent() |
||||||
|
{ |
||||||
|
Assert.AreEqual(label, loader.GetComponent("label1")); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,130 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using System.ComponentModel; |
||||||
|
using System.Drawing; |
||||||
|
using System.IO; |
||||||
|
using System.Windows.Forms; |
||||||
|
|
||||||
|
using ICSharpCode.PythonBinding; |
||||||
|
using NUnit.Framework; |
||||||
|
using PythonBinding.Tests.Utils; |
||||||
|
|
||||||
|
namespace PythonBinding.Tests.Designer |
||||||
|
{ |
||||||
|
[TestFixture] |
||||||
|
public class LoadMenuStripTestFixture : LoadFormTestFixtureBase |
||||||
|
{ |
||||||
|
public override string PythonCode { |
||||||
|
get { |
||||||
|
return "class MainForm(System.Windows.Forms.Form):\r\n" + |
||||||
|
" def InitializeComponent(self):\r\n" + |
||||||
|
" self._menuStrip1 = System.Windows.Forms.MenuStrip()\r\n" + |
||||||
|
" self._fileToolStripMenuItem = System.Windows.Forms.ToolStripMenuItem()\r\n" + |
||||||
|
" self._openToolStripMenuItem = System.Windows.Forms.ToolStripMenuItem()\r\n" + |
||||||
|
" self._exitToolStripMenuItem = System.Windows.Forms.ToolStripMenuItem()\r\n" + |
||||||
|
" self._editToolStripMenuItem = System.Windows.Forms.ToolStripMenuItem()\r\n" + |
||||||
|
" self._menuStrip1.SuspendLayout()\r\n" + |
||||||
|
" self.SuspendLayout()\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" # menuStrip1\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" self._menuStrip1.Location = System.Drawing.Point(0, 0)\r\n" + |
||||||
|
" self._menuStrip1.Name = \"menuStrip1\"\r\n" + |
||||||
|
" self._menuStrip1.Size = System.Drawing.Size(200, 24)\r\n" + |
||||||
|
" self._menuStrip1.TabIndex = 0\r\n" + |
||||||
|
" self._menuStrip1.Text = \"menuStrip1\"\r\n" + |
||||||
|
" self._menuStrip1.Items.AddRange(System.Array[System.Windows.Forms.ToolStripItem](\r\n" + |
||||||
|
" [self._fileToolStripMenuItem,\r\n" + |
||||||
|
" self._editToolStripMenuItem]))\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" # fileToolStripMenuItem\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" self._fileToolStripMenuItem.Name = \"fileToolStripMenuItem\"\r\n" + |
||||||
|
" self._fileToolStripMenuItem.Size = System.Drawing.Size(37, 20)\r\n" + |
||||||
|
" self._fileToolStripMenuItem.Text = \"&File\"\r\n" + |
||||||
|
" self._fileToolStripMenuItem.DropDownItems.AddRange(System.Array[System.Windows.Forms.ToolStripItem](\r\n" + |
||||||
|
" [self._openToolStripMenuItem,\r\n" + |
||||||
|
" self._exitToolStripMenuItem]))\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" # openToolStripMenuItem\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" self._openToolStripMenuItem.Name = \"openToolStripMenuItem\"\r\n" + |
||||||
|
" self._openToolStripMenuItem.Size = System.Drawing.Size(37, 20)\r\n" + |
||||||
|
" self._openToolStripMenuItem.Text = \"&Open\"\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" # exitToolStripMenuItem\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" self._exitToolStripMenuItem.Name = \"exitToolStripMenuItem\"\r\n" + |
||||||
|
" self._exitToolStripMenuItem.Size = System.Drawing.Size(37, 20)\r\n" + |
||||||
|
" self._exitToolStripMenuItem.Text = \"E&xit\"\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" # editToolStripMenuItem\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" self._editToolStripMenuItem.Name = \"editToolStripMenuItem\"\r\n" + |
||||||
|
" self._editToolStripMenuItem.Size = System.Drawing.Size(39, 20)\r\n" + |
||||||
|
" self._editToolStripMenuItem.Text = \"&Edit\"\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" # MainForm\r\n" + |
||||||
|
" # \r\n" + |
||||||
|
" self.ClientSize = System.Drawing.Size(200, 300)\r\n" + |
||||||
|
" self.Name = \"MainForm\"\r\n" + |
||||||
|
" self.Controls.Add(self._menuStrip1)\r\n" + |
||||||
|
" self._menuStrip1.ResumeLayout(False)\r\n" + |
||||||
|
" self._menuStrip1.PerformLayout()\r\n" + |
||||||
|
" self.ResumeLayout(False)\r\n" + |
||||||
|
" self.PerformLayout()\r\n"; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public MenuStrip MenuStrip { |
||||||
|
get { return Form.Controls[0] as MenuStrip; } |
||||||
|
} |
||||||
|
|
||||||
|
public ToolStripMenuItem FileMenuItem { |
||||||
|
get { return MenuStrip.Items[0] as ToolStripMenuItem; } |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void MenuStripAddedToForm() |
||||||
|
{ |
||||||
|
Assert.IsNotNull(MenuStrip); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void MenuStripHasTwoItems() |
||||||
|
{ |
||||||
|
Assert.AreEqual(2, MenuStrip.Items.Count); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void MenuStripFirstItemIsFileMenuItem() |
||||||
|
{ |
||||||
|
Assert.AreEqual("fileToolStripMenuItem", FileMenuItem.Name); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void FileMenuItemText() |
||||||
|
{ |
||||||
|
Assert.AreEqual("&File", FileMenuItem.Text); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void MenuStripSecondItemIsEditMenuItem() |
||||||
|
{ |
||||||
|
Assert.AreEqual("editToolStripMenuItem", MenuStrip.Items[1].Name); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void FileMenuItemHasDropDownItems() |
||||||
|
{ |
||||||
|
Assert.AreEqual(2, FileMenuItem.DropDownItems.Count); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,175 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Windows.Forms; |
||||||
|
using ICSharpCode.PythonBinding; |
||||||
|
using IronPython.Compiler.Ast; |
||||||
|
using NUnit.Framework; |
||||||
|
using PythonBinding.Tests.Utils; |
||||||
|
|
||||||
|
namespace PythonBinding.Tests.Designer |
||||||
|
{ |
||||||
|
[TestFixture] |
||||||
|
public class PythonControlFieldExpressionTests |
||||||
|
{ |
||||||
|
[Test] |
||||||
|
public void HasPrefixTest() |
||||||
|
{ |
||||||
|
Assert.AreEqual("a", PythonControlFieldExpression.GetPrefix("a.b")); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void NoDotHasPrefixTest() |
||||||
|
{ |
||||||
|
Assert.AreEqual("a", PythonControlFieldExpression.GetPrefix("a")); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void ParentControlNameAddingChildControls() |
||||||
|
{ |
||||||
|
string code = "self._panel1.Controls.Add"; |
||||||
|
Assert.AreEqual("panel1", PythonControlFieldExpression.GetParentControlNameAddingChildControls(code)); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void EmptyControlNameAddingChildControls() |
||||||
|
{ |
||||||
|
string code = "self.Controls.Add"; |
||||||
|
Assert.AreEqual(String.Empty, PythonControlFieldExpression.GetParentControlNameAddingChildControls(code)); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void CaseInsensitiveCheckForControlsAddStatement() |
||||||
|
{ |
||||||
|
string code = "self._panel1.controls.add"; |
||||||
|
Assert.AreEqual("panel1", PythonControlFieldExpression.GetParentControlNameAddingChildControls(code)); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void CodeDoesNotIncludeControlsAddStatement() |
||||||
|
{ |
||||||
|
string code = "self._panel1.SuspendLayout"; |
||||||
|
Assert.IsNull(PythonControlFieldExpression.GetParentControlNameAddingChildControls(code)); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetVariableName() |
||||||
|
{ |
||||||
|
Assert.AreEqual("abc", PythonControlFieldExpression.GetVariableName("_abc")); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void VariableNameHasOnlyUnderscore() |
||||||
|
{ |
||||||
|
Assert.AreEqual(String.Empty, PythonControlFieldExpression.GetVariableName("_")); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void VariableNameIsEmpty() |
||||||
|
{ |
||||||
|
Assert.AreEqual(String.Empty, PythonControlFieldExpression.GetVariableName(String.Empty)); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void FullMemberExpression() |
||||||
|
{ |
||||||
|
CallExpression call = PythonParserHelper.GetCallExpression("self._a.b.Add()"); |
||||||
|
Assert.AreEqual("self._a.b.Add", PythonControlFieldExpression.GetMemberName(call.Target as MemberExpression)); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void NullMemberExpression() |
||||||
|
{ |
||||||
|
Assert.AreEqual(String.Empty, PythonControlFieldExpression.GetMemberName(null)); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void PythonControlFieldExpressionEquals() |
||||||
|
{ |
||||||
|
AssignmentStatement statement = PythonParserHelper.GetAssignmentStatement("self._textBox1.Name = \"abc\""); |
||||||
|
PythonControlFieldExpression field1 = PythonControlFieldExpression.Create(statement.Left[0] as MemberExpression); |
||||||
|
statement = PythonParserHelper.GetAssignmentStatement("self._textBox1.Name = \"def\""); |
||||||
|
PythonControlFieldExpression field2 = PythonControlFieldExpression.Create(statement.Left[0] as MemberExpression); |
||||||
|
|
||||||
|
Assert.AreEqual(field1, field2); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void NullPassedToPythonControlFieldExpressionEquals() |
||||||
|
{ |
||||||
|
AssignmentStatement statement = PythonParserHelper.GetAssignmentStatement("self._textBox1.Name = \"abc\""); |
||||||
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(statement.Left[0] as MemberExpression); |
||||||
|
Assert.IsFalse(field.Equals(null)); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetControlNameBeingAdded() |
||||||
|
{ |
||||||
|
string code = "self.Controls.Add(self._menuItem1)"; |
||||||
|
CallExpression expression = PythonParserHelper.GetCallExpression(code); |
||||||
|
Assert.AreEqual("menuItem1", PythonControlFieldExpression.GetControlNameBeingAdded(expression)); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void MethodName() |
||||||
|
{ |
||||||
|
string code = "self.menuItem.Items.Add(self._fileMenuItem)"; |
||||||
|
CallExpression expression = PythonParserHelper.GetCallExpression(code); |
||||||
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(expression); |
||||||
|
AssertAreEqual(field, "menuItem", "Items", "Add", "self.menuItem.Items"); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetMemberNames() |
||||||
|
{ |
||||||
|
string[] expected = new string[] { "a", "b" }; |
||||||
|
string code = "a.b = 0"; |
||||||
|
AssignmentStatement statement = PythonParserHelper.GetAssignmentStatement(code); |
||||||
|
Assert.AreEqual(expected, PythonControlFieldExpression.GetMemberNames(statement.Left[0] as MemberExpression)); |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetObjectInMethodCall() |
||||||
|
{ |
||||||
|
string pythonCode = "self._menuStrip1.Items.AddRange(System.Array[System.Windows.Forms.ToolStripItem](\r\n" + |
||||||
|
" [self._fileToolStripMenuItem,\r\n" + |
||||||
|
" self._editToolStripMenuItem]))"; |
||||||
|
|
||||||
|
CallExpression callExpression = PythonParserHelper.GetCallExpression(pythonCode); |
||||||
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(callExpression); |
||||||
|
|
||||||
|
using (MenuStrip menuStrip = new MenuStrip()) { |
||||||
|
MockComponentCreator creator = new MockComponentCreator(); |
||||||
|
creator.Add(menuStrip, "menuStrip1"); |
||||||
|
Assert.AreEqual(menuStrip.Items, field.GetMember(creator)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
[Test] |
||||||
|
public void GetObjectForUnknownComponent() |
||||||
|
{ |
||||||
|
string pythonCode = "self._menuStrip1.SuspendLayout()"; |
||||||
|
|
||||||
|
CallExpression callExpression = PythonParserHelper.GetCallExpression(pythonCode); |
||||||
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(callExpression); |
||||||
|
|
||||||
|
using (MenuStrip menuStrip = new MenuStrip()) { |
||||||
|
MockComponentCreator creator = new MockComponentCreator(); |
||||||
|
creator.Add(menuStrip, "unknown"); |
||||||
|
Assert.IsNull(field.GetMember(creator)); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void AssertAreEqual(PythonControlFieldExpression field, string variableName, string memberName, string methodName, string fullMemberName) |
||||||
|
{ |
||||||
|
string expected = "Variable: " + variableName + " Member: " + memberName + " Method: " + methodName + " FullMemberName: " + fullMemberName; |
||||||
|
string actual = "Variable: " + field.VariableName + " Member: " + field.MemberName + " Method: " + field.MethodName + " FullMemberName: " + field.FullMemberName; |
||||||
|
Assert.AreEqual(expected, actual); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,152 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections; |
||||||
|
using System.Collections.Generic; |
||||||
|
using System.ComponentModel; |
||||||
|
using System.ComponentModel.Design.Serialization; |
||||||
|
using System.Drawing; |
||||||
|
using System.Reflection; |
||||||
|
using System.Windows.Forms; |
||||||
|
using ICSharpCode.PythonBinding; |
||||||
|
|
||||||
|
namespace PythonBinding.Tests.Utils |
||||||
|
{ |
||||||
|
public class MockComponentCreator : IComponentCreator |
||||||
|
{ |
||||||
|
List <CreatedComponent> createdComponents = new List<CreatedComponent>(); |
||||||
|
List <CreatedInstance> createdInstances = new List<CreatedInstance>(); |
||||||
|
List <AddedComponent> addedComponents = new List<AddedComponent>(); |
||||||
|
List<string> typeNames = new List<string>(); |
||||||
|
PropertyDescriptor propertyDescriptor; |
||||||
|
EventDescriptor eventDescriptor; |
||||||
|
|
||||||
|
public MockComponentCreator() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public IComponent CreateComponent(Type componentClass, string name) |
||||||
|
{ |
||||||
|
object instance = componentClass.Assembly.CreateInstance(componentClass.FullName); |
||||||
|
|
||||||
|
CreatedComponent c = new CreatedComponent(componentClass.FullName, name, (IComponent)instance); |
||||||
|
createdComponents.Add(c); |
||||||
|
|
||||||
|
return (IComponent)instance; |
||||||
|
} |
||||||
|
|
||||||
|
public void Add(IComponent component, string name) |
||||||
|
{ |
||||||
|
AddedComponent addedComponent = new AddedComponent(component, name); |
||||||
|
addedComponents.Add(addedComponent); |
||||||
|
} |
||||||
|
|
||||||
|
public IComponent GetComponent(string name) |
||||||
|
{ |
||||||
|
foreach (AddedComponent c in addedComponents) { |
||||||
|
if (c.Name == name) { |
||||||
|
return c.Component; |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public object CreateInstance(Type type, ICollection arguments, string name, bool addToContainer) |
||||||
|
{ |
||||||
|
CreatedInstance createdInstance = new CreatedInstance(type, arguments, name, addToContainer); |
||||||
|
createdInstances.Add(createdInstance); |
||||||
|
|
||||||
|
object[] argumentsArray = new object[arguments.Count]; |
||||||
|
arguments.CopyTo(argumentsArray, 0); |
||||||
|
|
||||||
|
object o = null; |
||||||
|
DesignerSerializationManager designerSerializationManager = new DesignerSerializationManager(); |
||||||
|
using (designerSerializationManager.CreateSession()) { |
||||||
|
IDesignerSerializationManager manager = designerSerializationManager as IDesignerSerializationManager; |
||||||
|
o = manager.CreateInstance(type, arguments, name, addToContainer); |
||||||
|
} |
||||||
|
createdInstance.Object = o; |
||||||
|
return o; |
||||||
|
} |
||||||
|
|
||||||
|
public Type GetType(string typeName) |
||||||
|
{ |
||||||
|
typeNames.Add(typeName); |
||||||
|
|
||||||
|
// Lookup type in System.Windows.Forms assembly.
|
||||||
|
Type type = typeof(Form).Assembly.GetType(typeName); |
||||||
|
if (type == null) { |
||||||
|
// Lookup type System.Drawing assembly.
|
||||||
|
type = typeof(Size).Assembly.GetType(typeName); |
||||||
|
} |
||||||
|
if (type == null) { |
||||||
|
type = typeof(String).Assembly.GetType(typeName); |
||||||
|
} |
||||||
|
|
||||||
|
return type; |
||||||
|
} |
||||||
|
|
||||||
|
public PropertyDescriptor GetEventProperty(EventDescriptor e) |
||||||
|
{ |
||||||
|
this.eventDescriptor = e; |
||||||
|
return propertyDescriptor; |
||||||
|
} |
||||||
|
|
||||||
|
public EventDescriptor EventDescriptorPassedToGetEventProperty { |
||||||
|
get { return eventDescriptor; } |
||||||
|
} |
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets the property descriptor to return from the GetEventProperty method.
|
||||||
|
/// </summary>
|
||||||
|
public void SetEventPropertyDescriptor(PropertyDescriptor propertyDescriptor) |
||||||
|
{ |
||||||
|
this.propertyDescriptor = propertyDescriptor; |
||||||
|
} |
||||||
|
|
||||||
|
public List<CreatedComponent> CreatedComponents { |
||||||
|
get { return createdComponents; } |
||||||
|
} |
||||||
|
|
||||||
|
public List<AddedComponent> AddedComponents { |
||||||
|
get { return addedComponents; } |
||||||
|
} |
||||||
|
|
||||||
|
public List<CreatedInstance> CreatedInstances { |
||||||
|
get { return createdInstances; } |
||||||
|
} |
||||||
|
|
||||||
|
public List<string> TypeNames { |
||||||
|
get { return typeNames; } |
||||||
|
} |
||||||
|
|
||||||
|
public string LastTypeNameResolved { |
||||||
|
get { return TypeNames[TypeNames.Count - 1]; } |
||||||
|
} |
||||||
|
|
||||||
|
public CreatedInstance GetCreatedInstance(Type type) |
||||||
|
{ |
||||||
|
foreach (CreatedInstance instance in createdInstances) { |
||||||
|
if (instance.InstanceType == type) { |
||||||
|
return instance; |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public CreatedInstance GetCreatedInstance(string name) |
||||||
|
{ |
||||||
|
foreach (CreatedInstance instance in createdInstances) { |
||||||
|
if (instance.Name == name) { |
||||||
|
return instance; |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,44 @@ |
|||||||
|
// <file>
|
||||||
|
// <copyright see="prj:///doc/copyright.txt"/>
|
||||||
|
// <license see="prj:///doc/license.txt"/>
|
||||||
|
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
|
||||||
|
// <version>$Revision$</version>
|
||||||
|
// </file>
|
||||||
|
|
||||||
|
using System; |
||||||
|
using ICSharpCode.PythonBinding; |
||||||
|
using IronPython.Compiler.Ast; |
||||||
|
|
||||||
|
namespace PythonBinding.Tests.Utils |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Description of PythonParserHelper.
|
||||||
|
/// </summary>
|
||||||
|
public class PythonParserHelper |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Parses the code and returns the first statement as an assignment statement.
|
||||||
|
/// </summary>
|
||||||
|
public static AssignmentStatement GetAssignmentStatement(string code) |
||||||
|
{ |
||||||
|
return GetFirstStatement(code) as AssignmentStatement; |
||||||
|
} |
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parses the code and returns the first statement's expression as call expression.
|
||||||
|
/// </summary>
|
||||||
|
public static CallExpression GetCallExpression(string code) |
||||||
|
{ |
||||||
|
ExpressionStatement expressionStatement = GetFirstStatement(code) as ExpressionStatement; |
||||||
|
return expressionStatement.Expression as CallExpression; |
||||||
|
} |
||||||
|
|
||||||
|
static Statement GetFirstStatement(string code) |
||||||
|
{ |
||||||
|
PythonParser parser = new PythonParser(); |
||||||
|
PythonAst ast = parser.CreateAst(@"snippet.py", code); |
||||||
|
SuiteStatement suiteStatement = (SuiteStatement)ast.Body; |
||||||
|
return suiteStatement.Statements[0]; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue