public void GeneratesValidClass(string secretsFile, PropertyType propertyType, Type expectedType, bool isArray) { var config = GetConfiguration($"{nameof(GeneratesValidClass)}-{expectedType.Name}"); config.SecretsConfig.Properties.Add(new ValueConfig { Name = "Prop", PropertyType = propertyType, IsArray = isArray }); var generator = new SecretsClassGenerator(config) { SecretsJsonFilePath = Path.Combine("Templates", "Secrets", secretsFile), BaseNamespace = config.ProjectName }; generator.Execute(); var filePath = generator.Outputs.ItemSpec; Assert.True(File.Exists(filePath)); var csc = new CSharpCodeProvider(); var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.dll", "System.Core.dll" }, Path.Combine(config.IntermediateOutputPath, $"{Path.GetFileNameWithoutExtension(secretsFile)}.dll"), true); var results = csc.CompileAssemblyFromFile(parameters, filePath); results.Errors.Cast <CompilerError>().ToList().ForEach(error => _testOutputHelper.WriteLine(error.ErrorText)); Assert.Empty(results.Errors); Assert.NotNull(results.CompiledAssembly); var secretsClassType = results.CompiledAssembly.DefinedTypes.FirstOrDefault(t => t.Name == config.SecretsConfig.ClassName); Assert.NotNull(secretsClassType); var propField = secretsClassType.GetField("Prop", BindingFlags.NonPublic | BindingFlags.Static); Assert.NotNull(propField); Assert.Equal(expectedType.FullName, propField.FieldType.FullName); object value = null; var ex = Record.Exception(() => value = propField.GetValue(null)); Assert.Null(ex); Assert.NotNull(value); if (isArray) { var array = (IEnumerable)value; Assert.NotNull(array); Assert.Equal(3, array.Cast <object>().Count()); } }
public override bool Execute() { if (!ValidateParameters()) { return(false); } try { if (File.Exists(SecretsJsonFilePath)) { Log.LogMessage($"ProjectBasePath: {ProjectBasePath}"); Log.LogMessage($"SecretsClassName: {SecretsClassName}"); Log.LogMessage($"SecretsJsonFilePath: {SecretsJsonFilePath}"); Log.LogMessage($"RootNamespace: {RootNamespace}"); Log.LogMessage($"OutputPath: {OutputPath}"); bool debug = false; bool.TryParse(DebugOutput, out debug); var generator = new SecretsClassGenerator() { ProjectBasePath = ProjectBasePath, SecretsClassName = SecretsClassName, SecretsJsonFilePath = SecretsJsonFilePath, BaseNamespace = RootNamespace, OutputPath = OutputPath, IntermediateOutputPath = IntermediateOutputPath, DebugOutput = debug, Log = (BuildHostLoggingHelper)Log }; generator.Execute(); _generatedCodeFiles = generator.GeneratedFiles; } else { Log.LogMessage("No Secrets Json File was found."); } } catch (Exception ex) { Log.LogError(ex.ToString()); return(false); } return(true); }
internal override void ExecuteInternal(IBuildConfiguration config) { var standardSecrets = Path.Combine(ProjectDirectory, Constants.SecretsJsonFileName); var configSecrets = Path.Combine(ProjectDirectory, string.Format(Constants.SecretsJsonConfigurationFileFormat, config.BuildConfiguration.ToLower())); if (File.Exists(standardSecrets) || File.Exists(configSecrets)) { var generator = new SecretsClassGenerator(config) { ConfigurationSecretsJsonFilePath = configSecrets, SecretsJsonFilePath = standardSecrets, BaseNamespace = RootNamespace, }; generator.Execute(); _generatedCodeFiles = new[] { generator.Outputs }; } else { Log.LogMessage("No Secrets Json File was found."); } }
internal override void ExecuteInternal(IBuildConfiguration config) { if (config.GetSecretsConfig().Disable) { return; } var configJson = string.Format(Constants.SecretsJsonConfigurationFileFormat, config.BuildConfiguration.ToLower()); var generator = new SecretsClassGenerator(config, Path.Combine(SolutionDirectory, Constants.SecretsJsonFileName), Path.Combine(SolutionDirectory, configJson), Path.Combine(ProjectDirectory, Constants.SecretsJsonFileName), Path.Combine(ProjectDirectory, configJson), JsonSecretsFilePath) { BaseNamespace = RootNamespace, }; generator.Execute(); _generatedCodeFiles = new[] { generator.Outputs }; }