public void AssemblyInfoReWriteShouldReplaceAllVersionAttributes()
        {
            const string yaml = @"
version: 2.3.{build}
assembly_info:
  patch: true
  file: AssemblyInfo.*
  assembly_version: ""1.1.{build}""
  assembly_file_version: ""{version}""
  assembly_informational_version: ""{version}""
";

            const string originalAssemblyInfoContent = @"
[assembly: AssemblyTitle(""PatchAssemblyInfoFiles"")]
[assembly: AssemblyDescription("""")]
[assembly: AssemblyVersion(""1.2.3.4"")]
[assembly: AssemblyFileVersion(""1.2.3.4"")]
[assembly: AssemblyInformationalVersion(""foo bar baz 1 2 3 4"")]
";

            const string rewrittenAssemblyInfoContent = @"
[assembly: AssemblyTitle(""PatchAssemblyInfoFiles"")]
[assembly: AssemblyDescription("""")]
[assembly: AssemblyVersion(""1.1.0"")]
[assembly: AssemblyFileVersion(""2.3.0"")]
[assembly: AssemblyInformationalVersion(""2.3.0"")]
";

            var fileSystem           = new MockFileSystem();
            var cloneDirectory       = fileSystem.Path.Combine(fileSystem.Path.GetTempPath(), fileSystem.Path.GetRandomFileName());
            var repoDirectory        = fileSystem.Path.Combine(fileSystem.Path.GetTempPath(), fileSystem.Path.GetRandomFileName());
            var assemblyInfoFilename = fileSystem.Path.Combine(cloneDirectory, "AssemblyInfo.cs");

            fileSystem.AddDirectory(repoDirectory);
            fileSystem.AddDirectory(cloneDirectory);
            fileSystem.AddFile(assemblyInfoFilename, new MockFileData(originalAssemblyInfoContent));
            fileSystem.Directory.SetCurrentDirectory(repoDirectory);

            var executionContext = new ExecutionContext(
                new MatrixJob("os", new List <Variable>(), "conf", "platform"),
                new BuildConfigurationYamlStringReader(yaml).GetBuildConfiguration(),
                new Mock <IPipelineOutputter>().Object,
                repoDirectory,
                cloneDirectory,
                fileSystem);

            Environment.SetEnvironmentVariable("APPVEYOR_BUILD_VERSION", new ExpandableString("2.3.{build}"));

            var rewriteStep     = new AssemblyInfoRewriteStep();
            var executionResult = rewriteStep.Execute(executionContext);

            Assert.True(executionResult);
            Assert.Equal(rewrittenAssemblyInfoContent, fileSystem.File.ReadAllText(assemblyInfoFilename));
        }
Ejemplo n.º 2
0
        public BuildPipelineExecuter(ExecutionContext executionContext)
        {
            _executionContext = executionContext;

            _environmentStep  = new InitStandardEnvironmentVariablesStep();
            _initStep         = new InitStep(executionContext.RepositoryDirectory, executionContext.BuildConfiguration.InitializationScript);
            _cloneStep        = new CloneFolderStep(executionContext.FileSystem);
            _installStep      = new InstallStep(executionContext.CloneDirectory, executionContext.BuildConfiguration.InstallScript);
            _assemblyInfoStep = new AssemblyInfoRewriteStep();
            _beforeBuildStep  = new BeforeBuildStep(executionContext.CloneDirectory, executionContext.BuildConfiguration.BeforeBuildScript);
            _buildScriptStep  = new BuildScriptStep(executionContext.CloneDirectory, executionContext.BuildConfiguration.BuildScript);
            _buildStep        = new BuildStep();
            _afterBuildStep   = new AfterBuildStep(executionContext.CloneDirectory, executionContext.BuildConfiguration.AfterBuildScript);
            _testScriptStep   = new TestScriptStep(executionContext.CloneDirectory, executionContext.BuildConfiguration.TestScript);

            _onSuccessStep = new OnSuccessStep(executionContext.CloneDirectory, executionContext.BuildConfiguration.OnSuccessScript);
            _onFailureStep = new OnFailureStep(executionContext.CloneDirectory, executionContext.BuildConfiguration.OnFailureScript);
            _onFinishStep  = new OnFinishStep(executionContext.CloneDirectory, executionContext.BuildConfiguration.OnFinishScript);
        }
        public void AssemblyInfoReWriteShouldReplaceAllVersionAttributes()
        {
            const string yaml = @"
version: 2.3.{build}
assembly_info:
  patch: true
  file: AssemblyInfo.*
  assembly_version: ""1.1.{build}""
  assembly_file_version: ""{version}""
  assembly_informational_version: ""{version}""
";

            const string originalAssemblyInfoContent = @"
[assembly: AssemblyTitle(""PatchAssemblyInfoFiles"")]
[assembly: AssemblyDescription("""")]
[assembly: AssemblyVersion(""1.2.3.4"")]
[assembly: AssemblyFileVersion(""1.2.3.4"")]
[assembly: AssemblyInformationalVersion(""foo bar baz 1 2 3 4"")]
";

            const string rewrittenAssemblyInfoContent = @"
[assembly: AssemblyTitle(""PatchAssemblyInfoFiles"")]
[assembly: AssemblyDescription("""")]
[assembly: AssemblyVersion(""1.1.0"")]
[assembly: AssemblyFileVersion(""2.3.0"")]
[assembly: AssemblyInformationalVersion(""2.3.0"")]
";

            var executionContext = new ExecutionContext(
                new MatrixJob("os", new List <Variable>(), "conf", "platform"),
                new BuildConfigurationYamlStringReader(yaml).GetBuildConfiguration(),
                new Mock <IPipelineOutputter>().Object,
                @"c:\repository\directory",
                @"c:\clone\directory");

            var mockedDirectoryHandler = new Mock <DirectoryHandler>();
            var mockedFileHandler      = new Mock <FileHandler>();

            mockedDirectoryHandler
            .Setup(
                d => d.EnumerateFiles(
                    executionContext.CloneDirectory,
                    executionContext.BuildConfiguration.AssemblyInfo.File,
                    SearchOption.AllDirectories))
            .Returns(new List <string> {
                "AssemblyInfo.cs"
            });

            mockedFileHandler
            .Setup(f => f.ReadAllText("AssemblyInfo.cs"))
            .Returns(originalAssemblyInfoContent);

            Environment.SetEnvironmentVariable("APPVEYOR_BUILD_VERSION", new ExpandableString("2.3.{build}"));

            var rewriteStep = new AssemblyInfoRewriteStep(
                new FileSystem(mockedDirectoryHandler.Object, mockedFileHandler.Object, Mock.Of <PathHandler>()));

            var executionResult = rewriteStep.Execute(executionContext);

            mockedFileHandler.Verify(
                f => f.ReadAllText(It.Is <string>(s => s == "AssemblyInfo.cs")),
                Times.Once);

            mockedFileHandler.Verify(
                f => f.WriteAllText(It.Is <string>(s => s == "AssemblyInfo.cs"), It.Is <string>(s => s == rewrittenAssemblyInfoContent)),
                Times.Once);

            executionResult.Should().BeTrue();
        }