public void Recompress_FileHasPendingChanges_ThrowsException()
        {
            var fileSystem = Substitute.For<IFileSystem>();

            var builder = new XapBuilder(CompressionLevel.NoCompression).
                AddAssemblyPart("A", 10000).
                AddAssemblyPart("B", 10000);
            builder.Build();

            fileSystem.FileExists("Input.xap").Returns(true);
            fileSystem.OpenArchive("Input.xap", ZipArchiveMode.Update).Returns(a => builder.GetArchive(ZipArchiveMode.Update));

            var target = new UpdateableXapFile("Input.xap", fileSystem);
            target.RemoveAssemblyPart(target.AssemblyParts[0]);
            target.Recompress();
        }
        private XapBuilder CreateFakeSourceXap(IFileSystem fileSystem, params string[] assemblies)
        {
            var builder = new XapBuilder();

            foreach (string assembly in assemblies)
            {
                builder.AddAssemblyPart(assembly, 10000);
            }

            fileSystem.FileExists("Source.xap").Returns(true);
            fileSystem.OpenArchive("Source.xap", ZipArchiveMode.Read).Returns(a => new ZipArchive(builder.Build()));

            return builder;
        }
        private XapBuilder CreateFakeInputXap(IFileSystem fileSystem, ZipArchiveMode mode, CompressionLevel compressionLevel, params string[] assemblies)
        {
            var builder = new XapBuilder(compressionLevel);

            foreach (string assembly in assemblies)
            {
                builder.AddAssemblyPart(assembly, 10000);
            }

            fileSystem.FileExists("Input.xap").Returns(true);
            fileSystem.OpenArchive("Input.xap", mode).Returns(a => new ZipArchive(builder.Build(), mode, true));

            return builder;
        }