ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/fbintf/testsuite/Test10.pas
(Generate patch)

Comparing ibx/trunk/fbintf/testsuite/Test10.pas (file contents):
Revision 45 by tony, Tue Dec 6 10:33:46 2016 UTC vs.
Revision 224 by tony, Mon Mar 19 10:53:56 2018 UTC

# Line 1 | Line 1
1   unit Test10;
2 + {$IFDEF MSWINDOWS}
3 + {$DEFINE WINDOWS}
4 + {$ENDIF}
5  
6 < {$mode objfpc}{$H+}
6 > {$IFDEF FPC}
7 > {$mode delphi}
8   {$codepage utf8}
9 + {$ENDIF}
10  
11   {Test 10: Event Handling}
12  
# Line 36 | Line 41 | type
41      FEventSignalled: boolean;
42      procedure EventsTest(Attachment: IAttachment);
43      procedure EventReport(Sender: IEvents);
44 +    procedure ShowEventReport;
45 +    procedure ShowEventCounts(Intf: IEvents);
46    public
47 <    function TestTitle: string; override;
48 <    procedure RunTest(CharSet: string; SQLDialect: integer); override;
47 >    function TestTitle: AnsiString; override;
48 >    procedure RunTest(CharSet: AnsiString; SQLDialect: integer); override;
49    end;
50  
51  
# Line 51 | Line 58 | const
58  
59   procedure TTest10.EventsTest(Attachment: IAttachment);
60   var EventHandler: IEvents;
54    EventCounts: TEventCounts;
61      i: integer;
62      WaitCount: integer;
63   begin
64 +  FEventSignalled := false;
65    EventHandler := Attachment.GetEventHandler('TESTEVENT');
66    writeln(OutFile,'Call Async Wait');
67 <  EventHandler.AsyncWaitForEvent(@EventReport);
67 >  EventHandler.AsyncWaitForEvent(EventReport);
68    writeln(OutFile,'Async Wait Called');
69 <
69 >  sleep(500);
70 >  CheckSynchronize;
71 >  if FEventSignalled then
72 >  begin
73 >    writeln(OutFile,'First Event - usually ignored');
74 >    FEventSignalled := false;
75 >    EventHandler.AsyncWaitForEvent(EventReport);
76 >    sleep(100);
77 >    CheckSynchronize;
78 >    if FEventSignalled then
79 >    begin
80 >      writeln(OutFile,'Unexpected Event 1');
81 >      Exit;
82 >    end;
83 >  end;
84    writeln(OutFile,'Signal Event');
85    Attachment.ExecImmediate([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],sqlEvent);
86 <  while not FEventSignalled do;
87 <  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);
86 >  while not FEventSignalled do Sleep(50);
87 >  ShowEventCounts(EventHandler);
88    FEventSignalled := false;
89  
90    writeln(OutFile,'Two more events');
91    Attachment.ExecImmediate([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],sqlEvent);
92    Attachment.ExecImmediate([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],sqlEvent);
93 +  if FEventSignalled then
94 +  begin
95 +    writeln(OutFile,'Unexpected Event 2');
96 +    FEventSignalled := false
97 +  end;
98    writeln(OutFile,'Call Async Wait');
99 <  EventHandler.AsyncWaitForEvent(@EventReport);
99 >  EventHandler.AsyncWaitForEvent(EventReport);
100    writeln(OutFile,'Async Wait Called');
101 +  sleep(500);
102 +  CheckSynchronize;
103 +  if FEventSignalled then
104 +  begin
105 +    writeln(OutFile,'Deferred Events Caught');
106 +    ShowEventCounts(EventHandler);
107 +    FEventSignalled := false;
108 +    EventHandler.AsyncWaitForEvent(EventReport);
109 +    CheckSynchronize;
110 +    sleep(100);
111 +    if FEventSignalled then
112 +      writeln(OutFile,'Unexpected Event 3');
113 +  end;
114    writeln(OutFile,'Signal Event');
115    Attachment.ExecImmediate([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],sqlEvent);
116    while not FEventSignalled do;
117 <  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);
117 >  ShowEventCounts(EventHandler);
118  
119    FEventSignalled := false;
120    writeln(OutFile,'Async Wait: Test Cancel');
121 <  EventHandler.AsyncWaitForEvent(@EventReport);
121 >  EventHandler.AsyncWaitForEvent(EventReport);
122 >  CheckSynchronize;
123    writeln(OutFile,'Async Wait Called');
124    EventHandler.Cancel;
125 +  writeln(OutFile,'Event Cancelled');
126 +  FEventSignalled := false;
127    Attachment.ExecImmediate([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],sqlEvent);
128    WaitCount := 100000000;
129    while not FEventSignalled and (WaitCount > 0) do Dec(WaitCount);
# Line 96 | Line 132 | begin
132      writeln(OutFile,'Event called - so Cancel failed');
133  
134    writeln(OutFile,'Sync wait');
135 +  CheckSynchronize;
136    Attachment.ExecImmediate([isc_tpb_write,isc_tpb_nowait,isc_tpb_concurrency],sqlEvent);
137    EventHandler.WaitForEvent;
138    writeln(OutFile,'Event Signalled');
139 <  EventCounts := EventHandler.ExtractEventCounts;
140 <  for i := 0 to length(EventCounts) - 1 do
141 <    writeln(OutFile,'Event: ',EventCounts[i].EventName,', Count = ',EventCounts[i].Count);
139 >  ShowEventCounts(EventHandler);
140 >  EventHandler := nil;
141 >  CheckSynchronize;
142   end;
143  
144   procedure TTest10.EventReport(Sender: IEvents);
145   begin
146    FEventSignalled := true;
147 +  TThread.Synchronize(nil,ShowEventReport);
148 + end;
149 +
150 + procedure TTest10.ShowEventReport;
151 + begin
152 +  writeln(OutFile,'Event Signalled');
153 + end;
154 +
155 + procedure TTest10.ShowEventCounts(Intf: IEvents);
156 + var
157 +  i: integer;
158 +  EventCounts: TEventCounts;
159 + begin
160 +  EventCounts := Intf.ExtractEventCounts;
161 +  for i := 0 to length(EventCounts) - 1 do
162 +    writeln(OutFile,'Event Counts: ',EventCounts[i].EventName,', Count = ',EventCounts[i].Count);
163   end;
164  
165 < function TTest10.TestTitle: string;
165 > function TTest10.TestTitle: AnsiString;
166   begin
167    Result := 'Test 10: Event Handling';
168   end;
169  
170 < procedure TTest10.RunTest(CharSet: string; SQLDialect: integer);
170 > procedure TTest10.RunTest(CharSet: AnsiString; SQLDialect: integer);
171   var Attachment: IAttachment;
172      DPB: IDPB;
173   begin

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines