aboutsummaryrefslogtreecommitdiff
path: root/src/test/WixToolsetTest.Core.Native/CabinetFixture.cs
blob: 2e43dce4bc2a8cf71832a7a4d546a9f743d29ab9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.

namespace WixToolsetTest.CoreNative
{
    using System.IO;
    using System.Linq;
    using WixToolset.Core.Native;
    using WixToolsetTest.CoreNative.Utility;
    using WixToolset.Data;
    using Xunit;

    public class CabinetFixture
    {
        [Fact]
        public void CanCreateSingleFileCabinet()
        {
            using (var fs = new DisposableFileSystem())
            {
                var intermediateFolder = fs.GetFolder(true);
                var cabPath = Path.Combine(intermediateFolder, "testout.cab");

                var files = new[] { new CabinetCompressFile(TestData.Get(@"TestData\test.txt"), "test.txt") };

                var cabinet = new Cabinet(cabPath);
                cabinet.Compress(files, CompressionLevel.Low);

                Assert.True(File.Exists(cabPath));
            }
        }

        [Fact]
        public void CanEnumerateSingleFileCabinet()
        {
            var cabinetPath = TestData.Get(@"TestData\test.cab");

            var cabinet = new Cabinet(cabinetPath);
            var files = cabinet.Enumerate();

            var file = files.Single();
            Assert.Equal("test.txt", file.FileId);
            Assert.Equal(17, file.Size);

            Assert.Equal(19259, file.Date);
            Assert.Equal(47731, file.Time);
            // TODO: This doesn't seem to always pass, not clear why but it'd be good to understand one day.
            // Assert.True(file.SameAsDateTime(new DateTime(2017, 9, 28, 0, 19, 38)));
        }

        [Fact]
        public void IntegrationTest()
        {
            using (var fs = new DisposableFileSystem())
            {
                var intermediateFolder = fs.GetFolder(true);
                var cabinetPath = Path.Combine(intermediateFolder, "testout.cab");
                var extractFolder = fs.GetFolder(true);

                // Compress.
                {
                    var files = new[] {
                        new CabinetCompressFile(TestData.Get(@"TestData\test.txt"), "test1.txt"),
                        new CabinetCompressFile(TestData.Get(@"TestData\test.txt"), "test2.txt"),
                    };

                    var cabinet = new Cabinet(cabinetPath);
                    cabinet.Compress(files, CompressionLevel.Low);
                }

                // Extract.
                {
                    var cabinet = new Cabinet(cabinetPath);
                    var reportedFiles = cabinet.Extract(extractFolder);
                    Assert.Equal(2, reportedFiles.Count());
                }

                // Enumerate to compare cabinet to extracted files.
                {
                    var cabinet = new Cabinet(cabinetPath);
                    var enumerated = cabinet.Enumerate().OrderBy(f => f.FileId).ToArray();

                    var files = Directory.EnumerateFiles(extractFolder).OrderBy(f => f).ToArray();

                    for (var i = 0; i < enumerated.Length; ++i)
                    {
                        var cabFileInfo = enumerated[i];
                        var fileInfo = new FileInfo(files[i]);

                        Assert.Equal(cabFileInfo.FileId, fileInfo.Name);
                        Assert.Equal(cabFileInfo.Size, fileInfo.Length);
                        Assert.True(cabFileInfo.SameAsDateTime(fileInfo.CreationTime));
                    }
                }
            }
        }
    }
}