diff --git a/Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.Tests/ImplicitUsings.cs b/Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.Tests/ImplicitUsings.cs index 40a010c6..53091fdb 100644 --- a/Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.Tests/ImplicitUsings.cs +++ b/Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.Tests/ImplicitUsings.cs @@ -3,7 +3,7 @@ global using ApprovalTests.Reporters; global using Castle.DynamicProxy.Generators.Emitters; global using FluentAssertions; -global using Moq; +global using NSubstitute; global using ReqnrollConnector; global using ReqnrollConnector.Discovery; global using ReqnrollConnector.Logging; diff --git a/Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.Tests/Reqnroll.VisualStudio.ReqnrollConnector.Tests.csproj b/Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.Tests/Reqnroll.VisualStudio.ReqnrollConnector.Tests.csproj index 1e09c057..e4a18cc7 100644 --- a/Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.Tests/Reqnroll.VisualStudio.ReqnrollConnector.Tests.csproj +++ b/Tests/Connector/Reqnroll.VisualStudio.ReqnrollConnector.Tests/Reqnroll.VisualStudio.ReqnrollConnector.Tests.csproj @@ -15,7 +15,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Tests/Reqnroll.VisualStudio.Specs/ImplicitUsings.cs b/Tests/Reqnroll.VisualStudio.Specs/ImplicitUsings.cs index 79bd68ef..f87e0425 100644 --- a/Tests/Reqnroll.VisualStudio.Specs/ImplicitUsings.cs +++ b/Tests/Reqnroll.VisualStudio.Specs/ImplicitUsings.cs @@ -6,7 +6,7 @@ global using Microsoft.VisualStudio.Text.Editor; global using Microsoft.VisualStudio.Text.Tagging; global using Microsoft.VisualStudio.Threading; -global using Moq; +global using NSubstitute; global using Reqnroll.SampleProjectGenerator; global using Reqnroll.VisualStudio.Common; global using Reqnroll.VisualStudio.Configuration; diff --git a/Tests/Reqnroll.VisualStudio.Specs/Reqnroll.VisualStudio.Specs.csproj b/Tests/Reqnroll.VisualStudio.Specs/Reqnroll.VisualStudio.Specs.csproj index 83c94561..75f1af88 100644 --- a/Tests/Reqnroll.VisualStudio.Specs/Reqnroll.VisualStudio.Specs.csproj +++ b/Tests/Reqnroll.VisualStudio.Specs/Reqnroll.VisualStudio.Specs.csproj @@ -9,7 +9,7 @@ - + diff --git a/Tests/Reqnroll.VisualStudio.Specs/StepDefinitions/DeveroomSteps.cs b/Tests/Reqnroll.VisualStudio.Specs/StepDefinitions/DeveroomSteps.cs index e275c27b..78bb18fe 100644 --- a/Tests/Reqnroll.VisualStudio.Specs/StepDefinitions/DeveroomSteps.cs +++ b/Tests/Reqnroll.VisualStudio.Specs/StepDefinitions/DeveroomSteps.cs @@ -15,11 +15,8 @@ public DeveroomSteps(ITestOutputHelper outputHelper, StubIdeScope stubIdeScope) { _outputHelper = outputHelper; _stubIdeScope = stubIdeScope; - - _stubIdeScope.Setup(s => - s.FireAndForgetOnBackgroundThread(It.IsAny>(), It.IsAny())) - .Callback(FireAndForgetCallBack); - + _stubIdeScope.SetupFireAndForgetOnBackgroundThread(FireAndForgetCallBack); + async void FireAndForgetCallBack(Func action, string _) { try diff --git a/Tests/Reqnroll.VisualStudio.Specs/StepDefinitions/ProjectSystemSteps.cs b/Tests/Reqnroll.VisualStudio.Specs/StepDefinitions/ProjectSystemSteps.cs index da02879f..b6dd9d44 100644 --- a/Tests/Reqnroll.VisualStudio.Specs/StepDefinitions/ProjectSystemSteps.cs +++ b/Tests/Reqnroll.VisualStudio.Specs/StepDefinitions/ProjectSystemSteps.cs @@ -1,7 +1,4 @@ #nullable disable -using Microsoft.Build.Framework.XamlTypes; -using ScenarioBlock = Reqnroll.VisualStudio.Editor.Services.Parser.ScenarioBlock; - namespace Reqnroll.VisualStudio.Specs.StepDefinitions; [Binding] @@ -21,10 +18,7 @@ public class ProjectSystemSteps : Steps public ProjectSystemSteps(StubIdeScope stubIdeScope) { _ideScope = stubIdeScope; - _ideScope.Setup(s => - s.FireAndForgetOnBackgroundThread(It.IsAny>(), It.IsAny())) - .Callback((Func action, string _) => - action(_ideScope.BackgroundTaskTokenSource.Token)); + _ideScope.SetupFireAndForgetOnBackgroundThread((action, callerName) => action(_ideScope.BackgroundTaskTokenSource.Token)); } private StubIdeActions ActionsMock => (StubIdeActions) _ideScope.Actions; diff --git a/Tests/Reqnroll.VisualStudio.Tests/Analytics/AnalyticsTransmitterTests.cs b/Tests/Reqnroll.VisualStudio.Tests/Analytics/AnalyticsTransmitterTests.cs index 98a8ae16..69e8110a 100644 --- a/Tests/Reqnroll.VisualStudio.Tests/Analytics/AnalyticsTransmitterTests.cs +++ b/Tests/Reqnroll.VisualStudio.Tests/Analytics/AnalyticsTransmitterTests.cs @@ -6,8 +6,8 @@ namespace Reqnroll.VisualStudio.Tests.Analytics; public class AnalyticsTransmitterTests { - private Mock analyticsTransmitterSinkStub; - private Mock enableAnalyticsCheckerStub; + private IAnalyticsTransmitterSink analyticsTransmitterSinkStub; + private IEnableAnalyticsChecker enableAnalyticsCheckerStub; [Fact] public void Should_NotSendAnalytics_WhenDisabled() @@ -15,10 +15,10 @@ public void Should_NotSendAnalytics_WhenDisabled() var sut = CreateSut(); GivenAnalyticsDisabled(); - sut.TransmitEvent(It.IsAny()); + sut.TransmitEvent(Substitute.For()); - enableAnalyticsCheckerStub.Verify(analyticsChecker => analyticsChecker.IsEnabled(), Times.Once); - analyticsTransmitterSinkStub.Verify(sink => sink.TransmitEvent(It.IsAny()), Times.Never); + enableAnalyticsCheckerStub.Received(1).IsEnabled(); + analyticsTransmitterSinkStub.DidNotReceive().TransmitEvent(Arg.Any()); } [Fact] @@ -27,10 +27,10 @@ public void Should_SendAnalytics_WhenEnabled() var sut = CreateSut(); GivenAnalyticsEnabled(); - sut.TransmitEvent(It.IsAny()); + sut.TransmitEvent(Substitute.For()); - enableAnalyticsCheckerStub.Verify(analyticsChecker => analyticsChecker.IsEnabled(), Times.Once); - analyticsTransmitterSinkStub.Verify(sink => sink.TransmitEvent(It.IsAny()), Times.Once); + enableAnalyticsCheckerStub.Received(1).IsEnabled(); + analyticsTransmitterSinkStub.Received(1).TransmitEvent(Arg.Any()); } [Theory] @@ -44,24 +44,23 @@ public void Should_TransmitEvents(string eventName) sut.TransmitEvent(new GenericEvent(eventName)); - analyticsTransmitterSinkStub.Verify( - sink => sink.TransmitEvent(It.Is(ae => ae.EventName == eventName)), Times.Once); + analyticsTransmitterSinkStub.Received(1).TransmitEvent(Arg.Is(ae => ae.EventName == eventName)); } private void GivenAnalyticsEnabled() { - enableAnalyticsCheckerStub.Setup(analyticsChecker => analyticsChecker.IsEnabled()).Returns(true); + enableAnalyticsCheckerStub.IsEnabled().Returns(true); } private void GivenAnalyticsDisabled() { - enableAnalyticsCheckerStub.Setup(analyticsChecker => analyticsChecker.IsEnabled()).Returns(false); + enableAnalyticsCheckerStub.IsEnabled().Returns(false); } public AnalyticsTransmitter CreateSut() { - analyticsTransmitterSinkStub = new Mock(); - enableAnalyticsCheckerStub = new Mock(); - return new AnalyticsTransmitter(analyticsTransmitterSinkStub.Object, enableAnalyticsCheckerStub.Object); + analyticsTransmitterSinkStub = Substitute.For(); + enableAnalyticsCheckerStub = Substitute.For(); + return new AnalyticsTransmitter(analyticsTransmitterSinkStub, enableAnalyticsCheckerStub); } } diff --git a/Tests/Reqnroll.VisualStudio.Tests/Analytics/FileUserIdStoreTests.cs b/Tests/Reqnroll.VisualStudio.Tests/Analytics/FileUserIdStoreTests.cs index 10dfe1b9..65cbcaca 100644 --- a/Tests/Reqnroll.VisualStudio.Tests/Analytics/FileUserIdStoreTests.cs +++ b/Tests/Reqnroll.VisualStudio.Tests/Analytics/FileUserIdStoreTests.cs @@ -4,7 +4,7 @@ namespace Reqnroll.VisualStudio.Tests.Analytics; public class FileUserIdStoreTests { private const string UserId = "491ed5c0-9f25-4c27-941a-19b17cc81c87"; - private Mock fileSystemStub; + private IFileSystemForVs fileSystemStub; [Fact] public void Should_GetUserIdFromFile_WhenFileExists() @@ -29,30 +29,29 @@ public void Should_PersistNewlyGeneratedUserId_WhenNoUserIdExists() string userId = sut.GetUserId(); userId.Should().NotBeEmpty(); - fileSystemStub.Verify(fileSystem => fileSystem.File.WriteAllText(FileUserIdStore.UserIdFilePath, userId), - Times.Once()); + fileSystemStub.File.Received(1).WriteAllText(FileUserIdStore.UserIdFilePath, userId); } public FileUserIdStore CreateSut() { - fileSystemStub = new Mock(); - return new FileUserIdStore(fileSystemStub.Object); + fileSystemStub = Substitute.For(); + return new FileUserIdStore(fileSystemStub); } private void GivenFileExists() { - fileSystemStub.Setup(fileSystem => fileSystem.File.Exists(It.IsAny())).Returns(true); + fileSystemStub.File.Exists(Arg.Any()).Returns(true); } private void GivenFileDoesNotExists() { - fileSystemStub.Setup(fileSystem => fileSystem.File.Exists(It.IsAny())).Returns(false); - fileSystemStub.Setup(fileSystem => fileSystem.Directory.Exists(It.IsAny())).Returns(true); + fileSystemStub.File.Exists(Arg.Any()).Returns(false); + fileSystemStub.Directory.Exists(Arg.Any()).Returns(true); } private void GivenUserIdStringInFile(string userIdString) { - fileSystemStub.Setup(fileSystem => fileSystem.File.ReadAllText(It.IsAny())).Returns(userIdString); + fileSystemStub.File.ReadAllText(Arg.Any()).Returns(userIdString); } } diff --git a/Tests/Reqnroll.VisualStudio.Tests/Discovery/DiscoveryTests.cs b/Tests/Reqnroll.VisualStudio.Tests/Discovery/DiscoveryTests.cs index afa388f9..c8d3ed7c 100644 --- a/Tests/Reqnroll.VisualStudio.Tests/Discovery/DiscoveryTests.cs +++ b/Tests/Reqnroll.VisualStudio.Tests/Discovery/DiscoveryTests.cs @@ -21,20 +21,16 @@ public DiscoveryTests(ITestOutputHelper testOutputHelper) private Sut ArrangeSut() { - var bindingRegistryCache = new StubProjectBindingRegistryCache(); + var bindingRegistryCache = Substitute.ForPartsOf(); var projectScope = new InMemoryStubProjectScope(_testOutputHelper); var discoveryResultProvider = new StubDiscoveryResultProvider(); #pragma warning disable VSTHRD002 - projectScope.StubIdeScope - .Setup( - s => s.FireAndForgetOnBackgroundThread(It.IsAny>(), It.IsAny())) - .Callback((Func action, string _) - => action(projectScope.StubIdeScope.BackgroundTaskTokenSource.Token).Wait()); + projectScope.StubIdeScope.SetupFireAndForgetOnBackgroundThread((action, callerName) => action(projectScope.StubIdeScope.BackgroundTaskTokenSource.Token).Wait()); #pragma warning restore VSTHRD002 InMemoryStubProjectBuilder.CreateOutputAssembly(projectScope); - return new Sut(bindingRegistryCache, projectScope, discoveryResultProvider); + return Substitute.For(bindingRegistryCache, projectScope, discoveryResultProvider); } [Fact] @@ -48,8 +44,7 @@ public void TriggerDiscoveryUpdatesTheCache() discoveryService.TriggerDiscovery(); //assert - sut.BindingRegistryCache.Verify(c => - c.Update(It.IsAny>>())); + sut.BindingRegistryCache.Received().Update(Arg.Any>>()); sut.BindingRegistryCache.Value.Version.Should().NotBe(1); } @@ -65,8 +60,7 @@ public void TriggersCacheUpdateOnEvents(LabeledTestData> triggerEven triggerEvent.Data(sut); //assert - sut.BindingRegistryCache.Verify(c => - c.Update(It.IsAny>>())); + sut.BindingRegistryCache.Received().Update(Arg.Any>>()); sut.BindingRegistryCache.Value.Version.Should().NotBe(1); } @@ -84,9 +78,7 @@ public void DoNotTriggersCacheUpdateOnEventsForTheSameProject(LabeledTestData - c.Update(It.IsAny>>()), Times.Once, - "the cache update have to be called only once when the project haven't changed"); + sut.BindingRegistryCache.Received(1).Update(Arg.Any>>()); // the cache update have to be called only once when the project haven't changed sut.BindingRegistryCache.Value.Should().BeSameAs(bindingRegistry, "the cache must not be modified"); sut.ProjectScope.StubIdeScope.StubLogger.Messages.Where(m => m == "Projects built or settings initialized") .Should().HaveCount(2, "the event is fired twice"); diff --git a/Tests/Reqnroll.VisualStudio.Tests/Discovery/ProjectBindingRegistryCacheTests.cs b/Tests/Reqnroll.VisualStudio.Tests/Discovery/ProjectBindingRegistryCacheTests.cs index 2ac66c92..70721f44 100644 --- a/Tests/Reqnroll.VisualStudio.Tests/Discovery/ProjectBindingRegistryCacheTests.cs +++ b/Tests/Reqnroll.VisualStudio.Tests/Discovery/ProjectBindingRegistryCacheTests.cs @@ -72,16 +72,16 @@ public void ParallelUpdate() { //arrange var start = DateTimeOffset.UtcNow; - var ideScope = new Mock(MockBehavior.Strict); + var ideScope = Substitute.For(); var stubLogger = new StubLogger(); var logger = new DeveroomCompositeLogger(); logger.Add(new DeveroomXUnitLogger(_testOutputHelper)); logger.Add(stubLogger); - ideScope.SetupGet(s => s.Logger).Returns(logger); - ideScope.Setup(s => s.CalculateSourceLocationTrackingPositions(It.IsAny>())); + ideScope.Logger.Returns(logger); + ideScope.CalculateSourceLocationTrackingPositions(Arg.Any>()); - var projectBindingRegistryCache = new ProjectBindingRegistryCache(ideScope.Object); + var projectBindingRegistryCache = new ProjectBindingRegistryCache(ideScope); var oldVersions = new ConcurrentQueue(); var initialRegistry = new ProjectBindingRegistry(Array.Empty(), Array.Empty(), 123456); diff --git a/Tests/Reqnroll.VisualStudio.Tests/Editor/Commands/CommentUncommentCommandTests.cs b/Tests/Reqnroll.VisualStudio.Tests/Editor/Commands/CommentUncommentCommandTests.cs index 93706bd5..2a6f2151 100644 --- a/Tests/Reqnroll.VisualStudio.Tests/Editor/Commands/CommentUncommentCommandTests.cs +++ b/Tests/Reqnroll.VisualStudio.Tests/Editor/Commands/CommentUncommentCommandTests.cs @@ -7,7 +7,7 @@ public class CommentUncommentCommandTests public CommentUncommentCommandTests(ITestOutputHelper testOutputHelper) { - _taggerProvider = new Mock().Object; + _taggerProvider = Substitute.For(); _ideScope = new StubIdeScope(testOutputHelper); } diff --git a/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/DeveroomGherkinParserTests.cs b/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/DeveroomGherkinParserTests.cs index 7f11707f..d3ccc3a9 100644 --- a/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/DeveroomGherkinParserTests.cs +++ b/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/DeveroomGherkinParserTests.cs @@ -9,7 +9,7 @@ public class DeveroomGherkinParserTests public void Should_provide_parse_result_when_unexpected_end_of_file() { var sut = new DeveroomGherkinParser(new ReqnrollGherkinDialectProvider("en-US"), - new Mock().Object); + Substitute.For()); var result = sut.ParseAndCollectErrors(@" Feature: Addition @@ -24,7 +24,7 @@ public void Should_provide_parse_result_when_unexpected_end_of_file() public void Should_tolerate_backslash_at_end_of_line_in_DataTable() { var sut = new DeveroomGherkinParser(new ReqnrollGherkinDialectProvider("en-US"), - new Mock().Object); + Substitute.For()); var result = sut.ParseAndCollectErrors(@" Feature: Addition @@ -42,7 +42,7 @@ When I press public void Should_tolerate_unfinished_DataTable() { var sut = new DeveroomGherkinParser(new ReqnrollGherkinDialectProvider("en-US"), - new Mock().Object); + Substitute.For()); var result = sut.ParseAndCollectErrors(@" Feature: Addition @@ -60,7 +60,7 @@ When I press public void Should_provide_parse_result_when_file_ends_with_open_docstring() { var sut = new DeveroomGherkinParser(new ReqnrollGherkinDialectProvider("en-US"), - new Mock().Object); + Substitute.For()); var result = sut.ParseAndCollectErrors(@" Feature: Addition diff --git a/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/FeatureFileTaggerTests.cs b/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/FeatureFileTaggerTests.cs index c5f6a500..ebb82dea 100644 --- a/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/FeatureFileTaggerTests.cs +++ b/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/FeatureFileTaggerTests.cs @@ -15,8 +15,8 @@ public void Parse_triggered_in_background_after_instantiation() //arrange using var sut = TaggerSut.Arrange(_testOutputHelper); var parserInvoked = false; - sut.TagParser.Setup(s => s.Parse(It.IsAny())) - .Returns(() => + sut.TagParser.Parse(Arg.Any()) + .Returns(_ => { parserInvoked = true; return ImmutableArray.Empty; @@ -40,11 +40,12 @@ public void GetTags_returns_with_the_parsed_values() IReadOnlyCollection parseResult = ImmutableArray.Empty; sut.TagParser - .Setup(s => s.Parse(It.IsAny())) - .Returns(snapShot => + .Parse(Arg.Any()) + .Returns(callInfo => { + var snapshot = callInfo.Arg(); return parseResult = Enumerable - .Repeat(() => new DeveroomTag(string.Empty, new SnapshotSpan(snapShot, 0, 0)), 10) + .Repeat(() => new DeveroomTag(string.Empty, new SnapshotSpan(snapshot, 0, 0)), 10) .Select(d => d()) .ToImmutableArray(); }); @@ -94,13 +95,13 @@ public void Parsed_once_only_when_TextBuffer_ChangedOnBackground_fired_multiple_ using var sut = TaggerSut.Arrange(_testOutputHelper); sut.BuildInitializedFeatureFileTagger(); - sut.TagParser.Verify(s => s.Parse(It.IsAny()), Times.Once); + sut.TagParser.Received(1).Parse(Arg.Any()); //act sut.StubTextBuffer.InvokeChangedOnBackground(); //assert - sut.TagParser.Verify(s => s.Parse(It.IsAny()), Times.Exactly(2)); + sut.TagParser.Received(2).Parse(Arg.Any()); } [Fact] @@ -112,12 +113,13 @@ public void GetTags_does_not_trigger_parse() IReadOnlyCollection parseResult = ImmutableArray.Create(VoidDeveroomTag.Instance); sut.TagParser - .Setup(s => s.Parse(It.IsAny())) - .Returns(snapShot => + .Parse(Arg.Any()) + .Returns(callInfo => { + var snapshot = callInfo.Arg(); parseResult.Should().HaveCount(1, "the initial parse is called only"); return parseResult = Enumerable - .Repeat(() => new DeveroomTag(string.Empty, new SnapshotSpan(snapShot, 0, 0)), 10) + .Repeat(() => new DeveroomTag(string.Empty, new SnapshotSpan(snapshot, 0, 0)), 10) .Select(d => d()) .ToImmutableArray(); }); @@ -157,13 +159,14 @@ DeveroomTag TagFactory(int i, ITextSnapshot snapshot) } sut.TagParser - .Setup(s => s.Parse(It.IsAny())) - .Returns(snapshot => + .Parse(Arg.Any()) + .Returns(callInfo => { + var snapshot = callInfo.Arg(); parseResult.Should().BeEmpty("the initial parse is called only"); return parseResult = Enumerable.Range(0, 10) - .Select(i => TagFactory(i, snapshot)) - .ToImmutableArray(); + .Select(i => TagFactory(i, snapshot)) + .ToImmutableArray(); }); var tagger = sut.BuildInitializedFeatureFileTagger(); @@ -183,13 +186,13 @@ public void Reparse_when_binding_registry_is_changed() { //arrange using var sut = TaggerSut.Arrange(_testOutputHelper); - var discoveryService = new Mock(MockBehavior.Strict); - sut.ProjectScope.Properties.AddProperty(typeof(IDiscoveryService), discoveryService.Object); + var discoveryService = Substitute.For(); + sut.ProjectScope.Properties.AddProperty(typeof(IDiscoveryService), discoveryService); sut.BuildInitializedFeatureFileTagger(); sut.WaitForTagsChangedEvent(); //act - discoveryService.Raise(ds => ds.WeakBindingRegistryChanged -= null!, EventArgs.Empty); + discoveryService.WeakBindingRegistryChanged -= Raise.Event>(EventArgs.Empty); //assert sut.WaitForTagsChangedEvent().Should().HaveCount(2); @@ -223,25 +226,26 @@ public void Deregister_events_when_TextBuffer_is_not_a_feature_file() { //arrange using var sut = TaggerSut.Arrange(_testOutputHelper); - var configurationProvider = new Mock(MockBehavior.Strict); + var configurationProvider = Substitute.For(); sut.ProjectScope.Properties.RemoveProperty(typeof(IDeveroomConfigurationProvider)); - sut.ProjectScope.Properties.AddProperty(typeof(IDeveroomConfigurationProvider), configurationProvider.Object); - var discoveryService = new Mock(MockBehavior.Strict); - sut.ProjectScope.Properties.AddProperty(typeof(IDiscoveryService), discoveryService.Object); + sut.ProjectScope.Properties.AddProperty(typeof(IDeveroomConfigurationProvider), configurationProvider); + + var discoveryService = Substitute.For(); + sut.ProjectScope.Properties.AddProperty(typeof(IDiscoveryService), discoveryService); sut.BuildFeatureFileTagger(); //act - sut.StubTextBuffer.StubContentType = sut.StubTextBuffer.StubContentType with {TypeName = "inert"}; - discoveryService.Raise(ds => ds.WeakBindingRegistryChanged -= null!, EventArgs.Empty); + sut.StubTextBuffer.StubContentType = sut.StubTextBuffer.StubContentType with { TypeName = "inert" }; + discoveryService.WeakBindingRegistryChanged -= Raise.Event>(EventArgs.Empty); //assert sut.StubTextBuffer.Properties.TryGetProperty>(typeof(ITagger), out var _) - .Should() - .BeFalse(); - discoveryService.VerifyRemove(m => m.WeakBindingRegistryChanged -= It.IsAny>()); - configurationProvider.VerifyRemove(m => m.WeakConfigurationChanged -= It.IsAny>()); - sut.StubTextBuffer.VerifyRemove( - tb => tb.ChangedOnBackground -= It.IsAny>()); + .Should() + .BeFalse(); + + discoveryService.Received().WeakBindingRegistryChanged -= Arg.Any>(); + configurationProvider.Received().WeakConfigurationChanged -= Arg.Any>(); + sut.StubTextBuffer.Received().ChangedOnBackground -= Arg.Any>(); } [Fact] diff --git a/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/GherkinDocumentFormatterTests.cs b/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/GherkinDocumentFormatterTests.cs index 2754daba..32c29070 100644 --- a/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/GherkinDocumentFormatterTests.cs +++ b/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/GherkinDocumentFormatterTests.cs @@ -9,13 +9,13 @@ public class GherkinDocumentFormatterTests private DeveroomGherkinDocument ParseGherkinDocument(TestText inputText) { var parser = new DeveroomGherkinParser(new ReqnrollGherkinDialectProvider("en-US"), - new Mock().Object); + Substitute.For()); parser.ParseAndCollectErrors(inputText.ToString(), new DeveroomNullLogger(), out var gherkinDocument, out _); return gherkinDocument; } private DocumentLinesEditBuffer GetLinesBuffer(TestText inputText) => - new(new Mock().Object, 0, inputText.Lines.Length - 1, + new(Substitute.For(), 0, inputText.Lines.Length - 1, inputText.Lines); [Fact] diff --git a/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/TaggerSut.cs b/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/TaggerSut.cs index e94f3602..8183beb9 100644 --- a/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/TaggerSut.cs +++ b/Tests/Reqnroll.VisualStudio.Tests/Editor/Services/TaggerSut.cs @@ -1,7 +1,7 @@ namespace Reqnroll.VisualStudio.Tests.Editor.Services; public record TaggerSut - (IProjectScope ProjectScope, StubIdeScope IdeScope, Mock TagParser) : IDisposable + (IProjectScope ProjectScope, StubIdeScope IdeScope, IDeveroomTagParser TagParser) : IDisposable { private readonly ManualResetEvent _tagsChanged = new(false); private readonly List _tagsChangedEvents = new(); @@ -27,16 +27,16 @@ public void Dispose() public static TaggerSut Arrange(ITestOutputHelper testOutputHelper) { var projectScope = new InMemoryStubProjectScope(testOutputHelper); - var tagParser = new Mock(MockBehavior.Strict); + var tagParser = Substitute.For(); var deveroomTags = ImmutableArray.Empty; tagParser - .Setup(s => s.Parse(It.IsAny())) - .Callback(fileSnapshot => { projectScope.IdeScope.Logger.Trace($"Parsing {fileSnapshot}"); }) - .Returns(deveroomTags); + .Parse(Arg.Any()) + .Returns(deveroomTags) + .AndDoes(callInfo => { projectScope.IdeScope.Logger.Trace($"Parsing {callInfo.Arg()}"); }); projectScope.StubIdeScope.TextViewFactory = - (inputText, filePath) => new StubWpfTextView(new StubTextBuffer(projectScope)); + (inputText, filePath) => new StubWpfTextView(Substitute.ForPartsOf(projectScope)); var sut = new TaggerSut(projectScope, projectScope.StubIdeScope, tagParser); @@ -54,7 +54,7 @@ public ITagger BuildInitializedFeatureFileTagger() public ITagger BuildFeatureFileTagger() { - ProjectScope.Properties.AddProperty(typeof(IDeveroomTagParser), TagParser.Object); + ProjectScope.Properties.AddProperty(typeof(IDeveroomTagParser), TagParser); var taggerProvider = new DeveroomTaggerProvider(IdeScope, new SpecFlowExtensionDetection.SpecFlowExtensionDetectionService(IdeScope)); var tagger = BuildTagger(taggerProvider); @@ -69,7 +69,7 @@ private T BuildTagger(DeveroomTaggerProvider taggerProvider) where T : ITagge IdeScope.CreateTextView(new TestText(Array.Empty()), IdeScope.ProjectScopes.Select(p => p.ProjectFullName).DefaultIfEmpty(string.Empty).Single()); - var tagger = (T) taggerProvider.CreateTagger(IdeScope.CurrentTextView.TextBuffer); + var tagger = (T)taggerProvider.CreateTagger(IdeScope.CurrentTextView.TextBuffer); return tagger; } @@ -109,19 +109,17 @@ public TaggerSut WithRealDeveroomTagParser() var discoveryService = ProjectScope.GetDiscoveryService(); var realParser = new DeveroomTagParser(IdeScope.Logger, IdeScope.MonitoringService, deveroomConfigurationProvider, discoveryService); - var tagParserMock = new Mock(MockBehavior.Strict); - tagParserMock.Setup(s => s.Parse( - It.IsAny())) - .Returns((ITextSnapshot fileSnapshot) - => realParser.Parse(fileSnapshot)); + var tagParserMock = Substitute.For(); + tagParserMock.Parse(Arg.Any()) + .Returns(callInfo => realParser.Parse(callInfo.Arg())); - return this with {TagParser = tagParserMock}; + return this with { TagParser = tagParserMock }; } public TaggerSut WithoutProject() { var voidProjectScope = new VoidProjectScope(IdeScope); - var withoutProject = this with {ProjectScope = voidProjectScope}; + var withoutProject = this with { ProjectScope = voidProjectScope }; IdeScope.ProjectScopes.Clear(); IdeScope.TextViewFactory = (inputText, filePath) => new StubWpfTextView(new StubTextBuffer(voidProjectScope)); diff --git a/Tests/Reqnroll.VisualStudio.Tests/ImplicitUsings.cs b/Tests/Reqnroll.VisualStudio.Tests/ImplicitUsings.cs index 41f2c6b0..c13241be 100644 --- a/Tests/Reqnroll.VisualStudio.Tests/ImplicitUsings.cs +++ b/Tests/Reqnroll.VisualStudio.Tests/ImplicitUsings.cs @@ -10,7 +10,7 @@ global using Microsoft.VisualStudio.Text.Tagging; global using Microsoft.VisualStudio.TextManager.Interop; global using Microsoft.VisualStudio.Utilities; -global using Moq; +global using NSubstitute; global using Reqnroll.VisualStudio.Analytics; global using Reqnroll.VisualStudio.Common; global using Reqnroll.VisualStudio.Configuration; diff --git a/Tests/Reqnroll.VisualStudio.Tests/Reqnroll.VisualStudio.Tests.csproj b/Tests/Reqnroll.VisualStudio.Tests/Reqnroll.VisualStudio.Tests.csproj index 6d3efd51..69f8a1b0 100644 --- a/Tests/Reqnroll.VisualStudio.Tests/Reqnroll.VisualStudio.Tests.csproj +++ b/Tests/Reqnroll.VisualStudio.Tests/Reqnroll.VisualStudio.Tests.csproj @@ -12,7 +12,7 @@ - + diff --git a/Tests/Reqnroll.VisualStudio.VsxStubs/ImplicitUsings.cs b/Tests/Reqnroll.VisualStudio.VsxStubs/ImplicitUsings.cs index febd9c68..f95b2e1f 100644 --- a/Tests/Reqnroll.VisualStudio.VsxStubs/ImplicitUsings.cs +++ b/Tests/Reqnroll.VisualStudio.VsxStubs/ImplicitUsings.cs @@ -9,7 +9,7 @@ global using Microsoft.VisualStudio.TextManager.Interop; global using Microsoft.VisualStudio.Threading; global using Microsoft.VisualStudio.Utilities; -global using Moq; +global using NSubstitute; global using Reqnroll.VisualStudio.Analytics; global using Reqnroll.VisualStudio.Annotations; global using Reqnroll.VisualStudio.Common; diff --git a/Tests/Reqnroll.VisualStudio.VsxStubs/ProjectSystem/InMemoryStubProjectScope.cs b/Tests/Reqnroll.VisualStudio.VsxStubs/ProjectSystem/InMemoryStubProjectScope.cs index 7e3baf8d..295d86df 100644 --- a/Tests/Reqnroll.VisualStudio.VsxStubs/ProjectSystem/InMemoryStubProjectScope.cs +++ b/Tests/Reqnroll.VisualStudio.VsxStubs/ProjectSystem/InMemoryStubProjectScope.cs @@ -1,6 +1,6 @@ namespace Reqnroll.VisualStudio.VsxStubs.ProjectSystem; -public class InMemoryStubProjectScope : Mock, IProjectScope +public class InMemoryStubProjectScope : IProjectScope { public List PackageReferencesList = new(); @@ -82,4 +82,4 @@ public InMemoryStubProjectScope UpdateConfigFile(string configFileName, string c IdeScope.FileSystem.File.SetLastWriteTimeUtc(configFileFullPath, DateTime.UtcNow); return this; } -} +} \ No newline at end of file diff --git a/Tests/Reqnroll.VisualStudio.VsxStubs/ProjectSystem/StubIdeScope.cs b/Tests/Reqnroll.VisualStudio.VsxStubs/ProjectSystem/StubIdeScope.cs index 44ad0e99..37d113c4 100644 --- a/Tests/Reqnroll.VisualStudio.VsxStubs/ProjectSystem/StubIdeScope.cs +++ b/Tests/Reqnroll.VisualStudio.VsxStubs/ProjectSystem/StubIdeScope.cs @@ -1,15 +1,19 @@ namespace Reqnroll.VisualStudio.VsxStubs.ProjectSystem; -public class StubIdeScope : Mock, IIdeScope, IDisposable +public class StubIdeScope : IIdeScope, IDisposable { - public StubIdeScope(ITestOutputHelper testOutputHelper) : base(MockBehavior.Strict) + private readonly IIdeScope _substitute; + + public StubIdeScope(ITestOutputHelper testOutputHelper) { + _substitute = Substitute.For(); + AnalyticsTransmitter = new StubAnalyticsTransmitter(Logger); MonitoringService = new MonitoringService( AnalyticsTransmitter, - new Mock().Object, - new Mock().Object); + Substitute.For(), + Substitute.For()); CompositeLogger.Add(new DeveroomXUnitLogger(testOutputHelper)); CompositeLogger.Add(StubLogger); @@ -17,9 +21,9 @@ public StubIdeScope(ITestOutputHelper testOutputHelper) : base(MockBehavior.Stri VsxStubObjects.Initialize(); SetupFireAndForget(); - SetupFireAndForgetOnBackgroundThread(); + SetupFireAndForgetOnBackgroundThread((action, callerName) => BackGroundTasks = BackGroundTasks.Add($"{Interlocked.Increment(ref _taskId)}:{callerName}", action)); - CurrentTextView = new Mock(MockBehavior.Strict).Object; + CurrentTextView = Substitute.For(); TextViewFactory = (inputText, filePath) => BasicTextViewFactory(inputText, filePath, VsContentTypes.FeatureFile); BackgroundTaskTokenSource = new DebuggableCancellationTokenSource(TimeSpan.FromSeconds(20)); @@ -64,7 +68,7 @@ public IProjectScope GetProject(ITextBuffer textBuffer) => public IFileSystemForVs FileSystem { get; private set; } = new MockFileSystemForVs(); public IDeveroomOutputPaneServices DeveroomOutputPaneServices { get; } = - new Mock().Object; + Substitute.For(); public IDeveroomErrorListServices DeveroomErrorListServices => StubErrorListServices; public IMonitoringService MonitoringService { get; } @@ -84,7 +88,7 @@ public bool GetTextBuffer(SourceLocation sourceLocation, out ITextBuffer textBuf return true; } - textBuffer = new Mock(MockBehavior.Strict).Object; + textBuffer = Substitute.For(); return false; } @@ -96,19 +100,18 @@ public SyntaxTree GetSyntaxTree(ITextBuffer textBuffer) public void FireAndForget(Func action, Action onException, [CallerMemberName] string callerName = "???") - => Object.FireAndForget(action, onException, callerName); + => _substitute.FireAndForget(action, onException, callerName); private void SetupFireAndForget() { - Setup(s => s.FireAndForget(It.IsAny>(), It.IsAny>(), - It.IsAny())) - .Callback((Func action, Action onException, string _) => + _substitute.When(s => s.FireAndForget(Arg.Any>(), Arg.Any>(), Arg.Any())) + .Do(callInfo => { + var action = callInfo.Arg>(); + var onException = callInfo.Arg>(); try { -#pragma warning disable VSTHRD002 action().Wait(); -#pragma warning restore } catch (Exception e) { @@ -119,7 +122,7 @@ private void SetupFireAndForget() } public void FireAndForgetOnBackgroundThread(Func action, string callerName = "???") => - Object.FireAndForgetOnBackgroundThread(action, callerName); + _substitute.FireAndForgetOnBackgroundThread(action, callerName); private volatile int _taskId; @@ -134,11 +137,15 @@ public Task StartAndWaitAllBackgroundTasks() return Task.WhenAll(allTasks); } - private void SetupFireAndForgetOnBackgroundThread() + public void SetupFireAndForgetOnBackgroundThread(Action, string> callback) { - Setup(s => s.FireAndForgetOnBackgroundThread(It.IsAny>(), It.IsAny())) - .Callback((Func action, string callerName) => - BackGroundTasks = BackGroundTasks.Add($"{Interlocked.Increment(ref _taskId)}:{callerName}", action)); + _substitute.When(s => s.FireAndForgetOnBackgroundThread(Arg.Any>(), Arg.Any())) + .Do(callInfo => + { + var action = callInfo.Arg>(); + var callerName = callInfo.Arg(); + callback(action, callerName); + }); } public Task RunOnUiThread(Action action) @@ -158,7 +165,7 @@ public void OpenIfNotOpened(string path) public IProjectScope[] GetProjectsWithFeatureFiles() => ProjectScopes.ToArray(); - public IDisposable CreateUndoContext(string undoLabel) => new Mock().Object; + public IDisposable CreateUndoContext(string undoLabel) => Substitute.For(); public IWpfTextView CreateTextView(TestText inputText, string filePath) { @@ -197,4 +204,4 @@ public void Dispose() BackgroundTaskTokenSource.Cancel(); BackgroundTaskTokenSource.Dispose(); } -} +} \ No newline at end of file diff --git a/Tests/Reqnroll.VisualStudio.VsxStubs/ProjectSystem/StubProjectSettingsProvider.cs b/Tests/Reqnroll.VisualStudio.VsxStubs/ProjectSystem/StubProjectSettingsProvider.cs index 6e09df4c..b3995cde 100644 --- a/Tests/Reqnroll.VisualStudio.VsxStubs/ProjectSystem/StubProjectSettingsProvider.cs +++ b/Tests/Reqnroll.VisualStudio.VsxStubs/ProjectSystem/StubProjectSettingsProvider.cs @@ -1,8 +1,8 @@ namespace Reqnroll.VisualStudio.VsxStubs.ProjectSystem; -public class StubProjectSettingsProvider : Mock, IProjectSettingsProvider +public class StubProjectSettingsProvider : IProjectSettingsProvider { - public StubProjectSettingsProvider(InMemoryStubProjectScope inMemoryStubProjectScope) : base(MockBehavior.Strict) + public StubProjectSettingsProvider(InMemoryStubProjectScope inMemoryStubProjectScope) { ProjectSettings = new ProjectSettings( DeveroomProjectKind.ReqnrollTestProject, @@ -17,9 +17,6 @@ public StubProjectSettingsProvider(InMemoryStubProjectScope inMemoryStubProjectS ReqnrollProjectTraits.CucumberExpression, ProjectProgrammingLanguage.CSharp ); - - Setup(p => p.GetProjectSettings()).Returns(() => ProjectSettings); - Setup(p => p.CheckProjectSettings()).Returns(() => ProjectSettings); } private ProjectSettings ProjectSettings { get; set; } @@ -27,17 +24,17 @@ public StubProjectSettingsProvider(InMemoryStubProjectScope inMemoryStubProjectS public DeveroomProjectKind Kind { get => ProjectSettings.Kind; - set => ProjectSettings = ProjectSettings with {Kind = value}; + set => ProjectSettings = ProjectSettings with { Kind = value }; } public event EventHandler? WeakSettingsInitialized; public event EventHandler? SettingsInitialized; - public ProjectSettings GetProjectSettings() => Object.GetProjectSettings(); - public ProjectSettings CheckProjectSettings() => Object.CheckProjectSettings(); + public ProjectSettings GetProjectSettings() => ProjectSettings; + public ProjectSettings CheckProjectSettings() => ProjectSettings; public void InvokeWeakSettingsInitializedEvent() { - WeakSettingsInitialized!.Invoke(this, EventArgs.Empty); + WeakSettingsInitialized?.Invoke(this, EventArgs.Empty); } } diff --git a/Tests/Reqnroll.VisualStudio.VsxStubs/Reqnroll.VisualStudio.VsxStubs.csproj b/Tests/Reqnroll.VisualStudio.VsxStubs/Reqnroll.VisualStudio.VsxStubs.csproj index 6ac357af..52ca9479 100644 --- a/Tests/Reqnroll.VisualStudio.VsxStubs/Reqnroll.VisualStudio.VsxStubs.csproj +++ b/Tests/Reqnroll.VisualStudio.VsxStubs/Reqnroll.VisualStudio.VsxStubs.csproj @@ -11,7 +11,7 @@ - + diff --git a/Tests/Reqnroll.VisualStudio.VsxStubs/StepDefinitions/MockableDiscoveryService.cs b/Tests/Reqnroll.VisualStudio.VsxStubs/StepDefinitions/MockableDiscoveryService.cs index 1ca3c67d..36bc1da4 100644 --- a/Tests/Reqnroll.VisualStudio.VsxStubs/StepDefinitions/MockableDiscoveryService.cs +++ b/Tests/Reqnroll.VisualStudio.VsxStubs/StepDefinitions/MockableDiscoveryService.cs @@ -6,8 +6,8 @@ namespace Reqnroll.VisualStudio.VsxStubs.StepDefinitions; public class MockableDiscoveryService : DiscoveryService { public MockableDiscoveryService(IProjectScope projectScope, - Mock discoveryResultProviderMock) - : base(projectScope, discoveryResultProviderMock.Object, new ProjectBindingRegistryCache(projectScope.IdeScope)) + IDiscoveryResultProvider discoveryResultProviderMock) + : base(projectScope, discoveryResultProviderMock, new ProjectBindingRegistryCache(projectScope.IdeScope)) { } @@ -23,7 +23,7 @@ public static MockableDiscoveryService Setup(IProjectScope projectScope, TimeSpa public static MockableDiscoveryService SetupWithInitialStepDefinitions(IProjectScope projectScope, StepDefinition[] stepDefinitions, TimeSpan discoveryDelay) { - var discoveryResultProviderMock = new Mock(MockBehavior.Strict); + var discoveryResultProviderMock = Substitute.For(); var allStepDefinitions = new List(); foreach (var stepDefinition in stepDefinitions) @@ -60,8 +60,8 @@ public static MockableDiscoveryService SetupWithInitialStepDefinitions(IProjectS InMemoryStubProjectBuilder.CreateOutputAssembly(projectScope); discoveryResultProviderMock - .Setup(ds => ds.RunDiscovery(It.IsAny(), It.IsAny(), It.IsAny())) - .Returns(() => + .RunDiscovery(Arg.Any(), Arg.Any(), Arg.Any()) + .Returns(_ => { Thread.Sleep(discoveryDelay); //make it a bit more realistic return discoveryService.LastDiscoveryResult; diff --git a/Tests/Reqnroll.VisualStudio.VsxStubs/StubProjectBindingRegistryCache.cs b/Tests/Reqnroll.VisualStudio.VsxStubs/StubProjectBindingRegistryCache.cs index 8d87a58a..90da42e9 100644 --- a/Tests/Reqnroll.VisualStudio.VsxStubs/StubProjectBindingRegistryCache.cs +++ b/Tests/Reqnroll.VisualStudio.VsxStubs/StubProjectBindingRegistryCache.cs @@ -1,28 +1,30 @@ #nullable enable namespace Reqnroll.VisualStudio.VsxStubs; -public class StubProjectBindingRegistryCache : Mock, IProjectBindingRegistryCache +public class StubProjectBindingRegistryCache : IProjectBindingRegistryCache { - public StubProjectBindingRegistryCache() : base(MockBehavior.Strict) + private readonly IProjectBindingRegistryCache _substitute; + + public StubProjectBindingRegistryCache() { + _substitute = Substitute.For(); + Value = ProjectBindingRegistry.Invalid; - Setup(c => c.Update(It.IsAny>>())) - .Returns(async (Func> updateFunc) => - { - Value = await updateFunc(Value); - return Task.FromResult(Value); - }); + _substitute.Update(Arg.Any>>()) + .Returns(async callInfo => + { + var updateFunc = callInfo.Arg>>(); + Value = await updateFunc(Value); + }); } - public bool Processing { get; } - public event EventHandler? Changed; public Task Update(Func updateFunc) => Update(registry => Task.FromResult(updateFunc(registry))); public Task Update(Func> updateTask) - => Object.Update(updateTask); + => _substitute.Update(updateTask); public ProjectBindingRegistry Value { get; private set; } public Task GetLatest() => throw new NotImplementedException(); diff --git a/Tests/Reqnroll.VisualStudio.VsxStubs/StubTextBuffer.cs b/Tests/Reqnroll.VisualStudio.VsxStubs/StubTextBuffer.cs index a52de2a0..77416e63 100644 --- a/Tests/Reqnroll.VisualStudio.VsxStubs/StubTextBuffer.cs +++ b/Tests/Reqnroll.VisualStudio.VsxStubs/StubTextBuffer.cs @@ -1,20 +1,26 @@ namespace Reqnroll.VisualStudio.VsxStubs; -public class StubTextBuffer : Mock, ITextBuffer2 +public class StubTextBuffer : ITextBuffer2 { - public StubTextBuffer(IProjectScope projectScope) : base(MockBehavior.Strict) + private readonly ITextBuffer2 _substitute; + + public StubTextBuffer(IProjectScope projectScope) { + _substitute = Substitute.For(); + Properties = new PropertyCollection(); Properties.AddProperty(typeof(IProjectScope), projectScope); CurrentStubSnapshot = StubTextSnapshot.FromTextBuffer(this); - var contentType = new Mock(MockBehavior.Strict); - contentType.Setup(t => t.IsOfType(VsContentTypes.FeatureFile)).Returns(true); - StubContentType = new StubContentType(Array.Empty(), VsContentTypes.FeatureFile, - VsContentTypes.FeatureFile); + var contentType = Substitute.For(); + contentType.IsOfType(VsContentTypes.FeatureFile).Returns(true); + StubContentType = new StubContentType(Array.Empty(), VsContentTypes.FeatureFile, VsContentTypes.FeatureFile); + + _substitute.When(tb => tb.ChangedOnBackground += Arg.Any>()) + .Do(info => _changedOnBackground += info.Arg>()); - SetupAdd(tb => tb.ChangedOnBackground += It.IsAny>()); - SetupRemove(tb => tb.ChangedOnBackground -= It.IsAny>()); + _substitute.When(tb => tb.ChangedOnBackground -= Arg.Any>()) + .Do(info => _changedOnBackground -= info.Arg>()); } public StubContentType StubContentType { get; set; } @@ -71,16 +77,8 @@ public void ChangeContentType(IContentType newContentType, object editTag) public event EventHandler? ChangedOnBackground { - add - { - Object.ChangedOnBackground += value; - _changedOnBackground += value; - } - remove - { - Object.ChangedOnBackground -= value; - _changedOnBackground -= value; - } + add => _substitute.ChangedOnBackground += value; + remove => _substitute.ChangedOnBackground -= value; } private event EventHandler? _changedOnBackground; @@ -111,4 +109,4 @@ public void ModifyContent(string content) { CurrentStubSnapshot = CurrentStubSnapshot.WithText(content); } -} +} \ No newline at end of file diff --git a/Tests/Reqnroll.VisualStudio.VsxStubs/StubTextSnapshot.cs b/Tests/Reqnroll.VisualStudio.VsxStubs/StubTextSnapshot.cs index 728f323f..10fc42dd 100644 --- a/Tests/Reqnroll.VisualStudio.VsxStubs/StubTextSnapshot.cs +++ b/Tests/Reqnroll.VisualStudio.VsxStubs/StubTextSnapshot.cs @@ -86,13 +86,13 @@ public void SaveToFile(string filePath, bool replaceFile, Encoding encoding) public static StubTextSnapshot FromTextBuffer(ITextBuffer textBuffer) => new( - Mock.Of(MockBehavior.Strict), + Substitute.For(), 0, 0, Array.Empty(), textBuffer, StubTextVersion2.Default with {TextBuffer = textBuffer}, - Mock.Of(MockBehavior.Strict), + Substitute.For(), new TestText()); public StubTextSnapshot WithText(string testText) diff --git a/Tests/Reqnroll.VisualStudio.VsxStubs/StubTextVersion2.cs b/Tests/Reqnroll.VisualStudio.VsxStubs/StubTextVersion2.cs index fbb1d937..9b059888 100644 --- a/Tests/Reqnroll.VisualStudio.VsxStubs/StubTextVersion2.cs +++ b/Tests/Reqnroll.VisualStudio.VsxStubs/StubTextVersion2.cs @@ -10,10 +10,10 @@ public record StubTextVersion2( : ITextVersion2 { public static StubTextVersion2 Default = new( - Mock.Of(m => m.Count == 0, MockBehavior.Strict), + Substitute.For(), 0, - 0, Mock.Of(MockBehavior.Strict), - 0, Mock.Of(MockBehavior.Strict)); + 0, Substitute.For(), + 0, Substitute.For()); [CanBeNull] public ITextVersion Next { get; private set; } = null!;