Skip to content

Commit 8ab1a00

Browse files
committed
Add regression tests for multi-argument override
1 parent 6ec8ba7 commit 8ab1a00

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

Bonsai.Core.Tests/OverloadedCombinatorBuilderTests.cs

+44
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,25 @@ class DerivedOverrideCovariantTransformMock : Transform<object[], object[]>
106106
public IObservable<Array> Process(IObservable<Array> source) => source;
107107
}
108108

109+
[Combinator]
110+
class MultiArgumentBaseCovariantMock
111+
{
112+
public virtual IObservable<object[]> Process(
113+
IObservable<object[]> source,
114+
IObservable<object> source2) => source;
115+
}
116+
117+
class MultiArgumentDerivedCovariantMock : MultiArgumentBaseCovariantMock
118+
{
119+
public override IObservable<object[]> Process(
120+
IObservable<object[]> source,
121+
IObservable<object> source2) => source;
122+
123+
public IObservable<Array> Process(
124+
IObservable<Array> source,
125+
IObservable<string> _) => source;
126+
}
127+
109128
private TResult RunOverload<TSource, TResult, TCombinator>(TSource value)
110129
where TCombinator : new()
111130
{
@@ -270,5 +289,30 @@ public void Build_OverloadOverrideAndNewOverloadWithBaseTypeAfterExplicitConvers
270289
var result = RunOverload<object, Array, DerivedOverrideCovariantTransformMock>(value);
271290
Assert.AreEqual(value, result);
272291
}
292+
293+
[TestMethod]
294+
public void Build_OverloadOverrideAndNewMultiArgumentWithMixedConversions_PreferBaseOverload()
295+
// Override is preferred since method signature is not subsumed and second argument is exact match
296+
{
297+
var value = new object[1];
298+
var source1 = CreateObservableExpression(Observable.Return((object)value));
299+
var source2 = CreateObservableExpression(Observable.Return((object)value));
300+
var resultProvider = TestCombinatorBuilder<object[], MultiArgumentDerivedCovariantMock>(source1, source2);
301+
var result = Last(resultProvider).Result;
302+
Assert.AreEqual(value, result);
303+
}
304+
305+
[TestMethod]
306+
public void Build_OverloadOverrideAndNewMultiArgumentWithSpecializedConversion_PreferNewOverload()
307+
// New overload is preferred since the second argument is more specialized
308+
{
309+
var value1 = new object[1];
310+
var value2 = string.Empty;
311+
var source1 = CreateObservableExpression(Observable.Return((object)value1));
312+
var source2 = CreateObservableExpression(Observable.Return(value2));
313+
var resultProvider = TestCombinatorBuilder<Array, MultiArgumentDerivedCovariantMock>(source1, source2);
314+
var result = Last(resultProvider).Result;
315+
Assert.AreEqual(value1, result);
316+
}
273317
}
274318
}

0 commit comments

Comments
 (0)