From 4b27614d0e22d4a94e9e3161f8f5db2d6be12e33 Mon Sep 17 00:00:00 2001 From: Jonathan Mezach Date: Wed, 10 Oct 2018 17:40:02 +0200 Subject: [PATCH] Stability improvements (#7) We've made a couple of stability improvements by updating various packages to their latest versions. Additionally we've added a continuous integration and continuous delivery pipeline based on Azure DevOps so we can more easily dogfood these tools. --- GitVersion.yml | 3 +- README.md | 3 + appveyor.yml | 23 --- azure-pipelines.yml | 143 ++++++++++++++++++ .../Cucumis.Specifications.csproj | 4 +- .../Augurk.CSharpAnalyzer.Core.csproj | 14 +- .../Commands/AnalyzeCommand.cs | 16 +- .../Augurk.CSharpAnalyzer.NetCore.csproj | 8 +- src/Augurk.CSharpAnalyzer.NetCore/Program.cs | 3 +- src/Augurk.CSharpAnalyzer.NetFx/App.config | 12 -- .../Augurk.CSharpAnalyzer.NetFx.csproj | 6 + src/Augurk.CSharpAnalyzer.NetFx/Program.cs | 2 + .../App.config | 12 -- ...ugurk.CSharpAnalyzer.Specifications.csproj | 46 +++--- .../Features/Analyze.feature.cs | 37 +++-- .../AnalyzeExtensionMethods.feature.cs | 27 ++-- .../AnalyzeLocalMethodCalls.feature.cs | 32 ++-- .../AnalyzeThroughInterfaces.feature.cs | 37 +++-- .../Features/AnalyzeWithGenerics.feature.cs | 22 ++- .../AnalyzeWithInheritance.feature.cs | 52 ++++--- .../Features/AnalyzingAntiPatterns.feature.cs | 39 +++-- .../AnalyzingThroughDrivers.feature.cs | 29 ++-- .../Steps/AnalyzerSteps.cs | 12 +- .../Support/Hooks.cs | 27 ++++ .../AnalyzeCommandTest.cs | 8 +- .../Augurk.CSharpAnalyzer.UnitTest.csproj | 7 +- src/Augurk.CSharpAnalyzer.nuspec | 6 +- src/Augurk.CSharpAnalyzer.sln | 2 +- 28 files changed, 428 insertions(+), 204 deletions(-) delete mode 100644 appveyor.yml create mode 100644 azure-pipelines.yml create mode 100644 src/Augurk.CSharpAnalyzer.Specifications/Support/Hooks.cs diff --git a/GitVersion.yml b/GitVersion.yml index a0289a2..c2c259a 100644 --- a/GitVersion.yml +++ b/GitVersion.yml @@ -1,4 +1,5 @@ -next-version: 0.1.0 +next-version: 0.2.0 +mode: ContinuousDeployment branches: {} ignore: sha: [] diff --git a/README.md b/README.md index 4e9b836..6af46b4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # Augurk.CSharpAnalyzer +[![Build Status](https://dev.azure.com/augurk/Augurk/_apis/build/status/Augurk.CSharpAnalyzer)](https://dev.azure.com/augurk/Augurk/_build/latest?definitionId=3) +[![Release Status](https://vsrm.dev.azure.com/augurk/_apis/public/Release/badge/5a86f7f3-d9bb-4198-9b43-bbb7d066dd90/3/5)](https://vsrm.dev.azure.com/augurk/_apis/public/Release/badge/5a86f7f3-d9bb-4198-9b43-bbb7d066dd90/3/5) + Augurk.CSharpAnalyzer is an extension to the Augurk ecosystem that will (eventually) allow users of Augurk to visualize the dependencies between their features, even across their entire product portfolio. To do this, Augurk.CSharpAnalyzer uses Roslyn to do static code analysis and tries to figure out what is being called by the when steps of a feature. All that information is then accumulated and sent to Augurk for analysis. diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 9c679cc..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,23 +0,0 @@ -image: Visual Studio 2017 -install: -- choco install gitversion.portable -pre -y -assembly_info: - patch: false -before_build: -- cmd: cd src -- cmd: dotnet --version -- ps: gitversion /l console /output buildserver /updateassemblyinfo -- cmd: msbuild /t:Restore -configuration: Release -build_script: -- cmd: msbuild Augurk.CSharpAnalyzer.Specifications/Augurk.CSharpAnalyzer.Specifications.csproj /t:Build /verbosity:minimal /p:Configuration=%CONFIGURATION% /p:Version=%GITVERSION_MAJORMINORPATCH% /p:InformationalVersion=%GITVERSION_INFORMATIONALVERSION% -test_script: -- cmd: vstest.console /Logger:Appveyor Augurk.CSharpAnalyzer.Specifications\bin\Release\Augurk.CSharpAnalyzer.Specifications.dll -- cmd: dotnet test Augurk.CSharpAnalyzer.UnitTest/Augurk.CSharpAnalyzer.UnitTest.csproj -after_test: -- cmd: msbuild Augurk.CSharpAnalyzer.NetCore/Augurk.CSharpAnalyzer.NetCore.csproj /verbosity:minimal /t:Restore,Publish /p:RuntimeIdentifier=linux-x64 /p:Configuration=%CONFIGURATION% /p:Version=%GITVERSION_MAJORMINORPATCH% /p:InformationalVersion=%GITVERSION_INFORMATIONALVERSION% -- cmd: msbuild Augurk.CSharpAnalyzer.NetCore/Augurk.CSharpAnalyzer.NetCore.csproj /verbosity:minimal /t:Restore,Publish /p:RuntimeIdentifier=osx-x64 /p:Configuration=%CONFIGURATION% /p:Version=%GITVERSION_MAJORMINORPATCH% /p:InformationalVersion=%GITVERSION_INFORMATIONALVERSION% -- cmd: msbuild Augurk.CSharpAnalyzer.NetFx/Augurk.CSharpAnalyzer.NetFx.csproj /verbosity:minimal /t:Restore,Build /p:Configuration=%CONFIGURATION% /p:Version=%GITVERSION_MAJORMINORPATCH% /p:InformationalVersion=%GITVERSION_INFORMATIONALVERSION% -- cmd: ECHO nuget pack Augurk.CSharpAnalyzer.nuspec -version "%GitVersion_NuGetVersion%" -prop "Configuration=%CONFIGURATION%" -- cmd: nuget pack Augurk.CSharpAnalyzer.nuspec -version "%GitVersion_NuGetVersion%" -prop "Configuration=%CONFIGURATION%" -- cmd: appveyor PushArtifact "Augurk.CSharpAnalyzer.%GitVersion_NuGetVersion%.nupkg" \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml new file mode 100644 index 0000000..e34fe03 --- /dev/null +++ b/azure-pipelines.yml @@ -0,0 +1,143 @@ +# .NET Desktop +# Build and run tests for .NET Desktop or Windows classic desktop solutions. +# Add steps that publish symbols, save build artifacts, and more: +# https://docs.microsoft.com/vsts/pipelines/apps/windows/dot-net + +variables: + solution: '**/*.sln' + buildPlatform: 'Any CPU' + buildConfiguration: 'Release' + +jobs: +- job: Windows + pool: + vmImage: 'VS2017-Win2016' + steps: + - task: NuGetToolInstaller@0 + + - task: GitVersion@3 + inputs: + updateAssemblyInfo: true + + - task: NuGetCommand@2 + inputs: + restoreSolution: '$(solution)' + + - task: VSBuild@1 + inputs: + solution: '$(solution)' + platform: '$(buildPlatform)' + configuration: '$(buildConfiguration)' + msbuildArgs: '/p:Version=$(GitVersion.MajorMinorPatch) /p:InformationalVersion=$(GitVersion.InformationalVersion)' + + - task: VSTest@2 + inputs: + platform: '$(buildPlatform)' + configuration: '$(buildConfiguration)' + testAssemblyVer2: '$(Build.SourcesDirectory)\src\Augurk.CSharpAnalyzer.Specifications\bin\$(buildConfiguration)\Augurk.CSharpAnalyzer.Specifications.dll' + codeCoverageEnabled: True + otherConsoleOptions: '/platform:X64' + + - task: ArchiveFiles@2 + inputs: + rootFolderOrFile: '$(Build.SourcesDirectory)\src\Augurk.CSharpAnalyzer.NetFx\bin\$(buildConfiguration)' + includeRootFolder: false + archiveType: zip + archiveFile: '$(Build.ArtifactStagingDirectory)\Augurk.CSharpAnalyzer-win-x64-$(Build.BuildNumber).zip' + + - task: PublishBuildArtifacts@1 + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: Windows + publishLocation: Container + + - powershell: | + echo "##vso[task.setvariable variable=GitVersion.MajorMinorPatch;isOutput=true]$(GitVersion.MajorMinorPatch)" + echo "##vso[task.setvariable variable=GitVersion.InformationalVersion;isOutput=true]$(GitVersion.InformationalVersion)" + echo "##vso[task.setvariable variable=Build.BuildNumber;isOutput=true]$(Build.BuildNumber)" + name: setOutputVariables + +- job: macOS + dependsOn: Windows # For now, since we can't run GitVersion on macOS + pool: + vmImage: macOS-10.13 + variables: + GitVersion.MajorMinorPatch: $[dependencies.Windows.outputs['setOutputVariables.GitVersion.MajorMinorPatch']] + GitVersion.InformationalVersion: $[dependencies.Windows.outputs['setOutputVariables.GitVersion.InformationalVersion']] + Build.BuildNumber: $[dependencies.Windows.outputs['setOutputVariables.Build.BuildNumber']] + steps: + - task: DotNetCoreCLI@2 + inputs: + command: build + projects: 'src/Augurk.CSharpAnalyzer.NetCore/Augurk.CSharpAnalyzer.NetCore.csproj' + arguments: '-r osx-x64 -c $(buildConfiguration)' + + - task: DotNetCoreCLI@2 + enabled: false # For now since we don't have a viable testing project + inputs: + command: test + projects: 'src/Augurk.CSharpAnalyzer.UnitTest/Augurk.CSharpAnalyzer.UnitTest.csproj' + continueOnError: true + + - task: DotNetCoreCLI@2 + inputs: + command: publish + projects: 'src/Augurk.CSharpAnalyzer.NetCore/Augurk.CSharpAnalyzer.NetCore.csproj' + arguments: '-r osx-x64 -c $(buildConfiguration) /p:Version=$(GitVersion.MajorMinorPatch) /p:InformationalVersion=$(GitVersion.InformationalVersion)' + zipAfterPublish: false + publishWebProjects: false + + - task: ArchiveFiles@2 + inputs: + rootFolderOrFile: '$(Build.SourcesDirectory)/src/Augurk.CSharpAnalyzer.NetCore/bin/$(buildConfiguration)/netcoreapp2.1/osx-x64/publish/' + includeRootFolder: false + archiveType: zip + archiveFile: '$(Build.ArtifactStagingDirectory)/Augurk.CSharpAnalyzer-osx-x64-$(Build.BuildNumber).zip' + + - task: PublishBuildArtifacts@1 + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: macOS + publishLocation: Container + +- job: Linux + dependsOn: Windows # For now, since we can't run GitVersion on macOS + pool: + vmImage: ubuntu-16.04 + variables: + GitVersion.MajorMinorPatch: $[dependencies.Windows.outputs['setOutputVariables.GitVersion.MajorMinorPatch']] + GitVersion.InformationalVersion: $[dependencies.Windows.outputs['setOutputVariables.GitVersion.InformationalVersion']] + Build.BuildNumber: $[dependencies.Windows.outputs['setOutputVariables.Build.BuildNumber']] + steps: + - task: DotNetCoreCLI@2 + inputs: + command: build + projects: 'src/Augurk.CSharpAnalyzer.NetCore/Augurk.CSharpAnalyzer.NetCore.csproj' + arguments: '-r linux-x64 -c $(buildConfiguration)' + + - task: DotNetCoreCLI@2 + enabled: false # For now since we don't have a viable testing project + inputs: + command: test + projects: 'src/Augurk.CSharpAnalyzer.UnitTest/Augurk.CSharpAnalyzer.UnitTest.csproj' + + - task: DotNetCoreCLI@2 + inputs: + command: publish + projects: 'src/Augurk.CSharpAnalyzer.NetCore/Augurk.CSharpAnalyzer.NetCore.csproj' + arguments: '-r linux-x64 -c $(buildConfiguration) /p:Version=$(GitVersion.MajorMinorPatch) /p:InformationalVersion=$(GitVersion.InformationalVersion)' + zipAfterPublish: false + publishWebProjects: false + + - task: ArchiveFiles@2 + inputs: + rootFolderOrFile: '$(Build.SourcesDirectory)/src/Augurk.CSharpAnalyzer.NetCore/bin/$(buildConfiguration)/netcoreapp2.1/linux-x64/publish/' + includeRootFolder: false + archiveType: zip + archiveFile: '$(Build.ArtifactStagingDirectory)/Augurk.CSharpAnalyzer-linux-x64-$(Build.BuildNumber).zip' + + - task: PublishBuildArtifacts@1 + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: Linux + publishLocation: Container diff --git a/src/Analyzable Projects/Cucumis.Specifications/Cucumis.Specifications.csproj b/src/Analyzable Projects/Cucumis.Specifications/Cucumis.Specifications.csproj index a8a83c5..4b32639 100644 --- a/src/Analyzable Projects/Cucumis.Specifications/Cucumis.Specifications.csproj +++ b/src/Analyzable Projects/Cucumis.Specifications/Cucumis.Specifications.csproj @@ -41,8 +41,8 @@ - - + + diff --git a/src/Augurk.CSharpAnalyzer.Core/Augurk.CSharpAnalyzer.Core.csproj b/src/Augurk.CSharpAnalyzer.Core/Augurk.CSharpAnalyzer.Core.csproj index d8c1b3f..801c2ac 100644 --- a/src/Augurk.CSharpAnalyzer.Core/Augurk.CSharpAnalyzer.Core.csproj +++ b/src/Augurk.CSharpAnalyzer.Core/Augurk.CSharpAnalyzer.Core.csproj @@ -6,14 +6,12 @@ - - - - - - - - + + + + + + diff --git a/src/Augurk.CSharpAnalyzer.Core/Commands/AnalyzeCommand.cs b/src/Augurk.CSharpAnalyzer.Core/Commands/AnalyzeCommand.cs index 0255760..483b467 100644 --- a/src/Augurk.CSharpAnalyzer.Core/Commands/AnalyzeCommand.cs +++ b/src/Augurk.CSharpAnalyzer.Core/Commands/AnalyzeCommand.cs @@ -15,8 +15,6 @@ limitations under the License. */ using Augurk.CSharpAnalyzer.Analyzers; using Augurk.CSharpAnalyzer.Options; -using Buildalyzer; -using Buildalyzer.Workspaces; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -95,6 +93,20 @@ public async Task Analyze(AnalyzeOptions options) var specProject = workspace.CurrentSolution.Projects.FirstOrDefault(p => p.Name == options.SpecificationsProject); var compilation = projects[specProject].Value; + // Make sure that the project compiled succesfully + var diagnostics = compilation.GetDiagnostics(); + if (diagnostics.Any(d => d.Severity == DiagnosticSeverity.Error)) + { + // Errors occured during compilation, we cannot continue here + ConsoleWriter.Write(ConsoleColor.Red, $"The following errors occured during compilation of solution '{solutionPath}'"); + foreach (var diagnostic in diagnostics) + { + ConsoleWriter.WriteWithIndent(ConsoleColor.Red, 1, diagnostic.ToString()); + } + + throw new InvalidOperationException("Unable to analyze solution due to compile errors."); + } + // Build the analysis context and go through each syntax tree var context = new AnalyzeContext(projects, options); foreach (var tree in compilation.SyntaxTrees) diff --git a/src/Augurk.CSharpAnalyzer.NetCore/Augurk.CSharpAnalyzer.NetCore.csproj b/src/Augurk.CSharpAnalyzer.NetCore/Augurk.CSharpAnalyzer.NetCore.csproj index 5cb1fd8..747c3e4 100644 --- a/src/Augurk.CSharpAnalyzer.NetCore/Augurk.CSharpAnalyzer.NetCore.csproj +++ b/src/Augurk.CSharpAnalyzer.NetCore/Augurk.CSharpAnalyzer.NetCore.csproj @@ -1,13 +1,17 @@ - + Exe - netcoreapp2.0 + netcoreapp2.1 7.1 Augurk.CSharpAnalyzer Augurk.CSharpAnalyzer + + + + diff --git a/src/Augurk.CSharpAnalyzer.NetCore/Program.cs b/src/Augurk.CSharpAnalyzer.NetCore/Program.cs index 954bfb6..b302d6a 100644 --- a/src/Augurk.CSharpAnalyzer.NetCore/Program.cs +++ b/src/Augurk.CSharpAnalyzer.NetCore/Program.cs @@ -13,7 +13,6 @@ You may obtain a copy of the License at See the License for the specific language governing permissions and limitations under the License. */ -using System; using Oakton; using Augurk.CSharpAnalyzer.Commands; using System.Threading.Tasks; @@ -52,7 +51,7 @@ static async Task Main(string[] args) int result = await executor.ExecuteAsync(args); #if DEBUG - Console.ReadLine(); + System.Console.ReadLine(); #endif return result; } diff --git a/src/Augurk.CSharpAnalyzer.NetFx/App.config b/src/Augurk.CSharpAnalyzer.NetFx/App.config index bd4c2d6..96f35e9 100644 --- a/src/Augurk.CSharpAnalyzer.NetFx/App.config +++ b/src/Augurk.CSharpAnalyzer.NetFx/App.config @@ -3,16 +3,4 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Augurk.CSharpAnalyzer.NetFx/Augurk.CSharpAnalyzer.NetFx.csproj b/src/Augurk.CSharpAnalyzer.NetFx/Augurk.CSharpAnalyzer.NetFx.csproj index db29e26..145df89 100644 --- a/src/Augurk.CSharpAnalyzer.NetFx/Augurk.CSharpAnalyzer.NetFx.csproj +++ b/src/Augurk.CSharpAnalyzer.NetFx/Augurk.CSharpAnalyzer.NetFx.csproj @@ -56,6 +56,12 @@ + + 1.0.31 + + + 2.9.0 + 1.5.0 diff --git a/src/Augurk.CSharpAnalyzer.NetFx/Program.cs b/src/Augurk.CSharpAnalyzer.NetFx/Program.cs index a8c1693..cd4b082 100644 --- a/src/Augurk.CSharpAnalyzer.NetFx/Program.cs +++ b/src/Augurk.CSharpAnalyzer.NetFx/Program.cs @@ -20,6 +20,7 @@ limitations under the License. using System.Reflection; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.MSBuild; +using Microsoft.Build.Locator; namespace Augurk.CSharpAnalyzer { @@ -58,6 +59,7 @@ static async Task Main(string[] args) static async Task GetWorkspace(string solutionPath) { + MSBuildLocator.RegisterDefaults(); var workspace = MSBuildWorkspace.Create(); await workspace.OpenSolutionAsync(solutionPath); return workspace; diff --git a/src/Augurk.CSharpAnalyzer.Specifications/App.config b/src/Augurk.CSharpAnalyzer.Specifications/App.config index cc86f30..2eb11ae 100644 --- a/src/Augurk.CSharpAnalyzer.Specifications/App.config +++ b/src/Augurk.CSharpAnalyzer.Specifications/App.config @@ -11,16 +11,4 @@ - - - - - - - - - - - - diff --git a/src/Augurk.CSharpAnalyzer.Specifications/Augurk.CSharpAnalyzer.Specifications.csproj b/src/Augurk.CSharpAnalyzer.Specifications/Augurk.CSharpAnalyzer.Specifications.csproj index 9788a31..7ed4ed7 100644 --- a/src/Augurk.CSharpAnalyzer.Specifications/Augurk.CSharpAnalyzer.Specifications.csproj +++ b/src/Augurk.CSharpAnalyzer.Specifications/Augurk.CSharpAnalyzer.Specifications.csproj @@ -42,30 +42,33 @@ - - - - - - - - - - - - - + + 1.0.31 + + + runtime; build; native; contentfiles; analyzers + all + + + + + + + + + 2.9.0 + - - - - - + + + + + - + - + @@ -93,7 +96,7 @@ - + @@ -175,6 +178,7 @@ + diff --git a/src/Augurk.CSharpAnalyzer.Specifications/Features/Analyze.feature.cs b/src/Augurk.CSharpAnalyzer.Specifications/Features/Analyze.feature.cs index 904be0f..25828aa 100644 --- a/src/Augurk.CSharpAnalyzer.Specifications/Features/Analyze.feature.cs +++ b/src/Augurk.CSharpAnalyzer.Specifications/Features/Analyze.feature.cs @@ -1,8 +1,8 @@ // ------------------------------------------------------------------------------ // // This code was generated by SpecFlow (http://www.specflow.org/). -// SpecFlow Version:2.3.0.0 -// SpecFlow Generator Version:2.3.0.0 +// SpecFlow Version:2.4.0.0 +// SpecFlow Generator Version:2.4.0.0 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -15,7 +15,7 @@ namespace Augurk.CSharpAnalyzer.Specifications.Features using TechTalk.SpecFlow; - [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.3.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.4.0.0")] [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute()] public partial class AnalyzeACProjectWithASingleTestProjectFeature @@ -71,10 +71,15 @@ public virtual void ScenarioTearDown() testRunner.OnScenarioEnd(); } - public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + public virtual void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) { - testRunner.OnScenarioStart(scenarioInfo); - testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(TestContext); + testRunner.OnScenarioInitialize(scenarioInfo); + testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(_testContext); + } + + public virtual void ScenarioStart() + { + testRunner.OnScenarioStart(); } public virtual void ScenarioCleanup() @@ -87,9 +92,10 @@ public virtual void ScenarioCleanup() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze a C# project with a single test project")] public virtual void WhenCallsDirectlyIntoASingleEntrypoint() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("When calls directly into a single entrypoint", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("When calls directly into a single entrypoint", null, ((string[])(null))); #line 3 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 5 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 6 @@ -122,9 +128,10 @@ public virtual void WhenCallsDirectlyIntoASingleEntrypoint() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze a C# project with a single test project")] public virtual void EntrypointIsSurroundedByOtherInvocations() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Entrypoint is surrounded by other invocations", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Entrypoint is surrounded by other invocations", null, ((string[])(null))); #line 13 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 15 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 16 @@ -171,9 +178,10 @@ public virtual void EntrypointIsSurroundedByOtherInvocations() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze a C# project with a single test project")] public virtual void WhenInvokesTwoSeperateEntrypoints() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("When invokes two seperate entrypoints", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("When invokes two seperate entrypoints", null, ((string[])(null))); #line 26 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 28 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 29 @@ -214,9 +222,10 @@ public virtual void WhenInvokesTwoSeperateEntrypoints() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze a C# project with a single test project")] public virtual void WhenAnAsynchronousEntrypointIsInvoked() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("When an asynchronous entrypoint is invoked", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("When an asynchronous entrypoint is invoked", null, ((string[])(null))); #line 38 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 40 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 41 diff --git a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeExtensionMethods.feature.cs b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeExtensionMethods.feature.cs index 0c9a335..aea0276 100644 --- a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeExtensionMethods.feature.cs +++ b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeExtensionMethods.feature.cs @@ -1,8 +1,8 @@ // ------------------------------------------------------------------------------ // // This code was generated by SpecFlow (http://www.specflow.org/). -// SpecFlow Version:2.3.0.0 -// SpecFlow Generator Version:2.3.0.0 +// SpecFlow Version:2.4.0.0 +// SpecFlow Generator Version:2.4.0.0 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -15,7 +15,7 @@ namespace Augurk.CSharpAnalyzer.Specifications.Features using TechTalk.SpecFlow; - [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.3.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.4.0.0")] [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute()] public partial class AnalyzeExtensionMethodsFeature @@ -71,10 +71,15 @@ public virtual void ScenarioTearDown() testRunner.OnScenarioEnd(); } - public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + public virtual void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) { - testRunner.OnScenarioStart(scenarioInfo); - testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(TestContext); + testRunner.OnScenarioInitialize(scenarioInfo); + testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(_testContext); + } + + public virtual void ScenarioStart() + { + testRunner.OnScenarioStart(); } public virtual void ScenarioCleanup() @@ -87,9 +92,10 @@ public virtual void ScenarioCleanup() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze Extension Methods")] public virtual void AnExtensionMethodIsInvoked() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("an extension method is invoked", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("an extension method is invoked", null, ((string[])(null))); #line 3 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 5 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 6 @@ -141,9 +147,10 @@ public virtual void AnExtensionMethodIsInvoked() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze Extension Methods")] public virtual void AnExtensionMethodIsInvokedOnADerivedType() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("an extension method is invoked on a derived type", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("an extension method is invoked on a derived type", null, ((string[])(null))); #line 16 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 18 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 19 diff --git a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeLocalMethodCalls.feature.cs b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeLocalMethodCalls.feature.cs index 8e6f137..c31c17e 100644 --- a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeLocalMethodCalls.feature.cs +++ b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeLocalMethodCalls.feature.cs @@ -1,8 +1,8 @@ // ------------------------------------------------------------------------------ // // This code was generated by SpecFlow (http://www.specflow.org/). -// SpecFlow Version:2.3.0.0 -// SpecFlow Generator Version:2.3.0.0 +// SpecFlow Version:2.4.0.0 +// SpecFlow Generator Version:2.4.0.0 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -15,7 +15,7 @@ namespace Augurk.CSharpAnalyzer.Specifications.Features using TechTalk.SpecFlow; - [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.3.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.4.0.0")] [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute()] public partial class AnalyzeLocalMethodCallsFeature @@ -71,10 +71,15 @@ public virtual void ScenarioTearDown() testRunner.OnScenarioEnd(); } - public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + public virtual void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) { - testRunner.OnScenarioStart(scenarioInfo); - testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(TestContext); + testRunner.OnScenarioInitialize(scenarioInfo); + testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(_testContext); + } + + public virtual void ScenarioStart() + { + testRunner.OnScenarioStart(); } public virtual void ScenarioCleanup() @@ -87,9 +92,10 @@ public virtual void ScenarioCleanup() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze Local Method Calls")] public virtual void ALocalMethodIsCalledWithinTheEntrypoint() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("a local method is called within the entrypoint", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("a local method is called within the entrypoint", null, ((string[])(null))); #line 3 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 5 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 6 @@ -127,9 +133,10 @@ public virtual void ALocalMethodIsCalledWithinTheEntrypoint() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze Local Method Calls")] public virtual void AnExplicitBaseMethodIsCalledWithinTheEntrypoint() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("an explicit base method is called within the entrypoint", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("an explicit base method is called within the entrypoint", null, ((string[])(null))); #line 14 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 16 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 17 @@ -177,9 +184,10 @@ public virtual void AnExplicitBaseMethodIsCalledWithinTheEntrypoint() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze Local Method Calls")] public virtual void ALocalMethodIsCalledWithinTheEntrypointExplicitlyOnThis() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("a local method is called within the entrypoint explicitly on this", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("a local method is called within the entrypoint explicitly on this", null, ((string[])(null))); #line 26 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 28 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 29 diff --git a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeThroughInterfaces.feature.cs b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeThroughInterfaces.feature.cs index 1b003d7..d8ef44d 100644 --- a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeThroughInterfaces.feature.cs +++ b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeThroughInterfaces.feature.cs @@ -1,8 +1,8 @@ // ------------------------------------------------------------------------------ // // This code was generated by SpecFlow (http://www.specflow.org/). -// SpecFlow Version:2.3.0.0 -// SpecFlow Generator Version:2.3.0.0 +// SpecFlow Version:2.4.0.0 +// SpecFlow Generator Version:2.4.0.0 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -15,7 +15,7 @@ namespace Augurk.CSharpAnalyzer.Specifications.Features using TechTalk.SpecFlow; - [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.3.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.4.0.0")] [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute()] public partial class AnalyzeThroughInterfacesFeature @@ -72,10 +72,15 @@ public virtual void ScenarioTearDown() testRunner.OnScenarioEnd(); } - public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + public virtual void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) { - testRunner.OnScenarioStart(scenarioInfo); - testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(TestContext); + testRunner.OnScenarioInitialize(scenarioInfo); + testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(_testContext); + } + + public virtual void ScenarioStart() + { + testRunner.OnScenarioStart(); } public virtual void ScenarioCleanup() @@ -88,9 +93,10 @@ public virtual void ScenarioCleanup() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze Through Interfaces")] public virtual void EntrypointIsAnExplicitInterfaceImplementation() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is an explicit interface implementation", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is an explicit interface implementation", null, ((string[])(null))); #line 5 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 7 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 8 @@ -124,9 +130,10 @@ public virtual void EntrypointIsAnExplicitInterfaceImplementation() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze Through Interfaces")] public virtual void EntrypointIsAnImplicitInterfaceImplementation() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is an implicit interface implementation", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is an implicit interface implementation", null, ((string[])(null))); #line 15 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 17 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 18 @@ -160,9 +167,10 @@ public virtual void EntrypointIsAnImplicitInterfaceImplementation() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze Through Interfaces")] public virtual void EntrypointIsInvokedAfterInvocationOnInterface() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is invoked after invocation on interface", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is invoked after invocation on interface", null, ((string[])(null))); #line 25 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 27 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 28 @@ -200,9 +208,10 @@ public virtual void EntrypointIsInvokedAfterInvocationOnInterface() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze Through Interfaces")] public virtual void EntrypointIsInvokedThroughAnInterfaceImplementation() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is invoked through an interface implementation", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is invoked through an interface implementation", null, ((string[])(null))); #line 36 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 38 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 39 diff --git a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeWithGenerics.feature.cs b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeWithGenerics.feature.cs index 767e459..6a6f967 100644 --- a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeWithGenerics.feature.cs +++ b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeWithGenerics.feature.cs @@ -1,8 +1,8 @@ // ------------------------------------------------------------------------------ // // This code was generated by SpecFlow (http://www.specflow.org/). -// SpecFlow Version:2.3.2.0 -// SpecFlow Generator Version:2.3.0.0 +// SpecFlow Version:2.4.0.0 +// SpecFlow Generator Version:2.4.0.0 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -15,7 +15,7 @@ namespace Augurk.CSharpAnalyzer.Specifications.Features using TechTalk.SpecFlow; - [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.3.2.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.4.0.0")] [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute()] public partial class AnalyzeGenericsFeature @@ -71,10 +71,15 @@ public virtual void ScenarioTearDown() testRunner.OnScenarioEnd(); } - public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + public virtual void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) { - testRunner.OnScenarioStart(scenarioInfo); - testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(TestContext); + testRunner.OnScenarioInitialize(scenarioInfo); + testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(_testContext); + } + + public virtual void ScenarioStart() + { + testRunner.OnScenarioStart(); } public virtual void ScenarioCleanup() @@ -87,9 +92,10 @@ public virtual void ScenarioCleanup() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze Generics")] public virtual void AGenericMethodIsInvoked() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("A generic method is invoked", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("A generic method is invoked", null, ((string[])(null))); #line 3 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 5 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 6 diff --git a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeWithInheritance.feature.cs b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeWithInheritance.feature.cs index 7cf289b..c1e893d 100644 --- a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeWithInheritance.feature.cs +++ b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzeWithInheritance.feature.cs @@ -1,8 +1,8 @@ // ------------------------------------------------------------------------------ // // This code was generated by SpecFlow (http://www.specflow.org/). -// SpecFlow Version:2.3.0.0 -// SpecFlow Generator Version:2.3.0.0 +// SpecFlow Version:2.4.0.0 +// SpecFlow Generator Version:2.4.0.0 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -15,7 +15,7 @@ namespace Augurk.CSharpAnalyzer.Specifications.Features using TechTalk.SpecFlow; - [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.3.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.4.0.0")] [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute()] public partial class AnalyzeWithInheritanceFeature @@ -71,10 +71,15 @@ public virtual void ScenarioTearDown() testRunner.OnScenarioEnd(); } - public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + public virtual void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) { - testRunner.OnScenarioStart(scenarioInfo); - testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(TestContext); + testRunner.OnScenarioInitialize(scenarioInfo); + testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(_testContext); + } + + public virtual void ScenarioStart() + { + testRunner.OnScenarioStart(); } public virtual void ScenarioCleanup() @@ -87,9 +92,10 @@ public virtual void ScenarioCleanup() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze With Inheritance")] public virtual void EntrypointIsInvokedOnInheritedAutomationClass() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is invoked on inherited automation class", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is invoked on inherited automation class", "There should be no trace of the inherited class, as the method is not overriden", ((string[])(null))); #line 3 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 6 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 7 @@ -123,9 +129,10 @@ public virtual void EntrypointIsInvokedOnInheritedAutomationClass() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze With Inheritance")] public virtual void EntrypointIsInvokedThroughAnInheritedAutomationClass() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is invoked through an inherited automation class", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is invoked through an inherited automation class", null, ((string[])(null))); #line 14 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 16 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 17 @@ -172,9 +179,10 @@ public virtual void EntrypointIsInvokedThroughAnInheritedAutomationClass() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze With Inheritance")] public virtual void SameMethodIsInvokedWithDifferentConcreteTypes() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("same method is invoked with different concrete types", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("same method is invoked with different concrete types", null, ((string[])(null))); #line 27 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 29 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 30 @@ -252,9 +260,10 @@ public virtual void SameMethodIsInvokedWithDifferentConcreteTypes() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze With Inheritance")] public virtual void AnInstanceMethodIsInvokedFromItsBase() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("an instance method is invoked from its base", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("an instance method is invoked from its base", null, ((string[])(null))); #line 45 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 47 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 48 @@ -301,9 +310,10 @@ public virtual void AnInstanceMethodIsInvokedFromItsBase() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze With Inheritance")] public virtual void ABaseMethodIsCalledFromAFarOffGenerations() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("a base method is called from a far off generations", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("a base method is called from a far off generations", null, ((string[])(null))); #line 57 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 58 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 59 @@ -361,9 +371,10 @@ public virtual void ABaseMethodIsCalledFromAFarOffGenerations() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze With Inheritance")] public virtual void AnInheritedInstanceMethodIsInvokedIndirectly() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("an inherited instance method is invoked indirectly", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("an inherited instance method is invoked indirectly", null, ((string[])(null))); #line 70 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 72 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 73 @@ -423,9 +434,10 @@ public virtual void AnInheritedInstanceMethodIsInvokedIndirectly() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyze With Inheritance")] public virtual void ThisActuallyMeansThat() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("this actually means that", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("this actually means that", null, ((string[])(null))); #line 84 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 86 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 87 diff --git a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzingAntiPatterns.feature.cs b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzingAntiPatterns.feature.cs index b2dd3c4..8088bd3 100644 --- a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzingAntiPatterns.feature.cs +++ b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzingAntiPatterns.feature.cs @@ -1,8 +1,8 @@ // ------------------------------------------------------------------------------ // // This code was generated by SpecFlow (http://www.specflow.org/). -// SpecFlow Version:2.3.2.0 -// SpecFlow Generator Version:2.3.0.0 +// SpecFlow Version:2.4.0.0 +// SpecFlow Generator Version:2.4.0.0 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -15,7 +15,7 @@ namespace Augurk.CSharpAnalyzer.Specifications.Features using TechTalk.SpecFlow; - [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.3.2.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.4.0.0")] [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute()] public partial class AnalyzingAnti_PatternsFeature @@ -72,10 +72,15 @@ public virtual void ScenarioTearDown() testRunner.OnScenarioEnd(); } - public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + public virtual void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) { - testRunner.OnScenarioStart(scenarioInfo); - testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(TestContext); + testRunner.OnScenarioInitialize(scenarioInfo); + testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(_testContext); + } + + public virtual void ScenarioStart() + { + testRunner.OnScenarioStart(); } public virtual void ScenarioCleanup() @@ -88,9 +93,12 @@ public virtual void ScenarioCleanup() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyzing Anti-patterns")] public virtual void TheAutomatedCodeCannotBeInvokedDirectly() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("the automated code cannot be invoked directly", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("the automated code cannot be invoked directly", "It might happen that the automated code cannot be invoked directly from a when st" + + "ep due to complexity. Therefore we provide a means to annotate\r\nthe actual metho" + + "d being tested by a When step.", ((string[])(null))); #line 4 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 8 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 9 @@ -138,9 +146,10 @@ public virtual void TheAutomatedCodeCannotBeInvokedDirectly() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyzing Anti-patterns")] public virtual void OnlyTheTopLevelOverloadShouldMatch() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("only the top level overload should match", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("only the top level overload should match", null, ((string[])(null))); #line 18 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 20 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 21 @@ -188,9 +197,10 @@ public virtual void OnlyTheTopLevelOverloadShouldMatch() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyzing Anti-patterns")] public virtual void OnlyTheLowestLevelOverloadShouldMatch() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("only the lowest level overload should match", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("only the lowest level overload should match", null, ((string[])(null))); #line 30 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 32 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 33 @@ -239,9 +249,10 @@ public virtual void OnlyTheLowestLevelOverloadShouldMatch() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyzing Anti-patterns")] public virtual void AllOverloadsShouldMatch() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("all overloads should match", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("all overloads should match", null, ((string[])(null))); #line 43 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 45 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 46 diff --git a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzingThroughDrivers.feature.cs b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzingThroughDrivers.feature.cs index fe85288..5c4e905 100644 --- a/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzingThroughDrivers.feature.cs +++ b/src/Augurk.CSharpAnalyzer.Specifications/Features/AnalyzingThroughDrivers.feature.cs @@ -1,8 +1,8 @@ // ------------------------------------------------------------------------------ // // This code was generated by SpecFlow (http://www.specflow.org/). -// SpecFlow Version:2.3.0.0 -// SpecFlow Generator Version:2.3.0.0 +// SpecFlow Version:2.4.0.0 +// SpecFlow Generator Version:2.4.0.0 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -15,7 +15,7 @@ namespace Augurk.CSharpAnalyzer.Specifications.Features using TechTalk.SpecFlow; - [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.3.0.0")] + [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.4.0.0")] [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute()] public partial class AnalyzingThroughDriversFeature @@ -73,10 +73,15 @@ public virtual void ScenarioTearDown() testRunner.OnScenarioEnd(); } - public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) + public virtual void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) { - testRunner.OnScenarioStart(scenarioInfo); - testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(TestContext); + testRunner.OnScenarioInitialize(scenarioInfo); + testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(_testContext); + } + + public virtual void ScenarioStart() + { + testRunner.OnScenarioStart(); } public virtual void ScenarioCleanup() @@ -89,9 +94,11 @@ public virtual void ScenarioCleanup() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyzing Through Drivers")] public virtual void EntrypointIsInvokedThroughADriverDirectly() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is invoked through a driver directly", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is invoked through a driver directly", "As long as the driver invokes the methodes on the testable class directly,\r\nthe r" + + "esults will be complete.", ((string[])(null))); #line 7 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 11 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 12 @@ -130,9 +137,11 @@ public virtual void EntrypointIsInvokedThroughADriverDirectly() [Microsoft.VisualStudio.TestTools.UnitTesting.TestPropertyAttribute("FeatureTitle", "Analyzing Through Drivers")] public virtual void EntrypointIsIndirectlyInvokedThroughADriver() { - TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is indirectly invoked through a driver", ((string[])(null))); + TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("entrypoint is indirectly invoked through a driver", "If the driver uses the testable class via an interface, \r\nthe analyzer will stop " + + "at the invocation tot the interface.", ((string[])(null))); #line 20 -this.ScenarioSetup(scenarioInfo); +this.ScenarioInitialize(scenarioInfo); + this.ScenarioStart(); #line 24 testRunner.Given("\'Cucumis.Specifications\' contains feature files", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); #line 25 diff --git a/src/Augurk.CSharpAnalyzer.Specifications/Steps/AnalyzerSteps.cs b/src/Augurk.CSharpAnalyzer.Specifications/Steps/AnalyzerSteps.cs index c70acef..2658f6c 100644 --- a/src/Augurk.CSharpAnalyzer.Specifications/Steps/AnalyzerSteps.cs +++ b/src/Augurk.CSharpAnalyzer.Specifications/Steps/AnalyzerSteps.cs @@ -2,8 +2,10 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Threading.Tasks; using Augurk.CSharpAnalyzer.Commands; using Augurk.CSharpAnalyzer.Options; +using Augurk.CSharpAnalyzer.Specifications.Support; using Microsoft.CodeAnalysis.MSBuild; using Microsoft.VisualStudio.TestTools.UnitTesting; using Newtonsoft.Json; @@ -15,7 +17,6 @@ namespace Augurk.CSharpAnalyzer.Specifications.Steps [Binding] public class AnalyzerSteps { - private readonly string _solution = Path.Combine(AppContext.BaseDirectory, @"..\..\..\Analyzable Projects\Cucumis.sln"); private string _targetProject; private JToken _analyzedInvocations; @@ -30,17 +31,12 @@ public void WhenAnAnalysisIsRun() { var options = new AnalyzeOptions { - Solution = _solution, + Solution = Hooks.Solution, SpecificationsProject = _targetProject }; var command = new AnalyzeCommand(); - command.GetWorkspaceFunc = async solution => - { - var workspace = MSBuildWorkspace.Create(); - await workspace.OpenSolutionAsync(solution); - return workspace; - }; + command.GetWorkspaceFunc = (solution) => Task.FromResult(Hooks.Workspace); _analyzedInvocations = command.Analyze(options).Result["RootInvocations"]; } diff --git a/src/Augurk.CSharpAnalyzer.Specifications/Support/Hooks.cs b/src/Augurk.CSharpAnalyzer.Specifications/Support/Hooks.cs new file mode 100644 index 0000000..2e0fb88 --- /dev/null +++ b/src/Augurk.CSharpAnalyzer.Specifications/Support/Hooks.cs @@ -0,0 +1,27 @@ +using Microsoft.Build.Locator; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.MSBuild; +using System; +using System.IO; +using System.Threading.Tasks; +using TechTalk.SpecFlow; + +namespace Augurk.CSharpAnalyzer.Specifications.Support +{ + [Binding] + public static class Hooks + { + public static string Solution; + public static Workspace Workspace; + + [BeforeTestRun] + public static async Task BeforeTestRun() + { + MSBuildLocator.RegisterDefaults(); + Solution = Path.Combine(AppContext.BaseDirectory, @"..\..\..\Analyzable Projects\Cucumis.sln"); + var msBuildWorkspace = MSBuildWorkspace.Create(); + await msBuildWorkspace.OpenSolutionAsync(Solution); + Workspace = msBuildWorkspace; + } + } +} diff --git a/src/Augurk.CSharpAnalyzer.UnitTest/AnalyzeCommandTest.cs b/src/Augurk.CSharpAnalyzer.UnitTest/AnalyzeCommandTest.cs index cc4e012..c0f8745 100644 --- a/src/Augurk.CSharpAnalyzer.UnitTest/AnalyzeCommandTest.cs +++ b/src/Augurk.CSharpAnalyzer.UnitTest/AnalyzeCommandTest.cs @@ -22,7 +22,7 @@ public class AnalyzeCommandTest /// Tests that performing analysis from a .NET Core project works correctly. /// [TestMethod] - [Ignore] // This test fails due to a bug in MSBuild. See https://github.com/Augurk/Augurk.CSharpAnalyzer/issues/1 + //[Ignore] // This test fails due to a bug in MSBuild. See https://github.com/Augurk/Augurk.CSharpAnalyzer/issues/1 public async Task RunAnalysisFromNetCoreProject() { // Arrange @@ -45,7 +45,11 @@ public async Task RunAnalysisFromNetCoreProject() static Task GetWorkspace(string solutionPath) { var workspace = new AdhocWorkspace(); - var analyzerManager = new AnalyzerManager(solutionPath); + var analyzerManager = new AnalyzerManager(solutionPath, new AnalyzerManagerOptions + { + LogWriter = Console.Out + }); + foreach (var project in analyzerManager.Projects.Values) { project.AddToWorkspace(workspace); diff --git a/src/Augurk.CSharpAnalyzer.UnitTest/Augurk.CSharpAnalyzer.UnitTest.csproj b/src/Augurk.CSharpAnalyzer.UnitTest/Augurk.CSharpAnalyzer.UnitTest.csproj index 046d9e4..dcde125 100644 --- a/src/Augurk.CSharpAnalyzer.UnitTest/Augurk.CSharpAnalyzer.UnitTest.csproj +++ b/src/Augurk.CSharpAnalyzer.UnitTest/Augurk.CSharpAnalyzer.UnitTest.csproj @@ -1,13 +1,14 @@ - + - netcoreapp2.0 + netcoreapp2.1 false - + + diff --git a/src/Augurk.CSharpAnalyzer.nuspec b/src/Augurk.CSharpAnalyzer.nuspec index 357f203..7f2f194 100644 --- a/src/Augurk.CSharpAnalyzer.nuspec +++ b/src/Augurk.CSharpAnalyzer.nuspec @@ -16,9 +16,9 @@ augurk gherkin specflow commandline roslyn - - - + + + \ No newline at end of file diff --git a/src/Augurk.CSharpAnalyzer.sln b/src/Augurk.CSharpAnalyzer.sln index d59b93e..1001279 100644 --- a/src/Augurk.CSharpAnalyzer.sln +++ b/src/Augurk.CSharpAnalyzer.sln @@ -19,8 +19,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Augurk.CSharpAnalyzer.UnitT EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{6C76CA85-FD46-4C03-BD30-BEEBC42BB4B2}" ProjectSection(SolutionItems) = preProject - ..\appveyor.yml = ..\appveyor.yml Augurk.CSharpAnalyzer.nuspec = Augurk.CSharpAnalyzer.nuspec + ..\azure-pipelines.yml = ..\azure-pipelines.yml ..\GitVersion.yml = ..\GitVersion.yml ..\README.md = ..\README.md EndProjectSection