Skip to content

Commit

Permalink
Merge pull request #34 from christianhelle/options-page
Browse files Browse the repository at this point in the history
Implement Options page
  • Loading branch information
christianhelle committed Jun 14, 2019
2 parents 82076b6 + 9dd9ba6 commit 2934c65
Show file tree
Hide file tree
Showing 73 changed files with 1,914 additions and 177 deletions.
11 changes: 7 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,16 @@ This Visual Studio Extension will automatically add the required nuget packages

![NSwag Studio Context Menu](https://github.com/christianhelle/apiclientcodegen/raw/master/images/nswagstudio-context-menu.jpg)

![AutoRestCodeGenerator](https://github.com/christianhelle/apiclientcodegen/raw/master/images/autorestcodegenerator-custom-tool.jpg)

![NSwagCodeGenerator](https://github.com/christianhelle/apiclientcodegen/raw/master/images/nswagcodegenerator-custom-tool.jpg)
**Settings**

![SwaggerCodeGenerator](https://github.com/christianhelle/apiclientcodegen/raw/master/images/swaggercodegenerator-custom-tool.jpg)
This extension will by default make some assumptions on the installation paths for **Java**, **NSwag** and **NPM** but also provides option pages for configuring this

![OpenApiCodeGenerator](https://github.com/christianhelle/apiclientcodegen/raw/master/images/openapicodegenerator-custom-tool.jpg)
![Options - General](https://github.com/christianhelle/apiclientcodegen/raw/master/images/options-general.png)

![Options - NSwag](https://github.com/christianhelle/apiclientcodegen/raw/master/images/options-nswag.png)

![Options - NSwag Studio](https://github.com/christianhelle/apiclientcodegen/raw/master/images/options-nswagstudio.png)


For tips and tricks on software development, check out [my blog](https://christian-helle.blogspot.com)
Expand Down
Binary file added images/options-general.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/options-nswag.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/options-nswagstudio.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
62 changes: 60 additions & 2 deletions src/ApiClientCodeGen.Tests/ApiClientCodeGen.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -39,33 +39,91 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="AutoFixture, Version=4.9.0.0, Culture=neutral, PublicKeyToken=b24654c590009d4f, processorArchitecture=MSIL">
<HintPath>..\packages\AutoFixture.4.9.0\lib\net452\AutoFixture.dll</HintPath>
</Reference>
<Reference Include="Castle.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc, processorArchitecture=MSIL">
<HintPath>..\packages\Castle.Core.4.4.0\lib\net45\Castle.Core.dll</HintPath>
</Reference>
<Reference Include="DotLiquid, Version=2.0.254.0, Culture=neutral, PublicKeyToken=82e46016ecf9f07c, processorArchitecture=MSIL">
<HintPath>..\packages\DotLiquid.2.0.254\lib\net45\DotLiquid.dll</HintPath>
</Reference>
<Reference Include="Fare, Version=2.1.0.0, Culture=neutral, PublicKeyToken=ea68d375bf33a7c8, processorArchitecture=MSIL">
<HintPath>..\packages\Fare.2.1.1\lib\net35\Fare.dll</HintPath>
</Reference>
<Reference Include="FluentAssertions, Version=5.6.0.0, Culture=neutral, PublicKeyToken=33f2691a05b67b6a, processorArchitecture=MSIL">
<HintPath>..\packages\FluentAssertions.5.6.0\lib\net45\FluentAssertions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.VisualStudio.OLE.Interop, Version=7.1.40304.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<HintPath>..\packages\Microsoft.VisualStudio.OLE.Interop.7.10.6071\lib\Microsoft.VisualStudio.OLE.Interop.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.Shell.Interop, Version=7.1.40304.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<HintPath>..\packages\Microsoft.VisualStudio.Shell.Interop.7.10.6072\lib\net11\Microsoft.VisualStudio.Shell.Interop.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.1.4.0\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.1.4.0\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TextManager.Interop, Version=7.1.40304.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<HintPath>..\packages\Microsoft.VisualStudio.TextManager.Interop.7.10.6071\lib\net11\Microsoft.VisualStudio.TextManager.Interop.dll</HintPath>
</Reference>
<Reference Include="Moq, Version=4.11.0.0, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<HintPath>..\packages\Moq.4.11.0\lib\net45\Moq.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="NJsonSchema, Version=9.13.37.0, Culture=neutral, PublicKeyToken=c2f9c3bdfae56102, processorArchitecture=MSIL">
<HintPath>..\packages\NJsonSchema.9.13.37\lib\net45\NJsonSchema.dll</HintPath>
</Reference>
<Reference Include="NJsonSchema.CodeGeneration, Version=9.13.37.0, Culture=neutral, PublicKeyToken=c2f9c3bdfae56102, processorArchitecture=MSIL">
<HintPath>..\packages\NJsonSchema.CodeGeneration.9.13.37\lib\net451\NJsonSchema.CodeGeneration.dll</HintPath>
</Reference>
<Reference Include="NJsonSchema.CodeGeneration.CSharp, Version=9.13.37.0, Culture=neutral, PublicKeyToken=c2f9c3bdfae56102, processorArchitecture=MSIL">
<HintPath>..\packages\NJsonSchema.CodeGeneration.CSharp.9.13.37\lib\net451\NJsonSchema.CodeGeneration.CSharp.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Net" />
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll</HintPath>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="CodeGeneratorFactoryTests.cs" />
<Compile Include="CSharpFileMergerTests.cs" />
<Compile Include="CustomTool\SingleFileCodeGeneratorTests.cs" />
<Compile Include="CustomTool\TestSingleFileCodeGenerator.cs" />
<Compile Include="Extensions\GetDependenciesTests.cs" />
<Compile Include="Extensions\GetSupportedCodeGeneratorTests.cs" />
<Compile Include="Extensions\StringToIntPtrTests.cs" />
<Compile Include="Extensions\GetCustomToolNameTests.cs" />
<Compile Include="Extensions\ToJsonTests.cs" />
<Compile Include="Generators\CodeGeneratorFactoryTests.cs" />
<Compile Include="Generators\CSharpFileMergerTests.cs" />
<Compile Include="DeploymentItemTests.cs" />
<Compile Include="Generators\CodeGeneratorTests.cs" />
<Compile Include="Generators\NSwagStudio\NSwagStudioFileHelperTests.cs" />
<Compile Include="NuGet\SupportedCodeGeneratorExtensionsTests.cs" />
<Compile Include="NuGet\PackageDependencyListProviderTests.cs" />
<Compile Include="Options\JavaPathProviderTests.cs" />
<Compile Include="Options\NSwagCSharpOptionsTests.cs" />
<Compile Include="Options\NSwagStudioOptionsTests.cs" />
<Compile Include="Options\PathProviderTests.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="TestClassBase.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Core;
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Generators;
using FluentAssertions;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
using System;

namespace ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Tests.CustomTool
{
[TestClass]
public class SingleFileCodeGeneratorTests
{
private const SupportedLanguage lang = SupportedLanguage.CSharp;

[DataTestMethod]
[DataRow(SupportedCodeGenerator.AutoRest)]
[DataRow(SupportedCodeGenerator.NSwag)]
[DataRow(SupportedCodeGenerator.Swagger)]
[DataRow(SupportedCodeGenerator.OpenApi)]
public void Generate_Test(SupportedCodeGenerator generator)
{
var code = Test.CreateAnnonymous<string>();
var input = Test.CreateAnnonymous<string>();
var contents = Test.CreateAnnonymous<string>();
var @namespace = Test.CreateAnnonymous<string>();
var rgbOutputFileContents = new[] { IntPtr.Zero };

var progressMock = new Mock<IVsGeneratorProgress>();

var generatorMock = new Mock<ICodeGenerator>();
generatorMock
.Setup(c => c.GenerateCode(progressMock.Object))
.Returns(code);

var factoryMock = new Mock<ICodeGeneratorFactory>();
factoryMock
.Setup(c => c.Create(@namespace, contents, input, lang, generator))
.Returns(generatorMock.Object);

var sut = new TestSingleFileCodeGenerator(generator)
{
Factory = factoryMock.Object
};

var result = sut.Generate(
input,
contents,
@namespace,
rgbOutputFileContents,
out var pcbOutput,
progressMock.Object);

result.Should().Be(0);
pcbOutput.Should().Be((uint)code.Length);
rgbOutputFileContents[0].Should().NotBe(IntPtr.Zero);

progressMock.Verify(
c => c.Progress(It.IsAny<uint>(), It.IsAny<uint>()),
Times.Exactly(2));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Core;
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.CustomTool;

namespace ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Tests.CustomTool
{
internal class TestSingleFileCodeGenerator : SingleFileCodeGenerator
{
internal TestSingleFileCodeGenerator(
SupportedCodeGenerator supportedCodeGenerator)
: base(supportedCodeGenerator, SupportedLanguage.CSharp)
{
}

public override int DefaultExtension(out string pbstrDefaultExtension)
{
pbstrDefaultExtension = ".cs";
return 0;
}
}
}
39 changes: 39 additions & 0 deletions src/ApiClientCodeGen.Tests/Extensions/GetCustomToolNameTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Core;
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Extensions;
using FluentAssertions;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Tests.Extensions
{
[TestClass]
public class GetCustomToolNameTests
{
[TestMethod]
public void GetCustomToolName_AutoRest()
=> SupportedCodeGenerator.AutoRest
.GetCustomToolName()
.Should()
.Contain("AutoRest");

[TestMethod]
public void GetCustomToolName_NSwag()
=> SupportedCodeGenerator.NSwag
.GetCustomToolName()
.Should()
.Contain("NSwag");

[TestMethod]
public void GetCustomToolName_Swagger()
=> SupportedCodeGenerator.Swagger
.GetCustomToolName()
.Should()
.Contain("Swagger");

[TestMethod]
public void GetCustomToolName_OpenApi()
=> SupportedCodeGenerator.OpenApi
.GetCustomToolName()
.Should()
.Contain("OpenApi");
}
}
44 changes: 44 additions & 0 deletions src/ApiClientCodeGen.Tests/Extensions/GetDependenciesTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using System.Linq;
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Core;
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Extensions;
using FluentAssertions;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Tests.Extensions
{
[TestClass]
public class GetDependenciesTests
{
[TestMethod]
public void GetDependencies_AutoRest()
=> SupportedCodeGenerator.AutoRest
.GetDependencies()
.Any(c => c.Name == "Microsoft.Rest.ClientRuntime")
.Should()
.BeTrue();

[TestMethod]
public void GetDependencies_NSwag()
=> SupportedCodeGenerator.NSwag
.GetDependencies()
.Any(c => c.Name == "Newtonsoft.Json")
.Should()
.BeTrue();

[TestMethod]
public void GetDependencies_Swagger()
=> SupportedCodeGenerator.Swagger
.GetDependencies()
.Any(c => c.Name == "RestSharp" || c.Name == "JsonSubTypes")
.Should()
.BeTrue();

[TestMethod]
public void GetDependencies_OpenApi()
=> SupportedCodeGenerator.OpenApi
.GetDependencies()
.Any(c => c.Name == "RestSharp" || c.Name == "JsonSubTypes")
.Should()
.BeTrue();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Core;
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.CustomTool.AutoRest;
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.CustomTool.NSwag;
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.CustomTool.OpenApi;
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.CustomTool.Swagger;
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Extensions;
using FluentAssertions;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Tests.Extensions
{
[TestClass]
public class GetSupportedCodeGeneratorTests
{
[TestMethod]
public void GetSupportedCodeGenerator_AutoRest()
=> typeof(AutoRestCodeGenerator)
.GetSupportedCodeGenerator()
.Should()
.Be(SupportedCodeGenerator.AutoRest);

[TestMethod]
public void GetSupportedCodeGenerator_NSwag()
=> typeof(NSwagCodeGenerator)
.GetSupportedCodeGenerator()
.Should()
.Be(SupportedCodeGenerator.NSwag);

[TestMethod]
public void GetSupportedCodeGenerator_Swagger()
=> typeof(SwaggerCodeGenerator)
.GetSupportedCodeGenerator()
.Should()
.Be(SupportedCodeGenerator.Swagger);

[TestMethod]
public void GetSupportedCodeGenerator_OpenApi()
=> typeof(OpenApiCodeGenerator)
.GetSupportedCodeGenerator()
.Should()
.Be(SupportedCodeGenerator.OpenApi);
}
}
34 changes: 34 additions & 0 deletions src/ApiClientCodeGen.Tests/Extensions/StringToIntPtrTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
using System;
using ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Extensions;
using FluentAssertions;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ChristianHelle.DeveloperTools.CodeGenerators.ApiClient.Tests.Extensions
{
[TestClass]
public class StringToIntPtrTests
{
private string str;
private IntPtr result;
private uint length;

[TestInitialize]
public void Init()
{
str = Test.CreateAnnonymous<string>();
result = str.ConvertToIntPtr(out length);
}

[TestMethod]
public void IntPtr_Not_Zero()
=> result.Should().NotBe(IntPtr.Zero);

[TestMethod]
public void Length_Not_Zero()
=> length.Should().BeGreaterThan(0);

[TestMethod]
public void Length_Matches_String_Length()
=> length.Should().Be((uint)str.Length);
}
}
Loading

0 comments on commit 2934c65

Please sign in to comment.