예제 #1
0
        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();
            }
        }
예제 #2
0
        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.");
                }
            }
        }
예제 #3
0
        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.");
                }
            }
        }
예제 #4
0
        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);
                }
            }
        }
예제 #5
0
        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.");
                        }
                    }
                }
            }
        }