Пример #1
0
        public void Execute_WithMinimalConfig_ReturnsTrue()
        {
            FakeBuildEngine anEngine = new FakeBuildEngine();
            var             buildCop = new BuildCopMsBuildTask();

            ((ITask)buildCop).BuildEngine = anEngine;
            buildCop.buildGroups          = new TaskItem[1] {
                new TaskItem("MinimalConfig")
            };
            Assert.IsTrue(buildCop.Execute());
            Assert.That(buildCop.Errors.Length, Is.EqualTo(0));
        }
Пример #2
0
        public void Execute_WithDefaultNewVisualStudioProjectAndSampleBuildCopConfig_FailsOnTreatErrorsAsWarnings()
        {
            FakeBuildEngine anEngine = new FakeBuildEngine();
            var             buildCop = new BuildCopMsBuildTask();

            ((ITask)buildCop).BuildEngine = anEngine;
            buildCop.buildGroups          = new TaskItem[1] {
                new TaskItem("DefaultNewVisualStudioProjectAndSampleBuildCopConfig")
            };
            Assert.IsFalse(buildCop.Execute());
            Assert.That(buildCop.Errors.Length, Is.EqualTo(1));
            Assert.That(buildCop.Errors[0].ItemSpec, Is.EqualTo("Error .\\VisualStudioNewProject.proj The build property \"TreatWarningsAsErrors\" does not exist in the build file."));
        }
