public void TestYDecodeYPartStateTransitions() { var ydec = new YDecoder(); var decoded = new byte[1024]; for (int i = 0; i < YPartTransitionInputs.Length; i++) { var input = Encoding.ASCII.GetBytes(YPartTransitionInputs[i]); var chars = YPartTransitionOutputs[i].ToCharArray(); for (int j = 0; j < chars.Length; j++) { chars[j] -= (char)42; } var expected = new string (chars); int n = ydec.Decode(input, 0, input.Length, decoded); var actual = Encoding.ASCII.GetString(decoded, 0, n); Assert.AreEqual(expected, actual, YPartTransitionInputs[i]); ydec.Reset(); } }
public void TestYDecodeStateTransitions() { using (var file = File.OpenRead(Path.Combine(DataDir, "state-changes.ntx"))) { using (var decoded = new MemoryStream()) { var ydec = new YDecoder(); using (var filtered = new FilteredStream(decoded)) { filtered.Add(new DecoderFilter(ydec)); file.CopyTo(filtered, 1); filtered.Flush(); } Assert.AreEqual(584, decoded.Length, "The decoded size does not match."); Assert.AreEqual(0xded29f4f, ydec.Checksum ^ 0xffffffff, "The decoded checksum does not match."); } } }
public void TestDecodeSimpleYEncMessage() { using (var file = File.OpenRead("../../TestData/yenc/simple.msg")) { var message = MimeMessage.Load(file); using (var decoded = new MemoryStream()) { var ydec = new YDecoder(); using (var filtered = new FilteredStream(decoded)) { filtered.Add(new DecoderFilter(ydec)); ((MimePart)message.Body).ContentObject.WriteTo(filtered); } Assert.AreEqual(584, decoded.Length, "The decoded size does not match."); Assert.AreEqual(0xded29f4f, ydec.Checksum ^ 0xffffffff, "The checksum does not match."); } } }
public void TestYDecodeMultiPart() { var expected = File.ReadAllBytes(Path.Combine(DataDir, "joystick.jpg")); using (var decoded = new MemoryStream()) { using (var file = File.OpenRead(Path.Combine(DataDir, "00000020.ntx"))) { var ydec = new YDecoder(); using (var filtered = new FilteredStream(decoded)) { filtered.Add(new DecoderFilter(ydec)); file.CopyTo(filtered, 1); filtered.Flush(); } Assert.AreEqual(11250, decoded.Length, "The decoded size does not match (part 1)."); Assert.AreEqual(0xbfae5c0b, ydec.Checksum ^ 0xffffffff, "The decoded checksum does not match (part 1)."); } using (var file = File.OpenRead(Path.Combine(DataDir, "00000021.ntx"))) { var ydec = new YDecoder(); using (var filtered = new FilteredStream(decoded)) { filtered.Add(new DecoderFilter(ydec)); file.CopyTo(filtered, 1); filtered.Flush(); } Assert.AreEqual(19338, decoded.Length, "The decoded size does not match (part 2)."); Assert.AreEqual(0xaca76043, ydec.Checksum ^ 0xffffffff, "The decoded checksum does not match (part 2)."); } var actual = decoded.GetBuffer(); for (int i = 0; i < expected.Length; i++) { Assert.AreEqual(expected[i], actual[i], "different content at index {0}", i); } } }
public void TestYDecodeSimpleMessage() { using (var file = File.OpenRead(Path.Combine(DataDir, "simple.msg"))) { var message = MimeMessage.Load(file); using (var decoded = new MemoryStream()) { var ydec = new YDecoder(); using (var filtered = new FilteredStream(decoded)) { filtered.Add(new DecoderFilter(ydec)); ((MimePart)message.Body).Content.WriteTo(filtered); filtered.Flush(); } decoded.Position = 0; Assert.AreEqual(584, decoded.Length, "The decoded size does not match."); Assert.AreEqual(0xded29f4f, ydec.Checksum ^ 0xffffffff, "The decoded checksum does not match."); // now re-encode it using (var encoded = new MemoryStream()) { var ybegin = Encoding.ASCII.GetBytes("-- \n=ybegin line=128 size=584 name=testfile.txt \n"); var yend = Encoding.ASCII.GetBytes("=yend size=584 crc32=ded29f4f \n"); var yenc = new YEncoder(); encoded.Write(ybegin, 0, ybegin.Length); using (var filtered = new FilteredStream(encoded)) { filtered.Add(new EncoderFilter(yenc)); decoded.CopyTo(filtered, 4096); filtered.Flush(); } encoded.Write(yend, 0, yend.Length); Assert.AreEqual(0xded29f4f, yenc.Checksum ^ 0xffffffff, "The encoded checksum does not match."); using (var original = new MemoryStream()) { using (var filtered = new FilteredStream(original)) { filtered.Add(new Dos2UnixFilter()); ((MimePart)message.Body).Content.WriteTo(filtered); filtered.Flush(); } var latin1 = Encoding.GetEncoding("iso-8859-1"); var buf = original.GetBuffer(); var expected = latin1.GetString(buf, 0, (int)original.Length); buf = encoded.GetBuffer(); var actual = latin1.GetString(buf, 0, (int)encoded.Length); Assert.AreEqual(expected, actual, "Encoded value does not match original."); } } } } }