@@ -34,6 +34,8 @@ interface
3434
3535type
3636 TParameterMatchingTests = class (TTestCase)
37+ private
38+ procedure Notify (Sender: TObject);
3739 published
3840 procedure ArgsEvaluationOrder ;
3941 procedure ArgsStackProperlyCleaned ;
@@ -48,6 +50,11 @@ TParameterMatchingTests = class(TTestCase)
4850 procedure TestRegex ;
4951 procedure TestEnum ;
5052 procedure TestSet ;
53+ procedure TestClass ;
54+ procedure TestMethod ;
55+ { $IFDEF DELPHIX_SYDNEY_UP}
56+ procedure TestMRecord ;
57+ { $ENDIF}
5158
5259 procedure ReturnsMultipleValues ;
5360 procedure WrapperObjectsNotLeaking ;
@@ -88,6 +95,7 @@ MockSequenceTest = class(TTestCase)
8895implementation
8996
9097uses
98+ Classes,
9199 SysUtils,
92100 Spring,
93101 Spring.Mocking;
@@ -96,6 +104,16 @@ implementation
96104 TTestEnum = (One, Two, Three);
97105 ShortEnum = 0 ..31 ;
98106 TTestSet = set of { $IFNDEF DELPHIX_RIO_UP} ShortEnum{ $ELSE} Byte{ $ENDIF} ; // see RSP-16153
107+ { $IFDEF DELPHIX_SYDNEY_UP}
108+ TTestMRec = record
109+ value : Integer;
110+ class operator Initialize(out value : TTestMRec);
111+ end ;
112+ { $M+}
113+ IMockTestMRec = interface
114+ procedure Test (const rec: TTestMRec);
115+ end ;
116+ { $ENDIF}
99117
100118 { $M+}
101119 IMockTest = interface
@@ -109,6 +127,8 @@ implementation
109127 procedure TestEnum (const value : TTestEnum);
110128 procedure TestSet (const n: Integer; const value : TTestSet; const i: Integer = 0 );
111129 procedure TestObject (const obj: TObject);
130+ procedure TestClass (const cls: TClass);
131+ procedure TestMethod (const event: TNotifyEvent);
112132 function GetNext : Integer;
113133
114134 function GetEvent : IInvokableNotifyEvent<Integer>;
@@ -150,6 +170,17 @@ TFoo = class
150170 end ;
151171
152172
173+ { $REGION 'TTestMRec'}
174+
175+ { $IFDEF DELPHIX_SYDNEY_UP}
176+ class operator TTestMRec.Initialize(out value : TTestMRec);
177+ begin
178+ end ;
179+ { $ENDIF}
180+
181+ { $ENDREGION}
182+
183+
153184{ $REGION 'TParameterMatchingTests'}
154185
155186procedure TParameterMatchingTests.ArgsEvaluationOrder ;
@@ -237,6 +268,10 @@ procedure TParameterMatchingTests.ArgsStackProperlyCleaned;
237268 Pass;
238269end ;
239270
271+ procedure TParameterMatchingTests.Notify (Sender: TObject);
272+ begin
273+ end ;
274+
240275procedure TParameterMatchingTests.OutParameterCanBePassed ;
241276{ $IFDEF DELPHIXE8_UP}
242277var
@@ -306,6 +341,19 @@ procedure TParameterMatchingTests.ReturnsMultipleValues;
306341 mock.Instance.GetNumber;
307342end ;
308343
344+ procedure TParameterMatchingTests.TestClass ;
345+ var
346+ mock: Mock<IMockTest>;
347+ begin
348+ mock.Setup.Executes.When.TestClass(TObject);
349+ mock.Instance.TestClass(TObject);
350+ mock.Received.TestClass(TObject);
351+ mock.Setup.Executes.When.TestClass(Arg.IsAny<TClass>);
352+ mock.Instance.TestClass(nil );
353+ mock.Received.TestClass(nil );
354+ Pass;
355+ end ;
356+
309357procedure TParameterMatchingTests.TestDynArray ;
310358var
311359 mock: Mock<IMockTest>;
@@ -332,6 +380,35 @@ procedure TParameterMatchingTests.TestEnum;
332380 Pass;
333381end ;
334382
383+ procedure TParameterMatchingTests.TestMethod ;
384+ var
385+ mock: Mock<IMockTest>;
386+ begin
387+ mock.Setup.Executes.When.TestMethod(Notify);
388+ mock.Instance.TestMethod(Notify);
389+ mock.Received.TestMethod(Notify);
390+ mock.Setup.Executes.When.TestMethod(Arg.IsAny<TNotifyEvent>());
391+ mock.Instance.TestMethod(nil );
392+ mock.Received.TestMethod(nil );
393+ Pass;
394+ end ;
395+
396+ { $IFDEF DELPHIX_SYDNEY_UP}
397+ procedure TParameterMatchingTests.TestMRecord ;
398+ var
399+ mock: Mock<IMockTestMRec>;
400+ rec: TTestMRec;
401+ begin
402+ mock.Setup.Executes.When.Test(rec);
403+ mock.Instance.Test(rec);
404+ mock.Received.Test(rec);
405+ mock.Setup.Executes.When.Test(Arg.IsAny<TTestMRec>);
406+ mock.Instance.Test(rec);
407+ mock.Received(2 ).Test(Arg.IsAny<TTestMRec>);
408+ Pass;
409+ end ;
410+ { $ENDIF}
411+
335412procedure TParameterMatchingTests.TestRecord ;
336413var
337414 mock: Mock<TFoo>;
0 commit comments