Ejemplo n.º 1
0
        // 正解データと比較して結果を生成する
        private static void CompareDirectories(HTMLWriter hw, String strCorrectDataPath, String strDirName )
        {
            if (Directory.Exists(strCorrectDataPath))
            {
                foreach (var cmpfile in Directory.GetFiles(strCorrectDataPath))
                {
                    // 比較正解データが.pngかをチェックする
                    if (!cmpfile.EndsWith(".png"))
                        continue;

                    // 比較先が存在するかをチェックする
                    String strCmpFileName = new FileInfo(cmpfile).Name; // 名前だけを取り出す
                    if (File.Exists(strCmpFileName))
                    {
                        CompareImage( hw, strDirName, strCmpFileName, strCorrectDataPath + "\\" + strCmpFileName );
                    }
                    else
                    {
                        hw.MissingCompareImage( strDirName, strCmpFileName );
                    }

                    hw.WriteLine();
                }
            }
        }
Ejemplo n.º 2
0
        private void WriteStyles(HTMLWriter writer)
        {
            writer.StartTag("style", "type=\"text/css\"");
            {
                writer.WriteValue("body { background: #202020; color: #b3b3b3;  font-family: sans-serif; }");
                writer.WriteValue("a { color: #9e9e9e; }");
                writer.WriteValue(".field_type { background: #418dff; color: #000; text-align: center; border: 1px solid #203e6b; padding: 3px; }");
                writer.WriteValue(".field_value { background: #000; color: #fff; border: 1px solid black; padding: 3px;  }");
                writer.WriteValue(".fields_table { font-size: 10px; margin: 5px; }");

                writer.WriteValue(".fsm_state { background: #252525; color: #a9a9a9; border: 1px solid #cecece; margin: 10px; width: 600px; }");
                writer.WriteValue(".fsm_active_state { border: 2px solid gold; }");
                writer.WriteValue(".fsm_state_name { background: #101010; padding: 10px; }");
                writer.WriteValue(".error { background: #a90000; }");
                writer.WriteValue(".fsm_action { background: #383838; border: 1px solid #000000; margin: 5px; border-radius: 5px; }");
                writer.WriteValue(".fsm_action_name { padding: 10px; font-size: 14px; font-weight: bold; border-bottom: 1px solid black; }");

                writer.WriteValue(".variable_ref { background: #ffb441; color: #000; font-size: 9px; display: inline-block; border-radius: 3px; border: 1px solid #6b4b1a; }");

                writer.WriteValue(".transition_table { margin: 2px; font-size: 12px; }");

                writer.WriteValue(".state_phase { background: #383838; border: 1px solid #000000; margin: 5px; border-radius: 5px; font-size: 18px; text-align: center; }");

                writer.WriteValue(".arrow { border: solid #909090; border-width: 0 2px 2px 0; display: inline-block; padding: 10px; width: 1px; }");

                writer.WriteValue(".right { transform: rotate(-45deg); -webkit-transform: rotate(-45deg); }");
                writer.WriteValue(".left { transform: rotate(135deg); -webkit-transform: rotate(135deg); }");
                writer.WriteValue(".up { transform: rotate(-135deg); -webkit-transform: rotate(-135deg); }");
                writer.WriteValue(".down { transform: rotate(45deg); -webkit-transform: rotate(45deg); }");

                writer.WriteValue(".center_arrow { margin-left: 289px; margin-top: -10px; margin-bottom: 2px; }");
            }
            writer.EndTag();
        }
