X Tutup
Skip to content
This repository was archived by the owner on Jul 22, 2023. It is now read-only.

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)
X Tutup