public void SetUp() { // In order to make the "await LicenseHeadersPackage.Instance.JoinableTaskFactory.SwitchToMainThreadAsync();" call in // LinkedFileHandler.HandleAsync work, we need to set the private JoinableTaskFactory property accordingly. // Source: https://github.com/microsoft/vs-threading/blob/main/doc/testing_vs.md #pragma warning disable VSSDK005 var jtc = new JoinableTaskContext(); #pragma warning restore VSSDK005 VisualStudioTestContext.SetPrivateSetPackageProperty(nameof(ILicenseHeaderExtension.JoinableTaskFactory), jtc.Factory); }
public async Task Filter_GivenLicenseHeaderFile_PopulatesToBeProgressedProperty() { await VisualStudioTestContext.SwitchToMainThread(); const string licenseHeaderFileName = "test.licenseheader"; try { var solution = MockRepository.GenerateMock <Solution>(); var linkedFile = MockRepository.GenerateMock <ProjectItem>(); var licenseHeaderFile = MockRepository.GenerateStub <ProjectItem>(); licenseHeaderFile.Expect(x => x.FileCount).Return(1); licenseHeaderFile.Expect(x => x.FileNames[0]).Return(licenseHeaderFileName); using (var writer = new StreamWriter(licenseHeaderFileName)) { writer.WriteLine("extension: .cs"); writer.WriteLine("//test"); } var projectItems = MockRepository.GenerateStub <ProjectItems>(); projectItems.Stub(x => x.GetEnumerator()) .Return(null) .WhenCalled(x => x.ReturnValue = new List <ProjectItem> { licenseHeaderFile }.GetEnumerator()); linkedFile.Expect(x => x.ProjectItems).Return(projectItems); linkedFile.Expect(x => x.Name).Return("linkedFile.cs"); solution.Expect(x => x.FindProjectItem("linkedFile.cs")).Return(linkedFile); // LicenseHeaderFinder is invoked by LinkedFileFilter and uses LicenseHeadersPackage.Instance.LicenseHeaderExtractor. // Since LicenseHeaderExtractor is set during MEF-controlled initialization, set the private-set LicenseHeaderExtractor // to make it work via tests as well. VisualStudioTestContext.SetPrivateSetPackageProperty(nameof(ILicenseHeaderExtension.LicenseHeaderExtractor), new LicenseHeaderExtractor()); var linkedFileFilter = new LinkedFileFilter(solution); linkedFileFilter.Filter(new List <ProjectItem> { linkedFile }); Assert.That(linkedFileFilter.ToBeProgressed, Is.Not.Empty); Assert.That(linkedFileFilter.NoLicenseHeaderFile, Is.Empty); Assert.That(linkedFileFilter.NotInSolution, Is.Empty); } finally { File.Delete(licenseHeaderFileName); } }