ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/fbintf/testsuite/Test10.pas
Revision: 45
Committed: Tue Dec 6 10:33:46 2016 UTC (8 years ago) by tony
Content type: text/x-pascal
File size: 4228 byte(s)
Log Message:
Committing updates for Release R2-0-0

File Contents

# Content
1 unit Test10;
2
3 {$mode objfpc}{$H+}
4 {$codepage utf8}
5
6 {Test 10: Event Handling}
7
8 {
9 This test opens the employee example databases with the supplied user name/password
10 and then tests event handling.
11
12 1. Simple wait for async event.
13
14 2. Signal two more events to show that events counts are maintained.
15
16 3. Async Event wait followed by signal event. Event Counts should include all
17 previous events.
18
19 4. Demonstrate event cancel by waiting for event, cancelling it and then signalling
20 event. No change to signal flag after waiting in a tight loop implies event cancelled.
21
22 5. Wait for sync Event.
23 }
24
25 interface
26
27 uses
28 Classes, SysUtils, TestManager, IB;
29
30 type
31
32 { TTest10 }
33
34 TTest10 = class(TTestBase)
35 private
36 FEventSignalled: boolean;
37 procedure EventsTest(Attachment: IAttachment);
38 procedure EventReport(Sender: IEvents);
39 public
40 function TestTitle: string; override;
41 procedure RunTest(CharSet: string; SQLDialect: integer); override;
42 end;
43
44
45 implementation
46
47 { TTest10 }
48
49 const
50 sqlEvent = 'Execute Block As Begin Post_Event(''TESTEVENT''); End';
51
52 procedure TTest10.EventsTest(Attachment: IAttachment);
53 var EventHandler: IEvents;
54 EventCounts: TEventCounts;
55 i: integer;
56 WaitCount: integer;
57 begin
58 EventHandler := Attachment.GetEventHandler('TESTEVENT');
59 writeln(OutFile,'Call Async Wait');
60 EventHandler.AsyncWaitForEvent(@EventReport);
61 writeln(OutFile,'Async Wait Called');
62
63 writeln(OutFile,'Signal Event');
64 Attachment.ExecImmediate([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],sqlEvent);
65 while not FEventSignalled do;
66 writeln(OutFile,'Event Signalled');
67 EventCounts := EventHandler.ExtractEventCounts;
68 for i := 0 to length(EventCounts) - 1 do
69 writeln(OutFile,'Event: ',EventCounts[i].EventName,', Count = ',EventCounts[i].Count);
70 FEventSignalled := false;
71
72 writeln(OutFile,'Two more events');
73 Attachment.ExecImmediate([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],sqlEvent);
74 Attachment.ExecImmediate([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],sqlEvent);
75 writeln(OutFile,'Call Async Wait');
76 EventHandler.AsyncWaitForEvent(@EventReport);
77 writeln(OutFile,'Async Wait Called');
78 writeln(OutFile,'Signal Event');
79 Attachment.ExecImmediate([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],sqlEvent);
80 while not FEventSignalled do;
81 writeln(OutFile,'Event Signalled');
82 EventCounts := EventHandler.ExtractEventCounts;
83 for i := 0 to length(EventCounts) - 1 do
84 writeln(OutFile,'Event: ',EventCounts[i].EventName,', Count = ',EventCounts[i].Count);
85
86 FEventSignalled := false;
87 writeln(OutFile,'Async Wait: Test Cancel');
88 EventHandler.AsyncWaitForEvent(@EventReport);
89 writeln(OutFile,'Async Wait Called');
90 EventHandler.Cancel;
91 Attachment.ExecImmediate([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],sqlEvent);
92 WaitCount := 100000000;
93 while not FEventSignalled and (WaitCount > 0) do Dec(WaitCount);
94 if WaitCount = 0 then writeln(OutFile,'Time Out - Cancel Worked!')
95 else
96 writeln(OutFile,'Event called - so Cancel failed');
97
98 writeln(OutFile,'Sync wait');
99 Attachment.ExecImmediate([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],sqlEvent);
100 EventHandler.WaitForEvent;
101 writeln(OutFile,'Event Signalled');
102 EventCounts := EventHandler.ExtractEventCounts;
103 for i := 0 to length(EventCounts) - 1 do
104 writeln(OutFile,'Event: ',EventCounts[i].EventName,', Count = ',EventCounts[i].Count);
105 end;
106
107 procedure TTest10.EventReport(Sender: IEvents);
108 begin
109 FEventSignalled := true;
110 end;
111
112 function TTest10.TestTitle: string;
113 begin
114 Result := 'Test 10: Event Handling';
115 end;
116
117 procedure TTest10.RunTest(CharSet: string; SQLDialect: integer);
118 var Attachment: IAttachment;
119 DPB: IDPB;
120 begin
121 DPB := FirebirdAPI.AllocateDPB;
122 DPB.Add(isc_dpb_user_name).setAsString(Owner.GetUserName);
123 DPB.Add(isc_dpb_password).setAsString(' ');
124 DPB.Add(isc_dpb_lc_ctype).setAsString(CharSet);
125 DPB.Add(isc_dpb_set_db_SQL_dialect).setAsByte(SQLDialect);
126 DPB.Find(isc_dpb_password).setAsString(Owner.GetPassword);
127 Attachment := FirebirdAPI.OpenDatabase(Owner.GetEmployeeDatabaseName,DPB);
128 EventsTest(Attachment);
129 Attachment.Disconnect;
130 end;
131
132 initialization
133 RegisterTest(TTest10);
134
135 end.
136