terminal/src/cascadia/LocalTests_TerminalApp
Mike Griese b3fa88eaed
Process actions sync. on startup; don't dupe nonexistent profile (#5090)
This PR has evolved to encapsulate two related fixes that I can't really
untie anymore.

#2455 - Duplicating a tab that doesn't exist anymore

This was the bug I was originally fixing in #4429. 

When the user tries to `duplicateTab` with a profile that doesn't exist
anymore (like might happen after a settings reload), don't crash.

As I was going about adding tests for this, got blocked by the fact that
the Terminal couldn't open _any_ panes while the `TerminalPage` was size
0x0. This had two theoretical solutions: 

* Fake the `TerminalPage` into thinking it had a real size in the test -
  probably possible, though I'm unsure how it would work in practice.
* Change `Pane`s to not require an `ActualWidth`, `ActualHeight` on
  initialization. 

Fortuately, the second option was something else that was already on my
backlog of bugs. 

#4618 - `wt` command-line can't consistently parse more than one arg

Presently, the Terminal just arbitrarily dispatches a bunch of handlers
to try and handle all the commands provided on the commandline. That's
lead to a bunch of reports that not all the commands will always get
executed, nor will they all get executed in the same order. 

This PR also changes the `TerminalPage` to be able to dispatch all the
commands sequentially, all at once in the startup. No longer will there
be a hot second where the commands seem to execute themselves in from of
the user - they'll all happen behind the scenes on startup. 

This involved a couple other changes areound the `TerminalPage`
* I had to make sure that panes could be opened at a 0x0 size. Now they
  use a star sizing based off the percentage of the parent they're
  supposed to consume, so that when the parent _does_ get laid out,
  they'll take the appropriate size of that parent.
* I had to do some math ahead of time to try and calculate what a
  `SplitState::Automatic` would be evaluated as, despite the fact that
  we don't actually know how big the pane will be. 
* I had to ensure that `focus-tab` commands appropriately mark a single
  tab as focused while we're in startup, without roundtripping to the
  Dispatcher thread and back

## References

#4429 - the original PR for #2455
#5047 - a follow-up task from discussion in #4429
#4953 - a PR for making panes use star sizing, which was immensly
        helpful for this PR.

## Detailed Description of the Pull Request / Additional comments

`CascadiaSettings::BuildSettings` can throw if the GUID doesn't exist.
This wraps those calls up with a try/catch.

It also adds a couple tests - a few `SettingsTests` for try/catching
this state. It also adds a XAML-y test in `TabTests` that creates a
`TerminalPage` and then performs som UI-like actions on it. This test
required a minor change to how we generate the new tab dropdown - in the
tests, `Application::Current()` is _not_ a `TerminalApp::App`, so it
doesn't have a `Logic()` to query. So wrap that in a try/catch as well.

While working on these tests, I found that we'd crash pretty agressively
for mysterious reasons if the TestHostApp became focused while the test
was running. This was due to a call in
`TSFInputControl::NotifyFocusEnter` that would callback to
`TSFInputControl::_layoutRequested`, which would crash on setting the
`MaxSize` of the canvas to a negative value. This PR includes a hotfix
for that bug as well. 

## Validation Steps Performed

* Manual testing with a _lot_ of commands in a commandline
* run the tests
* Team tested in selfhost

Closes #2455
Closes #4618
2020-03-25 17:03:32 -07:00
..
TestHostApp Update TAEF to 10.51 and remove the private dep on Taef.TestAdapter (#4450) 2020-02-03 22:14:43 +00:00
ColorSchemeTests.cpp Add cursorColor to color scheme (#4651) 2020-03-17 20:11:03 +00:00
CommandlineTest.cpp Convert Tab to a WinRT type (#4350) 2020-02-04 21:51:11 +00:00
CppWinrtTailored.h Fix a bunch of spelling errors across the project (#4295) 2020-02-10 20:40:01 +00:00
JsonTestClass.h Add Cascading User + Default Settings (#2515) 2019-09-16 12:57:10 -07:00
KeyBindingsTests.cpp Accept String value for Keybindings's Keys (#4714) 2020-02-27 20:53:31 +00:00
LocalTests_TerminalApp.def Fix the TabTests! (#3833) 2019-12-06 20:45:08 +00:00
pch.cpp Fix the TabTests! (#3833) 2019-12-06 20:45:08 +00:00
pch.h Add support for commandline args to wt.exe (#4023) 2020-01-27 15:34:12 +00:00
ProfileTests.cpp Fix unittesting our .xaml classes (#4105) 2020-01-10 18:55:31 +00:00
SettingsTests.cpp Process actions sync. on startup; don't dupe nonexistent profile (#5090) 2020-03-25 17:03:32 -07:00
TabTests.cpp Process actions sync. on startup; don't dupe nonexistent profile (#5090) 2020-03-25 17:03:32 -07:00
TerminalApp.LocalTests.AppxManifest.prototype.xml Fix a bunch of spelling errors across the project (#4295) 2020-02-10 20:40:01 +00:00
TerminalApp.LocalTests.manifest TURNS OUT CASE SENSITIVITY IS IMPORTANT (#2481) 2019-08-20 11:16:06 -07:00
TerminalApp.LocalTests.vcxproj Add support for commandline args to wt.exe (#4023) 2020-01-27 15:34:12 +00:00
TestUtils.h Add support for new panes with specifc profiles and other settings overrides (#3825) 2019-12-09 13:02:29 +00:00