You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
270 lines
9.9 KiB
270 lines
9.9 KiB
// <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 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 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 MethodNameWithNoVariableName() |
|
{ |
|
string code = "self.Items.Add(self._fileMenuItem)"; |
|
CallExpression expression = PythonParserHelper.GetCallExpression(code); |
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(expression); |
|
AssertAreEqual(field, String.Empty, "Items", "Add", "self.Items"); |
|
} |
|
|
|
[Test] |
|
public void SetToolTipMethodCall() |
|
{ |
|
string code = "self._toolTip1.SetToolTip(self, \"Test\")"; |
|
CallExpression expression = PythonParserHelper.GetCallExpression(code); |
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(expression); |
|
AssertAreEqual(field, "toolTip1", "_toolTip1", "SetToolTip", "self._toolTip1"); |
|
} |
|
|
|
[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.AreSame(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)); |
|
} |
|
} |
|
|
|
[Test] |
|
public void GetInstanceObjectInMethodCall() |
|
{ |
|
string pythonCode = "treeNode1.Nodes.AddRange(System.Array[System.Windows.Forms.TreeNode](\r\n" + |
|
" [treeNode2]))"; |
|
|
|
CallExpression callExpression = PythonParserHelper.GetCallExpression(pythonCode); |
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(callExpression); |
|
|
|
TreeNode treeNode1 = new TreeNode(); |
|
TreeNode treeNode2 = new TreeNode(); |
|
MockComponentCreator creator = new MockComponentCreator(); |
|
creator.AddInstance(treeNode1, "treeNode1"); |
|
creator.AddInstance(treeNode2, "treeNode2"); |
|
object member = field.GetMember(creator); |
|
Assert.AreSame(treeNode1.Nodes, member); |
|
} |
|
|
|
[Test] |
|
public void GetObjectInMethodCallFromSpecifiedObject() |
|
{ |
|
string pythonCode = "self.Controls.AddRange(System.Array[System.Windows.Forms.ToolStripItem](\r\n" + |
|
" [self._fileToolStripMenuItem,\r\n" + |
|
" self._editToolStripMenuItem]))"; |
|
|
|
CallExpression callExpression = PythonParserHelper.GetCallExpression(pythonCode); |
|
|
|
using (Form form = new Form()) { |
|
Assert.AreSame(form.Controls, PythonControlFieldExpression.GetMember(form, callExpression)); |
|
} |
|
} |
|
|
|
[Test] |
|
public void LocalVariable() |
|
{ |
|
AssignmentStatement statement = PythonParserHelper.GetAssignmentStatement("listViewItem1.TooltipText = \"abc\""); |
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(statement.Left[0] as MemberExpression); |
|
|
|
PythonControlFieldExpression expectedField = new PythonControlFieldExpression("TooltipText", "listViewItem1", String.Empty, "listViewItem1.TooltipText"); |
|
Assert.AreEqual(expectedField, field); |
|
} |
|
|
|
[Test] |
|
public void LocalVariableIsNotSelfReference() |
|
{ |
|
AssignmentStatement statement = PythonParserHelper.GetAssignmentStatement("listViewItem1.TooltipText = \"abc\""); |
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(statement.Left[0] as MemberExpression); |
|
Assert.IsFalse(field.IsSelfReference); |
|
} |
|
|
|
[Test] |
|
public void FieldIsNotSelfReference() |
|
{ |
|
AssignmentStatement statement = PythonParserHelper.GetAssignmentStatement("self.listView1.TooltipText = \"abc\""); |
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(statement.Left[0] as MemberExpression); |
|
Assert.IsTrue(field.IsSelfReference); |
|
} |
|
|
|
[Test] |
|
public void GetButtonObjectForSelfReference() |
|
{ |
|
using (Button button = new Button()) { |
|
AssignmentStatement statement = PythonParserHelper.GetAssignmentStatement("self._button1.Size = System.Drawing.Size(10, 10)"); |
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(statement.Left[0] as MemberExpression); |
|
|
|
Assert.AreEqual(button, field.GetObjectForMemberName(button)); |
|
} |
|
} |
|
|
|
[Test] |
|
public void GetButtonObject() |
|
{ |
|
using (Button button = new Button()) { |
|
AssignmentStatement statement = PythonParserHelper.GetAssignmentStatement("_button1.Size = System.Drawing.Size(10, 10)"); |
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(statement.Left[0] as MemberExpression); |
|
|
|
Assert.AreEqual(button, field.GetObjectForMemberName(button)); |
|
} |
|
} |
|
|
|
[Test] |
|
public void GetButtonFlatAppearanceObjectForSelfReference() |
|
{ |
|
using (Button button = new Button()) { |
|
AssignmentStatement statement = PythonParserHelper.GetAssignmentStatement("self._button1.FlatAppearance.BorderSize = 3"); |
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(statement.Left[0] as MemberExpression); |
|
|
|
Assert.AreEqual(button.FlatAppearance, field.GetObjectForMemberName(button)); |
|
} |
|
} |
|
|
|
[Test] |
|
public void GetButtonFlatAppearanceObject() |
|
{ |
|
using (Button button = new Button()) { |
|
AssignmentStatement statement = PythonParserHelper.GetAssignmentStatement("_button1.FlatAppearance.BorderSize = 3"); |
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(statement.Left[0] as MemberExpression); |
|
|
|
Assert.AreEqual(button.FlatAppearance, field.GetObjectForMemberName(button)); |
|
} |
|
} |
|
|
|
[Test] |
|
public void GetInvalidTwoLevelDeepButtonPropertyDescriptorForSelfReference() |
|
{ |
|
using (Button button = new Button()) { |
|
AssignmentStatement statement = PythonParserHelper.GetAssignmentStatement("self._button1.InvalidProperty.BorderSize = 3"); |
|
PythonControlFieldExpression field = PythonControlFieldExpression.Create(statement.Left[0] as MemberExpression); |
|
|
|
Assert.IsNull(field.GetObjectForMemberName(button)); |
|
} |
|
} |
|
|
|
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, actual); |
|
} |
|
} |
|
}
|
|
|