From 7160893c3a205aedf0d082c236a3fa6521d63af7 Mon Sep 17 00:00:00 2001 From: Johannes Bader Date: Tue, 29 Aug 2017 12:05:02 -0700 Subject: [PATCH 1/2] finetune --- src/Program.cs | 47 +++++++------------------------------- src/autorest.csharp.csproj | 4 ++-- 2 files changed, 10 insertions(+), 41 deletions(-) diff --git a/src/Program.cs b/src/Program.cs index 7ab411f4cfc..7e46ea3b50f 100644 --- a/src/Program.cs +++ b/src/Program.cs @@ -19,10 +19,10 @@ public static IAnyPlugin GetPlugin(string name) { switch (name) { - case "CSharp": return new AutoRest.CSharp.PluginCs(); - case "Azure.CSharp": return new AutoRest.CSharp.Azure.PluginCsa(); - case "Azure.CSharp.Fluent": return new AutoRest.CSharp.Azure.Fluent.PluginCsaf(); - case "Azure.JsonRpcClient": return new AutoRest.CSharp.Azure.JsonRpcClient.PluginCsa(); + case "csharp": return new AutoRest.CSharp.PluginCs(); + case "Azure.csharp": return new AutoRest.CSharp.Azure.PluginCsa(); + case "Azure.csharp.Fluent": return new AutoRest.CSharp.Azure.Fluent.PluginCsaf(); + case "Azure.jsonrpcclient": return new AutoRest.CSharp.Azure.JsonRpcClient.PluginCsa(); } throw new Exception("Unknown plugin: " + name); } @@ -34,7 +34,7 @@ public static int Main(string[] args ) { if(args != null && args.Length > 0 && args[0] == "--server") { var connection = new Connection(Console.Out, Console.OpenStandardInput()); - connection.Dispatch>("GetPluginNames", async () => new []{ "csharp", "csharp-simplifier" }); + connection.Dispatch>("GetPluginNames", async () => new []{ "jsonrpcclient", "csharp", "csharp-simplifier" }); connection.Dispatch("Process", (plugin, sessionId) => new Program(connection, plugin, sessionId).Process()); connection.DispatchNotification("Shutdown", connection.Stop); @@ -98,8 +98,6 @@ protected override async Task ProcessInternal() } else { - var codeGenerator = this.plugin; - var files = await ListInputs(); if (files.Length != 1) { @@ -108,20 +106,6 @@ protected override async Task ProcessInternal() var modelAsJson = (await ReadFile(files[0])).EnsureYamlIsJson(); var codeModelT = new ModelSerializer().Load(modelAsJson); - // get internal name - var language = new[] { - "CSharp", - "Ruby", - "NodeJS", - "Python", - "Go", - "Php", - "Java", - "AzureResourceSchema", - "JsonRpcClient" } - .Where(x => x.ToLowerInvariant() == codeGenerator) - .First(); - // build settings var altNamespace = (await GetValue("input-file") ?? new[] { "" }).FirstOrDefault()?.Split('/').Last().Split('\\').Last().Split('.').First(); @@ -142,30 +126,15 @@ protected override async Task ProcessInternal() Settings.Instance.CustomSettings.Add("SyncMethods", GetXmsCodeGenSetting(codeModelT, "syncMethods") ?? await GetValue("sync-methods") ?? "essential"); Settings.Instance.CustomSettings.Add("UseDateTimeOffset", GetXmsCodeGenSetting(codeModelT, "useDateTimeOffset") ?? await GetValue("use-datetimeoffset") ?? false); Settings.Instance.CustomSettings["ClientSideValidation"] = await GetValue("client-side-validation") ?? false; - int defaultMaximumCommentColumns = codeGenerator == "go" ? 120 : Settings.DefaultMaximumCommentColumns; + int defaultMaximumCommentColumns = Settings.DefaultMaximumCommentColumns; Settings.Instance.MaximumCommentColumns = await GetValue("max-comment-columns") ?? defaultMaximumCommentColumns; Settings.Instance.OutputFileName = await GetValue("output-file"); - if (codeGenerator == "csharp") - { - Settings.Instance.Header = $"\n{Settings.Instance.Header}\n"; - } - if (codeGenerator == "ruby" || codeGenerator == "python") - { - // TODO: sort out matters here entirely instead of relying on Input being read somewhere... - var inputFile = await GetValue("input-file"); - Settings.Instance.Input = inputFile.FirstOrDefault(); - Settings.Instance.PackageName = await GetValue("package-name"); - Settings.Instance.PackageVersion = await GetValue("package-version"); - } - if (codeGenerator == "go") - { - Settings.Instance.PackageVersion = await GetValue("package-version"); - } + Settings.Instance.Header = $"\n{Settings.Instance.Header}\n"; // process var plugin = ExtensionsLoader.GetPlugin( (await GetValue("azure-arm") ?? false ? "Azure." : "") + - language + + this.plugin + (await GetValue("fluent") ?? false ? ".Fluent" : "") + (await GetValue("testgen") ?? false ? ".TestGen" : "")); Settings.PopulateSettings(plugin.Settings, Settings.Instance.CustomSettings); diff --git a/src/autorest.csharp.csproj b/src/autorest.csharp.csproj index d067f62c085..2aeb4eadb27 100644 --- a/src/autorest.csharp.csproj +++ b/src/autorest.csharp.csproj @@ -74,8 +74,8 @@ - - + + All From 480d802abf3f33fcac58dbd07f34add9a42933c1 Mon Sep 17 00:00:00 2001 From: Johannes Bader Date: Wed, 30 Aug 2017 07:39:36 -0700 Subject: [PATCH 2/2] refactor tests --- test/azure/CSharpAzureCodeNamingFrameworkTests.cs | 2 +- test/unit/Bug1560.cs | 2 +- test/unit/Bug1587.cs | 2 +- test/unit/Bug1623.cs | 2 +- test/unit/Bug1664.cs | 2 +- test/unit/Bug1720.cs | 2 +- test/unit/Bug1806.cs | 2 +- test/unit/Bug2039.cs | 2 +- test/unit/Bug470.cs | 1 - test/unit/Bug781.cs | 2 +- test/unit/BugTest.cs | 11 ++++++----- test/unit/NullableParamBehavior.cs | 2 +- test/unit/ServerCodeSimpleGet.cs | 1 - test/unit/SharedResponseHeaders.cs | 2 +- test/unit/TestExtensions.cs | 11 ++++++----- 15 files changed, 23 insertions(+), 23 deletions(-) diff --git a/test/azure/CSharpAzureCodeNamingFrameworkTests.cs b/test/azure/CSharpAzureCodeNamingFrameworkTests.cs index 344b4daff4a..61e4a819f4a 100644 --- a/test/azure/CSharpAzureCodeNamingFrameworkTests.cs +++ b/test/azure/CSharpAzureCodeNamingFrameworkTests.cs @@ -24,7 +24,7 @@ public void ConvertsPageResultsToPageTypeTest() var input = Path.Combine(Core.Utilities.Extensions.CodeBaseDirectory(typeof(CSharpAzureCodeNamingFrameworkTests)), "Resource", "azure-paging.json"); var modeler = new SwaggerModeler(); var codeModel = modeler.Build(SwaggerParser.Parse(File.ReadAllText(input))); - var plugin = new PluginCsa(); + var plugin = new AutoRest.CSharp.Azure.PluginCsa(); using (plugin.Activate()) { codeModel = plugin.Serializer.Load(codeModel); codeModel = plugin.Transformer.TransformCodeModel(codeModel); diff --git a/test/unit/Bug1560.cs b/test/unit/Bug1560.cs index ac49dd1722b..43936d93dc7 100644 --- a/test/unit/Bug1560.cs +++ b/test/unit/Bug1560.cs @@ -100,7 +100,7 @@ public async Task MarkAllDeprecatedOperationVariantsObsolete() [Fact] public async Task MarkAllDeprecatedOperationVariantsObsoleteAzure() { - using (var fileSystem = GenerateCodeForTestFromSpec(codeGenerator: "Azure.CSharp")) + using (var fileSystem = GenerateCodeForTestFromSpec(new AutoRest.CSharp.Azure.PluginCsa())) { // Expected Files Assert.True(fileSystem.FileExists(@"Models\ResultObject.cs")); diff --git a/test/unit/Bug1587.cs b/test/unit/Bug1587.cs index a34effb07f7..72aacf15a28 100644 --- a/test/unit/Bug1587.cs +++ b/test/unit/Bug1587.cs @@ -24,7 +24,7 @@ public Bug1587(ITestOutputHelper output) : base(output) [Fact] public async Task CheckLruCodegenBehavior() { - using (var fileSystem = GenerateCodeForTestFromSpec(codeGenerator: "Azure.CSharp")) + using (var fileSystem = GenerateCodeForTestFromSpec(new AutoRest.CSharp.Azure.PluginCsa())) { // Expected Files Assert.True(fileSystem.FileExists(@"SimpleAPIClient.cs")); diff --git a/test/unit/Bug1623.cs b/test/unit/Bug1623.cs index 107d45320de..84b7903e9b3 100644 --- a/test/unit/Bug1623.cs +++ b/test/unit/Bug1623.cs @@ -24,7 +24,7 @@ public Bug1623(ITestOutputHelper output) : base(output) [Fact] public async Task CheckForCorrectParameterType() { - using (var fileSystem = GenerateCodeForTestFromSpec(codeGenerator: "Azure.CSharp")) + using (var fileSystem = GenerateCodeForTestFromSpec(new AutoRest.CSharp.Azure.PluginCsa())) { // Expected Files Assert.True(fileSystem.FileExists(@"Models\Page.cs")); diff --git a/test/unit/Bug1664.cs b/test/unit/Bug1664.cs index 2cb7f781023..4cda02376a7 100644 --- a/test/unit/Bug1664.cs +++ b/test/unit/Bug1664.cs @@ -23,7 +23,7 @@ public Bug1664(ITestOutputHelper output) : base(output) public async Task EnsureClientNameEndsWithClient() { // simplified test pattern for unit testing aspects of code generation - using (var fileSystem = GenerateCodeForTestFromSpec(codeGenerator: "Azure.CSharp")) + using (var fileSystem = GenerateCodeForTestFromSpec(new AutoRest.CSharp.Azure.PluginCsa())) { // Expected Files Assert.True(fileSystem.FileExists(@"SimpleAPIClient.cs")); diff --git a/test/unit/Bug1720.cs b/test/unit/Bug1720.cs index f4b0629d1bc..c03e4ea0131 100644 --- a/test/unit/Bug1720.cs +++ b/test/unit/Bug1720.cs @@ -20,7 +20,7 @@ public Bug1720(ITestOutputHelper output) : base(output) [Fact] public async Task PolymorphicTypesAreNotConstants() { - using (var fileSystem = GenerateCodeForTestFromSpec(codeGenerator: "Azure.CSharp")) + using (var fileSystem = GenerateCodeForTestFromSpec(new AutoRest.CSharp.Azure.PluginCsa())) { // Expected Files Assert.True(fileSystem.FileExists(@"JobDefinitionsOperations.cs")); diff --git a/test/unit/Bug1806.cs b/test/unit/Bug1806.cs index 5f9ed4c4c36..565fd1603ef 100644 --- a/test/unit/Bug1806.cs +++ b/test/unit/Bug1806.cs @@ -27,7 +27,7 @@ public Bug1806(ITestOutputHelper output) : base(output) public async Task EmptyDefaultResponseExceptionHandling() { // simplified test pattern for unit testing aspects of code generation - using (var fileSystem = GenerateCodeForTestFromSpec(codeGenerator: "Azure.CSharp")) + using (var fileSystem = GenerateCodeForTestFromSpec(new AutoRest.CSharp.Azure.PluginCsa())) { // check for the expected class. Assert.True(fileSystem.FileExists(@"ContainerServicesOperations.cs")); diff --git a/test/unit/Bug2039.cs b/test/unit/Bug2039.cs index 8de7aca48d2..6f6986ec9c8 100644 --- a/test/unit/Bug2039.cs +++ b/test/unit/Bug2039.cs @@ -25,7 +25,7 @@ public Bug2039(ITestOutputHelper output) : base(output) [Fact] public void CircularReferenceBreaksIsConstant() { - using (var fileSystem = GenerateCodeForTestFromSpec(codeGenerator: "Azure.CSharp")) + using (var fileSystem = GenerateCodeForTestFromSpec(new AutoRest.CSharp.Azure.PluginCsa())) { // if we reach this, apparently no stack overflow has happened :-) Assert.True(fileSystem.FileExists(@"Models\Node.cs")); diff --git a/test/unit/Bug470.cs b/test/unit/Bug470.cs index c957c8922b4..f6de02a3827 100644 --- a/test/unit/Bug470.cs +++ b/test/unit/Bug470.cs @@ -33,7 +33,6 @@ public async Task SupportModelsNameOverride() var settings = new Settings { - CodeGenerator = "CSharp", OutputDirectory = "", Namespace = "Test", ModelsName = modelsName diff --git a/test/unit/Bug781.cs b/test/unit/Bug781.cs index c6d4cdfe773..d91f73fb8aa 100644 --- a/test/unit/Bug781.cs +++ b/test/unit/Bug781.cs @@ -27,7 +27,7 @@ public Bug781(ITestOutputHelper output) : base(output) [Fact] public async Task EnsureCustomInitMethodInConstructors() { - using (var fileSystem = GenerateCodeForTestFromSpec(codeGenerator: "Azure.CSharp")) + using (var fileSystem = GenerateCodeForTestFromSpec(new AutoRest.CSharp.Azure.PluginCsa())) { // Expected Files Assert.True(fileSystem.FileExists(@"Models\Product.cs")); diff --git a/test/unit/BugTest.cs b/test/unit/BugTest.cs index 99d3fe17b17..01cb00a38d3 100644 --- a/test/unit/BugTest.cs +++ b/test/unit/BugTest.cs @@ -24,7 +24,8 @@ namespace AutoRest.CSharp.Unit.Tests { using System.Runtime.Loader; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Routing; - + + using IAnyPlugin = AutoRest.Core.Extensibility.IPlugin, AutoRest.Core.ITransformer, AutoRest.Core.CodeGenerator, AutoRest.Core.CodeNamer, AutoRest.Core.Model.CodeModel>; public class BugTest { internal static string[] SuppressWarnings = {"CS1701","CS1702", "CS1591"}; @@ -46,13 +47,13 @@ public BugTest() { protected virtual MemoryFileSystem CreateMockFilesystem() => new MemoryFileSystem(); - protected virtual MemoryFileSystem GenerateCodeForTestFromSpec(string codeGenerator = "CSharp") { - return GenerateCodeForTestFromSpec($"{GetType().Name}", codeGenerator); + protected virtual MemoryFileSystem GenerateCodeForTestFromSpec(IAnyPlugin plugin = null) { + return GenerateCodeForTestFromSpec($"{GetType().Name}", plugin); } - protected virtual MemoryFileSystem GenerateCodeForTestFromSpec(string dirName, string codeGenerator = "CSharp") { + protected virtual MemoryFileSystem GenerateCodeForTestFromSpec(string dirName, IAnyPlugin plugin = null) { var fs = CreateMockFilesystem(); - return dirName.GenerateCodeInto(fs, codeGenerator); + return dirName.GenerateCodeInto(fs, plugin ?? new PluginCs()); } protected virtual void WriteLine(string format, params object[] values) { diff --git a/test/unit/NullableParamBehavior.cs b/test/unit/NullableParamBehavior.cs index 97e98b1d73e..c25cf1a9286 100644 --- a/test/unit/NullableParamBehavior.cs +++ b/test/unit/NullableParamBehavior.cs @@ -121,7 +121,7 @@ public async Task NullableParams() [Fact] public async Task NullableParamsAzure() { - using (var fileSystem = GenerateCodeForTestFromSpec(codeGenerator: "Azure.CSharp")) + using (var fileSystem = GenerateCodeForTestFromSpec(new AutoRest.CSharp.Azure.PluginCsa())) { // Expected Files string generatedCodeFileName = "TestOperations.cs"; diff --git a/test/unit/ServerCodeSimpleGet.cs b/test/unit/ServerCodeSimpleGet.cs index e84b43daac1..be06ddec3ae 100644 --- a/test/unit/ServerCodeSimpleGet.cs +++ b/test/unit/ServerCodeSimpleGet.cs @@ -32,7 +32,6 @@ public async Task CompileAndVerifyServerCode() var settings = new Settings { - CodeGenerator = "CSharp", FileSystemInput = fileSystem, OutputDirectory = "", Namespace = "Test", diff --git a/test/unit/SharedResponseHeaders.cs b/test/unit/SharedResponseHeaders.cs index a2e4043a50a..c0f3027be64 100644 --- a/test/unit/SharedResponseHeaders.cs +++ b/test/unit/SharedResponseHeaders.cs @@ -26,7 +26,7 @@ public SharedResponseHeaders(ITestOutputHelper output) : base(output) [Fact] public async Task CheckGeneratesValidCSharp() { - using (var fileSystem = GenerateCodeForTestFromSpec(codeGenerator: "Azure.CSharp")) + using (var fileSystem = GenerateCodeForTestFromSpec(new AutoRest.CSharp.Azure.PluginCsa())) { Assert.True(fileSystem.FileExists("Models/RetryHeader.cs")); Assert.False(fileSystem.FileExists("Models/BatchAccountCreateHeaders.cs")); diff --git a/test/unit/TestExtensions.cs b/test/unit/TestExtensions.cs index ba4fdb8349d..126e81d8b0c 100644 --- a/test/unit/TestExtensions.cs +++ b/test/unit/TestExtensions.cs @@ -13,6 +13,8 @@ using AutoRest.Swagger; using AutoRest.Modeler; +using IAnyPlugin = AutoRest.Core.Extensibility.IPlugin, AutoRest.Core.ITransformer, AutoRest.Core.CodeGenerator, AutoRest.Core.CodeNamer, AutoRest.Core.Model.CodeModel>; + namespace AutoRest.CSharp.Unit.Tests { internal static class TestExtensions @@ -60,25 +62,25 @@ internal static string[] GetFilesByExtension(this MemoryFileSystem fileSystem, s return fileSystem.GetFiles(path, "*.*", s).Where(f => fileExts.Contains(f.Substring(f.LastIndexOf(".")+1))).ToArray(); } - internal static MemoryFileSystem GenerateCodeInto(this string testName, MemoryFileSystem inputFileSystem, string codeGenerator="CSharp") + internal static MemoryFileSystem GenerateCodeInto(this string testName, MemoryFileSystem inputFileSystem, IAnyPlugin plugin = null) { using (NewContext) { var settings = new Settings { - CodeGenerator = codeGenerator, FileSystemInput = inputFileSystem, OutputDirectory = "", Namespace = "Test", CodeGenerationMode = "rest-client" }; - return testName.GenerateCodeInto(inputFileSystem, settings); + return testName.GenerateCodeInto(inputFileSystem, settings, plugin); } } - internal static MemoryFileSystem GenerateCodeInto(this string testName, MemoryFileSystem inputFileSystem, Settings settings) + internal static MemoryFileSystem GenerateCodeInto(this string testName, MemoryFileSystem inputFileSystem, Settings settings, IAnyPlugin plugin = null) { + plugin = plugin ?? new PluginCs(); Settings.Instance.FileSystemInput = inputFileSystem; // copy the whole input directory into the memoryfilesystem. inputFileSystem.CopyFolder("Resource", testName,""); @@ -95,7 +97,6 @@ internal static MemoryFileSystem GenerateCodeInto(this string testName, MemoryFi throw new Exception($"Can't find swagger file ${testName} [.yaml] [.json] [.md]"); } - var plugin = ExtensionsLoader.GetPlugin(settings.CodeGenerator); var modeler = new SwaggerModeler(Settings.Instance); var swagger = Singleton.Instance = SwaggerParser.Parse(inputFileSystem.ReadAllText(Settings.Instance.Input)); var codeModel = modeler.Build(swagger);