ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/testsuite/Test19.pas
Revision: 323
Committed: Thu Feb 25 12:14:35 2021 UTC (3 years, 2 months ago) by tony
Content type: text/x-pascal
File size: 7769 byte(s)
Log Message:
Fixed Merged

File Contents

# Content
1 (*
2 * IBX Test suite. This program is used to test the IBX non-visual
3 * components and provides a semi-automated pass/fail check for each test.
4 *
5 * The contents of this file are subject to the Initial Developer's
6 * Public License Version 1.0 (the "License"); you may not use this
7 * file except in compliance with the License. You may obtain a copy
8 * of the License here:
9 *
10 * http://www.firebirdsql.org/index.php?op=doc&id=idpl
11 *
12 * Software distributed under the License is distributed on an "AS
13 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
14 * implied. See the License for the specific language governing rights
15 * and limitations under the License.
16 *
17 * The Initial Developer of the Original Code is Tony Whyman.
18 *
19 * The Original Code is (C) 2021 Tony Whyman, MWA Software
20 * (http://www.mwasoftware.co.uk).
21 *
22 * All Rights Reserved.
23 *
24 * Contributor(s): ______________________________________.
25 *
26 *)
27 unit Test19;
28
29 {$mode objfpc}{$H+}
30
31 {Test 19: Master/Detail Queries}
32
33 { Description
34 Two IBQueries are opened in a master detail relationship. The master is scrolled
35 and the secondary shown to follow suite.
36 }
37
38 interface
39
40 uses
41 Classes, SysUtils, TestApplication, IBXTestBase, DB, IB, IBQuery,
42 fpTimer, IBInternals;
43
44 const
45 aTestID = '19';
46 aTestTitle = 'TIBDataset Master/Detail Queries';
47
48 type
49
50 { TTest19 }
51
52 TTest19 = class(TIBXTestBase)
53 private
54 FDetailQuery: TIBQuery;
55 FMasterSource: TDataSource;
56 procedure InitDetailQuery(Application: TTestApplication);
57 protected
58 procedure CreateObjects(Application: TTestApplication); override;
59 function GetTestID: AnsiString; override;
60 function GetTestTitle: AnsiString; override;
61 procedure InitTest; override;
62 public
63 procedure RunTest(CharSet: AnsiString; SQLDialect: integer); override;
64 end;
65
66 { TNonGUITimer }
67
68 TNonGUITimer = class(TInterfacedObject,IIBTimerInf)
69 private
70 FTimer: TFPTimer;
71 public
72 constructor Create;
73 destructor Destroy; override;
74 public
75 function GetEnabled: boolean;
76 procedure SetEnabled(Value: Boolean);
77 function GetInterval: Cardinal;
78 procedure SetInterval(Value: Cardinal);
79 function GetOnTimer: TNotifyEvent;
80 procedure SetOnTimer(Value: TNotifyEvent);
81 function GetOnStartTimer: TNotifyEvent;
82 procedure SetOnStartTimer(Value: TNotifyEvent);
83 function GetOnStopTimer: TNotifyEvent;
84 procedure SetOnStopTimer(Value: TNotifyEvent);
85 property Enabled: Boolean read GetEnabled write SetEnabled;
86 property Interval: Cardinal read GetInterval write SetInterval;
87 property OnTimer: TNotifyEvent read GetOnTimer write SetOnTimer;
88 property OnStartTimer: TNotifyEvent read GetOnStartTimer write SetOnStartTimer;
89 property OnStopTimer: TNotifyEvent read GetOnStopTimer write SetOnStopTimer;
90 end;
91
92 { TDummyGUIInterface }
93
94 TDummyGUIInterface = class(TInterfacedObject,IIBGUIInterface)
95 public
96 function ServerLoginDialog(var AServerName: string;
97 var AUserName, APassword: string): Boolean;
98 function LoginDialogEx(var ADatabaseName: string;
99 var AUserName, APassword: string;
100 NameReadOnly: Boolean): Boolean;
101 procedure SetCursor;
102 procedure RestoreCursor;
103 function CreateTimer: IIBTimerInf;
104 end;
105
106
107 implementation
108
109 { TDummyGUIInterface }
110
111 function TDummyGUIInterface.ServerLoginDialog(var AServerName: string;
112 var AUserName, APassword: string): Boolean;
113 begin
114 Result := false;
115 end;
116
117 function TDummyGUIInterface.LoginDialogEx(var ADatabaseName: string;
118 var AUserName, APassword: string; NameReadOnly: Boolean): Boolean;
119 begin
120 Result := false;
121 end;
122
123 procedure TDummyGUIInterface.SetCursor;
124 begin
125
126 end;
127
128 procedure TDummyGUIInterface.RestoreCursor;
129 begin
130
131 end;
132
133 function TDummyGUIInterface.CreateTimer: IIBTimerInf;
134 begin
135 Result := TNonGUITimer.Create;
136 end;
137
138 { TNonGUITimer }
139
140 constructor TNonGUITimer.Create;
141 begin
142 inherited Create;
143 FTimer := TFPTimer.Create(nil);
144 end;
145
146 destructor TNonGUITimer.Destroy;
147 begin
148 if FTimer <> nil then FTimer.Free;
149 inherited Destroy;
150 end;
151
152 function TNonGUITimer.GetEnabled: boolean;
153 begin
154 Result := FTimer.Enabled;
155 end;
156
157 procedure TNonGUITimer.SetEnabled(Value: Boolean);
158 begin
159 FTimer.Enabled := Value;
160 end;
161
162 function TNonGUITimer.GetInterval: Cardinal;
163 begin
164 Result := FTimer.Interval;
165 end;
166
167 procedure TNonGUITimer.SetInterval(Value: Cardinal);
168 begin
169 FTimer.Interval := Value;
170 end;
171
172 function TNonGUITimer.GetOnTimer: TNotifyEvent;
173 begin
174 Result := FTimer.OnTimer;
175 end;
176
177 procedure TNonGUITimer.SetOnTimer(Value: TNotifyEvent);
178 begin
179 FTimer.OnTimer := Value;
180 end;
181
182 function TNonGUITimer.GetOnStartTimer: TNotifyEvent;
183 begin
184 Result := FTimer.OnStartTimer;
185 end;
186
187 procedure TNonGUITimer.SetOnStartTimer(Value: TNotifyEvent);
188 begin
189 FTimer.OnStartTimer := Value;
190 end;
191
192 function TNonGUITimer.GetOnStopTimer: TNotifyEvent;
193 begin
194 Result := FTimer.OnStopTimer;
195 end;
196
197 procedure TNonGUITimer.SetOnStopTimer(Value: TNotifyEvent);
198 begin
199 FTimer.OnStopTimer := Value;
200 end;
201
202 { TTest19 }
203
204 procedure TTest19.InitDetailQuery(Application: TTestApplication);
205 begin
206 FDetailQuery := TIBQuery.Create(Application);
207 FDetailQuery.Database := IBDatabase;
208 FDetailQuery.Transaction := IBTransaction;
209 FDetailQuery.SQL.Text := 'Select * From EMPLOYEE Where DEPT_NO = :DEPT_NO';
210 FDetailQuery.DataSource := FMasterSource;
211 end;
212
213 procedure TTest19.CreateObjects(Application: TTestApplication);
214 begin
215 inherited CreateObjects(Application);
216 IBQuery.SQL.Text := 'Select * From DEPARTMENT';
217 FMasterSource := TDataSource.Create(Application);
218 FMasterSource.DataSet := IBQuery;
219 InitDetailQuery(Application);
220 end;
221
222 function TTest19.GetTestID: AnsiString;
223 begin
224 Result := aTestID;
225 end;
226
227 function TTest19.GetTestTitle: AnsiString;
228 begin
229 Result := aTestTitle;
230 end;
231
232 procedure TTest19.InitTest;
233 begin
234 IBDatabase.DatabaseName := Owner.GetEmployeeDatabaseName;
235 ReadOnlyTransaction;
236 end;
237
238 procedure TTest19.RunTest(CharSet: AnsiString; SQLDialect: integer);
239 begin
240 IBDatabase.Connected := true;
241 try
242 IBTransaction.Active := true;
243 IBQuery.Active := true;
244 FDetailQuery.Active := true;
245 writeln(Outfile,'Department Record:');
246 PrintDataSetRow(IBQuery);
247 writeln(Outfile);
248 writeln(Outfile,'Employee Records:');
249 PrintDataSet(FDetailQuery);
250 writeln(Outfile);
251 writeln(OutFile,'Advance to next department');
252 IBQuery.Next;
253 writeln(Outfile,'Department Record:');
254 PrintDataSetRow(IBQuery);
255 writeln(Outfile);
256 writeln(Outfile,'Employee Records:');
257 PrintDataSet(FDetailQuery);
258 FDetailQuery.Active := false;
259 IBQuery.Active := false;
260
261 FreeAndNil(FDetailQuery);
262 IBGUIInterface := TDummyGUIInterface.Create;
263 try
264 InitDetailQuery(Owner);
265 FDetailQuery.MasterDetailDelay := 500;
266 writeln(Outfile,'Repeat test with an active master/detail timer');
267 IBQuery.Active := true;
268 FDetailQuery.Active := true;
269 writeln(Outfile,'Department Record:');
270 PrintDataSetRow(IBQuery);
271 writeln(Outfile);
272 writeln(Outfile,'Employee Records:');
273 PrintDataSet(FDetailQuery);
274 writeln(Outfile);
275 writeln(OutFile,'Advance to next department');
276 IBQuery.Next;
277 writeln(Outfile,'Department Record:');
278 PrintDataSetRow(IBQuery);
279 writeln(Outfile);
280 writeln(Outfile,'Employee Records:');
281 writeln(Outfile,'Result - before checksynchronise');
282 PrintDataSet(FDetailQuery);
283 CheckSynchronize(5000);
284 writeln(Outfile,'Result - after checksynchronise');
285 PrintDataSet(FDetailQuery);
286 finally
287 IBGUIInterface := nil;
288 end;
289 finally
290 IBDatabase.Connected := false;
291 end;
292 end;
293
294 initialization
295 RegisterTest(TTest19);
296
297 end.
298