internal static MemoryFileSystem GenerateCodeInto(this string testName, MemoryFileSystem fileSystem, Settings settings) { // copy the whole input directory into the memoryfilesystem. fileSystem.CopyFolder("Resource", testName, ""); // find the appropriately named .yaml or .json file for the swagger. foreach (var ext in new[] { ".yaml", ".json", ".md" }) { var name = testName + ext; if (fileSystem.FileExists(name)) { settings.Input = name; } } if (string.IsNullOrWhiteSpace(settings.Input)) { throw new Exception($"Can't find swagger file ${testName} [.yaml] [.json] [.md]"); } var plugin = ExtensionsLoader.GetPlugin(); var modeler = ExtensionsLoader.GetModeler(); var codeModel = modeler.Build(); // After swagger Parser codeModel = AutoRestController.RunExtensions(Trigger.AfterModelCreation, codeModel); // After swagger Parser codeModel = AutoRestController.RunExtensions(Trigger.BeforeLoadingLanguageSpecificModel, codeModel); using (plugin.Activate()) { // load model into language-specific code model codeModel = plugin.Serializer.Load(codeModel); // we've loaded the model, run the extensions for after it's loaded codeModel = AutoRestController.RunExtensions(Trigger.AfterLoadingLanguageSpecificModel, codeModel); // apply language-specific tranformation (more than just language-specific types) // used to be called "NormalizeClientModel" . codeModel = plugin.Transformer.TransformCodeModel(codeModel); // next set of extensions codeModel = AutoRestController.RunExtensions(Trigger.AfterLanguageSpecificTransform, codeModel); // next set of extensions codeModel = AutoRestController.RunExtensions(Trigger.BeforeGeneratingCode, codeModel); // Generate code from CodeModel. plugin.CodeGenerator.Generate(codeModel).GetAwaiter().GetResult(); } return(fileSystem); }
internal static MemoryFileSystem GenerateCodeInto(this string inputFile, MemoryFileSystem fileSystem, Settings settings) { string fileName = Path.GetFileName(inputFile); // If inputFile does not contain a path use the local Resource folder if (inputFile == fileName) { fileSystem.Copy(Path.Combine("Resource", inputFile)); } else { fileSystem.Copy(inputFile); } settings.Input = fileName; var plugin = ExtensionsLoader.GetPlugin(); var modeler = ExtensionsLoader.GetModeler(); var codeModel = modeler.Build(); // After swagger Parser codeModel = AutoRestController.RunExtensions(Trigger.AfterModelCreation, codeModel); // After swagger Parser codeModel = AutoRestController.RunExtensions(Trigger.BeforeLoadingLanguageSpecificModel, codeModel); using (plugin.Activate()) { // load model into language-specific code model codeModel = plugin.Serializer.Load(codeModel); // we've loaded the model, run the extensions for after it's loaded codeModel = AutoRestController.RunExtensions(Trigger.AfterLoadingLanguageSpecificModel, codeModel); // apply language-specific tranformation (more than just language-specific types) // used to be called "NormalizeClientModel" . codeModel = plugin.Transformer.TransformCodeModel(codeModel); // next set of extensions codeModel = AutoRestController.RunExtensions(Trigger.AfterLanguageSpecificTransform, codeModel); // next set of extensions codeModel = AutoRestController.RunExtensions(Trigger.BeforeGeneratingCode, codeModel); // Generate code from CodeModel. plugin.CodeGenerator.Generate(codeModel).GetAwaiter().GetResult(); } return(fileSystem); }
private static void GenerateCodeInto(Action <IEnumerable <LogMessage> > processMessages) { using (NewContext) { var plugin = ExtensionsLoader.GetPlugin(); var modeler = ExtensionsLoader.GetModeler(); var messages = new List <LogMessage>(); Logger.Instance.AddListener(new SignalingLogListener(Category.Info, message => messages.Add(message))); try { var codeModel = modeler.Build(); // After swagger Parser codeModel = AutoRestController.RunExtensions(Trigger.AfterModelCreation, codeModel); // After swagger Parser codeModel = AutoRestController.RunExtensions(Trigger.BeforeLoadingLanguageSpecificModel, codeModel); using (plugin.Activate()) { // load model into language-specific code model codeModel = plugin.Serializer.Load(codeModel); // we've loaded the model, run the extensions for after it's loaded codeModel = AutoRestController.RunExtensions(Trigger.AfterLoadingLanguageSpecificModel, codeModel); // apply language-specific tranformation (more than just language-specific types) // used to be called "NormalizeClientModel" . codeModel = plugin.Transformer.TransformCodeModel(codeModel); // next set of extensions codeModel = AutoRestController.RunExtensions(Trigger.AfterLanguageSpecificTransform, codeModel); // next set of extensions codeModel = AutoRestController.RunExtensions(Trigger.BeforeGeneratingCode, codeModel); // Generate code from CodeModel. plugin.CodeGenerator.Generate(codeModel).GetAwaiter().GetResult(); } } finally { processMessages(messages); } } }
internal static MemoryFileSystem GenerateCodeInto(this string inputDir, MemoryFileSystem fileSystem, Settings settings) { fileSystem.Copy(Path.Combine("Resource", inputDir)); var fileExt = (File.Exists(Path.Combine("Resource", Path.Combine(inputDir, inputDir + ".yaml"))) ? ".yaml" : ".json"); settings.Input = Path.Combine("Resource", Path.Combine(inputDir, inputDir + fileExt)); var plugin = ExtensionsLoader.GetPlugin(); var modeler = ExtensionsLoader.GetModeler(); var codeModel = modeler.Build(); // After swagger Parser codeModel = AutoRestController.RunExtensions(Trigger.AfterModelCreation, codeModel); // After swagger Parser codeModel = AutoRestController.RunExtensions(Trigger.BeforeLoadingLanguageSpecificModel, codeModel); using (plugin.Activate()) { // load model into language-specific code model codeModel = plugin.Serializer.Load(codeModel); // we've loaded the model, run the extensions for after it's loaded codeModel = AutoRestController.RunExtensions(Trigger.AfterLoadingLanguageSpecificModel, codeModel); // apply language-specific tranformation (more than just language-specific types) // used to be called "NormalizeClientModel" . codeModel = plugin.Transformer.TransformCodeModel(codeModel); // next set of extensions codeModel = AutoRestController.RunExtensions(Trigger.AfterLanguageSpecificTransform, codeModel); // next set of extensions codeModel = AutoRestController.RunExtensions(Trigger.BeforeGeneratingCode, codeModel); // Generate code from CodeModel. plugin.CodeGenerator.Generate(codeModel).GetAwaiter().GetResult(); } return(fileSystem); }
public static void RunTests(string resultFolder) { if (resultFolder == null) { throw new ArgumentNullException("settings"); } var settings = Settings.Instance; settings.FileSystemInput = new MemoryFileSystem(); settings.FileSystemInput.CreateDirectory(Path.GetDirectoryName(settings.Input)); settings.FileSystemInput.WriteAllText(settings.Input, File.ReadAllText(settings.Input)); var expectedWithSeparator = "Expected" + Path.DirectorySeparatorChar; var specFileName = resultFolder.StartsWith(expectedWithSeparator, StringComparison.Ordinal) ? resultFolder.Substring(expectedWithSeparator.Length) : resultFolder; var name = ExtensionsLoader.GetPlugin().Settings.Name; settings.Namespace = string.IsNullOrEmpty(settings.Namespace) ? "Fixtures." + (name.Contains("Azure") ? "Azure." : "") + specFileName. Replace(".cs", "").Replace(".Cs", "").Replace(".java", ""). Replace(".js", "").Replace(".", ""). Replace(Path.DirectorySeparatorChar.ToString(), "").Replace("-", "") : settings.Namespace; settings.DisableSimplifier = true; AutoRestController.Generate(); var actualFiles = settings.FileSystemOutput.GetFiles("", "*.*", SearchOption.AllDirectories).OrderBy(f => f).ToArray(); var expectedFiles = Directory.Exists(resultFolder) ? Directory.GetFiles(resultFolder, "*.*", SearchOption.AllDirectories).OrderBy(f => f).ToArray() : new string[0]; Assert.Equal(expectedFiles.Length, actualFiles.Length); for (int i = 0; i < expectedFiles.Length; i++) { var actualFile = actualFiles[i]; var expectedFile = expectedFiles[i]; EnsureFilesMatch(File.ReadAllText(expectedFile), settings.FileSystemOutput.ReadAllText(actualFile)); } }
private static MemoryFileSystem GenerateCodeInto(MemoryFileSystem fileSystem, Settings settings) { var plugin = ExtensionsLoader.GetPlugin(); var modeler = ExtensionsLoader.GetModeler(); var codeModel = modeler.Build(); // After swagger Parser codeModel = AutoRestController.RunExtensions(Trigger.AfterModelCreation, codeModel); // After swagger Parser codeModel = AutoRestController.RunExtensions(Trigger.BeforeLoadingLanguageSpecificModel, codeModel); using (plugin.Activate()) { // load model into language-specific code model codeModel = plugin.Serializer.Load(codeModel); // we've loaded the model, run the extensions for after it's loaded codeModel = AutoRestController.RunExtensions(Trigger.AfterLoadingLanguageSpecificModel, codeModel); // apply language-specific tranformation (more than just language-specific types) // used to be called "NormalizeClientModel" . codeModel = plugin.Transformer.TransformCodeModel(codeModel); // next set of extensions codeModel = AutoRestController.RunExtensions(Trigger.AfterLanguageSpecificTransform, codeModel); // next set of extensions codeModel = AutoRestController.RunExtensions(Trigger.BeforeGeneratingCode, codeModel); // Generate code from CodeModel. plugin.CodeGenerator.Generate(codeModel).GetAwaiter().GetResult(); } return(fileSystem); }
private static int Main(string[] args) { if (args != null && args.Length > 0 && args[0] == "--server") { return(new AutoRestAsAsService().Run().Result); } int exitCode = (int)ExitCode.Error; try { using (NewContext) { bool generationFailed = false; Settings settings = null; var jsonValidationLogListener = new JsonValidationLogListener(); try { settings = Settings.Create(args); // opt into client side validation by default if (!settings.CustomSettings.ContainsKey("ClientSideValidation")) { settings.CustomSettings.Add("ClientSideValidation", true); } // set up logging if (settings.JsonValidationMessages) { Logger.Instance.AddListener(jsonValidationLogListener); } else { Logger.Instance.AddListener(new ConsoleLogListener( settings.Debug ? Category.Debug : Category.Warning, settings.ValidationLevel, settings.Verbose)); } Logger.Instance.AddListener(new SignalingLogListener(Category.Error, _ => generationFailed = true)); Settings.AutoRestFolder = Path.GetDirectoryName(typeof(Program).GetAssembly().Location); // determine some reasonable default namespace if (settings.Namespace == null) { if (settings.Input != null) { settings.Namespace = Path.GetFileNameWithoutExtension(settings.Input); } else { settings.Namespace = "default"; } } // main pipeline AutoRestController.Generate(); if (!Settings.Instance.JsonValidationMessages && !Settings.Instance.DisableSimplifier && Settings.Instance.CodeGenerator.IndexOf("csharp", StringComparison.OrdinalIgnoreCase) > -1) { new Simplify.CSharpSimplifier().Run().ConfigureAwait(false).GetAwaiter().GetResult(); } if (!settings.JsonValidationMessages) { Settings.Instance.FileSystemOutput.CommitToDisk(Settings.Instance.OutputFileName == null ? Settings.Instance.OutputDirectory : Path.GetDirectoryName(Settings.Instance.OutputFileName)); } } catch (Exception exception) { Logger.Instance.Log(Category.Error, exception.Message); } finally { if (settings != null && settings.JsonValidationMessages) { Console.WriteLine(jsonValidationLogListener.GetValidationMessagesAsJson()); } if (settings != null) { if (generationFailed) { if (!"None".EqualsIgnoreCase(settings.CodeGenerator)) { Logger.Instance.Log(Category.Error, Resources.GenerationFailed); Logger.Instance.Log(Category.Error, "{0} {1}", typeof(Program).GetAssembly().ManifestModule.Name, string.Join(" ", args)); } } else { if (!"None".EqualsIgnoreCase(settings.CodeGenerator)) { Logger.Instance.Log(Category.Info, Resources.GenerationComplete, settings.CodeGenerator, settings.Input); } exitCode = (int)ExitCode.Success; } } } } } catch (Exception exception) { Console.Error.WriteLine(Resources.ConsoleErrorMessage, exception.Message); Console.Error.WriteLine(Resources.ConsoleErrorStackTrace, exception.StackTrace); } return(exitCode); }
private static int Main(string[] args) { int exitCode = (int)ExitCode.Error; try { using (NewContext) { bool generationFailed = false; Settings settings = null; var jsonValidationLogListener = new JsonValidationLogListener(); try { settings = Settings.Create(args); // set up logging if (settings.JsonValidationMessages) { Logger.Instance.AddListener(jsonValidationLogListener); } else { Logger.Instance.AddListener(new ConsoleLogListener( settings.Debug ? Category.Debug : Category.Warning, settings.ValidationLevel, settings.Verbose)); } Logger.Instance.AddListener(new SignalingLogListener(Category.Error, _ => generationFailed = true)); // internal preprocesor if (settings.Preprocessor) { Console.Write(InternalPreprocessor(settings.FileSystemInput.ReadAllText(settings.Input))); return(0); } Settings.AutoRestFolder = Path.GetDirectoryName(typeof(Program).GetAssembly().Location); // determine some reasonable default namespace if (settings.Namespace == null) { if (settings.Input != null) { settings.Namespace = Path.GetFileNameWithoutExtension(settings.Input); } else { settings.Namespace = "default"; } } // help requested? string defCodeGen = (args.Where(arg => arg.ToLowerInvariant().Contains("codegenerator")).IsNullOrEmpty()) ? "" : settings.CodeGenerator; if (settings.ShowHelp) { settings.CodeGenerator = defCodeGen; Console.WriteLine(HelpGenerator.Generate(IsShowMarkdownHelpIncluded(args) ? Resources.HelpMarkdownTemplate : Resources.HelpTextTemplate, settings)); return(0); } // comparison? if (!string.IsNullOrEmpty(settings.Previous)) { AutoRestController.Compare(); return(0); } // main pipeline AutoRestController.Generate(); if (!Settings.Instance.JsonValidationMessages && !Settings.Instance.DisableSimplifier && Settings.Instance.CodeGenerator.IndexOf("csharp", StringComparison.OrdinalIgnoreCase) > -1) { new CSharpSimplifier().Run().ConfigureAwait(false).GetAwaiter().GetResult(); } if (!settings.JsonValidationMessages) { Settings.Instance.FileSystemOutput.CommitToDisk(Settings.Instance.OutputFileName == null ? Settings.Instance.OutputDirectory : Path.GetDirectoryName(Settings.Instance.OutputFileName)); } } catch (Exception exception) { Logger.Instance.Log(Category.Error, exception.Message); } finally { if (settings != null && settings.JsonValidationMessages) { Console.WriteLine(jsonValidationLogListener.GetValidationMessagesAsJson()); } if (settings != null && !settings.ShowHelp) { if (generationFailed) { if (!"None".EqualsIgnoreCase(settings.CodeGenerator)) { Logger.Instance.Log(Category.Error, Resources.GenerationFailed); Logger.Instance.Log(Category.Error, "{0} {1}", typeof(Program).GetAssembly().ManifestModule.Name, string.Join(" ", args)); } } else { if (!"None".EqualsIgnoreCase(settings.CodeGenerator)) { Logger.Instance.Log(Category.Info, Resources.GenerationComplete, settings.CodeGenerator, settings.Input); } exitCode = (int)ExitCode.Success; } } } } } catch (Exception exception) { Console.Error.WriteLine(Resources.ConsoleErrorMessage, exception.Message); Console.Error.WriteLine(Resources.ConsoleErrorStackTrace, exception.StackTrace); } return(exitCode); }