source: trunk/ab5.0/ablib/TestCase/SimpleTestCase/DelegateTest.ab@ 569

Last change on this file since 569 was 569, checked in by dai, 16 years ago
  • #184への対応。ByRef引数を持つデリゲートを宣言するとコンパイルできないバグを修正(改修を裏付けるテストケースも作成)。
  • オーバーロード用のパラメータ比較にByRef/ByValの相違を考慮するようにした。

(後ほど64bit版もコミットします)

File size: 2.8 KB
Line 
1Namespace DelegateTest
2
3Class StringEx
4 Inherits String
5Public
6 Sub StringEx( str As String )
7 String( str )
8 End Sub
9End Class
10
11Delegate Sub Callback1()
12Delegate Function Callback2() As Long
13Delegate Sub Callback3( a As Long )
14Delegate Sub Callback4( a As StringEx )
15Delegate Function Callback7( str As String ) As String
16Delegate Sub CallbackTicket184( ByRef a As Long )
17
18Class TestClass
19 proc1Flag As Boolean
20 proc2Flag As Boolean
21 proc3Flag As Boolean
22 proc4Flag As Boolean
23 proc5Flag As Boolean
24 proc6Flag As Boolean
25 proc8Flag As Boolean
26 proc9Flag As Boolean
27
28 Static staticProc1Flag = False As Boolean
29
30Public
31
32 x As DWord
33
34 Sub TestClass()
35 ClearFlags()
36 x = 0
37 End Sub
38
39 Sub ClearFlags()
40 proc1Flag = False
41 proc2Flag = False
42 proc3Flag = False
43 proc4Flag = False
44 proc5Flag = False
45 proc6Flag = False
46 proc8Flag = True
47 proc9Flag = False
48 End Sub
49 Function CheckFlags() As Boolean
50 Return proc1Flag and proc2Flag and proc3Flag and proc4Flag and proc5Flag and proc6Flag and proc8Flag
51 End Function
52
53 Sub Proc1()
54 proc1Flag = True
55 End Sub
56
57 Function Proc2() As Long
58 proc2Flag = True
59 End Function
60
61 Sub Proc3or4( a As Long )
62 proc3Flag = (a=100)
63 End Sub
64
65 Sub Proc3or4( a As String )
66 proc4Flag = (a="Proc4 calling")
67 End Sub
68
69 Sub Proc5( a As String )
70 proc5Flag = (a="Proc4 calling")
71 End Sub
72
73 Sub Proc6( a As String )
74 proc6Flag = (a="Proc4 calling")
75 End Sub
76
77 Static Function Proc7( str As String ) As StringEx
78 Return New StringEx( "Proc7 result[" + str + "]" )
79 End Function
80
81 Sub Proc8( a As String )
82 proc8Flag = False
83 End Sub
84
85 Sub Proc9()
86 proc9Flag = ( x = &H12345678 )
87 End Sub
88
89 Sub Ticket177()
90 Dim dg = New Callback1( AddressOf( This.Proc9 ) )
91 dg()
92 End Sub
93
94 Sub Ticket184( ByRef a As Long )
95 a = &H184
96 End Sub
97End Class
98
99Sub TestMain()
100 Dim testObj As TestClass
101 Dim dg1 = New Callback1( AddressOf(testObj.Proc1) )
102 Dim dg2 = New Callback2( AddressOf(testObj.Proc2) )
103 Dim dg3 = New Callback3( AddressOf(testObj.Proc3or4) )
104 Dim dg4 = New Callback4( AddressOf(testObj.Proc3or4) )
105 dg4 += AddressOf(testObj.Proc5)
106 dg4 += AddressOf(testObj.Proc6)
107 dg4 += AddressOf(testObj.Proc8)
108 dg4 -= AddressOf(testObj.Proc8)
109
110 dg1()
111 dg2()
112 dg3( 100 )
113 dg4( New StringEx( "Proc4 calling" ) ) ' 反変引数サポートのテスト
114
115 testObj.x = &H12345678
116 testObj.Ticket177()
117
118 UnitTest( "Delegate1", testObj.CheckFlags() )
119
120 Dim dg7 = New Callback7( AddressOf(TestClass.Proc7) ) ' 共変戻り値サポートのテスト
121 UnitTest( "Delegate2", dg7( "test value" ) = "Proc7 result[test value]" )
122
123 Dim dg184 = New CallbackTicket184( AddressOf( testObj.Ticket184 ) )
124 Dim temp184 As Long
125 dg184( temp184 )
126 UnitTest( "Delegate3", temp184 = &H184 )
127
128End Sub
129
130End Namespace
131
132DelegateTest.TestMain()
Note: See TracBrowser for help on using the repository browser.