8000 Merge pull request #377 from vmuriart/method_object · pythonnet/pythonnet@8f258ac · GitHub
[go: up one dir, main page]

Skip to content

Commit 8f258ac

Browse files
authored
Merge pull request #377 from vmuriart/method_object
Method overload object type
2 parents 909b7c0 + 4071aa3 commit 8f258ac

File tree

3 files changed

+116
-1
lines changed

3 files changed

+116
-1
lines changed

src/runtime/methodbinder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ internal Binding Bind(IntPtr inst, IntPtr args, IntPtr kw, MethodBase info, Meth
375375
if (clrtype != null)
376376
{
377377
var typematch = false;
378-
if (pi[n].ParameterType != clrtype)
378+
if ((pi[n].ParameterType != typeof(object)) && (pi[n].ParameterType != clrtype))
37 8000 9379
{
380380
IntPtr pytype = Converter.GetPythonTypeByAlias(pi[n].ParameterType);
381381
pyoptype = Runtime.PyObject_Type(op);

src/testing/methodtest.cs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,71 @@ public static int[] TestOverloadedParams(int v, int[] args)
116116
return args;
117117
}
118118

119+
public static string TestOverloadedNoObject(int i)
120+
{
121+
return "Got int";
122+
}
123+
124+
public static string TestOverloadedObject(int i)
125+
{
126+
return "Got int";
127+
}
128+
129+
public static string TestOverloadedObject(object o)
130+
{
131+
return "Got object";
132+
}
133+
134+
public static string TestOverloadedObjectTwo(int a, int b)
135+
{
136+
return "Got int-int";
137+
}
138+
139+
public static string TestOverloadedObjectTwo(string a, string b)
140+
{
141+
return "Got string-string";
142+
}
143+
144+
public static string TestOverloadedObjectTwo(string a, int b)
145+
{
146+
return "Got string-int";
147+
}
148+
149+
public static string TestOverloadedObjectTwo(string a, object b)
150+
{
151+
return "Got string-object";
152+
}
153+
154+
public static string TestOverloadedObjectTwo(int a, object b)
155+
{
156+
return "Got int-object";
157+
}
158+
159+
public static string TestOverloadedObjectTwo(object a, int b)
160+
{
161+
return "Got object-int";
162+
}
163+
164+
public static string TestOverloadedObjectTwo(object a, object b)
165+
{
166+
return "Got object-object";
167+
}
168+
169+
public static string TestOverloadedObjectTwo(int a, string b)
170+
{
171+
return "Got int-string";
172+
}
173+
174+
public static string TestOverloadedObjectThree(object a, int b)
175+
{
176+
return "Got object-int";
177+
}
178+
179+
public static string TestOverloadedObjectThree(int a, object b)
180+
{
181+
return "Got int-object";
182+
}
183+
119184
public static bool TestStringOutParams(string s, out string s1)
120185
{
121186
s1 = "output string";

src/tests/test_method.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,3 +769,53 @@ def test_wrong_overload():
769769
res = System.Math.Max(System.Double(50.5), 50.1)
770770
assert res == 50.5
771771
assert type(res) == float
772+
773+
774+
def test_no_object_in_param():
775+
"""Test that fix for #203 doesn't break behavior w/ no object overload"""
776+
777+
res = MethodTest.TestOverloadedNoObject(5)
778+
assert res == "Got int"
779+
780+
with pytest.raises(TypeError):
781+
MethodTest.TestOverloadedNoObject("test")
782+
783+
784+
def test_object_in_param():
785+
"""Test regression introduced by #151 in which Object method overloads
786+
aren't being used. See #203 for issue."""
787+
788+
res = MethodTest.TestOverloadedObject(5)
789+
assert res == "Got int"
790+
791+
res = MethodTest.TestOverloadedObject("test")
792+
assert res == "Got object"
793+
794+
795+
def test_object_in_multiparam():
796+
"""Test method with object multiparams behaves"""
797+
798+
res = MethodTest.TestOverloadedObjectTwo(5, 5)
799+
assert res == "Got int-int"
800+
801+
res = MethodTest.TestOverloadedObjectTwo(5, "foo")
802+
assert res == "Got int-string"
803+
804+
res = MethodTest.TestOverloadedObjectTwo("foo", 7.24)
805+
assert res == "Got string-object"
806+
807+
res = MethodTest.TestOverloadedObjectTwo("foo", "bar")
808+
assert res == "Got string-string"
809+
810+
res = MethodTest.TestOverloadedObjectTwo("foo", 5)
811+
assert res == "Got string-int"
812+
813+
res = MethodTest.TestOverloadedObjectTwo(7.24, 7.24)
814+
assert res == "Got object-object"
815+
816+
817+
def test_object_in_multi 4A55 param_exception():
818+
"""Test method with object multiparams behaves"""
819+
820+
with pytest.raises(TypeError):
821+
MethodTest.TestOverloadedObjectThree("foo", "bar")

0 commit comments

Comments
 (0)
0