8000 Update subclass tests with events example. · pythonnet/pythonnet@b04658e · GitHub
[go: up one dir, main page]

Skip to content
8000

Commit b04658e

Browse files
committed
Update subclass tests with events example.
Test events can be implemented in Python and that raising them invokes any handlers added in managed code.
1 parent 56e0baa commit b04658e

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

src/testing/subclasstest.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,17 @@ public static IInterfaceTest pass_through(IInterfaceTest s)
9090
return s;
9191
}
9292

93-
public static void test_event(IInterfaceTest x, int value)
93+
public static int test_event(IInterfaceTest x, int value)
9494
{
95+
// reuse the event handler from eventtest.cs
96+
EventTest et = new EventTest();
97+
x.TestEvent += et.GenericHandler;
98+
99+
// raise the event (should trigger both python and managed handlers)
95100
x.OnTestEvent(value);
101+
102+
x.TestEvent -= et.GenericHandler;
103+
return et.value;
96104
}
97105
}
98106
}

src/tests/test_subclass.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
clr.AddReference('System')
1212

1313
import sys, os, string, unittest, types
14-
from Python.Test import TestFunctions, SubClassTest, IInterfaceTest
14+
from Python.Test import TestFunctions, SubClassTest, IInterfaceTest, TestEventArgs
1515
from System.Collections.Generic import List
1616
from System import NotImplementedException
1717

@@ -48,6 +48,26 @@ def return_list(self):
4848
l.Add("C")
4949
return l
5050

51+
# class that implements IInterfaceTest.TestEvent
52+
class DerivedEventTest(IInterfaceTest):
53+
__namespace__ = "Python.Test"
54+
55+
def __init__(self):
56+
self.event_handlers = []
57+
58+
# event handling
59+
def add_TestEvent(self, handler):
60+
self.event_handlers.append(handler)
61+
62+
def remove_TestEvent(self, handler):
63+
self.event_handlers.remove(handler)
64+
65+
def OnTestEvent(self, value):
66+
args = TestEventArgs(value)
67+
for handler in self.event_handlers:
68+
handler(self, args)
69+
70+
5171
class SubClassTests(unittest.TestCase):
5272
"""Test subclassing managed types"""
5373

@@ -120,12 +140,18 @@ def handler(self, x, args):
120140

121141
x = SubClassTest()
122142
x.TestEvent += event_handler.handler
123-
TestFunctions.test_event(x, 1)
143+
self.assertEqual(TestFunctions.test_event(x, 1), 1)
124144
self.assertEqual(event_handler.value, 1)
125145

126146
i = InterfaceTestClass()
127147
self.assertRaises(NotImplementedException, TestFunctions.test_event, i, 2)
128148

149+
d = DerivedEventTest()
150+
d.add_TestEvent(event_handler.handler)
151+
self.assertEqual(TestFunctions.test_event(d, 3), 3)
152+
self.assertEqual(event_handler.value, 3)
153+
self.assertEqual(len(d.event_handlers), 1)
154+
129155

130156
def test_suite():
131157
return unittest.makeSuite(SubClassTests)

0 commit comments

Comments
 (0)
0