From 3fcc9357824a0feb82d68722283ff8f8f2f4f239 Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Fri, 10 Jan 2020 12:55:31 -0600 Subject: [PATCH] Fix unittesting our `.xaml` classes (#4105) ## Summary of the Pull Request New year, new unittests. This PR introduces a new project, `TestHostApp`. This project is largely taken from the TAEF samples, and allows us to easily construct a helper executable and `resources.pri` for running TerminalApp unittests. ## References ## PR Checklist * [x] Closes #3986 * [x] I work here * [x] is Tests * [n/a] Requires documentation to be updated * [x] **Waiting for an updated version of TAEF to be available** ## Detailed Description of the Pull Request / Additional comments Unittesting for the TerminalApp project has been a horrifying process to try getting everything pieced together just right. Dependencies need to get added to manifests, binplaced correctly, and XAML resources need to get compiled together as well. In addition, using a MUX `Application` (as opposed to the Windows.UI.Xaml `Application`) has led to additional problems. This was always a horrifying house of cards for us. Turns out, the reason this was so horrible is that the test infrastructure for doing what we're doing _literally didn't exist_ when I started doing all that work last year. So, with help from the TAEF team, I was able to get rid of our entire house of cards, and use a much simpler project to build and run the tests. Unfortunately, the latest TAEF release has a minor bug in it's build rules, and only publishes the x86 version of a dll we need from them. But, the rest of this PR works for x86, and I'll bump this when that updated version is available. We should be able to review this even in the state it's in. ## Validation Steps Performed ran the tests yo --- OpenConsole.sln | 39 ++++- .../ColorSchemeTests.cpp | 2 +- .../KeyBindingsTests.cpp | 2 +- .../LocalTests_TerminalApp/ProfileTests.cpp | 2 +- .../LocalTests_TerminalApp/SettingsTests.cpp | 2 +- .../LocalTests_TerminalApp/TabTests.cpp | 59 ++++++- .../TerminalApp.LocalTests.vcxproj | 92 ++-------- .../TestHostApp/Package.appxmanifest | 27 +++ .../TestHostApp/TestHostApp.vcxproj | 162 ++++++++++++++++++ .../TestHostApp/UnitTestApp.xaml | 8 + .../TestHostApp/UnitTestApp.xaml.cpp | 27 +++ .../TestHostApp/UnitTestApp.xaml.h | 27 +++ .../TestHostApp/pch.cpp | 6 + .../LocalTests_TerminalApp/TestHostApp/pch.h | 8 + src/cascadia/LocalTests_TerminalApp/pch.h | 2 + src/cascadia/TerminalApp/CascadiaSettings.h | 2 + src/cascadia/TerminalApp/TerminalPage.h | 8 + src/common.build.tests.props | 4 +- src/host/ft_uia/Host.Tests.UIA.csproj | 10 +- src/host/ft_uia/packages.config | 2 +- src/terminal/parser/ut_parser/packages.config | 2 +- tools/OpenConsole.psm1 | 10 +- tools/razzle.cmd | 2 +- tools/runut.cmd | 13 +- tools/tests.xml | 2 +- 25 files changed, 412 insertions(+), 108 deletions(-) create mode 100644 src/cascadia/LocalTests_TerminalApp/TestHostApp/Package.appxmanifest create mode 100644 src/cascadia/LocalTests_TerminalApp/TestHostApp/TestHostApp.vcxproj create mode 100644 src/cascadia/LocalTests_TerminalApp/TestHostApp/UnitTestApp.xaml create mode 100644 src/cascadia/LocalTests_TerminalApp/TestHostApp/UnitTestApp.xaml.cpp create mode 100644 src/cascadia/LocalTests_TerminalApp/TestHostApp/UnitTestApp.xaml.h create mode 100644 src/cascadia/LocalTests_TerminalApp/TestHostApp/pch.cpp create mode 100644 src/cascadia/LocalTests_TerminalApp/TestHostApp/pch.h diff --git a/OpenConsole.sln b/OpenConsole.sln index 452a7fd95..a7a369560 100644 --- a/OpenConsole.sln +++ b/OpenConsole.sln @@ -257,6 +257,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winconpty.LIB", "src\wincon EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winconpty.DLL", "src\winconpty\dll\winconptydll.vcxproj", "{A22EC5F6-7851-4B88-AC52-47249D437A52}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestHostApp", "src\cascadia\LocalTests_TerminalApp\TestHostApp\TestHostApp.vcxproj", "{A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}" + ProjectSection(ProjectDependencies) = postProject + {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506} = {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{BDB237B6-1D1D-400F-84CC-40A58FA59C8E}" +EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "til.unit.tests", "src\til\ut_til\til.unit.tests.vcxproj", "{767268EE-174A-46FE-96F0-EEE698A1BBC9}" EndProject Global @@ -1320,6 +1327,30 @@ Global {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|x64.Build.0 = Release|x64 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|x86.ActiveCfg = Release|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|x86.Build.0 = Release|Win32 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.AuditMode|Any CPU.ActiveCfg = AuditMode|x64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.AuditMode|x64.ActiveCfg = AuditMode|x64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.AuditMode|x86.ActiveCfg = AuditMode|Win32 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|ARM64.Build.0 = Debug|ARM64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|x64.ActiveCfg = Debug|x64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|x64.Build.0 = Debug|x64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|x64.Deploy.0 = Debug|x64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|x86.ActiveCfg = Debug|Win32 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|x86.Build.0 = Debug|Win32 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|x86.Deploy.0 = Debug|Win32 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|Any CPU.ActiveCfg = Release|Win32 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|ARM64.ActiveCfg = Release|ARM64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|ARM64.Build.0 = Release|ARM64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|ARM64.Deploy.0 = Release|ARM64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|x64.ActiveCfg = Release|x64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|x64.Build.0 = Release|x64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|x64.Deploy.0 = Release|x64 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|x86.ActiveCfg = Release|Win32 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|x86.Build.0 = Release|Win32 + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|x86.Deploy.0 = Release|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 @@ -1390,7 +1421,7 @@ Global {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B} = {59840756-302F-44DF-AA47-441A9D673202} {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12} = {59840756-302F-44DF-AA47-441A9D673202} {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907} = {59840756-302F-44DF-AA47-441A9D673202} - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9} = {59840756-302F-44DF-AA47-441A9D673202} + {2C2BEEF4-9333-4D05-B12A-1905CBF112F9} = {BDB237B6-1D1D-400F-84CC-40A58FA59C8E} {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00} = {E8F24881-5E37-4362-B191-A3BA0ED7F4EB} {16376381-CE22-42BE-B667-C6B35007008D} = {81C352DB-1818-45B7-A284-18E259F1CC87} {F1995847-4AE5-479A-BBAF-382E51A63532} = {89CDCC5C-9F53-4054-97A4-639D99F169CD} @@ -1399,14 +1430,16 @@ Global {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73} = {89CDCC5C-9F53-4054-97A4-639D99F169CD} {84848BFA-931D-42CE-9ADF-01EE54DE7890} = {59840756-302F-44DF-AA47-441A9D673202} {376FE273-6B84-4EB5-8B30-8DE9D21B022C} = {59840756-302F-44DF-AA47-441A9D673202} - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9} = {59840756-302F-44DF-AA47-441A9D673202} + {CA5CAD1A-9333-4D05-B12A-1905CBF112F9} = {BDB237B6-1D1D-400F-84CC-40A58FA59C8E} {CA5CAD1A-9A12-429C-B551-8562EC954746} = {59840756-302F-44DF-AA47-441A9D673202} - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506} = {59840756-302F-44DF-AA47-441A9D673202} + {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506} = {BDB237B6-1D1D-400F-84CC-40A58FA59C8E} {48D21369-3D7B-4431-9967-24E81292CF63} = {05500DEF-2294-41E3-AF9A-24E580B82836} {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE} = {59840756-302F-44DF-AA47-441A9D673202} {B0AC39D6-7B40-49A9-8202-58549BAE1FB1} = {59840756-302F-44DF-AA47-441A9D673202} {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A} = {E8F24881-5E37-4362-B191-A3BA0ED7F4EB} {A22EC5F6-7851-4B88-AC52-47249D437A52} = {E8F24881-5E37-4362-B191-A3BA0ED7F4EB} + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8} = {BDB237B6-1D1D-400F-84CC-40A58FA59C8E} + {BDB237B6-1D1D-400F-84CC-40A58FA59C8E} = {59840756-302F-44DF-AA47-441A9D673202} {767268EE-174A-46FE-96F0-EEE698A1BBC9} = {89CDCC5C-9F53-4054-97A4-639D99F169CD} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution diff --git a/src/cascadia/LocalTests_TerminalApp/ColorSchemeTests.cpp b/src/cascadia/LocalTests_TerminalApp/ColorSchemeTests.cpp index 6ca9dfe81..42804cdd5 100644 --- a/src/cascadia/LocalTests_TerminalApp/ColorSchemeTests.cpp +++ b/src/cascadia/LocalTests_TerminalApp/ColorSchemeTests.cpp @@ -29,7 +29,7 @@ namespace TerminalAppLocalTests // details on that. BEGIN_TEST_CLASS(ColorSchemeTests) TEST_CLASS_PROPERTY(L"RunAs", L"UAP") - TEST_CLASS_PROPERTY(L"UAP:AppXManifest", L"TerminalApp.LocalTests.AppxManifest.xml") + TEST_CLASS_PROPERTY(L"UAP:AppXManifest", L"TestHostAppXManifest.xml") END_TEST_CLASS() TEST_METHOD(CanLayerColorScheme); diff --git a/src/cascadia/LocalTests_TerminalApp/KeyBindingsTests.cpp b/src/cascadia/LocalTests_TerminalApp/KeyBindingsTests.cpp index 2d939aaea..42160d0b4 100644 --- a/src/cascadia/LocalTests_TerminalApp/KeyBindingsTests.cpp +++ b/src/cascadia/LocalTests_TerminalApp/KeyBindingsTests.cpp @@ -32,7 +32,7 @@ namespace TerminalAppLocalTests // details on that. BEGIN_TEST_CLASS(KeyBindingsTests) TEST_CLASS_PROPERTY(L"RunAs", L"UAP") - TEST_CLASS_PROPERTY(L"UAP:AppXManifest", L"TerminalApp.LocalTests.AppxManifest.xml") + TEST_CLASS_PROPERTY(L"UAP:AppXManifest", L"TestHostAppXManifest.xml") END_TEST_CLASS() TEST_METHOD(ManyKeysSameAction); diff --git a/src/cascadia/LocalTests_TerminalApp/ProfileTests.cpp b/src/cascadia/LocalTests_TerminalApp/ProfileTests.cpp index b99162799..c0064c6a3 100644 --- a/src/cascadia/LocalTests_TerminalApp/ProfileTests.cpp +++ b/src/cascadia/LocalTests_TerminalApp/ProfileTests.cpp @@ -29,7 +29,7 @@ namespace TerminalAppLocalTests // details on that. BEGIN_TEST_CLASS(ProfileTests) TEST_CLASS_PROPERTY(L"RunAs", L"UAP") - TEST_CLASS_PROPERTY(L"UAP:AppXManifest", L"TerminalApp.LocalTests.AppxManifest.xml") + TEST_CLASS_PROPERTY(L"UAP:AppXManifest", L"TestHostAppXManifest.xml") END_TEST_CLASS() TEST_METHOD(CanLayerProfile); diff --git a/src/cascadia/LocalTests_TerminalApp/SettingsTests.cpp b/src/cascadia/LocalTests_TerminalApp/SettingsTests.cpp index 357b1eaba..c00dd15a3 100644 --- a/src/cascadia/LocalTests_TerminalApp/SettingsTests.cpp +++ b/src/cascadia/LocalTests_TerminalApp/SettingsTests.cpp @@ -34,7 +34,7 @@ namespace TerminalAppLocalTests // details on that. BEGIN_TEST_CLASS(SettingsTests) TEST_CLASS_PROPERTY(L"RunAs", L"UAP") - TEST_CLASS_PROPERTY(L"UAP:AppXManifest", L"TerminalApp.LocalTests.AppxManifest.xml") + TEST_CLASS_PROPERTY(L"UAP:AppXManifest", L"TestHostAppXManifest.xml") END_TEST_CLASS() TEST_METHOD(TryCreateWinRTType); diff --git a/src/cascadia/LocalTests_TerminalApp/TabTests.cpp b/src/cascadia/LocalTests_TerminalApp/TabTests.cpp index 3aba9c861..f900c4a40 100644 --- a/src/cascadia/LocalTests_TerminalApp/TabTests.cpp +++ b/src/cascadia/LocalTests_TerminalApp/TabTests.cpp @@ -3,9 +3,13 @@ #include "pch.h" -#include "../TerminalApp/ColorScheme.h" +#include "../TerminalApp/TerminalPage.h" +#include "../TerminalApp/MinMaxCloseControl.h" +#include "../TerminalApp/TabRowControl.h" +#include "../TerminalApp/ShortcutActionDispatch.h" #include "../TerminalApp/Tab.h" #include "../CppWinrtTailored.h" +#include "JsonTestClass.h" using namespace Microsoft::Console; using namespace TerminalApp; @@ -19,7 +23,7 @@ namespace TerminalAppLocalTests // an updated TAEF that will let us install framework packages when the test // package is deployed. Until then, these tests won't deploy in CI. - class TabTests + class TabTests : public JsonTestClass { // For this set of tests, we need to activate some XAML content. For // release builds, the application runs as a centennial application, @@ -34,18 +38,26 @@ namespace TerminalAppLocalTests BEGIN_TEST_CLASS(TabTests) TEST_CLASS_PROPERTY(L"RunAs", L"UAP") - TEST_CLASS_PROPERTY(L"UAP:AppXManifest", L"TerminalApp.LocalTests.AppxManifest.xml") - TEST_CLASS_PROPERTY(L"UAP:Host", L"Xaml") - TEST_CLASS_PROPERTY(L"UAP:WaitForXamlWindowActivation", L"true") + TEST_CLASS_PROPERTY(L"UAP:AppXManifest", L"TestHostAppXManifest.xml") END_TEST_CLASS() // These four tests act as canary tests. If one of them fails, then they // can help you identify if something much lower in the stack has // failed. TEST_METHOD(EnsureTestsActivate); - TEST_METHOD(TryCreateLocalWinRTType); + TEST_METHOD(TryCreateSettingsType); + TEST_METHOD(TryCreateConnectionType); TEST_METHOD(TryCreateXamlObjects); TEST_METHOD(TryCreateTab); + + TEST_METHOD(CreateSimpleTerminalXamlType); + TEST_METHOD(CreateTerminalMuxXamlType); + + TEST_CLASS_SETUP(ClassSetup) + { + InitializeJsonReader(); + return true; + } }; void TabTests::EnsureTestsActivate() @@ -56,7 +68,7 @@ namespace TerminalAppLocalTests VERIFY_IS_TRUE(true); } - void TabTests::TryCreateLocalWinRTType() + void TabTests::TryCreateSettingsType() { // Verify we can create a WinRT type we authored // Just creating it is enough to know that everything is working. @@ -68,6 +80,17 @@ namespace TerminalAppLocalTests VERIFY_ARE_NOT_EQUAL(oldFontSize, newFontSize); } + void TabTests::TryCreateConnectionType() + { + // Verify we can create a WinRT type we authored + // Just creating it is enough to know that everything is working. + winrt::Microsoft::Terminal::TerminalConnection::EchoConnection conn{}; + VERIFY_IS_NOT_NULL(conn); + // We're doing this test seperately from the TryCreateSettingsType test, + // to ensure both dependent binaries (TemrinalSettings and + // TerminalConnection) both work individually. + } + void TabTests::TryCreateXamlObjects() { auto result = RunOnUIThread([]() { @@ -119,4 +142,26 @@ namespace TerminalAppLocalTests VERIFY_SUCCEEDED(result); } + void TabTests::CreateSimpleTerminalXamlType() + { + winrt::com_ptr mmcc{ nullptr }; + + auto result = RunOnUIThread([&mmcc]() { + mmcc = winrt::make_self(); + VERIFY_IS_NOT_NULL(mmcc); + }); + VERIFY_SUCCEEDED(result); + } + + void TabTests::CreateTerminalMuxXamlType() + { + winrt::com_ptr tabRowControl{ nullptr }; + + auto result = RunOnUIThread([&tabRowControl]() { + tabRowControl = winrt::make_self(); + VERIFY_IS_NOT_NULL(tabRowControl); + }); + VERIFY_SUCCEEDED(result); + } + } diff --git a/src/cascadia/LocalTests_TerminalApp/TerminalApp.LocalTests.vcxproj b/src/cascadia/LocalTests_TerminalApp/TerminalApp.LocalTests.vcxproj index b17fadd41..5c92dd5e9 100644 --- a/src/cascadia/LocalTests_TerminalApp/TerminalApp.LocalTests.vcxproj +++ b/src/cascadia/LocalTests_TerminalApp/TerminalApp.LocalTests.vcxproj @@ -1,5 +1,16 @@  + + + {CA5CAD1A-b11c-4ddb-a4fe-c3afae9b5506} Win32Proj @@ -101,85 +112,4 @@ - - - - - - - $(BeforeLinkTargets); - _LocalTestsGenerateCombinedManifests; - _LocalTestsBuildAppxManifest; - _LocalTestsCopyDependencies; - - - - - - - - - - - - - - - - - - - - <_ContinueOnError Condition="'$(BuildingProject)' == 'true'">true - <_ContinueOnError Condition="'$(BuildingProject)' != 'true'">false - - - - - - - - - - - - - - - - - - - - diff --git a/src/cascadia/LocalTests_TerminalApp/TestHostApp/Package.appxmanifest b/src/cascadia/LocalTests_TerminalApp/TestHostApp/Package.appxmanifest new file mode 100644 index 000000000..214147399 --- /dev/null +++ b/src/cascadia/LocalTests_TerminalApp/TestHostApp/Package.appxmanifest @@ -0,0 +1,27 @@ + + + + + + TestHostApp + migrie + taef.png + multiple + + + + + + + + + + + + + + + + + + diff --git a/src/cascadia/LocalTests_TerminalApp/TestHostApp/TestHostApp.vcxproj b/src/cascadia/LocalTests_TerminalApp/TestHostApp/TestHostApp.vcxproj new file mode 100644 index 000000000..63b84388e --- /dev/null +++ b/src/cascadia/LocalTests_TerminalApp/TestHostApp/TestHostApp.vcxproj @@ -0,0 +1,162 @@ + + + + {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8} + TestHostApp + en-US + 14.0 + true + Windows Store + 10.0.18362.0 + 10.0.18362.0 + 10.0 + Tests\Data + true + Application + true + + + false + false + + + + + + + + + + + + + false + + + + + 4453;%(DisableSpecificWarnings) + %(AdditionalIncludeDirectories) + ;$(IntermediateOutputPath) + + INLINE_TEST_METHOD_MARKUP;%(PreprocessorDefinitions) + + + $(AdditionalDependencies);windowsapp.lib + false + + + + + + + UnitTestApp.xaml + + + + + Designer + + + + + Designer + + + + + UnitTestApp.xaml + + + Create + + + + + + + {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B} + + + + + + {ca5cad1a-44bd-4ac7-ac72-f16e576fdd12} + + + + + + + <_TestBinRoot>$(OpenConsoleDir)\bin\$(Platform)\$(Configuration) + <_CppWinrtBinRoot>$(OpenConsoleDir)\$(Platform)\$(Configuration) + <_CppWinrtBinRoot Condition="'$(Platform)'=='Win32'">$(OpenConsoleDir)\$(Configuration) + <_TAEFPlatformName>$(Platform) + <_TAEFPlatformName Condition="'$(Platform)'=='Win32'">x86 + + + + + $(OpenConsoleDir)\packages\Taef.Redist.Wlk.10.48.200103003-develop\lib\Microsoft.VisualStudio.TestPlatform.TestExecutor.WinRTCore.winmd + true + + + ..\build\Binaries\$(_TAEFPlatformName)\TE.AppxUnitTestClient.dll + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/cascadia/LocalTests_TerminalApp/TestHostApp/UnitTestApp.xaml b/src/cascadia/LocalTests_TerminalApp/TestHostApp/UnitTestApp.xaml new file mode 100644 index 000000000..8cd18f278 --- /dev/null +++ b/src/cascadia/LocalTests_TerminalApp/TestHostApp/UnitTestApp.xaml @@ -0,0 +1,8 @@ + + + diff --git a/src/cascadia/LocalTests_TerminalApp/TestHostApp/UnitTestApp.xaml.cpp b/src/cascadia/LocalTests_TerminalApp/TestHostApp/UnitTestApp.xaml.cpp new file mode 100644 index 000000000..84b2ec584 --- /dev/null +++ b/src/cascadia/LocalTests_TerminalApp/TestHostApp/UnitTestApp.xaml.cpp @@ -0,0 +1,27 @@ +//----------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All Rights Reserved. +//----------------------------------------------------------- +#include "pch.h" + +namespace TestHostApp +{ + /// + /// Initializes the singleton application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). + /// + App::App() + { + InitializeComponent(); + } + + /// + /// Invoked when the application is launched normally by the end user. Other entry points + /// will be used such as when the application is launched to open a specific file. + /// + /// Details about the launch request and process. + void App::OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs ^ e) + { + Windows::UI::Xaml::Window::Current->Activate(); + Microsoft::VisualStudio::TestPlatform::TestExecutor::WinRTCore::UnitTestClient::Run(e->Arguments); + } +} diff --git a/src/cascadia/LocalTests_TerminalApp/TestHostApp/UnitTestApp.xaml.h b/src/cascadia/LocalTests_TerminalApp/TestHostApp/UnitTestApp.xaml.h new file mode 100644 index 000000000..9385c7c33 --- /dev/null +++ b/src/cascadia/LocalTests_TerminalApp/TestHostApp/UnitTestApp.xaml.h @@ -0,0 +1,27 @@ +//----------------------------------------------------------- +// Copyright (c) Microsoft Corporation. All Rights Reserved. +//----------------------------------------------------------- +#pragma once + +#include "UnitTestApp.g.h" + +// NOTE: 03-Jan-2020 +// This class is horrifyingly defined in CX, _NOT_ CppWinrt. It was largely +// taken straight from the TAEF sample code. However, it does _work_, and it's +// not about to be changed ever, so it's not worth the effort to try and port it +// to cppwinrt at this time. + +namespace TestHostApp +{ + /// + /// Provides application-specific behavior to supplement the default Application class. + /// + ref class App sealed + { + protected: + virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs ^ e) override; + + internal : + App(); + }; +} diff --git a/src/cascadia/LocalTests_TerminalApp/TestHostApp/pch.cpp b/src/cascadia/LocalTests_TerminalApp/TestHostApp/pch.cpp new file mode 100644 index 000000000..f3963b9b1 --- /dev/null +++ b/src/cascadia/LocalTests_TerminalApp/TestHostApp/pch.cpp @@ -0,0 +1,6 @@ +// +// pch.cpp +// Include the standard header and generate the precompiled header. +// + +#include "pch.h" diff --git a/src/cascadia/LocalTests_TerminalApp/TestHostApp/pch.h b/src/cascadia/LocalTests_TerminalApp/TestHostApp/pch.h new file mode 100644 index 000000000..a93dfbbd7 --- /dev/null +++ b/src/cascadia/LocalTests_TerminalApp/TestHostApp/pch.h @@ -0,0 +1,8 @@ +// +// pch.h +// Header for standard system include files. +// + +#pragma once + +#include "UnitTestApp.xaml.h" diff --git a/src/cascadia/LocalTests_TerminalApp/pch.h b/src/cascadia/LocalTests_TerminalApp/pch.h index 708a88b53..a46986925 100644 --- a/src/cascadia/LocalTests_TerminalApp/pch.h +++ b/src/cascadia/LocalTests_TerminalApp/pch.h @@ -48,6 +48,8 @@ Author(s): #include #include #include +#include +#include #include diff --git a/src/cascadia/TerminalApp/CascadiaSettings.h b/src/cascadia/TerminalApp/CascadiaSettings.h index 983840673..9c5daecb9 100644 --- a/src/cascadia/TerminalApp/CascadiaSettings.h +++ b/src/cascadia/TerminalApp/CascadiaSettings.h @@ -29,6 +29,7 @@ namespace TerminalAppLocalTests class ProfileTests; class ColorSchemeTests; class KeyBindingsTests; + class TabTests; }; namespace TerminalAppUnitTests { @@ -119,5 +120,6 @@ private: friend class TerminalAppLocalTests::ProfileTests; friend class TerminalAppLocalTests::ColorSchemeTests; friend class TerminalAppLocalTests::KeyBindingsTests; + friend class TerminalAppLocalTests::TabTests; friend class TerminalAppUnitTests::DynamicProfileTests; }; diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h index bca63fd2d..10278ac72 100644 --- a/src/cascadia/TerminalApp/TerminalPage.h +++ b/src/cascadia/TerminalApp/TerminalPage.h @@ -12,6 +12,12 @@ #include #include +// fwdecl unittest classes +namespace TerminalAppLocalTests +{ + class TabTests; +}; + namespace winrt::TerminalApp::implementation { struct TerminalPage : TerminalPageT @@ -159,6 +165,8 @@ namespace winrt::TerminalApp::implementation void _HandleResetFontSize(const IInspectable& sender, const TerminalApp::ActionEventArgs& args); void _HandleToggleFullscreen(const IInspectable& sender, const TerminalApp::ActionEventArgs& args); #pragma endregion + + friend class TerminalAppLocalTests::TabTests; }; } diff --git a/src/common.build.tests.props b/src/common.build.tests.props index 4b3e2187c..8e311fe52 100644 --- a/src/common.build.tests.props +++ b/src/common.build.tests.props @@ -5,11 +5,11 @@ UNIT_TESTING;%(PreprocessorDefinitions) - + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + diff --git a/src/host/ft_uia/Host.Tests.UIA.csproj b/src/host/ft_uia/Host.Tests.UIA.csproj index 62136016e..27da40d9e 100644 --- a/src/host/ft_uia/Host.Tests.UIA.csproj +++ b/src/host/ft_uia/Host.Tests.UIA.csproj @@ -53,7 +53,7 @@ - ..\..\..\packages\Taef.Redist.Wlk.10.38.190610001-uapadmin\lib\net45\TE.Managed.dll + ..\..\..\packages\Taef.Redist.Wlk.10.48.200103003-develop\lib\net45\TE.Managed.dll @@ -64,10 +64,10 @@ ..\..\..\packages\Selenium.Support.3.5.0\lib\net40\WebDriver.Support.dll - ..\..\..\packages\Taef.Redist.Wlk.10.38.190610001-uapadmin\lib\net45\Wex.Common.Managed.dll + ..\..\..\packages\Taef.Redist.Wlk.10.48.200103003-develop\lib\net45\Wex.Common.Managed.dll - ..\..\..\packages\Taef.Redist.Wlk.10.38.190610001-uapadmin\lib\net45\Wex.Logger.Interop.dll + ..\..\..\packages\Taef.Redist.Wlk.10.48.200103003-develop\lib\net45\Wex.Logger.Interop.dll @@ -142,11 +142,11 @@ copy $(SolutionDir)\dep\WinAppDriver\* $(OutDir)\ - + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + diff --git a/src/host/ft_uia/packages.config b/src/host/ft_uia/packages.config index ba53f7a07..5748a55a6 100644 --- a/src/host/ft_uia/packages.config +++ b/src/host/ft_uia/packages.config @@ -5,5 +5,5 @@ - + diff --git a/src/terminal/parser/ut_parser/packages.config b/src/terminal/parser/ut_parser/packages.config index 525e3e670..4d24d7785 100644 --- a/src/terminal/parser/ut_parser/packages.config +++ b/src/terminal/parser/ut_parser/packages.config @@ -1,4 +1,4 @@  - + diff --git a/tools/OpenConsole.psm1 b/tools/OpenConsole.psm1 index 90c1c63de..d2a085b91 100644 --- a/tools/OpenConsole.psm1 +++ b/tools/OpenConsole.psm1 @@ -181,14 +181,17 @@ function Invoke-OpenConsoleTests() return } $OpenConsolePlatform = $Platform + $TestHostAppPath = "$env:OpenConsoleRoot\$OpenConsolePlatform\$Configuration\TestHostApp" if ($Platform -eq 'x86') { $OpenConsolePlatform = 'Win32' + $TestHostAppPath = "$env:OpenConsoleRoot\$Configuration\TestHostApp" } $OpenConsolePath = "$env:OpenConsoleroot\bin\$OpenConsolePlatform\$Configuration\OpenConsole.exe" $RunTePath = "$env:OpenConsoleRoot\tools\runte.cmd" - $TaefExePath = "$env:OpenConsoleRoot\packages\Taef.Redist.Wlk.10.38.190610001-uapadmin\build\Binaries\$Platform\te.exe" + $TaefExePath = "$env:OpenConsoleRoot\packages\Taef.Redist.Wlk.10.48.200103003-develop\build\Binaries\$Platform\te.exe" $BinDir = "$env:OpenConsoleRoot\bin\$OpenConsolePlatform\$Configuration" + [xml]$TestConfig = Get-Content "$env:OpenConsoleRoot\tools\tests.xml" # check if WinAppDriver needs to be started @@ -222,6 +225,11 @@ function Invoke-OpenConsoleTests() { if ($t.type -eq "unit") { + if ($t.runInHostApp -eq "true") + { + & $TaefExePath "$TestHostAppPath\$($t.binary)" $TaefArgs + } + & $TaefExePath "$BinDir\$($t.binary)" $TaefArgs } elseif ($t.type -eq "ft") diff --git a/tools/razzle.cmd b/tools/razzle.cmd index e755eb95b..18cc2dadd 100644 --- a/tools/razzle.cmd +++ b/tools/razzle.cmd @@ -104,7 +104,7 @@ shift goto :ARGS_LOOP :POST_ARGS_LOOP -set TAEF=%OPENCON%\packages\Taef.Redist.Wlk.10.38.190610001-uapadmin\build\Binaries\%ARCH%\TE.exe +set TAEF=%OPENCON%\packages\Taef.Redist.Wlk.10.48.200103003-develop\build\Binaries\%ARCH%\TE.exe rem Set this envvar so setup won't repeat itself set OpenConBuild=true diff --git a/tools/runut.cmd b/tools/runut.cmd index 432048793..fd3c7084f 100644 --- a/tools/runut.cmd +++ b/tools/runut.cmd @@ -3,6 +3,16 @@ rem Run the console unit tests. rem Keep this file in sync with tests.xml +rem The TerminalApp.LocalTests are actually run from the TestHostApp path. +rem That's a cppwinrt project, that doesn't use %PLATFORM% in it's path when the +rem platform is Win32/x86. +rem set a helper for us to find that test + +set _TestHostAppPath=%OPENCON%\%PLATFORM%\%_LAST_BUILD_CONF%\TestHostApp +if "%PLATFORM%" == "Win32" ( + set _TestHostAppPath=%OPENCON%\%_LAST_BUILD_CONF%\TestHostApp +) + call %TAEF% ^ %OPENCON%\bin\%PLATFORM%\%_LAST_BUILD_CONF%\Conhost.Unit.Tests.dll ^ %OPENCON%\bin\%PLATFORM%\%_LAST_BUILD_CONF%\TextBuffer.Unit.Tests.dll ^ @@ -13,5 +23,6 @@ call %TAEF% ^ %OPENCON%\bin\%PLATFORM%\%_LAST_BUILD_CONF%\Types.Unit.Tests.dll ^ %OPENCON%\bin\%PLATFORM%\%_LAST_BUILD_CONF%\til.unit.tests.dll ^ %OPENCON%\bin\%PLATFORM%\%_LAST_BUILD_CONF%\UnitTests_TerminalApp\Terminal.App.Unit.Tests.dll ^ - %OPENCON%\bin\%PLATFORM%\%_LAST_BUILD_CONF%\LocalTests_TerminalApp\TerminalApp.LocalTests.dll ^ + %_TestHostAppPath%\TerminalApp.LocalTests.dll ^ %* + diff --git a/tools/tests.xml b/tools/tests.xml index 9239d47e1..437145b05 100644 --- a/tools/tests.xml +++ b/tools/tests.xml @@ -4,7 +4,7 @@ - +