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 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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