Пример #3
0
        public void CanBuildSimpleMsiPackage()
        {
            var folder = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage");

            using (var fs = new DisposableFileSystem())
            {
                var baseFolder         = fs.GetFolder();
                var intermediateFolder = Path.Combine(baseFolder, "obj");
                var pdbPath            = Path.Combine(baseFolder, @"bin\testpackage.wixpdb");
                var engine             = new FakeBuildEngine();

                var task = new WixBuild
                {
                    BuildEngine = engine,
                    SourceFiles = new[]
                    {
                        new TaskItem(Path.Combine(folder, "Package.wxs")),
                        new TaskItem(Path.Combine(folder, "PackageComponents.wxs")),
                    },
                    LocalizationFiles = new[]
                    {
                        new TaskItem(Path.Combine(folder, "Package.en-us.wxl")),
                    },
                    BindInputPaths = new[]
                    {
                        new TaskItem(Path.Combine(folder, "data")),
                    },
                    IntermediateDirectory = new TaskItem(intermediateFolder),
                    OutputFile            = new TaskItem(Path.Combine(baseFolder, @"bin\test.msi")),
                    PdbType = "Full",
                    PdbFile = new TaskItem(pdbPath),
                    DefaultCompressionLevel = "nOnE",
                };

                var result = task.Execute();
                Assert.True(result, $"MSBuild task failed unexpectedly. Output:\r\n{engine.Output}");

                Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\test.msi")));
                Assert.True(File.Exists(pdbPath));
                Assert.True(File.Exists(Path.Combine(baseFolder, @"bin\cab1.cab")));

                var intermediate = Intermediate.Load(pdbPath);
                var section      = intermediate.Sections.Single();

                var fileSymbol = section.Symbols.OfType <FileSymbol>().Single();
                Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
                Assert.Equal(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
            }
        }
Пример #4
0
        public void ReportsInnerExceptionForUnexpectedExceptions()
        {
            var folder = TestData.Get(@"TestData\SimpleMsiPackage\MsiPackage");

            using (var fs = new DisposableFileSystem())
            {
                var baseFolder         = fs.GetFolder();
                var intermediateFolder = Path.Combine(baseFolder, "obj");
                var pdbPath            = Path.Combine(baseFolder, @"bin\testpackage.wixpdb");
                var engine             = new FakeBuildEngine();

                var task = new DoIt
                {
                    BuildEngine = engine,
                    SourceFiles = new[]
                    {
                        new TaskItem(Path.Combine(folder, "Package.wxs")),
                        new TaskItem(Path.Combine(folder, "PackageComponents.wxs")),
                    },
                    LocalizationFiles = new[]
                    {
                        new TaskItem(Path.Combine(folder, "Package.en-us.wxl")),
                    },
                    BindInputPaths = new[]
                    {
                        new TaskItem(Path.Combine(folder, "data")),
                    },
                    IntermediateDirectory = new TaskItem(intermediateFolder),
                    OutputFile            = new TaskItem(Path.Combine(baseFolder, @"bin\test.msi")),
                    PdbType = "Full",
                    PdbFile = new TaskItem(pdbPath),
                };

                var result = task.Execute();
                Assert.False(result, $"MSBuild task succeeded unexpectedly. Output:\r\n{engine.Output}");

                Assert.Contains(
                    "System.PlatformNotSupportedException: Could not find platform specific 'wixnative.exe' ---> System.IO.FileNotFoundException: Could not find internal piece of WiX Toolset from",
                    engine.Output);
            }
        }
Пример #5
0
        public static void ReplaceFile()
        {
            var dir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());

            Directory.CreateDirectory(dir);

            string originalNupkgPath;

            File.WriteAllBytes(originalNupkgPath = Path.Combine(dir, TestResources.MiscPackages.NameSigned), TestResources.MiscPackages.Signed);

            string replacementFilePath;

            File.WriteAllText(replacementFilePath = Path.Combine(dir, "Replacement.txt"), "<replacement>");

            var engine = new FakeBuildEngine();
            var task   = new ReplacePackageParts()
            {
                BuildEngine       = engine,
                SourcePackage     = originalNupkgPath,
                Parts             = new[] { "tools/EmptyBinary.dll" },
                ReplacementFiles  = new[] { replacementFilePath },
                NewVersionSuffix  = "replaced",
                DestinationFolder = dir
            };

            bool result = task.Execute();

            AssertEx.Equal(Array.Empty <string>(), engine.LogErrorEvents.Select(w => w.Message));
            AssertEx.Equal(Array.Empty <string>(), engine.LogWarningEvents.Select(w => $"{w.Code}: {w.Message}"));
            Assert.True(result);

            using (var archive = new ZipArchive(File.Open(task.NewPackage, FileMode.Open, FileAccess.Read), ZipArchiveMode.Read))
            {
                AssertEx.Equal(new[]
                {
                    "_rels/.rels",
                    "Signed.nuspec",
                    "tools/EmptyBinary.dll",
                    "[Content_Types].xml",
                    "package/services/metadata/core-properties/501236e2491945269f45c5507859c951.psmdcp"
                }, archive.Entries.Select(e => e.FullName));

                using (var reader = new StreamReader(archive.GetEntry("tools/EmptyBinary.dll").Open()))
                {
                    Assert.Equal("<replacement>", reader.ReadToEnd());
                }

                using (var reader = new StreamReader(archive.GetEntry("Signed.nuspec").Open()))
                {
                    AssertEx.AssertEqualToleratingWhitespaceDifferences(@"
<?xml version=""1.0"" encoding=""utf-8""?>
<package xmlns=""http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"">
  <metadata>
    <id>Signed</id>
    <version>1.2.3-replaced</version>
    <authors>Microsoft</authors>
    <owners>Microsoft</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Signed</description>
  </metadata>
</package>", reader.ReadToEnd());
                }

                using (var reader = new StreamReader(archive.GetEntry("package/services/metadata/core-properties/501236e2491945269f45c5507859c951.psmdcp").Open()))
                {
                    AssertEx.AssertEqualToleratingWhitespaceDifferences(
                        @"<?xml version=""1.0"" encoding=""utf-8""?>" +
                        @"<coreProperties xmlns:dc=""http://purl.org/dc/elements/1.1/"" xmlns:dcterms=""http://purl.org/dc/terms/"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.openxmlformats.org/package/2006/metadata/core-properties"">" +
                        @"<dc:creator>Microsoft</dc:creator>" +
                        @"<dc:description>Signed</dc:description>" +
                        @"<dc:identifier>Signed</dc:identifier>" +
                        @"<version>1.2.3-replaced</version>" +
                        @"<keywords></keywords>" +
                        @"<lastModifiedBy>NuGet, Version=4.7.0.5, Culture=neutral, PublicKeyToken=31bf3856ad364e35;Microsoft Windows NT 6.2.9200.0;.NET Framework 4.6</lastModifiedBy>" +
                        @"</coreProperties>", reader.ReadToEnd());
                }
            }

            Directory.Delete(dir, recursive: true);
        }