diff --git a/Source/Mockolate.SourceGenerators/Sources/Sources.IndexerSetups.cs b/Source/Mockolate.SourceGenerators/Sources/Sources.IndexerSetups.cs
index 555f15fb..8f0bf627 100644
--- a/Source/Mockolate.SourceGenerators/Sources/Sources.IndexerSetups.cs
+++ b/Source/Mockolate.SourceGenerators/Sources/Sources.IndexerSetups.cs
@@ -774,11 +774,6 @@ private static void AppendIndexerSetup(StringBuilder sb, int numberOfParameters)
sb.Append("\t\t\t=> _skipBaseClass;").AppendLine();
sb.AppendLine();
- sb.Append("\t\t/// ").AppendLine();
- sb.Append("\t\tprotected override bool HasReturnCalls()").AppendLine();
- sb.Append("\t\t\t=> _returnCallbacks.Count > 0;").AppendLine();
- sb.AppendLine();
-
sb.Append(
"\t\t/// ")
.AppendLine();
diff --git a/Source/Mockolate/Setup/IndexerSetup.cs b/Source/Mockolate/Setup/IndexerSetup.cs
index 55cd5881..37af8f15 100644
--- a/Source/Mockolate/Setup/IndexerSetup.cs
+++ b/Source/Mockolate/Setup/IndexerSetup.cs
@@ -12,10 +12,6 @@ namespace Mockolate.Setup;
///
public abstract class IndexerSetup : IInteractiveIndexerSetup
{
- ///
- bool IInteractiveIndexerSetup.HasReturnCalls()
- => HasReturnCalls();
-
///
bool IInteractiveIndexerSetup.Matches(IndexerAccess indexerAccess)
=> IsMatch(indexerAccess.Parameters);
@@ -111,11 +107,6 @@ protected static bool Matches(NamedParameter[] namedParameters, NamedParameterVa
///
protected abstract bool? GetSkipBaseClass();
- ///
- /// Gets a value indicating whether this setup has return calls configured.
- ///
- protected abstract bool HasReturnCalls();
-
///
/// Attempts to retrieve the initial for the , if an
/// initialization is set up.
@@ -390,10 +381,6 @@ IIndexerSetup IIndexerSetupReturnWhenBuilder.Only(int ti
protected override bool? GetSkipBaseClass()
=> _skipBaseClass;
- ///
- protected override bool HasReturnCalls()
- => _returnCallbacks.Count > 0;
-
///
protected override T ExecuteGetterCallback(IndexerGetterAccess indexerGetterAccess, T value,
MockBehavior behavior)
@@ -746,10 +733,6 @@ IIndexerSetup IIndexerSetupReturnWhenBuilder.Onl
protected override bool? GetSkipBaseClass()
=> _skipBaseClass;
- ///
- protected override bool HasReturnCalls()
- => _returnCallbacks.Count > 0;
-
///
protected override T ExecuteGetterCallback(IndexerGetterAccess indexerGetterAccess, T value,
MockBehavior behavior)
@@ -1117,10 +1100,6 @@ IIndexerSetup IIndexerSetupReturnWhenBuilder _skipBaseClass;
- ///
- protected override bool HasReturnCalls()
- => _returnCallbacks.Count > 0;
-
///
protected override T ExecuteGetterCallback(IndexerGetterAccess indexerGetterAccess, T value,
MockBehavior behavior)
@@ -1503,10 +1482,6 @@ IIndexerSetup IIndexerSetupReturnWhenBuilder _skipBaseClass;
- ///
- protected override bool HasReturnCalls()
- => _returnCallbacks.Count > 0;
-
///
protected override T ExecuteGetterCallback(IndexerGetterAccess indexerGetterAccess, T value,
MockBehavior behavior)
diff --git a/Source/Mockolate/Setup/IndexerSetupResult.cs b/Source/Mockolate/Setup/IndexerSetupResult.cs
index 908e38f2..24c50f0b 100644
--- a/Source/Mockolate/Setup/IndexerSetupResult.cs
+++ b/Source/Mockolate/Setup/IndexerSetupResult.cs
@@ -59,14 +59,16 @@ public TResult GetResult(Func defaultValueGenerator)
TResult value;
if (_setup is IndexerSetup indexerSetup)
{
- _setup.GetInitialValue(_behavior, defaultValueGenerator, indexerAccess.Parameters, out value);
+ value = getIndexerValue(_setup,
+ () =>
+ {
+ _setup.GetInitialValue(_behavior, defaultValueGenerator, indexerAccess.Parameters,
+ out var v);
+ return v;
+ }, indexerAccess.Parameters);
value = indexerSetup.InvokeGetter(indexerAccess, value, _behavior);
-
- if (_setup.HasReturnCalls())
- {
- setIndexerValue(indexerAccess.Parameters, value);
- return value;
- }
+ setIndexerValue(indexerAccess.Parameters, value);
+ return value;
}
else if (_behavior.ThrowWhenNotSetup)
{
diff --git a/Source/Mockolate/Setup/Interfaces.IndexerSetup.cs b/Source/Mockolate/Setup/Interfaces.IndexerSetup.cs
index 61c0c78a..45c395d7 100644
--- a/Source/Mockolate/Setup/Interfaces.IndexerSetup.cs
+++ b/Source/Mockolate/Setup/Interfaces.IndexerSetup.cs
@@ -15,11 +15,6 @@ public interface IInteractiveIndexerSetup : ISetup
///
bool? SkipBaseClass();
- ///
- /// Gets a value indicating whether this setup has return calls configured.
- ///
- bool HasReturnCalls();
-
///
/// Checks if the matches the setup.
///
diff --git a/Tests/Mockolate.Api.Tests/Expected/Mockolate_net10.0.txt b/Tests/Mockolate.Api.Tests/Expected/Mockolate_net10.0.txt
index c5ae838f..7cfa92cd 100644
--- a/Tests/Mockolate.Api.Tests/Expected/Mockolate_net10.0.txt
+++ b/Tests/Mockolate.Api.Tests/Expected/Mockolate_net10.0.txt
@@ -858,7 +858,6 @@ namespace Mockolate.Setup
public interface IInteractiveIndexerSetup : Mockolate.Setup.ISetup
{
void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out TValue value);
- bool HasReturnCalls();
bool Matches(Mockolate.Interactions.IndexerAccess indexerAccess);
bool? SkipBaseClass();
}
@@ -1286,7 +1285,6 @@ namespace Mockolate.Setup
protected abstract void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior);
protected abstract void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value);
protected abstract bool? GetSkipBaseClass();
- protected abstract bool HasReturnCalls();
protected abstract bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters);
protected static bool Matches(Mockolate.Parameters.NamedParameter[] namedParameters, Mockolate.Parameters.NamedParameterValue[] values) { }
protected static bool TryCast([System.Diagnostics.CodeAnalysis.NotNullWhen(false)] object? value, out T result, Mockolate.MockBehavior behavior) { }
@@ -1311,7 +1309,6 @@ namespace Mockolate.Setup
protected override void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior) { }
protected override void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value) { }
protected override bool? GetSkipBaseClass() { }
- protected override bool HasReturnCalls() { }
public Mockolate.Setup.IIndexerSetup InitializeWith(System.Func valueGenerator) { }
public Mockolate.Setup.IIndexerSetup InitializeWith(TValue value) { }
protected override bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters) { }
@@ -1336,7 +1333,6 @@ namespace Mockolate.Setup
protected override void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior) { }
protected override void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value) { }
protected override bool? GetSkipBaseClass() { }
- protected override bool HasReturnCalls() { }
public Mockolate.Setup.IIndexerSetup InitializeWith(System.Func valueGenerator) { }
public Mockolate.Setup.IIndexerSetup InitializeWith(TValue value) { }
protected override bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters) { }
@@ -1361,7 +1357,6 @@ namespace Mockolate.Setup
protected override void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior) { }
protected override void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value) { }
protected override bool? GetSkipBaseClass() { }
- protected override bool HasReturnCalls() { }
public Mockolate.Setup.IIndexerSetup InitializeWith(System.Func valueGenerator) { }
public Mockolate.Setup.IIndexerSetup InitializeWith(TValue value) { }
protected override bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters) { }
@@ -1386,7 +1381,6 @@ namespace Mockolate.Setup
protected override void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior) { }
protected override void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value) { }
protected override bool? GetSkipBaseClass() { }
- protected override bool HasReturnCalls() { }
public Mockolate.Setup.IIndexerSetup InitializeWith(System.Func valueGenerator) { }
public Mockolate.Setup.IIndexerSetup InitializeWith(TValue value) { }
protected override bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters) { }
diff --git a/Tests/Mockolate.Api.Tests/Expected/Mockolate_net8.0.txt b/Tests/Mockolate.Api.Tests/Expected/Mockolate_net8.0.txt
index b0dd316d..893e0cab 100644
--- a/Tests/Mockolate.Api.Tests/Expected/Mockolate_net8.0.txt
+++ b/Tests/Mockolate.Api.Tests/Expected/Mockolate_net8.0.txt
@@ -857,7 +857,6 @@ namespace Mockolate.Setup
public interface IInteractiveIndexerSetup : Mockolate.Setup.ISetup
{
void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out TValue value);
- bool HasReturnCalls();
bool Matches(Mockolate.Interactions.IndexerAccess indexerAccess);
bool? SkipBaseClass();
}
@@ -1285,7 +1284,6 @@ namespace Mockolate.Setup
protected abstract void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior);
protected abstract void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value);
protected abstract bool? GetSkipBaseClass();
- protected abstract bool HasReturnCalls();
protected abstract bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters);
protected static bool Matches(Mockolate.Parameters.NamedParameter[] namedParameters, Mockolate.Parameters.NamedParameterValue[] values) { }
protected static bool TryCast([System.Diagnostics.CodeAnalysis.NotNullWhen(false)] object? value, out T result, Mockolate.MockBehavior behavior) { }
@@ -1310,7 +1308,6 @@ namespace Mockolate.Setup
protected override void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior) { }
protected override void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value) { }
protected override bool? GetSkipBaseClass() { }
- protected override bool HasReturnCalls() { }
public Mockolate.Setup.IIndexerSetup InitializeWith(System.Func valueGenerator) { }
public Mockolate.Setup.IIndexerSetup InitializeWith(TValue value) { }
protected override bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters) { }
@@ -1335,7 +1332,6 @@ namespace Mockolate.Setup
protected override void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior) { }
protected override void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value) { }
protected override bool? GetSkipBaseClass() { }
- protected override bool HasReturnCalls() { }
public Mockolate.Setup.IIndexerSetup InitializeWith(System.Func valueGenerator) { }
public Mockolate.Setup.IIndexerSetup InitializeWith(TValue value) { }
protected override bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters) { }
@@ -1360,7 +1356,6 @@ namespace Mockolate.Setup
protected override void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior) { }
protected override void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value) { }
protected override bool? GetSkipBaseClass() { }
- protected override bool HasReturnCalls() { }
public Mockolate.Setup.IIndexerSetup InitializeWith(System.Func valueGenerator) { }
public Mockolate.Setup.IIndexerSetup InitializeWith(TValue value) { }
protected override bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters) { }
@@ -1385,7 +1380,6 @@ namespace Mockolate.Setup
protected override void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior) { }
protected override void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value) { }
protected override bool? GetSkipBaseClass() { }
- protected override bool HasReturnCalls() { }
public Mockolate.Setup.IIndexerSetup InitializeWith(System.Func valueGenerator) { }
public Mockolate.Setup.IIndexerSetup InitializeWith(TValue value) { }
protected override bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters) { }
diff --git a/Tests/Mockolate.Api.Tests/Expected/Mockolate_netstandard2.0.txt b/Tests/Mockolate.Api.Tests/Expected/Mockolate_netstandard2.0.txt
index e8ed0772..4db24ded 100644
--- a/Tests/Mockolate.Api.Tests/Expected/Mockolate_netstandard2.0.txt
+++ b/Tests/Mockolate.Api.Tests/Expected/Mockolate_netstandard2.0.txt
@@ -820,7 +820,6 @@ namespace Mockolate.Setup
public interface IInteractiveIndexerSetup : Mockolate.Setup.ISetup
{
void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out TValue value);
- bool HasReturnCalls();
bool Matches(Mockolate.Interactions.IndexerAccess indexerAccess);
bool? SkipBaseClass();
}
@@ -1248,7 +1247,6 @@ namespace Mockolate.Setup
protected abstract void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior);
protected abstract void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value);
protected abstract bool? GetSkipBaseClass();
- protected abstract bool HasReturnCalls();
protected abstract bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters);
protected static bool Matches(Mockolate.Parameters.NamedParameter[] namedParameters, Mockolate.Parameters.NamedParameterValue[] values) { }
protected static bool TryCast([System.Diagnostics.CodeAnalysis.NotNullWhen(false)] object? value, out T result, Mockolate.MockBehavior behavior) { }
@@ -1273,7 +1271,6 @@ namespace Mockolate.Setup
protected override void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior) { }
protected override void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value) { }
protected override bool? GetSkipBaseClass() { }
- protected override bool HasReturnCalls() { }
public Mockolate.Setup.IIndexerSetup InitializeWith(System.Func valueGenerator) { }
public Mockolate.Setup.IIndexerSetup InitializeWith(TValue value) { }
protected override bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters) { }
@@ -1298,7 +1295,6 @@ namespace Mockolate.Setup
protected override void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior) { }
protected override void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value) { }
protected override bool? GetSkipBaseClass() { }
- protected override bool HasReturnCalls() { }
public Mockolate.Setup.IIndexerSetup InitializeWith(System.Func valueGenerator) { }
public Mockolate.Setup.IIndexerSetup InitializeWith(TValue value) { }
protected override bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters) { }
@@ -1323,7 +1319,6 @@ namespace Mockolate.Setup
protected override void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior) { }
protected override void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value) { }
protected override bool? GetSkipBaseClass() { }
- protected override bool HasReturnCalls() { }
public Mockolate.Setup.IIndexerSetup InitializeWith(System.Func valueGenerator) { }
public Mockolate.Setup.IIndexerSetup InitializeWith(TValue value) { }
protected override bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters) { }
@@ -1348,7 +1343,6 @@ namespace Mockolate.Setup
protected override void ExecuteSetterCallback(Mockolate.Interactions.IndexerSetterAccess indexerSetterAccess, T value, Mockolate.MockBehavior behavior) { }
protected override void GetInitialValue(Mockolate.MockBehavior behavior, System.Func defaultValueGenerator, Mockolate.Parameters.NamedParameterValue[] parameters, [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T value) { }
protected override bool? GetSkipBaseClass() { }
- protected override bool HasReturnCalls() { }
public Mockolate.Setup.IIndexerSetup InitializeWith(System.Func valueGenerator) { }
public Mockolate.Setup.IIndexerSetup InitializeWith(TValue value) { }
protected override bool IsMatch(Mockolate.Parameters.NamedParameterValue[] parameters) { }
diff --git a/Tests/Mockolate.Tests/MockIndexers/SetupIndexerTests.ReturnsThrowsTests.cs b/Tests/Mockolate.Tests/MockIndexers/SetupIndexerTests.ReturnsThrowsTests.cs
index ad020f9e..f725b2f2 100644
--- a/Tests/Mockolate.Tests/MockIndexers/SetupIndexerTests.ReturnsThrowsTests.cs
+++ b/Tests/Mockolate.Tests/MockIndexers/SetupIndexerTests.ReturnsThrowsTests.cs
@@ -7,326 +7,353 @@ public sealed partial class SetupIndexerTests
{
public sealed class ReturnsThrowsTests
{
- [Fact]
- public async Task IndexerReturns_WithSpecificParameter_ShouldIterateThroughValues()
+ public sealed class With1Level
{
- IIndexerService mock = Mock.Create();
- mock.SetupMock.Indexer(It.Is(1))
- .Returns("a")
- .Returns("b");
-
- string result11 = mock[1];
- string result2 = mock[2];
- string result12 = mock[1];
- string result13 = mock[1];
- string result14 = mock[1];
- string result15 = mock[1];
-
- await That(result11).IsEqualTo("a");
- await That(result2).IsEqualTo("");
- await That(result12).IsEqualTo("b");
- await That(result13).IsEqualTo("a");
- await That(result14).IsEqualTo("b");
- await That(result15).IsEqualTo("a");
- }
+ [Fact]
+ public async Task IndexerReturns_WithSpecificParameter_ShouldIterateThroughValues()
+ {
+ IIndexerService mock = Mock.Create();
+ mock.SetupMock.Indexer(It.Is(1))
+ .Returns("a")
+ .Returns("b");
- [Fact]
- public async Task MixReturnsAndThrows_ShouldIterateThroughBoth()
- {
- IIndexerService sut = Mock.Create();
+ string result11 = mock[1];
+ string result2 = mock[2];
+ string result12 = mock[1];
+ string result13 = mock[1];
+ string result14 = mock[1];
+ string result15 = mock[1];
- sut.SetupMock.Indexer(It.IsAny())
- .Returns("a")
- .Throws(new Exception("foo"))
- .Returns(() => "b");
+ await That(result11).IsEqualTo("a");
+ await That(result2).IsEqualTo("");
+ await That(result12).IsEqualTo("b");
+ await That(result13).IsEqualTo("a");
+ await That(result14).IsEqualTo("b");
+ await That(result15).IsEqualTo("a");
+ }
- string result1 = sut[1];
- Exception? result2 = Record.Exception(() => _ = sut[2]);
- string result3 = sut[3];
+ [Fact]
+ public async Task MixReturnsAndThrows_ShouldIterateThroughBoth()
+ {
+ IIndexerService sut = Mock.Create();
- await That(result1).IsEqualTo("a");
- await That(result2).HasMessage("foo");
- await That(result3).IsEqualTo("b");
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .Returns("a")
+ .Throws(new Exception("foo"))
+ .Returns(() => "b");
- [Fact]
- public async Task MultipleReturns_ShouldIterateThroughAllRegisteredValues()
- {
- IIndexerService sut = Mock.Create();
+ string result1 = sut[1];
+ Exception? result2 = Record.Exception(() => _ = sut[2]);
+ string result3 = sut[3];
- sut.SetupMock.Indexer(It.IsAny())
- .Returns("a")
- .Returns(() => "b")
- .Returns(p1 => $"foo-{p1}");
+ await That(result1).IsEqualTo("a");
+ await That(result2).HasMessage("foo");
+ await That(result3).IsEqualTo("b");
+ }
- string[] result = new string[10];
- for (int i = 0; i < 10; i++)
+ [Fact]
+ public async Task MultipleReturns_ShouldIterateThroughAllRegisteredValues()
{
- result[i] = sut[i];
- }
+ IIndexerService sut = Mock.Create();
- await That(result).IsEqualTo(["a", "b", "foo-2", "a", "b", "foo-5", "a", "b", "foo-8", "a",]);
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .Returns("a")
+ .Returns(() => "b")
+ .Returns(p1 => $"foo-{p1}");
- [Fact]
- public async Task Returns_Callback_ShouldReturnExpectedValue()
- {
- IIndexerService sut = Mock.Create();
+ string[] result = new string[10];
+ for (int i = 0; i < 10; i++)
+ {
+ result[i] = sut[i];
+ }
- sut.SetupMock.Indexer(It.IsAny())
- .Returns(() => "foo");
+ await That(result).IsEqualTo(["a", "b", "foo-2", "a", "b", "foo-5", "a", "b", "foo-8", "a",]);
+ }
- string result = sut[1];
+ [Fact]
+ public async Task Returns_Callback_ShouldReturnExpectedValue()
+ {
+ IIndexerService sut = Mock.Create();
- await That(result).IsEqualTo("foo");
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .Returns(() => "foo");
- [Fact]
- public async Task Returns_CallbackWithParameters_ShouldReturnExpectedValue()
- {
- IIndexerService sut = Mock.Create();
+ string result = sut[1];
- sut.SetupMock.Indexer(It.IsAny())
- .InitializeWith("a")
- .Returns(p1 => $"foo-{p1}");
+ await That(result).IsEqualTo("foo");
+ }
- string result = sut[3];
+ [Fact]
+ public async Task Returns_CallbackWithParameters_ShouldReturnExpectedValue()
+ {
+ IIndexerService sut = Mock.Create();
- await That(result).IsEqualTo("foo-3");
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .InitializeWith("a")
+ .Returns(p1 => $"foo-{p1}");
- [Fact]
- public async Task Returns_CallbackWithParametersAndValue_ShouldReturnExpectedValue()
- {
- IIndexerService sut = Mock.Create();
+ string result = sut[3];
- sut.SetupMock.Indexer(It.IsAny())
- .InitializeWith("init")
- .Returns((p1, v) => $"foo-{v}-{p1}");
+ await That(result).IsEqualTo("foo-3");
+ }
- string result = sut[3];
+ [Fact]
+ public async Task Returns_CallbackWithParametersAndValue_ShouldReturnExpectedValue()
+ {
+ IIndexerService sut = Mock.Create();
- await That(result).IsEqualTo("foo-init-3");
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .InitializeWith("init")
+ .Returns((p1, v) => $"foo-{v}-{p1}");
- [Fact]
- public async Task Returns_For_ShouldLimitUsage_ToSpecifiedNumber()
- {
- IIndexerService sut = Mock.Create();
+ string result = sut[3];
- sut.SetupMock.Indexer(It.IsAny())
- .Returns("foo").For(2)
- .Returns("bar").For(3);
+ await That(result).IsEqualTo("foo-init-3");
+ }
- List values = [];
- for (int i = 0; i < 10; i++)
+ [Fact]
+ public async Task Returns_For_ShouldLimitUsage_ToSpecifiedNumber()
{
- values.Add(sut[i]);
- }
+ IIndexerService sut = Mock.Create();
- await That(values).IsEqualTo(["foo", "foo", "bar", "bar", "bar", "", "", "", "", "",]);
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .Returns("foo").For(2)
+ .Returns("bar").For(3);
- [Fact]
- public async Task Returns_Forever_ShouldUseTheLastValueForever()
- {
- IIndexerService sut = Mock.Create();
+ List values = [];
+ for (int i = 0; i < 10; i++)
+ {
+ values.Add(sut[i]);
+ }
- sut.SetupMock.Indexer(It.IsAny())
- .Returns("a")
- .Returns("b")
- .Returns("c").Forever();
+ await That(values).IsEqualTo(["foo", "foo", "bar", "bar", "bar", "", "", "", "", "",]);
+ }
- string[] result = new string[10];
- for (int i = 0; i < 10; i++)
+ [Fact]
+ public async Task Returns_Forever_ShouldUseTheLastValueForever()
{
- result[i] = sut[i];
- }
+ IIndexerService sut = Mock.Create();
- await That(result).IsEqualTo(["a", "b", "c", "c", "c", "c", "c", "c", "c", "c",]);
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .Returns("a")
+ .Returns("b")
+ .Returns("c").Forever();
- [Fact]
- public async Task Returns_ShouldReturnExpectedValue()
- {
- IIndexerService sut = Mock.Create();
+ string[] result = new string[10];
+ for (int i = 0; i < 10; i++)
+ {
+ result[i] = sut[i];
+ }
- sut.SetupMock.Indexer(It.IsAny())
- .Returns("foo");
+ await That(result).IsEqualTo(["a", "b", "c", "c", "c", "c", "c", "c", "c", "c",]);
+ }
- string result = sut[3];
+ [Fact]
+ public async Task Returns_ShouldReturnExpectedValue()
+ {
+ IIndexerService sut = Mock.Create();
- await That(result).IsEqualTo("foo");
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .Returns("foo");
- [Fact]
- public async Task Returns_When_ShouldOnlyUseValueWhenPredicateIsTrue()
- {
- IIndexerService sut = Mock.Create();
+ string result = sut[3];
- sut.SetupMock.Indexer(It.IsAny())
- .Returns("foo").When(i => i > 0);
+ await That(result).IsEqualTo("foo");
+ }
- string result1 = sut[3];
- string result2 = sut[4];
- string result3 = sut[5];
+ [Fact]
+ public async Task Returns_When_ShouldOnlyUseValueWhenPredicateIsTrue()
+ {
+ IIndexerService sut = Mock.Create();
- await That(result1).IsEqualTo("");
- await That(result2).IsEqualTo("foo");
- await That(result3).IsEqualTo("foo");
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .Returns("foo").When(i => i > 0);
- [Fact]
- public async Task Returns_WhenFor_ShouldLimitUsage_ToSpecifiedNumber()
- {
- IIndexerService sut = Mock.Create();
+ string result1 = sut[3];
+ string result2 = sut[4];
+ string result3 = sut[5];
- sut.SetupMock.Indexer(It.IsAny())
- .Returns("foo").When(i => i > 0).For(2)
- .Returns("baz")
- .Returns("bar").For(3);
+ await That(result1).IsEqualTo("");
+ await That(result2).IsEqualTo("foo");
+ await That(result3).IsEqualTo("foo");
+ }
- List values = [];
- for (int i = 0; i < 10; i++)
+ [Fact]
+ public async Task Returns_WhenFor_ShouldLimitUsage_ToSpecifiedNumber()
{
- values.Add(sut[i]);
- }
+ IIndexerService sut = Mock.Create();
- await That(values).IsEqualTo(["baz", "bar", "bar", "bar", "foo", "foo", "baz", "baz", "baz", "baz",]);
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .Returns("foo").When(i => i > 0).For(2)
+ .Returns("baz")
+ .Returns("bar").For(3);
- [Fact]
- public async Task Returns_WithoutSetup_ShouldReturnDefault()
- {
- IIndexerService sut = Mock.Create();
+ List values = [];
+ for (int i = 0; i < 10; i++)
+ {
+ values.Add(sut[i]);
+ }
- string result = sut[2];
+ await That(values).IsEqualTo(["baz", "bar", "bar", "bar", "foo", "foo", "baz", "baz", "baz", "baz",]);
+ }
- await That(result).IsEmpty();
- }
+ [Fact]
+ public async Task Returns_WithoutSetup_ShouldReturnDefault()
+ {
+ IIndexerService sut = Mock.Create();
- [Fact]
- public async Task Throws_Callback_ShouldThrowException()
- {
- IIndexerService sut = Mock.Create();
+ string result = sut[2];
- sut.SetupMock.Indexer(It.IsAny())
- .Throws(() => new Exception("foo"));
+ await That(result).IsEmpty();
+ }
- void Act()
+ [Fact]
+ public async Task SetupWithoutReturn_ShouldUseBaseValue()
{
- _ = sut[3];
+ IndexerMethodSetupTest sut = Mock.Create();
+ sut.SetupMock.Indexer(It.IsAny())
+ .OnGet.Do(() => { });
+
+ string result = sut[1];
+
+ await That(result).IsEqualTo("foo-1");
}
- await That(Act).ThrowsException().WithMessage("foo");
- }
+ [Fact]
+ public async Task SetupWithReturn_ShouldIgnoreBaseValue()
+ {
+ IndexerMethodSetupTest sut = Mock.Create();
+ sut.SetupMock.Indexer(It.IsAny())
+ .Returns("bar");
- [Fact]
- public async Task Throws_CallbackWithParameters_ShouldThrowException()
- {
- IIndexerService sut = Mock.Create();
+ string result = sut[1];
- sut.SetupMock.Indexer(It.IsAny())
- .InitializeWith("init")
- .Throws(p1 => new Exception($"foo-{p1}"));
+ await That(result).IsEqualTo("bar");
+ }
- void Act()
+ [Fact]
+ public async Task Throws_Callback_ShouldThrowException()
{
- _ = sut[3];
- }
+ IIndexerService sut = Mock.Create();
- await That(Act).ThrowsException().WithMessage("foo-3");
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .Throws(() => new Exception("foo"));
- [Fact]
- public async Task Throws_CallbackWithParametersAndValue_ShouldThrowException()
- {
- IIndexerService sut = Mock.Create();
+ void Act()
+ {
+ _ = sut[3];
+ }
- sut.SetupMock.Indexer(It.IsAny())
- .InitializeWith("init")
- .Throws((p1, v) => new Exception($"foo-{v}-{p1}"));
+ await That(Act).ThrowsException().WithMessage("foo");
+ }
- void Act()
+ [Fact]
+ public async Task Throws_CallbackWithParameters_ShouldThrowException()
{
- _ = sut[3];
- }
+ IIndexerService sut = Mock.Create();
- await That(Act).ThrowsException().WithMessage("foo-init-3");
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .InitializeWith("init")
+ .Throws(p1 => new Exception($"foo-{p1}"));
- [Fact]
- public async Task Throws_Generic_ShouldThrowException()
- {
- IIndexerService sut = Mock.Create();
+ void Act()
+ {
+ _ = sut[3];
+ }
- sut.SetupMock.Indexer(It.IsAny())
- .Throws();
+ await That(Act).ThrowsException().WithMessage("foo-3");
+ }
- void Act()
+ [Fact]
+ public async Task Throws_CallbackWithParametersAndValue_ShouldThrowException()
{
- _ = sut[3];
- }
+ IIndexerService sut = Mock.Create();
- await That(Act).ThrowsExactly();
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .InitializeWith("init")
+ .Throws((p1, v) => new Exception($"foo-{v}-{p1}"));
- [Fact]
- public async Task Throws_ShouldThrowException()
- {
- IIndexerService sut = Mock.Create();
+ void Act()
+ {
+ _ = sut[3];
+ }
- sut.SetupMock.Indexer(It.IsAny())
- .Throws(new Exception("foo"));
+ await That(Act).ThrowsException().WithMessage("foo-init-3");
+ }
- void Act()
+ [Fact]
+ public async Task Throws_Generic_ShouldThrowException()
{
- _ = sut[3];
- }
+ IIndexerService sut = Mock.Create();
- await That(Act).ThrowsException().WithMessage("foo");
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .Throws();
- [Fact]
- public async Task WithoutCallback_IIndexerSetupReturnBuilder_ShouldNotThrow()
- {
- IIndexerService mock = Mock.Create();
- IIndexerSetupReturnBuilder setup =
- (IIndexerSetupReturnBuilder)mock.SetupMock.Indexer(It.IsAny());
+ void Act()
+ {
+ _ = sut[3];
+ }
- void ActWhen()
- {
- setup.When(_ => true);
+ await That(Act).ThrowsExactly();
}
- void ActFor()
+ [Fact]
+ public async Task Throws_ShouldThrowException()
{
- setup.For(2);
- }
+ IIndexerService sut = Mock.Create();
- await That(ActWhen).DoesNotThrow();
- await That(ActFor).DoesNotThrow();
- }
+ sut.SetupMock.Indexer(It.IsAny())
+ .Throws(new Exception("foo"));
- [Fact]
- public async Task WithoutCallback_IIndexerSetupReturnWhenBuilder_ShouldNotThrow()
- {
- IIndexerService mock = Mock.Create();
- IIndexerSetupReturnWhenBuilder setup =
- (IIndexerSetupReturnWhenBuilder)mock.SetupMock.Indexer(It.IsAny());
+ void Act()
+ {
+ _ = sut[3];
+ }
- void ActFor()
- {
- setup.For(2);
+ await That(Act).ThrowsException().WithMessage("foo");
}
- void ActOnly()
+ [Fact]
+ public async Task WithoutCallback_IIndexerSetupReturnBuilder_ShouldNotThrow()
{
- setup.Only(2);
+ IIndexerService mock = Mock.Create();
+ IIndexerSetupReturnBuilder setup =
+ (IIndexerSetupReturnBuilder)mock.SetupMock.Indexer(It.IsAny());
+
+ void ActWhen()
+ {
+ setup.When(_ => true);
+ }
+
+ void ActFor()
+ {
+ setup.For(2);
+ }
+
+ await That(ActWhen).DoesNotThrow();
+ await That(ActFor).DoesNotThrow();
}
- await That(ActFor).DoesNotThrow();
- await That(ActOnly).DoesNotThrow();
+ [Fact]
+ public async Task WithoutCallback_IIndexerSetupReturnWhenBuilder_ShouldNotThrow()
+ {
+ IIndexerService mock = Mock.Create();
+ IIndexerSetupReturnWhenBuilder setup =
+ (IIndexerSetupReturnWhenBuilder)mock.SetupMock.Indexer(It.IsAny());
+
+ void ActFor()
+ {
+ setup.For(2);
+ }
+
+ void ActOnly()
+ {
+ setup.Only(2);
+ }
+
+ await That(ActFor).DoesNotThrow();
+ await That(ActOnly).DoesNotThrow();
+ }
}
public sealed class With2Levels
@@ -529,6 +556,30 @@ public async Task Returns_WithoutSetup_ShouldReturnDefault()
await That(result).IsEmpty();
}
+ [Fact]
+ public async Task SetupWithoutReturn_ShouldUseBaseValue()
+ {
+ IndexerMethodSetupTest sut = Mock.Create();
+ sut.SetupMock.Indexer(It.IsAny(), It.IsAny())
+ .OnGet.Do(() => { });
+
+ string result = sut[1, 2];
+
+ await That(result).IsEqualTo("foo-1-2");
+ }
+
+ [Fact]
+ public async Task SetupWithReturn_ShouldIgnoreBaseValue()
+ {
+ IndexerMethodSetupTest sut = Mock.Create();
+ sut.SetupMock.Indexer(It.IsAny(), It.IsAny())
+ .Returns("bar");
+
+ string result = sut[1, 2];
+
+ await That(result).IsEqualTo("bar");
+ }
+
[Fact]
public async Task Throws_Callback_ShouldThrowException()
{
@@ -857,6 +908,51 @@ public async Task Returns_WithoutSetup_ShouldReturnDefault()
await That(result).IsEmpty();
}
+ [Fact]
+ public async Task SetupWithoutReturn_ShouldUseBaseValue()
+ {
+ IndexerMethodSetupTest sut = Mock.Create();
+ sut.SetupMock.Indexer(It.IsAny(), It.IsAny(), It.IsAny())
+ .OnGet.Do(() => { });
+
+ string result = sut[1, 2, 3];
+
+ await That(result).IsEqualTo("foo-1-2-3");
+ }
+
+ [Fact]
+ public async Task Returns_WithPredicate_ShouldApplyReturnWhenPredicateMatches()
+ {
+ List results = [];
+ IIndexerService sut = Mock.Create();
+
+ sut.SetupMock.Indexer(It.IsAny())
+ .Returns(() => "foo").When(i => i is > 3 and < 6);
+
+ results.Add(sut[1]);
+ results.Add(sut[1]);
+ sut[1] = "bar";
+ results.Add(sut[1]);
+ results.Add(sut[1]);
+ results.Add(sut[1]);
+ results.Add(sut[1]);
+ results.Add(sut[1]);
+
+ await That(results).IsEqualTo(["", "", "bar", "bar", "foo", "foo", "foo",]);
+ }
+
+ [Fact]
+ public async Task SetupWithReturn_ShouldIgnoreBaseValue()
+ {
+ IndexerMethodSetupTest sut = Mock.Create();
+ sut.SetupMock.Indexer(It.IsAny(), It.IsAny(), It.IsAny())
+ .Returns("bar");
+
+ string result = sut[1, 2, 3];
+
+ await That(result).IsEqualTo("bar");
+ }
+
[Fact]
public async Task Throws_Callback_ShouldThrowException()
{
@@ -1186,6 +1282,30 @@ public async Task Returns_WithoutSetup_ShouldReturnDefault()
await That(result).IsEmpty();
}
+ [Fact]
+ public async Task SetupWithoutReturn_ShouldUseBaseValue()
+ {
+ IndexerMethodSetupTest sut = Mock.Create();
+ sut.SetupMock.Indexer(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())
+ .OnGet.Do(() => { });
+
+ string result = sut[1, 2, 3, 4];
+
+ await That(result).IsEqualTo("foo-1-2-3-4");
+ }
+
+ [Fact]
+ public async Task SetupWithReturn_ShouldIgnoreBaseValue()
+ {
+ IndexerMethodSetupTest sut = Mock.Create();
+ sut.SetupMock.Indexer(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())
+ .Returns("bar");
+
+ string result = sut[1, 2, 3, 4];
+
+ await That(result).IsEqualTo("bar");
+ }
+
[Fact]
public async Task Throws_Callback_ShouldThrowException()
{
@@ -1525,6 +1645,32 @@ public async Task Returns_WithoutSetup_ShouldReturnDefault()
await That(result).IsEmpty();
}
+ [Fact]
+ public async Task SetupWithoutReturn_ShouldUseBaseValue()
+ {
+ IndexerMethodSetupTest sut = Mock.Create();
+ sut.SetupMock.Indexer(
+ It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())
+ .OnGet.Do(() => { });
+
+ string result = sut[1, 2, 3, 4, 5];
+
+ await That(result).IsEqualTo("foo-1-2-3-4-5");
+ }
+
+ [Fact]
+ public async Task SetupWithReturn_ShouldIgnoreBaseValue()
+ {
+ IndexerMethodSetupTest sut = Mock.Create();
+ sut.SetupMock.Indexer(
+ It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())
+ .Returns("bar");
+
+ string result = sut[1, 2, 3, 4, 5];
+
+ await That(result).IsEqualTo("bar");
+ }
+
[Fact]
public async Task Throws_Callback_ShouldThrowException()
{
@@ -1656,5 +1802,44 @@ void ActOnly()
await That(ActOnly).DoesNotThrow();
}
}
+
+ public class IndexerMethodSetupTest
+ {
+ private string? _data1;
+ private string? _data2;
+ private string? _data3;
+ private string? _data4;
+ private string? _data5;
+
+ public virtual string this[int index]
+ {
+ get => _data1 ?? $"foo-{index}";
+ set => _data1 = value;
+ }
+
+ public virtual string this[int index1, int index2]
+ {
+ get => _data2 ?? $"foo-{index1}-{index2}";
+ set => _data2 = value;
+ }
+
+ public virtual string this[int index1, int index2, int index3]
+ {
+ get => _data3 ?? $"foo-{index1}-{index2}-{index3}";
+ set => _data3 = value;
+ }
+
+ public virtual string this[int index1, int index2, int index3, int index4]
+ {
+ get => _data4 ?? $"foo-{index1}-{index2}-{index3}-{index4}";
+ set => _data4 = value;
+ }
+
+ public virtual string this[int index1, int index2, int index3, int index4, int index5]
+ {
+ get => _data5 ?? $"foo-{index1}-{index2}-{index3}-{index4}-{index5}";
+ set => _data5 = value;
+ }
+ }
}
}
diff --git a/Tests/Mockolate.Tests/MockIndexers/SetupIndexerTests.cs b/Tests/Mockolate.Tests/MockIndexers/SetupIndexerTests.cs
index f03b0c03..fb3c70c7 100644
--- a/Tests/Mockolate.Tests/MockIndexers/SetupIndexerTests.cs
+++ b/Tests/Mockolate.Tests/MockIndexers/SetupIndexerTests.cs
@@ -305,9 +305,6 @@ protected override bool IsMatch(NamedParameterValue[] parameters)
protected override bool? GetSkipBaseClass()
=> throw new NotSupportedException();
- protected override bool HasReturnCalls()
- => throw new NotSupportedException();
-
protected override void GetInitialValue(MockBehavior behavior, Func defaultValueGenerator,
NamedParameterValue[] parameters,
[NotNullWhen(true)] out T value)
diff --git a/Tests/Mockolate.Tests/MockProperties/SetupPropertyTests.ReturnsThrowsTests.cs b/Tests/Mockolate.Tests/MockProperties/SetupPropertyTests.ReturnsThrowsTests.cs
index 5412c289..6b6a64ac 100644
--- a/Tests/Mockolate.Tests/MockProperties/SetupPropertyTests.ReturnsThrowsTests.cs
+++ b/Tests/Mockolate.Tests/MockProperties/SetupPropertyTests.ReturnsThrowsTests.cs
@@ -125,6 +125,41 @@ public async Task Returns_Forever_ShouldUseTheLastValueForever()
await That(result).IsEqualTo([2, 3, 4, 4, 4, 4, 4, 4, 4, 4,]);
}
+ [Fact]
+ public async Task Returns_OnlyOnce_ShouldKeepLastUsedValue()
+ {
+ IPropertyService sut = Mock.Create();
+ sut.SetupMock.Property.MyProperty.Returns(1).OnlyOnce();
+
+ int[] values = new int[10];
+ for (int i = 0; i < 10; i++)
+ {
+ values[i] = sut.MyProperty;
+ if (i == 4)
+ {
+ sut.MyProperty = 10;
+ }
+ }
+
+ await That(values).IsEqualTo([1, 1, 1, 1, 1, 10, 10, 10, 10, 10,]);
+ }
+
+ [Fact]
+ public async Task Returns_OnlyOnce_ShouldUseReturnValueOnlyOnce()
+ {
+ IPropertyService sut = Mock.Create();
+ sut.SetupMock.Property.MyProperty.Returns(1).OnlyOnce();
+
+ int[] values = new int[10];
+ for (int i = 0; i < 10; i++)
+ {
+ sut.MyProperty = 0;
+ values[i] = sut.MyProperty;
+ }
+
+ await That(values).IsEqualTo([1, 0, 0, 0, 0, 0, 0, 0, 0, 0,]);
+ }
+
[Fact]
public async Task Returns_PredicateIsFalse_ShouldUseInitializedDefaultValue()
{
@@ -132,7 +167,7 @@ public async Task Returns_PredicateIsFalse_ShouldUseInitializedDefaultValue()
IPropertyService sut = Mock.Create();
sut.SetupMock.Property.MyProperty
- .Returns(() => 4).When(i => i > 3);
+ .Returns(() => 4).When(i => i is > 3 and < 6);
results.Add(sut.MyProperty);
results.Add(sut.MyProperty);
diff --git a/Tests/Mockolate.Tests/SetupExtensionsTests.cs b/Tests/Mockolate.Tests/SetupExtensionsTests.cs
index 036c09ba..1523fe2c 100644
--- a/Tests/Mockolate.Tests/SetupExtensionsTests.cs
+++ b/Tests/Mockolate.Tests/SetupExtensionsTests.cs
@@ -262,7 +262,7 @@ public async Task Forever_With5Parameters_When_ShouldKeepApplyingTheSetupWhenThe
}
[Fact]
- public async Task OnlyOnce_With1Parameter_ShouldApplySetupOnlyOnce()
+ public async Task OnlyOnce_With1Parameter_ShouldKeepLastUsedValue()
{
ISetupExtensionsTestService sut = Mock.Create();
sut.SetupMock.Indexer(It.IsAny()).Returns(1).OnlyOnce();
@@ -271,6 +271,26 @@ public async Task OnlyOnce_With1Parameter_ShouldApplySetupOnlyOnce()
for (int i = 0; i < 10; i++)
{
values[i] = sut[10];
+ if (i == 4)
+ {
+ sut[10] = 10;
+ }
+ }
+
+ await That(values).IsEqualTo([1, 1, 1, 1, 1, 10, 10, 10, 10, 10,]);
+ }
+
+ [Fact]
+ public async Task OnlyOnce_With1Parameter_ShouldUseReturnValueOnlyOnce()
+ {
+ ISetupExtensionsTestService sut = Mock.Create();
+ sut.SetupMock.Indexer(It.IsAny()).Returns(1).OnlyOnce();
+
+ int[] values = new int[10];
+ for (int i = 0; i < 10; i++)
+ {
+ sut[10] = 0;
+ values[i] = sut[10];
}
await That(values).IsEqualTo([1, 0, 0, 0, 0, 0, 0, 0, 0, 0,]);
@@ -285,6 +305,7 @@ public async Task OnlyOnce_With1Parameter_WithFor_ShouldApplySetupOnlyForTimes()
int[] values = new int[10];
for (int i = 0; i < 10; i++)
{
+ sut[10] = 0;
values[i] = sut[10];
}
@@ -292,7 +313,26 @@ public async Task OnlyOnce_With1Parameter_WithFor_ShouldApplySetupOnlyForTimes()
}
[Fact]
- public async Task OnlyOnce_With2Parameters_ShouldApplySetupOnlyOnce()
+ public async Task OnlyOnce_With2Parameters_ShouldKeepLastUsedValue()
+ {
+ ISetupExtensionsTestService sut = Mock.Create();
+ sut.SetupMock.Indexer(It.IsAny(), It.IsAny()).Returns(1).OnlyOnce();
+
+ int[] values = new int[10];
+ for (int i = 0; i < 10; i++)
+ {
+ values[i] = sut[10, 20];
+ if (i == 4)
+ {
+ sut[10, 20] = 10;
+ }
+ }
+
+ await That(values).IsEqualTo([1, 1, 1, 1, 1, 10, 10, 10, 10, 10,]);
+ }
+
+ [Fact]
+ public async Task OnlyOnce_With2Parameters_ShouldUseReturnValueOnlyOnce()
{
ISetupExtensionsTestService sut = Mock.Create();
sut.SetupMock.Indexer(It.IsAny(), It.IsAny()).Returns(1).OnlyOnce();
@@ -300,6 +340,7 @@ public async Task OnlyOnce_With2Parameters_ShouldApplySetupOnlyOnce()
int[] values = new int[10];
for (int i = 0; i < 10; i++)
{
+ sut[10, 20] = 0;
values[i] = sut[10, 20];
}
@@ -315,6 +356,7 @@ public async Task OnlyOnce_With2Parameters_WithFor_ShouldApplySetupOnlyForTimes(
int[] values = new int[10];
for (int i = 0; i < 10; i++)
{
+ sut[10, 20] = 0;
values[i] = sut[10, 20];
}
@@ -322,7 +364,26 @@ public async Task OnlyOnce_With2Parameters_WithFor_ShouldApplySetupOnlyForTimes(
}
[Fact]
- public async Task OnlyOnce_With3Parameters_ShouldApplySetupOnlyOnce()
+ public async Task OnlyOnce_With3Parameters_ShouldKeepLastUsedValue()
+ {
+ ISetupExtensionsTestService sut = Mock.Create();
+ sut.SetupMock.Indexer(It.IsAny(), It.IsAny(), It.IsAny()).Returns(1).OnlyOnce();
+
+ int[] values = new int[10];
+ for (int i = 0; i < 10; i++)
+ {
+ values[i] = sut[10, 20, 30];
+ if (i == 4)
+ {
+ sut[10, 20, 30] = 10;
+ }
+ }
+
+ await That(values).IsEqualTo([1, 1, 1, 1, 1, 10, 10, 10, 10, 10,]);
+ }
+
+ [Fact]
+ public async Task OnlyOnce_With3Parameters_ShouldUseReturnValueOnlyOnce()
{
ISetupExtensionsTestService sut = Mock.Create();
sut.SetupMock.Indexer(It.IsAny(), It.IsAny(), It.IsAny()).Returns(1).OnlyOnce();
@@ -330,6 +391,7 @@ public async Task OnlyOnce_With3Parameters_ShouldApplySetupOnlyOnce()
int[] values = new int[10];
for (int i = 0; i < 10; i++)
{
+ sut[10, 20, 30] = 0;
values[i] = sut[10, 20, 30];
}
@@ -345,6 +407,7 @@ public async Task OnlyOnce_With3Parameters_WithFor_ShouldApplySetupOnlyForTimes(
int[] values = new int[10];
for (int i = 0; i < 10; i++)
{
+ sut[10, 20, 30] = 0;
values[i] = sut[10, 20, 30];
}
@@ -352,15 +415,36 @@ public async Task OnlyOnce_With3Parameters_WithFor_ShouldApplySetupOnlyForTimes(
}
[Fact]
- public async Task OnlyOnce_With4Parameters_ShouldApplySetupOnlyOnce()
+ public async Task OnlyOnce_With4Parameters_ShouldKeepLastUsedValue()
{
ISetupExtensionsTestService sut = Mock.Create();
- sut.SetupMock.Indexer(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()).Returns(1)
- .OnlyOnce();
+ sut.SetupMock.Indexer(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())
+ .Returns(1).OnlyOnce();
+
+ int[] values = new int[10];
+ for (int i = 0; i < 10; i++)
+ {
+ values[i] = sut[10, 20, 30, 40];
+ if (i == 4)
+ {
+ sut[10, 20, 30, 40] = 10;
+ }
+ }
+
+ await That(values).IsEqualTo([1, 1, 1, 1, 1, 10, 10, 10, 10, 10,]);
+ }
+
+ [Fact]
+ public async Task OnlyOnce_With4Parameters_ShouldUseReturnValueOnlyOnce()
+ {
+ ISetupExtensionsTestService sut = Mock.Create();
+ sut.SetupMock.Indexer(It.IsAny