Example #1
0
        /// <summary>
        /// Creates a SWF string dump, saves the SWF, re-loads it and compares a new
        /// string dump. If the SWF files are different, it concludes that something
        /// went wrong.
        /// </summary>
        /// <param name="swf">The SWF to test saving/loading</param>
        /// <param name="name">The SWF file and dumps are saved for inspection to
        /// the test output folder under this name.</param>
        private void SaveAndVerifyPredictedOutput(SWF swf, string name, bool compressed)
        {
            string swfDump1 = this.SwfToString(swf);

            using (FileStream fs = new FileStream(this.TestDir + name + @".model.txt", FileMode.Create))
            {
                byte[] dump1data = new ASCIIEncoding().GetBytes(swfDump1);
                fs.Write(dump1data, 0, dump1data.Length);
            }

            StringBuilder    writeLog    = new StringBuilder();
            StringBuilder    abcWriteLog = new StringBuilder();
            SWFWriterOptions opts        = new SWFWriterOptions()
            {
                Compressed     = compressed,
                EnableDebugger = true
            };

            byte[] swfData = new SWFWriter(swf, opts, writeLog, abcWriteLog).ToByteArray();

            using (FileStream fs = new FileStream(this.TestDir + name + ".writelog.txt", FileMode.Create))
            {
                byte[] writeLogData = new ASCIIEncoding().GetBytes(writeLog.ToString());
                fs.Write(writeLogData, 0, writeLogData.Length);
            }

            Directory.CreateDirectory(this.TestDir + @"\abc\");
            using (FileStream fs = new FileStream(this.TestDir + @"\abc\" + name + ".writelog.txt", FileMode.Create))
            {
                byte[] writeLogData = new ASCIIEncoding().GetBytes(abcWriteLog.ToString());
                fs.Write(writeLogData, 0, writeLogData.Length);
            }

            using (FileStream fs = new FileStream(this.TestDir + name + ".swf", FileMode.Create))
            {
                fs.Write(swfData, 0, swfData.Length);
            }
            StringBuilder binDump = new StringBuilder();

            string swfDump2 = null;

            try
            {
                swfDump2 = this.SwfToString(
                    new SWFReader(
                        new MemoryStream(swfData),
                        new SWFReaderOptions()
                {
                    StrictTagLength = true
                },
                        binDump,
                        this)
                    .ReadSWF(new SWFContext("resaved." + name)));
            }
            finally
            {
                using (FileStream fs = new FileStream(this.TestDir + name + ".bin.dump-2.txt", FileMode.Create))
                {
                    byte[] dump2bindata = new ASCIIEncoding().GetBytes(binDump.ToString());
                    fs.Write(dump2bindata, 0, dump2bindata.Length);
                }
            }

            string finalModelFile = this.TestDir + name + ".model-dump-2.txt";

            using (FileStream fs = new FileStream(finalModelFile, FileMode.Create))
            {
                byte[] dump2data = new ASCIIEncoding().GetBytes(swfDump2);
                fs.Write(dump2data, 0, dump2data.Length);
            }

            string predicted = TestDir + name + ".model.predict.txt";

            using (Stream input = ResourceAsStream("predicted." + name + ".txt"))
                using (FileStream output = new FileStream(TestDir + name + ".model.predict.txt", FileMode.Create))
                {
                    Assert.IsNotNull(input, "Predicted output is missing! " + name);
                    CopyStream(input, output);
                }

            using (StreamWriter acceptScript = new StreamWriter(new FileStream(TestDir + "accept.bat", FileMode.Create)))
            {
                acceptScript.WriteLine("copy \"" + finalModelFile + "\" \"" + new FileInfo("..\\..\\..\\SWFModellerTest\\res\\predicted\\" + name + ".txt").FullName + "\"");
            }

            using (StreamWriter viewScript = new StreamWriter(new FileStream(TestDir + "viewdiff.bat", FileMode.Create)))
            {
                /* ISSUE 44: This should be a diff tool env var */
                viewScript.WriteLine("\"c:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" \"" + finalModelFile + "\" \"" + new FileInfo("..\\..\\..\\SWFModellerTest\\res\\predicted\\" + name + ".txt").FullName + "\"");
            }

            CompareFiles(
                predicted,
                finalModelFile,
                "Predicted output failure! These files differ: " + name + ".model.predict.txt" + ", " + name + ".model.txt");
        }
Example #2
0
        /// <summary>
        /// Creates a SWF string dump, saves the SWF, re-loads it and compares a new
        /// string dump. If the SWF files are different, it concludes that something
        /// went wrong.
        /// </summary>
        /// <param name="swf">The SWF to test saving/loading</param>
        /// <param name="name">The SWF file and dumps are saved for inspection to
        /// the test output folder under this name.</param>
        private void SaveAndVerifyPredictedOutput(SWF swf, string name, bool compressed)
        {
            string swfDump1 = this.SwfToString(swf);

            using (FileStream fs = new FileStream(this.TestDir + name + @".model.txt", FileMode.Create))
            {
                byte[] dump1data = new ASCIIEncoding().GetBytes(swfDump1);
                fs.Write(dump1data, 0, dump1data.Length);
            }

            StringBuilder writeLog = new StringBuilder();
            StringBuilder abcWriteLog = new StringBuilder();
            SWFWriterOptions opts = new SWFWriterOptions()
            {
                Compressed = compressed,
                EnableDebugger = true
            };

            byte[] swfData = new SWFWriter(swf, opts, writeLog, abcWriteLog).ToByteArray();

            using (FileStream fs = new FileStream(this.TestDir + name + ".writelog.txt", FileMode.Create))
            {
                byte[] writeLogData = new ASCIIEncoding().GetBytes(writeLog.ToString());
                fs.Write(writeLogData, 0, writeLogData.Length);
            }

            Directory.CreateDirectory(this.TestDir + @"\abc\");
            using (FileStream fs = new FileStream(this.TestDir + @"\abc\" + name + ".writelog.txt", FileMode.Create))
            {
                byte[] writeLogData = new ASCIIEncoding().GetBytes(abcWriteLog.ToString());
                fs.Write(writeLogData, 0, writeLogData.Length);
            }

            using (FileStream fs = new FileStream(this.TestDir + name + ".swf", FileMode.Create))
            {
                fs.Write(swfData, 0, swfData.Length);
            }
            StringBuilder binDump = new StringBuilder();

            string swfDump2 = null;
            try
            {
                swfDump2 = this.SwfToString(
                        new SWFReader(
                                new MemoryStream(swfData),
                                new SWFReaderOptions() { StrictTagLength = true },
                                binDump,
                                this)
                            .ReadSWF(new SWFContext("resaved." + name)));
            }
            finally
            {
                using (FileStream fs = new FileStream(this.TestDir + name + ".bin.dump-2.txt", FileMode.Create))
                {
                    byte[] dump2bindata = new ASCIIEncoding().GetBytes(binDump.ToString());
                    fs.Write(dump2bindata, 0, dump2bindata.Length);
                }
            }

            string finalModelFile = this.TestDir + name + ".model-dump-2.txt";
            using (FileStream fs = new FileStream(finalModelFile, FileMode.Create))
            {
                byte[] dump2data = new ASCIIEncoding().GetBytes(swfDump2);
                fs.Write(dump2data, 0, dump2data.Length);
            }

            string predicted = TestDir + name + ".model.predict.txt";
            using (Stream input = ResourceAsStream("predicted." + name + ".txt"))
            using (FileStream output = new FileStream(TestDir + name + ".model.predict.txt", FileMode.Create))
            {
                Assert.IsNotNull(input, "Predicted output is missing! " + name);
                CopyStream(input, output);
            }

            using (StreamWriter acceptScript = new StreamWriter(new FileStream(TestDir + "accept.bat", FileMode.Create)))
            {
                acceptScript.WriteLine("copy \"" + finalModelFile + "\" \"" + new FileInfo("..\\..\\..\\SWFModellerTest\\res\\predicted\\" + name + ".txt").FullName + "\"");
            }

            using (StreamWriter viewScript = new StreamWriter(new FileStream(TestDir + "viewdiff.bat", FileMode.Create)))
            {
                /* ISSUE 44: This should be a diff tool env var */
                viewScript.WriteLine("\"c:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" \"" + finalModelFile + "\" \"" + new FileInfo("..\\..\\..\\SWFModellerTest\\res\\predicted\\" + name + ".txt").FullName + "\"");
            }

            CompareFiles(
                predicted,
                finalModelFile,
                "Predicted output failure! These files differ: " + name + ".model.predict.txt" + ", " + name + ".model.txt");
        }