Ejemplo n.º 3
0
        ///  画像を比較する
        private static void CompareImage( HTMLWriter hw, String strDirName, String strCmpFileName, String strCorrectImagePath )
        {
            // 結果ファイルとの比較の作成
            Bitmap imageResult = new Bitmap(Image.FromFile(strCmpFileName));
            Bitmap imageCorrect = new Bitmap(Image.FromFile(strCorrectImagePath));

            if (imageResult.Size != imageCorrect.Size)
            {
                hw.ImageSizeDifferent(strDirName, strCmpFileName);
            }
            else
            {
                // サイズが同じ.比較画像の作成
                double dErrorSum = 0;
                int nErrorCnt = 0;
                var sizeImage = imageResult.Size;
                Bitmap imageCompare = new Bitmap(sizeImage.Width, sizeImage.Height);
                for (int iy = 0; iy < sizeImage.Height; ++iy)
                {
                    for (int ix = 0; ix < sizeImage.Width; ++ix)
                    {
                        var pixel1 = imageResult.GetPixel(ix, iy);
                        var pixel2 = imageCorrect.GetPixel(ix, iy);
                        var pixel3 = Color.FromArgb(pixel1.R ^ pixel2.R, pixel1.G ^ pixel2.G, pixel1.B ^ pixel2.B);

                        imageCompare.SetPixel(ix, iy, pixel3);
                        dErrorSum += pixel3.R + pixel3.G + pixel3.B;
                        ++nErrorCnt;
                    }
                }

                // 比較した結果の画像を保存
                String strTmpPath = "..\\" + strCmpImageFolderName + "\\" + strCmpFileName;
                imageCompare.Save(strTmpPath, ImageFormat.Png);

                // エラーとみなす閾値を超えているかのチェック
                bool bError = dErrorSum >= 10000;

                if (!bError)
                {
                    // エラーが少ないときの対処
                    // 何も表示しない
            #if false
            //                hw.WriteNoError(strDirName, strCmpFileName);
            #else
                    return;
            #endif
                }
                else
                {
                    hw.WriteErrorValue(dErrorSum);  // エラー値を表示する
                    hw.WriteTestResult(strDirName, strCmpFileName);
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Dump world to the given folder.
        /// </summary>
        /// <param name="folder">The folder without trailing slash to dump world to -
        /// must exists.</param>
        public void Dump(string folder)
        {
            UnityEngine.Object[] objects =
                Resources.FindObjectsOfTypeAll <UnityEngine.Object>();

            cssStylePath = $"{folder}/style.css";
            WriteStyles();

            HTMLWriter.WriteDocument(
                $"{folder}/index.html", "INDEX", cssStylePath, (HTMLWriter writer) => {
                writer.StartTag("table");
                writer.StartTag("tr");
                {
                    writer.OneLiner("td", "#");
                    writer.OneLiner("td", "Name");
                    writer.OneLiner("td", "Type");
                }
                writer.EndTag();

                int index = 1;
                foreach (var obj in objects)
                {
                    if (CanSkipObject(obj))
                    {
                        continue;
                    }

                    writer.StartTag("tr");
                    {
                        writer.OneLiner("td", index.ToString());

                        string objectFile = DumpObject(obj, folder, writer.FileName);

                        writer.StartTag("td");
                        {
                            writer.Link(objectFile,
                                        ((obj.name.Trim().Length > 0) ? obj.name : "NO NAME"));
                        }
                        writer.EndTag();

                        writer.StartTag("td");
                        { writer.WriteValue(obj.GetType().Name); }
                        writer.EndTag();
                    }
                    writer.EndTag();
                    ++index;

                    System.GC.Collect();
                }
                writer.EndTag();
            });
        }
Ejemplo n.º 5
0
        public void Test_Writers()
        {
            using (HTMLWriter writer = new HTMLWriter()) {
                EWriter_Test(writer);
            }

            using (RTFWriter writer = new RTFWriter()) {
                EWriter_Test(writer);
            }

            /*using (PDFWriter writer = new PDFWriter()) {
             *  // TravisCI crash
             * }*/
        }
Ejemplo n.º 6
0
        private static void PrintObjectFields(object obj, HTMLWriter writer)
        {
            if (obj == null)
            {
                return;
            }

            writer.StartTag("table", "class=\"fields_table\"");

            Type type = obj.GetType();

            FieldInfo[] fields =
                type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic |
                               BindingFlags.Public | BindingFlags.FlattenHierarchy);

            foreach (var fi in fields)
            {
                writer.StartTag("tr");
                {
                    var fieldType = fi.FieldType;

                    writer.StartTag("td", "width=\"50px\"");
                    {
                        writer.StartTag("div", "class=\"field_type\"");
                        writer.WriteValue(fieldType.Name);
                        writer.EndTag();
                    }
                    writer.EndTag();

                    writer.StartTag("td", "width=\"100px\"");
                    { writer.WriteValue(fi.Name); }
                    writer.EndTag();

                    writer.StartTag("td", "width=\"300px\"");
                    {
                        writer.StartTag("div", "class=\"field_value\"");
                        {
                            var value = fi.GetValue(obj);
                            PrintValue(obj, value, writer);
                        }
                        writer.EndTag();
                    }
                    writer.EndTag();
                }
                writer.EndTag();
            }
            writer.EndTag();
        }
Ejemplo n.º 7
0
        private static void PrintValue(object obj, object value, HTMLWriter writer)
        {
            if (value == null)
            {
                writer.WriteValue("null");
                return;
            }

            if (value is FsmEvent && obj is FsmStateAction)
            {
                var fsmEvent = ((FsmEvent)value);
                var action   = (FsmStateAction)obj;
                var state    = action.State;
                var fsm      = action.Fsm;

                writer.WriteValue(fsmEvent.Name + " ");

                foreach (var transition in fsm.GlobalTransitions)
                {
                    if (transition.FsmEvent == fsmEvent)
                    {
                        writer.Link($"#{transition.ToState}", $"({transition.ToState})");
                    }
                }

                foreach (var transition in state.Transitions)
                {
                    if (transition.FsmEvent == fsmEvent)
                    {
                        writer.Link($"#{transition.ToState}", $"({transition.ToState})");
                    }
                }
            }
            else
            {
                writer.WriteValue(value.ToString());
            }

            if (value is NamedVariable)
            {
                string variableName = ((NamedVariable)value).Name;
                if (variableName.Length > 0)
                {
                    writer.WriteValue($" <div class=\"variable_ref\">{variableName}</div>");
                }
            }
        }
Ejemplo n.º 8
0
        string DumpObject(
            UnityEngine.Object obj, string folder, string previousFile = "")
        {
            Directory.CreateDirectory(folder);
            DumpObjectDelegate bestDumpDelegate = null;

            foreach (var kv in dumpMethods)
            {
                if (kv.Key.GetHashCode() == obj.GetType().GetHashCode())
                {
                    bestDumpDelegate = kv.Value;
                    break;
                }

                if (obj.GetType().IsSubclassOf(kv.Key))
                {
                    bestDumpDelegate = kv.Value;
                }
            }

            try {
                if (bestDumpDelegate != null)
                {
                    string fileName = $"{folder}/{BuildFileName(obj)}";
                    HTMLWriter.WriteDocument(fileName,
                                             $"{obj.name} - {obj.GetType().FullName}", cssStylePath,
                                             (HTMLWriter writer) => {
                        writer.Link(previousFile, "< GO BACK");
                        writer.NewLine();
                        writer.OneLiner("h1", obj.name);
                        writer.OneLiner("b", $"Type: {obj.GetType().FullName}");
                        writer.ShortTag("hr");

                        bestDumpDelegate.Invoke(obj, writer, this, folder);
                    });
                    return(fileName);
                }
            } catch (Exception e) {
                Logger.Error("Failed to dump object!");
                Logger.Error(e.Message);
                Logger.Error(e.StackTrace);
                return($"#exception_{e.Message}");
            }
            return("#failed_to_generate_file");
        }
Ejemplo n.º 9
0
        private static bool BuildHTMLFromTextWork(MetaDoc xmlTextWork)
        {
            bool bRet = false;

            Globals.m_Logger.Info(string.Format("Converting {0} to html", xmlTextWork.GetFileName()));
            HTMLWriter htmlWriter = new HTMLWriter(xmlTextWork);

            if (!htmlWriter.Save())
            {
                Globals.m_Logger.Error(string.Format("Unable to save {0}!", htmlWriter.GetOutFileName()));
            }
            else
            {
                Globals.m_Logger.Info(string.Format("{0} generated", htmlWriter.GetOutFileName()));
                bRet = true;
            }
            bRet &= htmlWriter.ValidateHTML();
            return(bRet);
        }
Ejemplo n.º 10
0
        private static List <MetaDoc> UpgradeHTMLToPublishFolder(List <MetaDoc> textWorks, Boolean forced)
        {
            string destFolder = Globals.IndexFolder();

            destFolder = destFolder.TrimEnd('\\') + "\\"; // normalize the end

            List <MetaDoc> updatedWorks = new List <MetaDoc>();

            for (int iTw = 0; iTw < textWorks.Count; iTw++)
            {
                if (!textWorks[iTw].IsShowInGlobalIndex())
                {
                    continue;
                }

                if (textWorks[iTw].IsAlreadyPublished() && !forced)
                {
                    continue;
                }

                HTMLWriter writer       = new HTMLWriter(textWorks[iTw]);
                string     htmlFilePath = Utils.ChangePathExtension(destFolder + textWorks[iTw].GetFileName(), Globals.HTML_EXT);
                if (textWorks[iTw].GetHashes().Count > 0)
                {
                    string archivedHTHMFilePath = Globals.IndexFolder() + textWorks[iTw].GetHashes()[0].GetHash() + Globals.HTML_EXT;
                    if (!File.Exists(archivedHTHMFilePath))
                    {
                        File.Move(htmlFilePath, archivedHTHMFilePath);
                    }
                }

                writer.Save(htmlFilePath, true, Globals.IsAbstractOnly());

                textWorks[iTw].AddHash(new DocHash(textWorks[iTw].GetCurrentHash()));
                textWorks[iTw].Save();
                updatedWorks.Add(textWorks[iTw]);
                Globals.m_Logger.Info(string.Format("{0} selected to be updated", htmlFilePath));
            }
            return(updatedWorks);
        }
Ejemplo n.º 11
0
        private static void PrintValue(object obj, object value, HTMLWriter writer)
        {
            if (value == null)
            {
                writer.WriteValue("null");
                return;
            }

            if (value is FsmEvent && obj is FsmStateAction)
            {
                var fsmEvent = ((FsmEvent)value);
                var action   = (FsmStateAction)obj;
                var state    = action.State;
                var fsm      = action.Fsm;

                writer.WriteValue(fsmEvent.Name + " ");

                foreach (var transition in fsm.GlobalTransitions)
                {
                    if (transition.FsmEvent == fsmEvent)
                    {
                        writer.Link($"#{transition.ToState}", $"({transition.ToState})");
                    }
                }

                foreach (var transition in state.Transitions)
                {
                    if (transition.FsmEvent == fsmEvent)
                    {
                        writer.Link($"#{transition.ToState}", $"({transition.ToState})");
                    }
                }
            }
            else
            {
                writer.WriteValue(value.ToString());
            }

            if (value is NamedVariable)
            {
                string variableName = ((NamedVariable)value).Name;
                if (variableName.Length > 0)
                {
                    writer.WriteValue($" <div class=\"variable_ref\">{variableName}</div>");
                }
            }
            if (value is FsmProperty)
            {
                string propertyName = ((FsmProperty)value).PropertyName;
                if (propertyName.Length > 0)
                {
                    writer.WriteValue($" <div class=\"variable_ref\">{propertyName}</div>");
                }
            }

            if (value is FsmOwnerDefault)
            {
                var val = (FsmOwnerDefault)value;
                writer.WriteValue(DumpOwnerDefault(val));
            }

            if (value is FsmEventTarget)
            {
                var val = (FsmEventTarget)value;

                string eventTargetInfo = val.target.ToString() + " ";

                if (val.excludeSelf.Value)
                {
                    eventTargetInfo += "(excludeSelf) ";
                }

                if (val.fsmComponent != null)
                {
                    eventTargetInfo += $"(fsmComponent: {val.fsmComponent.name}) ";
                }

                if (val.fsmName != null)
                {
                    eventTargetInfo += $"(fsmName: {val.fsmName.Value}) ";
                }

                if (val.gameObject != null)
                {
                    eventTargetInfo += "(" + DumpOwnerDefault(val.gameObject) + ") ";
                }

                if (val.sendToChildren.Value)
                {
                    eventTargetInfo += "(sendToChildren) ";
                }

                writer.WriteValue(eventTargetInfo);
            }
        }
Ejemplo n.º 12
0
        //
        static void Main(string[] args)
        {
            // 実行する自動GUIテストスクリプトのフィルタ
            String strTargetDirFilter = "*";    // 引数に何もなければ全部のテストを実行
            if (args.Length > 0)
                strTargetDirFilter = args[0];   // 引数を受け取ってフィルタとする

            // 対象プログラムが存在するかをチェックする
            if (!File.Exists(strTargetExePath))
            {
                System.Console.WriteLine("対象EXEが見つかりません");
                return;
            }

            // 対象プログラムのパスをフルパスに変換する
            strTargetExePath = new FileInfo(strTargetExePath).FullName;

            System.Environment.CurrentDirectory = strScriptFolder;
            String strPushDir = System.Environment.CurrentDirectory;

            // テスト対象のホームページ作成
            using (HTMLWriter hw = new HTMLWriter(strHTMLName) )
            {
                // テストを実行していく
                var dirlist = Directory.GetDirectories(".", strTargetDirFilter);
                foreach (var dirnameM in dirlist)
                {
                    System.Environment.CurrentDirectory = strPushDir;

                    // 余分な文字を外す (.\)の部分
                    String strDirname = new FileInfo(dirnameM).Name;

                    // テストスクリプトがあるかをチェックする
                    if (!File.Exists(strDirname + "\\" + strTestScriptName ))
                        continue;

                    // ディレクトリを保存する
                    strPushDir = System.Environment.CurrentDirectory;

                    // 一時ファイル保存用フォルダ
                    Directory.CreateDirectory(strDirname + "\\" + strCmpImageFolderName);

                    // 結果保存フォルダに移動する
                    Directory.CreateDirectory(strDirname + "\\" + strResultFolderName );

                    System.Environment.CurrentDirectory += "\\" + strDirname + "\\" + strResultFolderName ;

                    // プログラム実行
                    System.Console.WriteLine("Run " + strDirname);
                    hw.WriteDirName(strDirname);

                    // 説明付加
                    hw.AddReadMe();

                    // 対象プログラムを実行する
                    var process = System.Diagnostics.Process.Start(strTargetExePath, strAutoTestCommand + " \"..\\"+strTestScriptName+"\"" );
                    process.WaitForExit(nWaitForKill);

                    // 一定時間経っても終了していなかったら消す
                    if (!process.HasExited)
                    {
                        process.Kill();
                        hw.KillProcess();
                    }

                    // 比較対象のフォルダと画像を比較する
                    String strCorrectDataPath = "..\\" + strCorrectDataFolderName;
                    CompareDirectories(hw, strCorrectDataPath, strDirname);

                    hw.Flush();
                }

                hw.CloseHTML();
            }
        }
Ejemplo n.º 13
0
        private static void Main(string[] args)
        {
            using var html = new HTMLWriter("output.html");
            PrettyFormatters.Add(new ColorFormatter(html));

            WriteLine($"ConLib Example");
            Write($"Using ConLib ");
            WriteVersion();
            WriteLine();

            Section($"Value highlighting (colors from type):", () =>
            {
                WriteLine($" String: {"banana"}");
                WriteLine($" Numbers: {93}, {Math.E:f4}, 0x{0x8b:x} ");
                WriteLine($" Booleans: {true} and {false}");
                WriteLine($" Time: {DateTime.Now:O} (DateTime) and {TimeSpan.FromSeconds(23)} (TimeSpan)");
                WriteLine($" Objects: {new Program()} and {new object()}");
                WriteLine($" Exception: {new ArgumentNullException("target")}");
                WriteLine($" Null: {null} (null) and {DBNull.Value} (DBNull)");
            });

            Section($"Explicit colors: ", () =>
            {
                WriteLine($" Number {3} is the {"only"} {true} {new Exception("YOLO!")}",
                          Green, Blue, Red, Yellow);
            });

            Section($"Jobs:", () =>
            {
                DoChore("Foo", () =>
                {
                    WriteLine($"Output from within task");
                    Task.Delay(100).Wait();
                    WriteLine($"Some work has been done");
                    Task.Delay(100).Wait();
                    WriteLine($"Let's do some subtasks!");

                    DoChore("Subtask 1", () =>
                    {
                        WriteLine($"Output from within subtask");
                        Task.Delay(1000).Wait();
                        WriteLine($"Everything is done!");
                    });

                    DoChore("Subtask 2", () =>
                    {
                        WriteLine($"Subtask that is about to fail");
                        throw new ArgumentOutOfRangeException("PI", 4, $"Subtask failed!")
                        {
                            HelpLink = "https://lmgtfy.com/?q=how%20to%20code",
                        };
                    });
                }, continueOnFail: true);

                WriteLine($"At least we didn't throw in {"Main"}{"()"}!", Yellow, White);
            });

            Section($"Output capture and indentation: ", () =>
            {
                DoChore("Capture StdOut", () =>
                {
                    System.Console.Write("Output from System.Console.WriteLine(), which is correctly indented.");
                });

                DoChore("Capture StdErr", () =>
                {
                    System.Console.Error.WriteLine("Output from System.Console.Error.WriteLine(), which causes the job to fail.");
                }, continueOnFail: true);

                DoChore("Run external program", () =>
                {
                    //Exec("ping localhost");
                });
            });

            Section($"Tasks:", () =>
            {
                DoTask("Doing the dishes", () => Task.Delay(500));
                DoTask("Mopping the floors", () => Task.Delay(500));
                DoTask("Cooking dinner", () => Task.Delay(500).ContinueWith(t =>
                                                                            throw new Exception("House is on fire!")
                                                                            ), continueOnFail: true);

                WriteLine();
                WriteLine($"At least we didn't throw in {"Main"}{"()"}!", Yellow, White);
            });