Beispiel #1
0
        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());
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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.");
            }
        }
Beispiel #4
0
        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 };
        }