public void ReadSymbolTest5() { fileSystemService.EnumFileSystemEntriesFunc = _ => EnumFiles(3); Dictionary <string, byte[]> data = new Dictionary <string, byte[]> { { @"C:\dir\file1.dat", new byte[] { 0x12, 0x33 } }, { @"C:\dir\file2.dat", new byte[] { 0xEA, 0x33 } }, { @"C:\dir\file3.dat", new byte[] { 0x13 } }, }; platform.ReadFileFunc = x => new MemoryStream(data[x]); using (DirectoryEncodingInputStream stream = new DirectoryEncodingInputStream(@"C:\dir\", fileSystemService, platform)) { Assert.IsTrue(stream.ReadSymbol(out byte symbol)); Assert.AreEqual(0x12, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0x33, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0xEA, symbol); stream.Reset(); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0x12, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0x33, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0xEA, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0x33, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0x13, symbol); Assert.IsFalse(stream.ReadSymbol(out symbol)); } }
public void ReadSymbolTest1() { fileSystemService.EnumFileSystemEntriesFunc = _ => new FileSystemEntry[0]; using (DirectoryEncodingInputStream stream = new DirectoryEncodingInputStream(@"C:\dir", fileSystemService, platform)) { Assert.IsFalse(stream.ReadSymbol(out byte _)); Assert.IsFalse(stream.ReadSymbol(out byte _)); } }
public void SizeInBytesPropertyTest1() { fileSystemService.EnumFileSystemEntriesFunc = x => new FileSystemEntry[0]; using (DirectoryEncodingInputStream stream = new DirectoryEncodingInputStream(@"C:\dir\", fileSystemService, platform)) { while (stream.ReadSymbol(out byte _)) { } Assert.AreEqual(0, stream.SizeInBytes); } }
public void SizeInBytesPropertyGuardTest() { fileSystemService.EnumFileSystemEntriesFunc = _ => EnumFiles(2); Dictionary <string, byte[]> data = new Dictionary <string, byte[]> { { @"C:\dir\file1.dat", new byte[] { 0x12, 0x33 } }, { @"C:\dir\file2.dat", new byte[] { 0xEA, 0x33 } }, }; platform.ReadFileFunc = x => new MemoryStream(data[x]); using (DirectoryEncodingInputStream stream = new DirectoryEncodingInputStream(@"C:\dir\", fileSystemService, platform)) { Assert.Throws <InvalidOperationException>(() => { long size = stream.SizeInBytes; }); } }
private EncodingStatistics Encode(string inputPath, string outputFile, CancellationToken cancellationToken, IProgress <CodingProgressInfo> progress) { HuffmanEncoder encoder = new HuffmanEncoder(); DirectoryEncodingInputStream directoryInputStream = new DirectoryEncodingInputStream(inputPath, fileSystemService, platform); FileEncodingOutputStream outputStream = new FileEncodingOutputStream(outputFile, platform); ITaskProgressController tpc = CreateTaskProgressController(progress, directoryInputStream); try { outputStream.BeginWrite(); tpc.StartIndeterminate(); EncodingToken encodingToken = encoder.CreateEncodingToken(directoryInputStream, cancellationToken); tpc.EndIndeterminate(); streamBuilder.Initialize(platform, encodingToken, outputStream); streamBuilder.AddWeightsTable(new BootstrapSegment(encodingToken.WeightsTable)); tpc.Start(); foreach (FileSystemEntry entry in fileSystemService.EnumFileSystemEntries(inputPath)) { switch (entry.Type) { case FileSystemEntryType.Directory: streamBuilder.AddDirectory(new DirectorySegment(entry.Name, entry.Cardinality)); break; case FileSystemEntryType.File: streamBuilder.AddFile(new FileSegment(entry.Name, entry.Path), cancellationToken, tpc); break; default: throw new InvalidOperationException(); } } outputStream.EndWrite(); tpc.Finish(); return(new EncodingStatistics(directoryInputStream.SizeInBytes, outputStream.SizeInBytes)); } catch { tpc.Error(); throw; } finally { directoryInputStream.Dispose(); outputStream.Dispose(); } }
public void SizeInBytesPropertyTest2() { fileSystemService.EnumFileSystemEntriesFunc = _ => EnumFiles(3); Dictionary <string, byte[]> data = new Dictionary <string, byte[]> { { @"C:\dir\file1.dat", new byte[10 * 1024] }, { @"C:\dir\file2.dat", new byte[12 * 1024] }, { @"C:\dir\file3.dat", new byte[123] }, }; platform.ReadFileFunc = x => new MemoryStream(data[x]); using (DirectoryEncodingInputStream stream = new DirectoryEncodingInputStream(@"C:\dir\", fileSystemService, platform)) { while (stream.ReadSymbol(out byte _)) { } Assert.AreEqual(22651, stream.SizeInBytes); } }
public void IsTraversedPropertyTest() { fileSystemService.EnumFileSystemEntriesFunc = _ => EnumFiles(2); Dictionary <string, byte[]> data = new Dictionary <string, byte[]> { { @"C:\dir\file1.dat", new byte[] { 0x12, 0x33 } }, { @"C:\dir\file2.dat", new byte[] { 0xEA, 0x33 } }, }; platform.ReadFileFunc = x => new MemoryStream(data[x]); using (DirectoryEncodingInputStream stream = new DirectoryEncodingInputStream(@"C:\dir\", fileSystemService, platform)) { Assert.IsFalse(stream.IsTraversed); while (stream.ReadSymbol(out byte _)) { } Assert.IsTrue(stream.IsTraversed); } }
public void DisposeTest() { fileSystemService.EnumFileSystemEntriesFunc = _ => { return(new[] { new FileSystemEntry(FileSystemEntryType.File, "file1.dat", @"C:\dir\file1.dat"), new FileSystemEntry(FileSystemEntryType.File, "file2.dat", @"C:\dir\file2.dat"), new FileSystemEntry(FileSystemEntryType.File, "file3.dat", @"C:\dir\file3.dat"), }); }; List <TestMemoryStream> streamList = new List <TestMemoryStream>(16); platform.ReadFileFunc = x => { return(new TestMemoryStream(new byte[] { 1 }, streamList)); }; using (DirectoryEncodingInputStream stream = new DirectoryEncodingInputStream(@"C:\dir\", fileSystemService, platform)) { while (stream.ReadSymbol(out byte _)) { } } Assert.That(streamList, Is.All.Matches <TestMemoryStream>(x => x.Trace == "->Dispose;")); }
public void ReadSymbolTest4() { fileSystemService.EnumFileSystemEntriesFunc = _ => { return(new[] { new FileSystemEntry(FileSystemEntryType.File, "file1.dat", @"C:\dir\file1.dat"), new FileSystemEntry(FileSystemEntryType.Directory, "subdir1", @"C:\dir\subdir1"), new FileSystemEntry(FileSystemEntryType.File, "file2.dat", @"C:\dir\file2.dat"), new FileSystemEntry(FileSystemEntryType.Directory, "subdir2", @"C:\dir\subdir2"), new FileSystemEntry(FileSystemEntryType.File, "file3.dat", @"C:\dir\file3.dat"), }); }; Dictionary <string, byte[]> data = new Dictionary <string, byte[]> { { @"C:\dir\file1.dat", new byte[] { 0x11, 0x33 } }, { @"C:\dir\file2.dat", new byte[] { 0xEA, 0x22, 0x33 } }, { @"C:\dir\file3.dat", new byte[] { 0x13 } }, }; platform.ReadFileFunc = x => new MemoryStream(data[x]); using (DirectoryEncodingInputStream stream = new DirectoryEncodingInputStream(@"C:\dir\", fileSystemService, platform)) { Assert.IsTrue(stream.ReadSymbol(out byte symbol)); Assert.AreEqual(0x11, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0x33, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0xEA, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0x22, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0x33, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0x13, symbol); Assert.IsFalse(stream.ReadSymbol(out symbol)); } }
public void ReadSymbolTest2() { fileSystemService.EnumFileSystemEntriesFunc = _ => { return(new[] { new FileSystemEntry(FileSystemEntryType.File, "file.dat", @"C:\dir\file.dat") }); }; Dictionary <string, byte[]> data = new Dictionary <string, byte[]> { { @"C:\dir\file.dat", new byte[] { 0x1, 0x2, 0x3, 0x7 } } }; platform.ReadFileFunc = x => new MemoryStream(data[x]); using (DirectoryEncodingInputStream stream = new DirectoryEncodingInputStream(@"C:\dir\file.dat", fileSystemService, platform)) { Assert.IsTrue(stream.ReadSymbol(out byte symbol)); Assert.AreEqual(0x1, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0x2, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0x3, symbol); Assert.IsTrue(stream.ReadSymbol(out symbol)); Assert.AreEqual(0x7, symbol); Assert.IsFalse(stream.ReadSymbol(out symbol)); } }
private ITaskProgressController CreateTaskProgressController(IProgress <CodingProgressInfo> progress, DirectoryEncodingInputStream inputStream) { if (progress == null) { return(new NullTaskProgressController()); } return(new EncodingTaskProgressController(progress, () => inputStream.SizeInBytes)); }