diff --git a/.gitignore b/.gitignore
index 4e9d1eddb81..e1269ff7fd7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -227,4 +227,8 @@ msbuild.binlog
!/build/tools/packages.config
# Generated file from .ttinclude
-**/Generated/TypeInfo.g.cs
\ No newline at end of file
+**/Generated/TypeInfo.g.cs
+
+# TAEF Log output
+WexLogFileOutput
+*.wtl
diff --git a/UITests/UITests.App/App.xaml b/UITests/UITests.App/App.xaml
new file mode 100644
index 00000000000..74e9cd2df91
--- /dev/null
+++ b/UITests/UITests.App/App.xaml
@@ -0,0 +1,7 @@
+
+
+
diff --git a/UITests/UITests.App/App.xaml.cs b/UITests/UITests.App/App.xaml.cs
new file mode 100644
index 00000000000..23f5035b6d5
--- /dev/null
+++ b/UITests/UITests.App/App.xaml.cs
@@ -0,0 +1,89 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using Windows.ApplicationModel;
+using Windows.ApplicationModel.Activation;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
+using Windows.UI.Xaml.Navigation;
+
+namespace UITests.App
+{
+ public sealed partial class App
+ {
+ public App()
+ {
+ this.InitializeComponent();
+ this.Suspending += OnSuspending;
+ }
+
+ ///
+ /// 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.
+ protected override void OnLaunched(LaunchActivatedEventArgs e)
+ {
+ Frame rootFrame = Window.Current.Content as Frame;
+
+ // Do not repeat app initialization when the Window already has content,
+ // just ensure that the window is active
+ if (rootFrame == null)
+ {
+ // Create a Frame to act as the navigation context and navigate to the first page
+ rootFrame = new Frame();
+
+ rootFrame.NavigationFailed += OnNavigationFailed;
+
+ if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
+ {
+ // TODO: Load state from previously suspended application
+ }
+
+ // Place the frame in the current Window
+ Window.Current.Content = rootFrame;
+ }
+
+ if (e.PrelaunchActivated == false)
+ {
+ if (rootFrame.Content == null)
+ {
+ // When the navigation stack isn't restored navigate to the first page,
+ // configuring the new page by passing required information as a navigation
+ // parameter
+ rootFrame.Navigate(typeof(MainPage), e.Arguments);
+ }
+
+ // Ensure the current window is active
+ Window.Current.Activate();
+ }
+ }
+
+ ///
+ /// Invoked when Navigation to a certain page fails
+ ///
+ /// The Frame which failed navigation
+ /// Details about the navigation failure
+ private void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
+ {
+ throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
+ }
+
+ ///
+ /// Invoked when application execution is being suspended. Application state is saved
+ /// without knowing whether the application will be terminated or resumed with the contents
+ /// of memory still intact.
+ ///
+ /// The source of the suspend request.
+ /// Details about the suspend request.
+ private void OnSuspending(object sender, SuspendingEventArgs e)
+ {
+ var deferral = e.SuspendingOperation.GetDeferral();
+
+ // TODO: Save application state and stop any background activity
+ deferral.Complete();
+ }
+ }
+}
diff --git a/UITests/UITests.App/Assets/LockScreenLogo.scale-200.png b/UITests/UITests.App/Assets/LockScreenLogo.scale-200.png
new file mode 100644
index 00000000000..735f57adb5d
Binary files /dev/null and b/UITests/UITests.App/Assets/LockScreenLogo.scale-200.png differ
diff --git a/UITests/UITests.App/Assets/SplashScreen.scale-200.png b/UITests/UITests.App/Assets/SplashScreen.scale-200.png
new file mode 100644
index 00000000000..023e7f1feda
Binary files /dev/null and b/UITests/UITests.App/Assets/SplashScreen.scale-200.png differ
diff --git a/UITests/UITests.App/Assets/Square150x150Logo.scale-200.png b/UITests/UITests.App/Assets/Square150x150Logo.scale-200.png
new file mode 100644
index 00000000000..af49fec1a54
Binary files /dev/null and b/UITests/UITests.App/Assets/Square150x150Logo.scale-200.png differ
diff --git a/UITests/UITests.App/Assets/Square44x44Logo.scale-200.png b/UITests/UITests.App/Assets/Square44x44Logo.scale-200.png
new file mode 100644
index 00000000000..ce342a2ec8a
Binary files /dev/null and b/UITests/UITests.App/Assets/Square44x44Logo.scale-200.png differ
diff --git a/UITests/UITests.App/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/UITests/UITests.App/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
new file mode 100644
index 00000000000..f6c02ce97e0
Binary files /dev/null and b/UITests/UITests.App/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ
diff --git a/UITests/UITests.App/Assets/StoreLogo.png b/UITests/UITests.App/Assets/StoreLogo.png
new file mode 100644
index 00000000000..7385b56c0e4
Binary files /dev/null and b/UITests/UITests.App/Assets/StoreLogo.png differ
diff --git a/UITests/UITests.App/Assets/Wide310x150Logo.scale-200.png b/UITests/UITests.App/Assets/Wide310x150Logo.scale-200.png
new file mode 100644
index 00000000000..288995b397f
Binary files /dev/null and b/UITests/UITests.App/Assets/Wide310x150Logo.scale-200.png differ
diff --git a/UITests/UITests.App/MainPage.xaml b/UITests/UITests.App/MainPage.xaml
new file mode 100644
index 00000000000..d38db07e3e3
--- /dev/null
+++ b/UITests/UITests.App/MainPage.xaml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/UITests/UITests.App/MainPage.xaml.cs b/UITests/UITests.App/MainPage.xaml.cs
new file mode 100644
index 00000000000..b44c1291f46
--- /dev/null
+++ b/UITests/UITests.App/MainPage.xaml.cs
@@ -0,0 +1,19 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace UITests.App
+{
+ public sealed partial class MainPage
+ {
+ public MainPage()
+ {
+ InitializeComponent();
+ }
+
+ private void Button_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
+ {
+ textBlock.Text = "Clicked";
+ }
+ }
+}
diff --git a/UITests/UITests.App/Package.appxmanifest b/UITests/UITests.App/Package.appxmanifest
new file mode 100644
index 00000000000..a17d7b8e653
--- /dev/null
+++ b/UITests/UITests.App/Package.appxmanifest
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+ UITests.App
+ alzollin
+ Assets\StoreLogo.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UITests/UITests.App/Properties/AssemblyInfo.cs b/UITests/UITests.App/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000000..37fb4eb8906
--- /dev/null
+++ b/UITests/UITests.App/Properties/AssemblyInfo.cs
@@ -0,0 +1,30 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("UITests.App")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("UITests.App")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: ComVisible(false)]
\ No newline at end of file
diff --git a/UITests/UITests.App/Properties/Default.rd.xml b/UITests/UITests.App/Properties/Default.rd.xml
new file mode 100644
index 00000000000..af00722cdf9
--- /dev/null
+++ b/UITests/UITests.App/Properties/Default.rd.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UITests/UITests.App/UITests.App.csproj b/UITests/UITests.App/UITests.App.csproj
new file mode 100644
index 00000000000..48fc8de5936
--- /dev/null
+++ b/UITests/UITests.App/UITests.App.csproj
@@ -0,0 +1,255 @@
+
+
+
+
+ Debug
+ x86
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}
+ AppContainerExe
+ Properties
+ UITests.App
+ UITests.App
+ en-US
+ UAP
+ 10.0.19041.0
+ 10.0.17763.0
+ 14
+ 512
+ {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ true
+ False
+ False
+ Never
+ True
+ 0
+ UITests.App.pfx
+ 24D62F3B13B8B9514EAD9C4DE48CC30F7CC6151D
+ SHA256
+ true
+ True
+
+
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
+ ;2008
+ full
+ x86
+ false
+ prompt
+ true
+
+
+ bin\x86\Release\
+ TRACE;NETFX_CORE;WINDOWS_UWP
+ true
+ ;2008
+ pdbonly
+ x86
+ false
+ prompt
+ true
+ true
+
+
+ true
+ bin\ARM\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
+ ;2008
+ full
+ ARM
+ false
+ prompt
+ true
+
+
+ bin\ARM\Release\
+ TRACE;NETFX_CORE;WINDOWS_UWP
+ true
+ ;2008
+ pdbonly
+ ARM
+ false
+ prompt
+ true
+ true
+
+
+ true
+ bin\ARM64\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
+ ;2008
+ full
+ ARM64
+ false
+ prompt
+ true
+ true
+
+
+ bin\ARM64\Release\
+ TRACE;NETFX_CORE;WINDOWS_UWP
+ true
+ ;2008
+ pdbonly
+ ARM64
+ false
+ prompt
+ true
+ true
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
+ ;2008
+ full
+ x64
+ false
+ prompt
+ true
+
+
+ bin\x64\Release\
+ TRACE;NETFX_CORE;WINDOWS_UWP
+ true
+ ;2008
+ pdbonly
+ x64
+ false
+ prompt
+ true
+ true
+
+
+ PackageReference
+
+
+
+ App.xaml
+
+
+ MainPage.xaml
+
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+
+
+ 6.2.10
+
+
+ 0.0.4
+
+
+
+
+
+
+
+ {7e30d48c-4cd8-47be-b557-10a20391dcc4}
+ Microsoft.Toolkit.HighPerformance
+
+
+ {d82ae6e1-e612-434e-acb2-363ee48738d3}
+ Microsoft.Toolkit.Mvvm
+
+
+ {42ca4935-54be-42ea-ac19-992378c08de6}
+ Microsoft.Toolkit.Parsers
+
+
+ {34398053-fc70-4243-84f9-f355defff66d}
+ Microsoft.Toolkit.Services
+
+
+ {b1e850ff-dde6-44d5-a830-34250e97a687}
+ Microsoft.Toolkit.Uwp.Connectivity
+
+
+ {e7697922-9555-4cfb-aee0-c5f4d657e559}
+ Microsoft.Toolkit.Uwp.DeveloperTools
+
+
+ {a5e98964-45b1-442d-a07a-298a3221d81e}
+ Microsoft.Toolkit.Uwp.Input.GazeInteraction
+
+
+ {97ee849b-403c-490e-80ed-d19d7cc153fd}
+ Microsoft.Toolkit.Uwp.Notifications
+
+
+ {b24a296c-b3eb-4e06-a64e-74ac2d1acc91}
+ Microsoft.Toolkit.Uwp.UI.Animations
+
+
+ {daeb9cec-c817-33b2-74b2-bc379380db72}
+ Microsoft.Toolkit.Uwp.UI.Controls.DataGrid
+
+
+ {cb444381-18ba-4a51-bb32-3a498bcc1e99}
+ Microsoft.Toolkit.Uwp.UI.Controls.Layout
+
+
+ {6fedf199-b052-49dd-8f3e-2a9224998e0f}
+ Microsoft.Toolkit.Uwp.UI.Controls.Markdown
+
+
+ {e9faabfb-d726-42c1-83c1-cb46a29fea81}
+ Microsoft.Toolkit.Uwp.UI.Controls
+
+
+ {75f9ee44-3efa-47bc-aedd-351b9834a0af}
+ Microsoft.Toolkit.Uwp.UI.Media
+
+
+ {3dd8aa7c-3569-4e51-992f-0c2257e8878e}
+ Microsoft.Toolkit.Uwp.UI
+
+
+ {805f80df-75c6-4c2f-8fd9-b47f6d0df5a3}
+ Microsoft.Toolkit.Uwp
+
+
+ {6fe128a8-cefa-4a61-a987-ec92de6b538e}
+ Microsoft.Toolkit
+
+
+
+ 14.0
+
+
+
+
diff --git a/UITests/UITests.App/UITests.App.pfx b/UITests/UITests.App/UITests.App.pfx
new file mode 100644
index 00000000000..ec83ace8dee
Binary files /dev/null and b/UITests/UITests.App/UITests.App.pfx differ
diff --git a/UITests/UITests.Tests.MSTest/MSTestInterop.cs b/UITests/UITests.Tests.MSTest/MSTestInterop.cs
new file mode 100644
index 00000000000..dc1740ba15e
--- /dev/null
+++ b/UITests/UITests.Tests.MSTest/MSTestInterop.cs
@@ -0,0 +1,156 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Microsoft.VisualStudio.TestTools.UnitTesting.Logging;
+
+namespace UITests.Tests
+{
+ // TAEF has a different terms for the same concepts as compared with MSTest.
+ // In order to allow both to use the same test files, we'll define these helper classes
+ // to translate TAEF into MSTest.
+ public static class Log
+ {
+ public static void Comment(string format, params object[] args)
+ {
+ LogMessage(format, args);
+ }
+
+ public static void Warning(string format, params object[] args)
+ {
+ LogMessage(format, args);
+ }
+
+ public static void Error(string format, params object[] args)
+ {
+ LogMessage(format, args);
+ }
+
+ private static void LogMessage(string format, object[] args)
+ {
+ // string.Format() complains if we pass it something with braces, even if we have no arguments.
+ // To account for that, we'll escape braces if we have no arguments.
+ if (args.Length == 0)
+ {
+ format = format.Replace("{", "{{").Replace("}", "}}");
+ }
+
+ Logger.LogMessage(format, args);
+ }
+ }
+
+ public static class LogController
+ {
+ public static void InitializeLogging()
+ {
+ // TODO: implement
+ }
+ }
+
+ public static class Verify
+ {
+ // TODO: implement
+ // NOTE: At the time of this comment, MUXControlsTestApp is hitting a code path where
+ // running tests locally will set this flag to true. Hence an implementation of this flag
+ // will only log errors and not fail the tests.
+ public static bool DisableVerifyFailureExceptions
+ {
+ get;
+ set;
+ }
+
+ public static void AreEqual(object expected, object actual, string message = null)
+ {
+ Assert.AreEqual(expected, actual, message);
+ }
+
+ public static void AreEqual(T expected, T actual, string message = null)
+ {
+ Assert.AreEqual(expected, actual, message);
+ }
+
+ public static void AreNotEqual(object notExpected, object actual, string message = null)
+ {
+ Assert.AreNotEqual(notExpected, actual, message);
+ }
+
+ public static void AreNotEqual(T notExpected, T actual, string message = null)
+ {
+ Assert.AreNotEqual(notExpected, actual, message);
+ }
+
+ public static void AreSame(object expected, object actual, string message = null)
+ {
+ Assert.AreSame(expected, actual, message);
+ }
+
+ public static void AreNotSame(object notExpected, object actual, string message = null)
+ {
+ Assert.AreNotSame(notExpected, actual, message);
+ }
+
+ public static void IsLessThan(IComparable expectedLess, IComparable expectedGreater, string message = null)
+ {
+ Assert.IsTrue(expectedLess.CompareTo(expectedGreater) < 0, message);
+ }
+
+ public static void IsLessThanOrEqual(IComparable expectedLess, IComparable expectedGreater, string message = null)
+ {
+ Assert.IsTrue(expectedLess.CompareTo(expectedGreater) <= 0, message);
+ }
+
+ public static void IsGreaterThan(IComparable expectedGreater, IComparable expectedLess, string message = null)
+ {
+ Assert.IsTrue(expectedGreater.CompareTo(expectedLess) > 0, message);
+ }
+
+ public static void IsGreaterThanOrEqual(IComparable expectedGreater, IComparable expectedLess, string message = null)
+ {
+ Assert.IsTrue(expectedGreater.CompareTo(expectedLess) >= 0, message);
+ }
+
+ public static void IsNull(object value, string message = null)
+ {
+ Assert.IsNull(value, message);
+ }
+
+ public static void IsNotNull(object value, string message = null)
+ {
+ Assert.IsNotNull(value, message);
+ }
+
+ public static void IsTrue(bool condition, string message = null)
+ {
+ Assert.IsTrue(condition, message);
+ }
+
+ public static void IsFalse(bool condition, string message = null)
+ {
+ Assert.IsFalse(condition, message);
+ }
+
+ public static void Fail()
+ {
+ Assert.Fail();
+ }
+
+ public static void Fail(string message, params object[] args)
+ {
+ Assert.Fail(message, args);
+ }
+
+ public static void Throws(Action action, string message)
+ where T : Exception
+ {
+ Assert.ThrowsException(action, message);
+ }
+
+ public static void Throws(Action action)
+ where T : Exception
+ {
+ Assert.ThrowsException(action);
+ }
+ }
+}
\ No newline at end of file
diff --git a/UITests/UITests.Tests.MSTest/UITests.Tests.MSTest.csproj b/UITests/UITests.Tests.MSTest/UITests.Tests.MSTest.csproj
new file mode 100644
index 00000000000..67a02acf40f
--- /dev/null
+++ b/UITests/UITests.Tests.MSTest/UITests.Tests.MSTest.csproj
@@ -0,0 +1,31 @@
+
+
+
+
+
+ netcoreapp3.1
+ .NETCoreApp
+ v3.1
+ win10-x86
+ 8.0
+
+ true
+ x86
+ Exe
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UITests/UITests.Tests.Shared/TestAssembly.cs b/UITests/UITests.Tests.Shared/TestAssembly.cs
new file mode 100644
index 00000000000..6b78746ffcd
--- /dev/null
+++ b/UITests/UITests.Tests.Shared/TestAssembly.cs
@@ -0,0 +1,33 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+#if USING_TAEF
+using WEX.TestExecution.Markup;
+#else
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+#endif
+using Windows.UI.Xaml.Tests.MUXControls.InteractionTests.Infra;
+
+namespace UITests.Tests
+{
+ // This is marked as a test class to make sure our AssemblyInitialize and AssemblyCleanup
+ // fixtures get executed. It won't actually host any tests.
+ [TestClass]
+ public class TestAssembly
+ {
+ [AssemblyInitialize]
+ [TestProperty("CoreClrProfile", ".")]
+ [TestProperty("RunFixtureAs:Assembly", "ElevatedUserOrSystem")]
+ public static void AssemblyInitialize(TestContext testContext)
+ {
+ TestEnvironment.AssemblyInitialize(testContext, "UITests.App.pfx");
+ }
+
+ [AssemblyCleanup]
+ public static void AssemblyCleanup()
+ {
+ TestEnvironment.AssemblyCleanup();
+ }
+ }
+}
\ No newline at end of file
diff --git a/UITests/UITests.Tests.Shared/Tests.cs b/UITests/UITests.Tests.Shared/Tests.cs
new file mode 100644
index 00000000000..bba017d8c9e
--- /dev/null
+++ b/UITests/UITests.Tests.Shared/Tests.cs
@@ -0,0 +1,117 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using Microsoft.Windows.Apps.Test.Foundation.Controls;
+using Windows.UI.Xaml.Tests.MUXControls.InteractionTests.Common;
+using Windows.UI.Xaml.Tests.MUXControls.InteractionTests.Infra;
+
+#if USING_TAEF
+using WEX.Logging.Interop;
+using WEX.TestExecution;
+using WEX.TestExecution.Markup;
+#else
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+#endif
+
+namespace UITests.Tests
+{
+ [TestClass]
+ public class Tests
+ {
+ public static TestApplicationInfo WinUICsUWPSampleApp
+ {
+ get
+ {
+ string assemblyDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
+ string baseDirectory = Path.Combine(Directory.GetParent(assemblyDir).Parent.Parent.Parent.Parent.FullName, "UITests.App");
+
+ Log.Comment($"Base Package Search Directory = \"{baseDirectory}\"");
+
+ var exclude = new[] { "Microsoft.NET.CoreRuntime", "Microsoft.VCLibs", "Microsoft.UI.Xaml", "Microsoft.NET.CoreFramework.Debug" };
+ var files = Directory.GetFiles(baseDirectory, "*.msix", SearchOption.AllDirectories).Where(f => !exclude.Any(Path.GetFileNameWithoutExtension(f).Contains));
+
+ if (files.Count() == 0)
+ {
+ throw new Exception(string.Format("Failed to find '*.msix' in {0}'!", baseDirectory));
+ }
+
+ string mostRecentlyBuiltPackage = string.Empty;
+ DateTime timeMostRecentlyBuilt = DateTime.MinValue;
+
+ foreach (string file in files)
+ {
+ DateTime fileWriteTime = File.GetLastWriteTime(file);
+
+ if (fileWriteTime > timeMostRecentlyBuilt)
+ {
+ timeMostRecentlyBuilt = fileWriteTime;
+ mostRecentlyBuiltPackage = file;
+ }
+ }
+
+ return new TestApplicationInfo(
+ "UITests.App",
+ "3568ebdf-5b6b-4ddd-bb17-462d614ba50f_gspb8g6x97k2t!App",
+ "3568ebdf-5b6b-4ddd-bb17-462d614ba50f_gspb8g6x97k2t",
+ "UITests.App",
+ "UITests.App.exe",
+ mostRecentlyBuiltPackage.Replace(".msix", string.Empty),
+ "24d62f3b13b8b9514ead9c4de48cc30f7cc6151d",
+ baseDirectory);
+ }
+ }
+
+ public static TestSetupHelper.TestSetupHelperOptions TestSetupHelperOptions
+ {
+ get
+ {
+ return new TestSetupHelper.TestSetupHelperOptions
+ {
+ AutomationIdOfSafeItemToClick = string.Empty
+ };
+ }
+ }
+
+ [ClassInitialize]
+ [TestProperty("RunAs", "User")]
+ [TestProperty("Classification", "ScenarioTestSuite")]
+ [TestProperty("Platform", "Any")]
+ public static void ClassInitialize(TestContext testContext)
+ {
+ TestEnvironment.Initialize(testContext, WinUICsUWPSampleApp);
+ }
+
+ [ClassCleanup]
+ public static void ClassCleanup()
+ {
+ TestEnvironment.AssemblyCleanupWorker(WinUICsUWPSampleApp);
+ }
+
+ [TestCleanup]
+ public void TestCleanup()
+ {
+ }
+
+ [TestMethod]
+ public void SimpleLaunchTest()
+ {
+ var button = new Button(FindElement.ByName("Click Me"));
+ var textBlock = new TextBlock(FindElement.ById("textBlock"));
+
+ Verify.IsNotNull(button);
+
+ Verify.AreEqual(string.Empty, textBlock.GetText());
+
+ button.Click();
+
+ Wait.ForIdle();
+
+ Verify.AreEqual("Clicked", textBlock.GetText());
+ }
+ }
+}
\ No newline at end of file
diff --git a/UITests/UITests.Tests.Shared/UITests.Tests.Shared.projitems b/UITests/UITests.Tests.Shared/UITests.Tests.Shared.projitems
new file mode 100644
index 00000000000..d4e528749ac
--- /dev/null
+++ b/UITests/UITests.Tests.Shared/UITests.Tests.Shared.projitems
@@ -0,0 +1,15 @@
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+ true
+ 1d8b0260-5c17-41da-9c38-1e37441b3925
+
+
+ UITests.Tests.Shared
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UITests/UITests.Tests.Shared/UITests.Tests.Shared.shproj b/UITests/UITests.Tests.Shared/UITests.Tests.Shared.shproj
new file mode 100644
index 00000000000..e489cb2eed0
--- /dev/null
+++ b/UITests/UITests.Tests.Shared/UITests.Tests.Shared.shproj
@@ -0,0 +1,13 @@
+
+
+
+ 1d8b0260-5c17-41da-9c38-1e37441b3925
+ 14.0
+
+
+
+
+
+
+
+
diff --git a/UITests/UITests.Tests.TAEF/MainClass.cs b/UITests/UITests.Tests.TAEF/MainClass.cs
new file mode 100644
index 00000000000..77d69d0e392
--- /dev/null
+++ b/UITests/UITests.Tests.TAEF/MainClass.cs
@@ -0,0 +1,15 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace UITests.Tests.TAEF
+{
+ public static class MainClass
+ {
+ public static void Main()
+ {
+ // Empty main just to force the compiler to copy the DotNet Runtime on the folder as the output (since OutputType = Exe).
+ // The .exe is unused, but we do use the dll generated by this compilation
+ }
+ }
+}
diff --git a/UITests/UITests.Tests.TAEF/UITests.App.dependencies.Debug.txt b/UITests/UITests.Tests.TAEF/UITests.App.dependencies.Debug.txt
new file mode 100644
index 00000000000..7c615eb580e
--- /dev/null
+++ b/UITests/UITests.Tests.TAEF/UITests.App.dependencies.Debug.txt
@@ -0,0 +1,4 @@
+Microsoft.NET.CoreFramework.Debug.2.2.appx
+Microsoft.NET.CoreRuntime.2.2.appx
+Microsoft.UI.Xaml.2.4.appx
+Microsoft.VCLibs.x86.Debug.14.00.appx
\ No newline at end of file
diff --git a/UITests/UITests.Tests.TAEF/UITests.App.dependencies.Release.txt b/UITests/UITests.Tests.TAEF/UITests.App.dependencies.Release.txt
new file mode 100644
index 00000000000..bc54bb4b6cc
--- /dev/null
+++ b/UITests/UITests.Tests.TAEF/UITests.App.dependencies.Release.txt
@@ -0,0 +1,4 @@
+Microsoft.NET.Native.Framework.2.2.appx
+Microsoft.NET.Native.Runtime.2.2.appx
+Microsoft.UI.Xaml.2.4.appx
+Microsoft.VCLibs.x86.14.00.appx
\ No newline at end of file
diff --git a/UITests/UITests.Tests.TAEF/UITests.Tests.TAEF.csproj b/UITests/UITests.Tests.TAEF/UITests.Tests.TAEF.csproj
new file mode 100644
index 00000000000..1fd9fc11c4f
--- /dev/null
+++ b/UITests/UITests.Tests.TAEF/UITests.Tests.TAEF.csproj
@@ -0,0 +1,68 @@
+
+
+
+
+ netcoreapp3.1
+ .NETCoreApp
+ v3.1
+ 8.0
+
+ $(PkgTAEF_Redist_Wlk)\build\Binaries\x86\CoreClr\
+ true
+ x86
+ $(DefineConstants);USING_TAEF
+ Exe
+ win10-x86
+ false
+ false
+
+
+
+
+ $(TaefRootDirectory)TE.Managed.dll
+ true
+
+
+ $(TaefRootDirectory)TE.ManagedTestMode.dll
+ true
+
+
+ $(TaefRootDirectory)Wex.Common.Managed.dll
+ true
+
+
+ $(TaefRootDirectory)Wex.Logger.Interop.dll
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UITests.App.dependencies.txt
+ PreserveNewest
+
+
+ UITests.App.dependencies.txt
+ PreserveNewest
+
+
+
+
+
\ No newline at end of file
diff --git a/Windows Community Toolkit.sln b/Windows Community Toolkit.sln
index 2cf8652ee67..dbb8ef27886 100644
--- a/Windows Community Toolkit.sln
+++ b/Windows Community Toolkit.sln
@@ -116,8 +116,25 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Toolkit.Uwp.UI.Co
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Toolkit.Uwp.UI.Controls.Markdown.Design", "Microsoft.Toolkit.Uwp.UI.Controls.Markdown.Design\Microsoft.Toolkit.Uwp.UI.Controls.Markdown.Design.csproj", "{67FE47A0-CA93-4680-B770-A0A48C1DBC40}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UITests.App", "UITests\UITests.App\UITests.App.csproj", "{05C83067-FA46-45E2-BEC4-EDEE84AD18D0}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UITests", "UITests", "{6FAA1CFE-3368-4FD2-9DBD-F4700F69174C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITests.Tests.MSTest", "UITests\UITests.Tests.MSTest\UITests.Tests.MSTest.csproj", "{5F720475-E263-4A5A-8C88-2B805B45B5BC}"
+ ProjectSection(ProjectDependencies) = postProject
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0} = {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITests.Tests.TAEF", "UITests\UITests.Tests.TAEF\UITests.Tests.TAEF.csproj", "{C8182EF0-77FB-4B43-A588-C71748A309C7}"
+ ProjectSection(ProjectDependencies) = postProject
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0} = {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}
+ EndProjectSection
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "UITests.Tests.Shared", "UITests\UITests.Tests.Shared\UITests.Tests.Shared.shproj", "{1D8B0260-5C17-41DA-9C38-1E37441B3925}"
+EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ UITests\UITests.Tests.Shared\UITests.Tests.Shared.projitems*{1d8b0260-5c17-41da-9c38-1e37441b3925}*SharedItemsImports = 13
UnitTests\UnitTests.Shared\UnitTests.Shared.projitems*{4e9466d1-d5aa-46ac-801b-c8fdab79f0d4}*SharedItemsImports = 13
UnitTests\UnitTests.HighPerformance.Shared\UnitTests.HighPerformance.Shared.projitems*{5524523e-db0f-41f7-a0d4-43128422a342}*SharedItemsImports = 4
UnitTests\UnitTests.Shared\UnitTests.Shared.projitems*{7878cd00-85e8-4d02-9757-8a43db4c6510}*SharedItemsImports = 5
@@ -552,6 +569,34 @@ Global
{42CA4935-54BE-42EA-AC19-992378C08DE6}.Release|x64.Build.0 = Release|Any CPU
{42CA4935-54BE-42EA-AC19-992378C08DE6}.Release|x86.ActiveCfg = Release|Any CPU
{42CA4935-54BE-42EA-AC19-992378C08DE6}.Release|x86.Build.0 = Release|Any CPU
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Debug|Any CPU.Build.0 = Debug|Win32
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Debug|ARM.ActiveCfg = Debug|ARM
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Debug|ARM.Build.0 = Debug|ARM
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Debug|ARM64.Build.0 = Debug|ARM64
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Debug|x64.ActiveCfg = Debug|x64
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Debug|x64.Build.0 = Debug|x64
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Debug|x86.ActiveCfg = Debug|Win32
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Debug|x86.Build.0 = Debug|Win32
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Native|Any CPU.ActiveCfg = Release|Win32
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Native|ARM.ActiveCfg = Release|ARM
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Native|ARM.Build.0 = Release|ARM
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Native|ARM64.ActiveCfg = Release|ARM64
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Native|ARM64.Build.0 = Release|ARM64
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Native|x64.ActiveCfg = Release|x64
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Native|x64.Build.0 = Release|x64
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Native|x86.ActiveCfg = Release|Win32
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Native|x86.Build.0 = Release|Win32
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Release|Any CPU.ActiveCfg = Release|Win32
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Release|ARM.ActiveCfg = Release|ARM
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Release|ARM.Build.0 = Release|ARM
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Release|ARM64.ActiveCfg = Release|ARM64
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Release|ARM64.Build.0 = Release|ARM64
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Release|x64.ActiveCfg = Release|x64
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Release|x64.Build.0 = Release|x64
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Release|x86.ActiveCfg = Release|Win32
+ {A5E98964-45B1-442D-A07A-298A3221D81E}.Release|x86.Build.0 = Release|Win32
{5BF75694-798A-43A0-8150-415DE195359C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5BF75694-798A-43A0-8150-415DE195359C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5BF75694-798A-43A0-8150-415DE195359C}.Debug|ARM.ActiveCfg = Debug|Any CPU
@@ -846,6 +891,88 @@ Global
{67FE47A0-CA93-4680-B770-A0A48C1DBC40}.Release|x64.Build.0 = Release|x86
{67FE47A0-CA93-4680-B770-A0A48C1DBC40}.Release|x86.ActiveCfg = Release|x86
{67FE47A0-CA93-4680-B770-A0A48C1DBC40}.Release|x86.Build.0 = Release|x86
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|ARM.ActiveCfg = Debug|ARM
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|ARM.Build.0 = Debug|ARM
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|ARM.Deploy.0 = Debug|ARM
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|ARM64.ActiveCfg = Debug|ARM64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|ARM64.Build.0 = Debug|ARM64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|ARM64.Deploy.0 = Debug|ARM64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|x64.ActiveCfg = Debug|x64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|x64.Build.0 = Debug|x64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|x64.Deploy.0 = Debug|x64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|x86.ActiveCfg = Debug|x86
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|x86.Build.0 = Debug|x86
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Debug|x86.Deploy.0 = Debug|x86
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Native|Any CPU.ActiveCfg = Release|x64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Native|ARM.ActiveCfg = Release|ARM
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Native|ARM64.ActiveCfg = Release|ARM64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Native|x64.ActiveCfg = Release|x64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Native|x86.ActiveCfg = Release|x86
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|Any CPU.ActiveCfg = Release|x86
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|Any CPU.Build.0 = Release|x86
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|ARM.ActiveCfg = Release|ARM
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|ARM.Build.0 = Release|ARM
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|ARM.Deploy.0 = Release|ARM
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|ARM64.ActiveCfg = Release|ARM64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|ARM64.Build.0 = Release|ARM64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|ARM64.Deploy.0 = Release|ARM64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|x64.ActiveCfg = Release|x64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|x64.Build.0 = Release|x64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|x64.Deploy.0 = Release|x64
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|x86.ActiveCfg = Release|x86
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|x86.Build.0 = Release|x86
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0}.Release|x86.Deploy.0 = Release|x86
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Debug|ARM.Build.0 = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Debug|x64.Build.0 = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Debug|x86.Build.0 = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Native|Any CPU.ActiveCfg = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Native|ARM.ActiveCfg = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Native|ARM64.ActiveCfg = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Native|x64.ActiveCfg = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Native|x86.ActiveCfg = Debug|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Release|ARM.ActiveCfg = Release|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Release|ARM.Build.0 = Release|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Release|ARM64.Build.0 = Release|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Release|x64.ActiveCfg = Release|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Release|x64.Build.0 = Release|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Release|x86.ActiveCfg = Release|Any CPU
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC}.Release|x86.Build.0 = Release|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Debug|ARM.Build.0 = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Debug|x64.Build.0 = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Debug|x86.Build.0 = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Native|Any CPU.ActiveCfg = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Native|ARM.ActiveCfg = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Native|ARM64.ActiveCfg = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Native|x64.ActiveCfg = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Native|x86.ActiveCfg = Debug|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Release|ARM.ActiveCfg = Release|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Release|ARM.Build.0 = Release|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Release|ARM64.Build.0 = Release|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Release|x64.ActiveCfg = Release|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Release|x64.Build.0 = Release|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Release|x86.ActiveCfg = Release|Any CPU
+ {C8182EF0-77FB-4B43-A588-C71748A309C7}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -881,6 +1008,11 @@ Global
{88C6FFBE-322D-4CEA-842B-B2CB281D357D} = {CFA75BE0-5A44-45DE-8114-426A605B062B}
{6FEDF199-B052-49DD-8F3E-2A9224998E0F} = {F1AFFFA7-28FE-4770-BA48-10D76F3E59BC}
{67FE47A0-CA93-4680-B770-A0A48C1DBC40} = {F1AFFFA7-28FE-4770-BA48-10D76F3E59BC}
+ {05C83067-FA46-45E2-BEC4-EDEE84AD18D0} = {6FAA1CFE-3368-4FD2-9DBD-F4700F69174C}
+ {6FAA1CFE-3368-4FD2-9DBD-F4700F69174C} = {B30036C4-D514-4E5B-A323-587A061772CE}
+ {5F720475-E263-4A5A-8C88-2B805B45B5BC} = {6FAA1CFE-3368-4FD2-9DBD-F4700F69174C}
+ {C8182EF0-77FB-4B43-A588-C71748A309C7} = {6FAA1CFE-3368-4FD2-9DBD-F4700F69174C}
+ {1D8B0260-5C17-41DA-9C38-1E37441B3925} = {6FAA1CFE-3368-4FD2-9DBD-F4700F69174C}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {5403B0C4-F244-4F73-A35C-FE664D0F4345}
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 230dc38f0b3..75d381267ec 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -12,61 +12,80 @@ pool:
variables:
BuildConfiguration: Release
-steps:
-- task: BatchScript@1
- inputs:
- filename: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\Common7\\Tools\\VsDevCmd.bat"
- arguments: -no_logo
- modifyEnvironment: true
- displayName: Setup Environment Variables
+jobs:
+- job: ToolkitBuild
+ timeoutInMinutes: 120
-- task: NuGetToolInstaller@0
- displayName: Use NuGet 5.6.0
- inputs:
- versionSpec: 5.6.0
-
-- task: DotNetCoreCLI@2
- inputs:
- command: custom
- custom: tool
- arguments: install --tool-path . nbgv
- displayName: Install NBGV tool
-
-- script: nbgv cloud
- displayName: Set Version
-
-#- powershell: .\build\Install-WindowsSdkISO.ps1 19041
-# displayName: Insider SDK
-
-- powershell: .\build\build.ps1 -target=Build
- displayName: Build
-
-- powershell: .\build\build.ps1 -target=Test
- displayName: Test
-
-- powershell: .\build\build.ps1 -target=Package
- displayName: Package
-
-- task: PublishTestResults@2
- inputs:
- testResultsFormat: 'VSTest'
- testResultsFiles: '**/VsTestResults*.trx'
- displayName: Publish Test Results
- condition: succeededOrFailed()
-
-- task: PowerShell@2
- displayName: Authenticode Sign Packages
- inputs:
- filePath: build/Sign-Package.ps1
- env:
- SignClientUser: $(SignClientUser)
- SignClientSecret: $(SignClientSecret)
- ArtifactDirectory: bin\nupkg
- condition: and(succeeded(), not(eq(variables['build.reason'], 'PullRequest')), not(eq(variables['SignClientSecret'], '')), not(eq(variables['SignClientUser'], '')))
-
-- task: PublishBuildArtifacts@1
- displayName: Publish Package Artifacts
- inputs:
- pathToPublish: .\bin\nupkg
- artifactType: container
- artifactName: Packages
+ steps:
+ - task: BatchScript@1
+ inputs:
+ filename: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\Common7\\Tools\\VsDevCmd.bat"
+ arguments: -no_logo
+ modifyEnvironment: true
+ displayName: Setup Environment Variables
+
+ - task: NuGetToolInstaller@0
+ displayName: Use NuGet 5.6.0
+ inputs:
+ versionSpec: 5.6.0
+
+ - task: DotNetCoreCLI@2
+ inputs:
+ command: custom
+ custom: tool
+ arguments: install --tool-path . nbgv
+ displayName: Install NBGV tool
+
+ - script: nbgv cloud
+ displayName: Set Version
+
+ #- powershell: .\build\Install-WindowsSdkISO.ps1 19041
+ # displayName: Insider SDK
+
+ - powershell: .\build\build.ps1 -target=Build
+ displayName: Build
+
+ - powershell: .\build\build.ps1 -target=Test
+ displayName: Test
+ timeoutInMinutes: 15
+
+ - powershell: .\build\build.ps1 -target=Package
+ displayName: Package
+
+ - task: PublishTestResults@2
+ inputs:
+ testResultsFormat: 'VSTest'
+ testResultsFiles: '**/VsTestResults*.trx'
+ displayName: Publish Test Results
+ condition: always()
+
+ - task: PublishPipelineArtifact@1
+ displayName: Publish UI Test Results
+ inputs:
+ targetPath: .\build\UITestResults.wtl
+ artifactName: WexLogFileOutput
+ condition: always()
+
+ - task: PublishPipelineArtifact@1
+ displayName: Publish Test WexLogFileOutput
+ inputs:
+ targetPath: .\build\WexLogFileOutput
+ artifactName: WexErrorLogFileOutput
+ condition: failed()
+
+ - task: PowerShell@2
+ displayName: Authenticode Sign Packages
+ inputs:
+ filePath: build/Sign-Package.ps1
+ env:
+ SignClientUser: $(SignClientUser)
+ SignClientSecret: $(SignClientSecret)
+ ArtifactDirectory: bin\nupkg
+ condition: and(succeeded(), not(eq(variables['build.reason'], 'PullRequest')), not(eq(variables['SignClientSecret'], '')), not(eq(variables['SignClientUser'], '')))
+
+ - task: PublishBuildArtifacts@1
+ displayName: Publish Package Artifacts
+ inputs:
+ pathToPublish: .\bin\nupkg
+ artifactType: container
+ artifactName: Packages
diff --git a/build/build.cake b/build/build.cake
index 67de85e745f..2e3e7a234fe 100644
--- a/build/build.cake
+++ b/build/build.cake
@@ -35,6 +35,8 @@ var toolsDir = buildDir + "/tools";
var binDir = baseDir + "/bin";
var nupkgDir = binDir + "/nupkg";
+var taefBinDir = baseDir + "/UITests/UITests.Tests.TAEF/bin/Release/netcoreapp3.1/win10-x86";
+
var styler = toolsDir + "/XamlStyler.Console/tools/xstyler.exe";
var stylerFile = baseDir + "/settings.xamlstyler";
@@ -244,33 +246,60 @@ Task("Test")
.Description("Runs all Tests")
.Does(() =>
{
- var vswhere = VSWhereLatest(new VSWhereLatestSettings
- {
- IncludePrerelease = false
- });
-
- var testSettings = new VSTestSettings
- {
- ToolPath = vswhere + "/Common7/IDE/CommonExtensions/Microsoft/TestWindow/vstest.console.exe",
- TestAdapterPath = getMSTestAdapterPath(),
+ Information("\nRunning Unit Tests");
+ var vswhere = VSWhereLatest(new VSWhereLatestSettings
+ {
+ IncludePrerelease = false
+ });
+
+ var testSettings = new VSTestSettings
+ {
+ ToolPath = vswhere + "/Common7/IDE/CommonExtensions/Microsoft/TestWindow/vstest.console.exe",
+ TestAdapterPath = getMSTestAdapterPath(),
ArgumentCustomization = arg => arg.Append("/logger:trx;LogFileName=VsTestResultsUwp.trx /framework:FrameworkUap10"),
- };
+ };
- VSTest(baseDir + "/**/Release/**/UnitTests.*.appxrecipe", testSettings);
+ VSTest(baseDir + "/**/Release/**/UnitTests.*.appxrecipe", testSettings);
}).DoesForEach(GetFiles(baseDir + "/**/UnitTests.*.NetCore.csproj"), (file) =>
{
+ Information("\nRunning NetCore Unit Tests");
var testSettings = new DotNetCoreTestSettings
- {
- Configuration = "Release",
- NoBuild = true,
- Logger = "trx;LogFilePrefix=VsTestResults",
- Verbosity = DotNetCoreVerbosity.Normal,
- ArgumentCustomization = arg => arg.Append($"-s {baseDir}/.runsettings"),
- };
+ {
+ Configuration = "Release",
+ NoBuild = true,
+ Logger = "trx;LogFilePrefix=VsTestResults",
+ Verbosity = DotNetCoreVerbosity.Normal,
+ ArgumentCustomization = arg => arg.Append($"-s {baseDir}/.runsettings"),
+ };
DotNetCoreTest(file.FullPath, testSettings);
+}).DoesForEach(GetFiles(taefBinDir + "/**/UITests.Tests.TAEF.dll"), (file) =>
+{
+ Information("\nRunning TAEF Interaction Tests");
+
+ var result = StartProcess(System.IO.Path.GetDirectoryName(file.FullPath) + "/TE.exe", file.FullPath + " /screenCaptureOnError /enableWttLogging /logFile:UITestResults.wtl");
+ if (result != 0)
+ {
+ throw new InvalidOperationException("TAEF Tests failed!");
+ }
}).DeferOnError();
+Task("MSTestUITest")
+ .Description("Runs UITests using MSTest")
+ .DoesForEach(GetFiles(baseDir + "/**/UITests.*.MSTest.csproj"), (file) =>
+{
+ Information("\nRunning UI Interaction Tests");
+
+ var testSettings = new DotNetCoreTestSettings
+ {
+ Configuration = "Release",
+ NoBuild = true,
+ Logger = "trx;LogFilePrefix=VsTestResults",
+ Verbosity = DotNetCoreVerbosity.Normal
+ };
+ DotNetCoreTest(file.FullPath, testSettings);
+});
+
//////////////////////////////////////////////////////////////////////
// TASK TARGETS
diff --git a/nuget.config b/nuget.config
index 0718edaf0b1..b4b25a69292 100644
--- a/nuget.config
+++ b/nuget.config
@@ -3,5 +3,6 @@
-
+
+
\ No newline at end of file