Dear ImGui Test Engine
CHANGELOG

** Test Engine is regularly updated to support recent Dear ImGui version, when a change is required.
   Those changes are not all listed here.
** For a while this is going to ONLY INCLUDE BREAKING CHANGES.

2023/10/20:
- TestEngine: Support for BeginChild() internal naming changes in IMGUI_VERSION_NUM >= 18996.

2023/10/05:
- TestEngine: Capture: Fixed an issue capturing docked windows. (#34)

2023/09/28:
- TestEngine: Capture: Fixed use of ImGuiCaptureFlags_StitchAll when io.ConfigWindowsMoveFromTitleBarOnly
  option is set. (#33)

2023/09/20:
- TestEngine: Fixed an aiming issue with DockInto() when src/dst window is in a nested node.
- TestEngine: "KeepGUI" option and IM_SUSPEND_TESTFUNC()/SuspendTestFunc() sets OS mouse
  cursor to TestEngine mouse cursor, allowing user to more easily understand the failing state.
  (require IMGUI_VERSION_NUM >= 18992).
- TestEngine: Renamed io.ConfigTakeFocusBackAfterTests to io.ConfigRestoreFocusAfterTests
  and fixed to restore previous focus instead of always focus Test Engine UI window.

2023/09/06:
- TestEngine: WindowResize() can be used to auto-resize a window.

2023/09/05:
- TestEngine: Running a test in GuiFunc mode only provide access to backend clipboard
  instead of redirecting it to a jailed clipboard.

2023/08/15:
- TestSuite: Added -list option (e.g. 'test_suite.exe -list "^table"').
- TestEngine: Added ImGuiTestEngine_GetTestList(), ImGuiTestEngine_GetTestQueue().
- TestEngine: Added IO.CheckDrawDataIntegrity helper (mostly for use by test suite).

2023/07/11:
- TestEngine: Fixed an issue accessing tabs in a TabBar without scrolling policy.

2023/06/23:
- TestEngine: Fixed two case where DockInto() would fail if one or both windows are already docked.

2023/06/22:
- TestEngine: Fixed WindowClose() support when window Docked.

2023/06/21:
- TestEngine: in helper ImGuiTestGenericItemStatus storage struct,
  renamed 'bool Ret' to 'bool RetValue' as it is less ambiguous.
- TestEngine: Added ViewportPlatform_CloseWindow() function to simulate platform closure
  (e.g. ALT+F4 on Windows with viewport enabled and OS decoration enabled) for the purpose
  of testing viewport-specific features. Probably of little use to regular end-user.

2023/06/14
- TestEngine: ItemInfoOpenFullPath() can focus/select inactive docked windows.
  (similar to e.g. opening an intermediary tree node).

2023/06/08
- TestEngine: Made failed IM_CHECK() with io.ConfigBreakOnError enabled call IM_DEBUG_BREAK()
  directly instead of calling IM_ASSERT(0).
- TestEngine: Moved suggested IM_ASSERT() override out of test engine's imconfig.h and
  into our TestSuite's imconfig.h.

2023/05/31
- TestEngine: Added ctx->ItemIsChecked() and ctx->ItemIsOpened() helpers.

2023/05/30:
- TestEngine: Attempt to resize host window when aiming at a clipped item within menu layer.
  (which is non-scrolling).
- TestEngine: Mock viewport emulation transfer platform focus when a viewport is destroyed.

2023/05/09:
- TestEngine: Added IsWarmUpGuiFrame() query to avoid polling frame-count.

2023/04/26:
- TestEngine: Reworked mouse actions to avoid unnecessarily focusing windows if not necessary.
  If an item is visible and within a window not inhibited by a popup, we don't need to focus
  the target window before clicking.
  This reduces the amount of inconsistency between TestEngine and user actions.

2023/04/24:
- TestEngine: Fixed IM_CHECK_STR_xxx() macros not honoring io.ConfigBreakOnError.
- TestEngine: Added result check in WindowFocus().
- TestEngine: Removed unnecessary bool return value from WindowBringToFront().
- TestEngine: Added ImGuiTestOpFlags_NoFocusWindow support in WindowBringToFront(). (#24)

2023/04/06;
- TestEngine: Made simulated mouse-clicks activate platform-level focus when changing viewports.
  As platform-level focus signal leads to reactions at Dear ImGui this is desirable.
- TestEngine: MouseMoveToVoid(), MouseClickOnVoid(), GetPosOnVoid() now take an optional
  viewport, and default to mouse current viewport if not specified.

2023/04/05:
- TestEngine: Added ViewportPlatform_SetWindowXXX() function to inject Platform-altering actions,
  mostly for the purpose of testing viewport-specific features.

2023/03/28:
- TestEngine: Added ItemExists() helper.

2023/03/14:
- TestEngine: Fixed GatherItems() max-depth test being off-by-1 (regression in 2023/03/06 update).

2023/03/06:
- TestEngine: Made GatherItems() calls find items in child windows.
- TestEngine: Do not attempt Open/Close/Check/Uncheck actions on Disabled items.

2023/02/23:
- TestEngine: Fixed ItemDragAndDrop() to latch references in order to avoid breaking when
  using "//$FOCUSED" in references, because focus is changed during the call.

2023/02/10:
- TestEngine: renamed 'ImGuiTestFlags_NoWarmUp' to 'ImGuiTestFlags_NoGuiWarmUp' (rarely used).

2023/02/09:
- TestEngine: Alter visibility checks to reduce unnecessary scrolling when items
  are mostly visible. Bias toward reducing amount of horizontal scroll.
- TestEngine: Allow for extra frames when necessary to validates hovering.
  e.g. blocking popups may be closed by external logic.

2023/02/03
- TestEngine: Update/fixes for Tables-related changes in main lib.

2023/01/20:
- TestEngine: Added a `ImGuiTestContext* ctx` parameter to the optional "pre-run" constructor
  declared in ImGuiTest::SetVarsDataType<>:
     before:   test->SetVarsDataType<MyVars>([](MyVars& vars) { ... })
     after:    test->SetVarsDataType<MyVars>([](ImGuiTestContext* ctx, MyVars& vars) { ... })
  This feature is useful to share GuiFunc/TestFunc accross multiple tests while needing
  specific state initialized before the first run of GuiFunc. It is convenient because
  the custom initialization code can be specified while registering the test.
  (vs. t is also possible to set `test->ArgVariant` and run initialization code in the
  first-frame of the GuiFunc, but this seems the init code is located in a same location).

2023/01/10
- TestEngine: Filtering can be done on Category string as well.

2023/01/02:
- TestEngine: Amend license to 1.02 (clarify/widen audience of free version).

2022/11/30
- TestEngine: Support ImGuiMod_Shortcut being an independent value.

2022/11/24
- TestEngine: Update/fixes for Docking node access.

2022/11/04
- TestEngine: UI: Added CTRL+R shortcut when focused.
- TestEngine: Fixed MenuCheckAll()/MenuUncheckAll() from trying to access non-checkable items.
- TestEngine: Added ImGuiTestOpFlags_NoError support in ItemAction() + ItemInfoOpenFullPath().

2022/10/24:
- TestEngine: DockInto() unmangle path references + verify result.

2022/10/03
- TestEngine: Added missing ImGuiTestOpFlags_NoError support in ItemAction()/ItemClick() family of
  functions + in ItemInfoOpenFullPath() function.
- TestEngine: Fixed MenuCheckAll()/MenuUncheckAll() from trying to access non-checkable items.

2022/10/12
- TestEngine: WindowInfo() support when child is not in root of parent window.
- TestEngine: Removed legacy GetChildWindowID() in favor of easier to use and more featured WindowInfo().
   e.g. ctx->GetChildWindowID(ImGuiTestRef("Parent"), "Child") --> ctx->WindowInfo("Parent/Child")->ID.
   Note that 'WindowInfo("Parent/Child")->Window' is also frequently useful.

2022/10/11
- TestEngine: literals can now easily be encoded in decorated path strings using "$$xxxx",
  making it easier to access items for which the ID stack used PushID(int) or PushID(void*).
     ItemClick("list/$$1/button") : match id for PushID("list"), PushID(1), Item("button");
- TestEngine: removed 'ImGuiTestContext::GetIDByInt(int n)'' in favor of using "$$123" syntax.
- TestEngine: removed 'ImGuiTestContext::GetIDByPtr(void* ptr)'' in favor of using "$$(ptr)0xFFFFFFFF" syntax.

2022/09/26
- TestEngine: simplified merged Key functions following simplification in core lib.
     ctx->KeyDown(ImGuiKey key, ImGuiKeyChord mods = 0);                 -> KeyDown(ImGuiKeyChord key_chord);
     ctx->KeyPress(ImGuiKey key, ImGuiKeyChord mods = 0, int count = 1); -> KeyPress(ImGuiKeyChord key_chord, int count = 1);
     ctx->KeyModPress(ImGuiModFlags mods);                               -> KeyPress(ImGuiKeyChord key_chord, int count = 1);
  ImGuiKeyChord = ImGuiKey_XXX or ImGuiMod_XXX or ImGuiKey_XXX | ImGuiMod_XXX.
  Same for all ctx->KeyXXX functions.
- TestEngine: following on core lib, renamed/merged mod enums and flags into same value:
     ImGuiKey_ModXXX   -> ImGuiMod_XXX
     ImGuiModFlags_XXX -> ImGuiMod_XXX
  See main library changelog for details.

2022/09/05
- TestEngine: renamed ImGuiTestEngine_UseSimulatedInputs() to ImGuiTestEngine_IsUsingSimulatedInputs().

2022/09/02
- TestEngine: removed ImGuiTestContext::NavCancel(): same as ->KeyPress(ImGuiKey_Escape);
  Follow on core lib which is moving away from the NavInput_ semantic, in favor of using ImGuiKey enum
  for both keys and gamepads actions.
- TestEngine: removed ImGuiTestContext::NavEnableForWindow() which was a workaround/kludge.

2022/08/25:
- TestEngine: Changed ItemInfo() functions to never return a NULL pointer anymore.
  If you were testing for NULL pointer, the right test to do now is 'info->ID != 0'.
  This change reduce the likehood of failing test code crashing the application.
- TestEngine: Changed signatured of ItemAction() from:
    void ItemAction(ImGuiTestAction action, ImGuiTestRef ref, void* action_arg = NULL, ImGuiTestOpFlags flags = 0)
  to
    void ItemAction(ImGuiTestAction action, ImGuiTestRef ref, ImGuiTestOpFlags flags = 0, void* action_arg = NULL)
  As action_arg is rarely used and may be removed.


2022/07/19
- TestEngine: The syntax "/someidentifier" to ignore the current SetRef() value has been changed
  to "//someidentifier".
    - "//" ref prefix now resets ID seed to 0 (old behavior)
    - "/" ref prefix now refers to "current window" id.s
      - In GuiFunc, "/" refers to current window we are Begin()-ing into.
      - In TestFunc, "/" refers to the window set by SetRef().
    - This change is to be consistent with core Dear ImGui adding ways to compute ID given a path,
      and both "/" and "//" are desirable features.

2022/05/10
- TestEngine: Installation of a crash handler is now explicit and optional. Do one of the following:
  - Call ImGuiTestEngine_InstallDefaultCrashHandler() to install default crash handler.
  - Call ImGuiTestEngine_CrashHandler() from your own custom crash handler if such exists.

2022/04/08
- TestEngine: fix ItemAction() or ItemInfo() with leading **/ wildcard from not reporting any error on failure.

2022/04/07
- TestEngine: added more filtering options to ImGuiTestEngine_QueueTests() and command-line suppot.
  - "all"   : all tests, no matter what group they are in.
  - "tests" : all tests in the ImGuiTestGroup_Tests group.
  - "perfs" : all tests in the ImGuiTestGroup_Perfs group.
  - "^nav_" : all tests with name starting with "nav_".
  - "-xxxx" : no tests will be matched because query does not include any.
  - "tests,-scroll,-^nav_" : all tests that do not contain "scroll" in their name and does not start with "nav_".

2022/03/28
- TestEngine: Capture: Removed requirement to store/pass a ImGuiCaptureArgs in ctx->CaptureXXX functions.
  General tidying up of the capture API.

2022/03/23
- TestEngine: Renamed ImGuiTestEngineIO::VideoCaptureFFMPEGPath to ::VideoCaptureEncoderPath.

2022/03/15
- TestEngine: Moved the ImGuiContext* parameter from ImGuiTestEngine_CreateContext() to ImGuiTestEngine_Start().
- TestEngine: Renamed bool ImGuiTestEngineIO::RunningTest to bool ::IsRunningTests.
- TestEngine: Renamed bool ImGuiTestEngineIO::RenderWantMaxSpeed to ::IsRequestingMaxAppSpeed.

2022/02/15
- TestEngine: Capture: rename ImGuiCaptureArgs::InOutputFileTemplate to InOutputFile (it was only
  used as template by the capture tool UI, which now manages its own data correctly).
