public void DoWindowContents(Rect canvas) { StatusExplorer.UpdateAllStatusCounts(); var options = new Listing_Standard(); options.Begin(canvas); options.CheckboxLabeled("Include RimTests' own test suite", ref RunOwnTests, "if enabled, RimTest will run its' own test suite as well as any mod test suites."); options.CheckboxLabeled("Run tests at startup", ref RunAtStartup, "if enabled, RimTest will run every valid tests at the game startup."); options.GapLine(); //if (options.ButtonText("Run everything")) //{ // Runner.RunAllRegisteredTests(); // StatusExplorer.UpdateAllStatusCounts(); //} //if(options.ButtonText("Log all current results to Debug log")) //{ // Viewer.LogTestsResults(); //} //options.GapLine(); DrawControls(options); options.End(); Rect GUIRect = canvas.BottomPartPixels(canvas.height - options.CurHeight); Rect viewRect = GUIRect.LeftPartPixels(GUIRect.width - 16).AtZero(); viewRect.Set(viewRect.xMin, viewRect.yMin, viewRect.width, CalcTotalHeight()); // update height to accomodate to all the data var testlisting = new Listing_Standard(); //testlisting.BeginScrollView(GUIRect, ref ScrollPosition, ref viewRect); Widgets.BeginScrollView(GUIRect, ref ScrollPosition, viewRect, true); GUI.BeginGroup(viewRect); testlisting.Begin(viewRect); DrawTests(testlisting); testlisting.End(); GUI.EndGroup(); //testlisting.EndScrollView(ref viewRect); Widgets.EndScrollView(); //reset fonts Text.Font = GameFont.Small; Text.Anchor = TextAnchor.UpperLeft; //Widgets.CustomButtonText(ref labelRect, "test assembly", Color.black, Color.white, Color.red); // RimTest -- displayA displayB ... // Assemblies: |collapse| |expand| filter regex: |_________________ // TestSuites: |collapse| |expand| view: [x]✓ [v]! [v]✘ [x]➥ [v]? // |run all| |export logs| // V THIS PART V // |run| |time| ||v [v] Assembly 1| | // |run| |time| ||^ [x] Assembly 2| | error msg // |run| |time| ||v [v] TestSuite 2.1| | // |run| |time| ||^ [x] TestSuite 2.2| | error msg // |run| |time| ||v [x] Test 2.2.1| | error msg // |run| |time| ||^ [v] Test 2.2.1| | // ... }
/// <summary> /// Said entry point /// </summary> public RimTestMod(ModContentPack content) : base(content) //our constructor { Settings = GetSettings <RimTestSettings>(); Explorer.ExploreAndRegisterAssemblies(); StatusExplorer.UpdateAllStatusCounts(); if (Settings.RunAtStartup) { Runner.RunAllRegisteredTests(); StatusExplorer.UpdateAllStatusCounts(); Viewer.LogTestsResults(); } }
/// <summary> /// Draws the RimTest UI main canvas /// </summary> /// <param name="canvas"></param> public void DoWindowContents(Rect canvas) { StatusExplorer.UpdateAllStatusCounts(); var options = new Listing_Standard(); options.Begin(canvas); options.CheckboxLabeled("Include RimTests' own test suite", ref RunOwnTests, "if enabled, RimTest will run its' own test suite as well as any mod test suites."); options.CheckboxLabeled("Run tests at startup", ref RunAtStartup, "if enabled, RimTest will run every valid tests at the game startup."); options.GapLine(); //if (options.ButtonText("Run everything")) //{ // Runner.RunAllRegisteredTests(); // StatusExplorer.UpdateAllStatusCounts(); //} //if(options.ButtonText("Log all current results to Debug log")) //{ // Viewer.LogTestsResults(); //} //options.GapLine(); DrawControls(options); options.End(); Rect GUIRect = canvas.BottomPartPixels(canvas.height - options.CurHeight); Rect viewRect = GUIRect.LeftPartPixels(GUIRect.width - 16).AtZero(); viewRect.Set(viewRect.xMin, viewRect.yMin, viewRect.width, CalcTotalHeight()); // update height to accomodate to all the data var testlisting = new Listing_Standard(); //testlisting.BeginScrollView(GUIRect, ref ScrollPosition, ref viewRect); Widgets.BeginScrollView(GUIRect, ref ScrollPosition, viewRect, true); GUI.BeginGroup(viewRect); testlisting.Begin(viewRect); DrawTests(testlisting); testlisting.End(); GUI.EndGroup(); //testlisting.EndScrollView(ref viewRect); Widgets.EndScrollView(); //reset fonts Text.Font = GameFont.Small; Text.Anchor = TextAnchor.UpperLeft; //Widgets.CustomButtonText(ref labelRect, "test assembly", Color.black, Color.white, Color.red); // RimTest -- displayA displayB ... // Status: ✘ERROR !WARNING ➥SKIPPED ?NOT RAN ✓PASS // Assemblies: |collapse| |expand | [x] 2 [v] 1 [v] 1 [v] 1 // TestSuites: |collapse| |expand | [x] 3 [v] 1 [x] 1 [v] 12 [v] 4 // Tests: |run all | |log all| [x] 10 [x] 4 [v] 23 [v] 16 // filter regex: |_________________ // V THIS PART V // |run| |time| ||v [v] Assembly 1| | // |run| |time| ||^ [x] Assembly 2| | error msg // |run| |time| ||v [v] TestSuite 2.1| | // |run| |time| ||^ [x] TestSuite 2.2| | error msg // |run| |time| ||v [x] Test 2.2.1| | error msg // |run| |time| ||^ [v] Test 2.2.1| | // ... //TODO Status filter , utiliser colonnes + sliders //----- [Skipped] | [Passed] //[Assemblies] [x] [100] | //[Test Suites][x][010] | //[Tests][x][000] | // TODO Statuses symbols // ?? pas ouf // !! pas ouf // TODO control rows size doivent être aussi gros que les checkbox. }
private void DrawControls(Listing_Standard bar) { Rect rowAsm = bar.GetRect(HEIGHT_CONTROLS); Rect rowTS = bar.GetRect(HEIGHT_CONTROLS); Rect rowT = bar.GetRect(HEIGHT_CONTROLS); // ASM - COLLAPSE / EXPAND - STATUSES Rect asmLabelRect = rowAsm.LeftPartPixels(WIDTH_CONTROLS_ASM_LABEL); Rect asmCollapseRect = rowAsm.RightPartPixels(rowAsm.width - asmLabelRect.xMax).LeftPartPixels(WIDTH_CONTROLS_ASM_COLLAPSE); Rect asmExpandRect = rowAsm.RightPartPixels(rowAsm.width - asmCollapseRect.xMax).LeftPartPixels(WIDTH_CONTROLS_ASM_EXPAND); Widgets.Label(asmLabelRect, "Assemblies"); if (Widgets.ButtonText(asmCollapseRect, "Collapse")) { CollapseAllAssemblies(); } if (Widgets.ButtonText(asmExpandRect, "Expand")) { ExpandAllAssemblies(); } Rect statusAsmLabelRect = rowAsm.RightPartPixels(rowAsm.width - asmExpandRect.xMax - WIDTH_CONTROLS_SECTION_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_LABEL); Rect statusAsmControllerRect = rowAsm.RightPartPixels(rowAsm.width - statusAsmLabelRect.xMax); Rect statusAsmFailRect = statusAsmControllerRect.LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Rect statusAsmWarnRect = statusAsmControllerRect.RightPartPixels(statusAsmControllerRect.width - statusAsmFailRect.width - WIDTH_CONTROLS_CONTROL_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Rect statusAsmSkipRect = statusAsmControllerRect.RightPartPixels(statusAsmControllerRect.width - 2 * statusAsmWarnRect.width - 2 * WIDTH_CONTROLS_CONTROL_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Rect statusAsmUnknownRect = statusAsmControllerRect.RightPartPixels(statusAsmControllerRect.width - 3 * statusAsmSkipRect.width - 3 * WIDTH_CONTROLS_CONTROL_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Rect statusAsmPassRect = statusAsmControllerRect.RightPartPixels(statusAsmControllerRect.width - 4 * statusAsmUnknownRect.width - 4 * WIDTH_CONTROLS_CONTROL_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Widgets.CheckboxLabeled(statusAsmFailRect, $"{StatusExplorer.GetAssemblyStatusCount(AssemblyStatus.ERROR)} {StatusSymbol(AssemblyStatus.ERROR)}", ref FilteredExplorer.failEnabledAsm); Widgets.CheckboxLabeled(statusAsmWarnRect, $"{StatusExplorer.GetAssemblyStatusCount(AssemblyStatus.WARNING)} {StatusSymbol(AssemblyStatus.WARNING)}", ref FilteredExplorer.warningEnabledAsm); Widgets.CheckboxLabeled(statusAsmUnknownRect, $"{StatusExplorer.GetAssemblyStatusCount(AssemblyStatus.UNKNOWN)} {StatusSymbol(AssemblyStatus.UNKNOWN)}", ref FilteredExplorer.unknownEnabledAsm); Widgets.CheckboxLabeled(statusAsmPassRect, $"{StatusExplorer.GetAssemblyStatusCount(AssemblyStatus.PASS)} {StatusSymbol(AssemblyStatus.PASS)}", ref FilteredExplorer.passEnabledAsm); // TESTSUITE - COLLAPSE / EXPAND - STATUSES Rect tsLabelRect = rowTS.LeftPartPixels(WIDTH_CONTROLS_TS_LABEL); Rect tsCollapseRect = rowTS.RightPartPixels(rowTS.width - tsLabelRect.xMax).LeftPartPixels(WIDTH_CONTROLS_TS_COLLAPSE); Rect tsExpandRect = rowTS.RightPartPixels(rowTS.width - tsCollapseRect.xMax).LeftPartPixels(WIDTH_CONTROLS_TS_EXPAND); Widgets.Label(tsLabelRect, "Test Suites"); if (Widgets.ButtonText(tsCollapseRect, "Collapse")) { CollapseAllTestSuites(); } if (Widgets.ButtonText(tsExpandRect, "Expand")) { ExpandAllTestSuites(); } Rect statusTSLabelRect = rowTS.RightPartPixels(rowTS.width - tsExpandRect.xMax - WIDTH_CONTROLS_SECTION_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_LABEL); Rect statusTSControllerRect = rowTS.RightPartPixels(rowTS.width - statusTSLabelRect.xMax); Rect statusTSFailRect = statusTSControllerRect.LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Rect statusTSWarnRect = statusTSControllerRect.RightPartPixels(statusTSControllerRect.width - statusTSFailRect.width - WIDTH_CONTROLS_CONTROL_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Rect statusTSSkipRect = statusTSControllerRect.RightPartPixels(statusTSControllerRect.width - 2 * statusTSWarnRect.width - 2 * WIDTH_CONTROLS_CONTROL_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Rect statusTSUnknownRect = statusTSControllerRect.RightPartPixels(statusTSControllerRect.width - 3 * statusTSSkipRect.width - 3 * WIDTH_CONTROLS_CONTROL_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Rect statusTSPassRect = statusTSControllerRect.RightPartPixels(statusTSControllerRect.width - 4 * statusTSUnknownRect.width - 4 * WIDTH_CONTROLS_CONTROL_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Widgets.CheckboxLabeled(statusTSFailRect, $"{StatusExplorer.GetTestSuiteStatusCount(TestSuiteStatus.ERROR)} {StatusSymbol(TestSuiteStatus.ERROR)}", ref FilteredExplorer.failEnabledTS); Widgets.CheckboxLabeled(statusTSWarnRect, $"{StatusExplorer.GetTestSuiteStatusCount(TestSuiteStatus.WARNING)} {StatusSymbol(TestSuiteStatus.WARNING)}", ref FilteredExplorer.warningEnabledTS); Widgets.CheckboxLabeled(statusTSSkipRect, $"{StatusExplorer.GetTestSuiteStatusCount(TestSuiteStatus.SKIP)} {StatusSymbol(TestSuiteStatus.SKIP)}", ref FilteredExplorer.skipEnabledTS); Widgets.CheckboxLabeled(statusTSUnknownRect, $"{StatusExplorer.GetTestSuiteStatusCount(TestSuiteStatus.UNKNOWN)} {StatusSymbol(TestSuiteStatus.UNKNOWN)}", ref FilteredExplorer.unknownEnabledTS); Widgets.CheckboxLabeled(statusTSPassRect, $"{StatusExplorer.GetTestSuiteStatusCount(TestSuiteStatus.PASS)} {StatusSymbol(TestSuiteStatus.PASS)}", ref FilteredExplorer.passEnabledTS); // TEST - RUN ALL / LOG ALL - STATUSES Rect tLabelRect = rowT.LeftPartPixels(WIDTH_CONTROLS_TS_LABEL); Rect tRunAllRect = rowT.RightPartPixels(rowT.width - tLabelRect.xMax).LeftPartPixels(WIDTH_CONTROLS_TS_COLLAPSE); Rect tLogAllRect = rowT.RightPartPixels(rowT.width - tRunAllRect.xMax).LeftPartPixels(WIDTH_CONTROLS_TS_EXPAND); Widgets.Label(tLabelRect, "Tests"); if (Widgets.ButtonText(tRunAllRect, "Run all")) { Runner.RunAllRegisteredTests(); StatusExplorer.UpdateAllStatusCounts(); TimeElapsedExplorer.UpdateAllAssembliesTimeElapsed(); } if (Widgets.ButtonText(tLogAllRect, "Log all")) { Viewer.LogTestsResults(); } Rect statusTLabelRect = rowT.RightPartPixels(rowT.width - tLogAllRect.xMax - WIDTH_CONTROLS_SECTION_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_LABEL); Rect statusTControllerRect = rowT.RightPartPixels(rowT.width - statusTLabelRect.xMax); Rect statusTFailRect = statusTControllerRect.LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Rect statusTSkipRect = statusTControllerRect.RightPartPixels(statusTControllerRect.width - 2 * statusTFailRect.width - 2 * WIDTH_CONTROLS_CONTROL_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Rect statusTUnknownRect = statusTControllerRect.RightPartPixels(statusTControllerRect.width - 3 * statusTSkipRect.width - 3 * WIDTH_CONTROLS_CONTROL_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Rect statusTPassRect = statusTControllerRect.RightPartPixels(statusTControllerRect.width - 4 * statusTUnknownRect.width - 4 * WIDTH_CONTROLS_CONTROL_GAP).LeftPartPixels(WIDTH_CONTROLS_VIEW_CONTROL); Widgets.CheckboxLabeled(statusTFailRect, $"{StatusExplorer.GetTestStatusCount(TestStatus.ERROR)} {StatusSymbol(TestStatus.ERROR)}", ref FilteredExplorer.failEnabledT); Widgets.CheckboxLabeled(statusTSkipRect, $"{StatusExplorer.GetTestStatusCount(TestStatus.SKIP)} {StatusSymbol(TestStatus.SKIP)}", ref FilteredExplorer.skipEnabledT); Widgets.CheckboxLabeled(statusTUnknownRect, $"{StatusExplorer.GetTestStatusCount(TestStatus.UNKNOWN)} {StatusSymbol(TestStatus.UNKNOWN)}", ref FilteredExplorer.unknownEnabledT); Widgets.CheckboxLabeled(statusTPassRect, $"{StatusExplorer.GetTestStatusCount(TestStatus.PASS)} {StatusSymbol(TestStatus.PASS)}", ref FilteredExplorer.passEnabledT); //// SEARCH Rect rowSearch = bar.GetRect(HEIGHT_CONTROLS); Rect searchLabelRect = rowSearch.LeftPartPixels(WIDTH_CONTROLS_SEARCH_LABEL); Rect searchControlRect = rowSearch.RightPartPixels(rowSearch.width - searchLabelRect.xMax); Widgets.Label(searchLabelRect, "Search :"); try { string searchRegexTmp = Widgets.TextField(searchControlRect, searchRegex); if (searchRegexTmp != searchRegex) { searchRegex = searchRegexTmp; FilteredExplorer.UpdateFilter(new Regex(searchRegex)); } } catch { FilteredExplorer.UpdateFilter(new Regex(@"")); } }