diff --git a/SmokeTests/App.xaml b/SmokeTests/App.xaml
new file mode 100644
index 00000000000..7270ce6e109
--- /dev/null
+++ b/SmokeTests/App.xaml
@@ -0,0 +1,7 @@
+
+
+
diff --git a/SmokeTests/App.xaml.cs b/SmokeTests/App.xaml.cs
new file mode 100644
index 00000000000..2b5b157eca0
--- /dev/null
+++ b/SmokeTests/App.xaml.cs
@@ -0,0 +1,106 @@
+// 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.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices.WindowsRuntime;
+using Windows.ApplicationModel;
+using Windows.ApplicationModel.Activation;
+using Windows.Foundation;
+using Windows.Foundation.Collections;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
+using Windows.UI.Xaml.Controls.Primitives;
+using Windows.UI.Xaml.Data;
+using Windows.UI.Xaml.Input;
+using Windows.UI.Xaml.Media;
+using Windows.UI.Xaml.Navigation;
+
+namespace SmokeTest
+{
+ ///
+ /// Provides application-specific behavior to supplement the default Application class.
+ ///
+ public sealed partial class App : Application
+ {
+ ///
+ /// 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().
+ ///
+ 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/SmokeTests/Assets/LockScreenLogo.scale-200.png b/SmokeTests/Assets/LockScreenLogo.scale-200.png
new file mode 100644
index 00000000000..735f57adb5d
Binary files /dev/null and b/SmokeTests/Assets/LockScreenLogo.scale-200.png differ
diff --git a/SmokeTests/Assets/SplashScreen.scale-200.png b/SmokeTests/Assets/SplashScreen.scale-200.png
new file mode 100644
index 00000000000..023e7f1feda
Binary files /dev/null and b/SmokeTests/Assets/SplashScreen.scale-200.png differ
diff --git a/SmokeTests/Assets/Square150x150Logo.scale-200.png b/SmokeTests/Assets/Square150x150Logo.scale-200.png
new file mode 100644
index 00000000000..af49fec1a54
Binary files /dev/null and b/SmokeTests/Assets/Square150x150Logo.scale-200.png differ
diff --git a/SmokeTests/Assets/Square44x44Logo.scale-200.png b/SmokeTests/Assets/Square44x44Logo.scale-200.png
new file mode 100644
index 00000000000..ce342a2ec8a
Binary files /dev/null and b/SmokeTests/Assets/Square44x44Logo.scale-200.png differ
diff --git a/SmokeTests/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/SmokeTests/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
new file mode 100644
index 00000000000..f6c02ce97e0
Binary files /dev/null and b/SmokeTests/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ
diff --git a/SmokeTests/Assets/StoreLogo.png b/SmokeTests/Assets/StoreLogo.png
new file mode 100644
index 00000000000..7385b56c0e4
Binary files /dev/null and b/SmokeTests/Assets/StoreLogo.png differ
diff --git a/SmokeTests/Assets/Wide310x150Logo.scale-200.png b/SmokeTests/Assets/Wide310x150Logo.scale-200.png
new file mode 100644
index 00000000000..288995b397f
Binary files /dev/null and b/SmokeTests/Assets/Wide310x150Logo.scale-200.png differ
diff --git a/SmokeTests/MainPage.Microsoft.Toolkit.Uwp.UI.Controls.xaml b/SmokeTests/MainPage.Microsoft.Toolkit.Uwp.UI.Controls.xaml
new file mode 100644
index 00000000000..95ccc6fc35c
--- /dev/null
+++ b/SmokeTests/MainPage.Microsoft.Toolkit.Uwp.UI.Controls.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/SmokeTests/MainPage.Microsoft.Toolkit.Uwp.UI.Controls.xaml.cs b/SmokeTests/MainPage.Microsoft.Toolkit.Uwp.UI.Controls.xaml.cs
new file mode 100644
index 00000000000..65e09322217
--- /dev/null
+++ b/SmokeTests/MainPage.Microsoft.Toolkit.Uwp.UI.Controls.xaml.cs
@@ -0,0 +1,14 @@
+// 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 SmokeTest
+{
+ public sealed partial class MainPage
+ {
+ public MainPage()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/SmokeTests/MainPage.Microsoft.Toolkit.Uwp.UI.xaml b/SmokeTests/MainPage.Microsoft.Toolkit.Uwp.UI.xaml
new file mode 100644
index 00000000000..95ccc6fc35c
--- /dev/null
+++ b/SmokeTests/MainPage.Microsoft.Toolkit.Uwp.UI.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/SmokeTests/MainPage.Microsoft.Toolkit.Uwp.UI.xaml.cs b/SmokeTests/MainPage.Microsoft.Toolkit.Uwp.UI.xaml.cs
new file mode 100644
index 00000000000..65e09322217
--- /dev/null
+++ b/SmokeTests/MainPage.Microsoft.Toolkit.Uwp.UI.xaml.cs
@@ -0,0 +1,14 @@
+// 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 SmokeTest
+{
+ public sealed partial class MainPage
+ {
+ public MainPage()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/SmokeTests/MainPage.Microsoft.Toolkit.xaml b/SmokeTests/MainPage.Microsoft.Toolkit.xaml
new file mode 100644
index 00000000000..95ccc6fc35c
--- /dev/null
+++ b/SmokeTests/MainPage.Microsoft.Toolkit.xaml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
diff --git a/SmokeTests/MainPage.Microsoft.Toolkit.xaml.cs b/SmokeTests/MainPage.Microsoft.Toolkit.xaml.cs
new file mode 100644
index 00000000000..65e09322217
--- /dev/null
+++ b/SmokeTests/MainPage.Microsoft.Toolkit.xaml.cs
@@ -0,0 +1,14 @@
+// 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 SmokeTest
+{
+ public sealed partial class MainPage
+ {
+ public MainPage()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/SmokeTests/Package.appxmanifest b/SmokeTests/Package.appxmanifest
new file mode 100644
index 00000000000..2877222cf3e
--- /dev/null
+++ b/SmokeTests/Package.appxmanifest
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+ SmokeTest
+ alzollin
+ Assets\StoreLogo.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SmokeTests/Properties/AssemblyInfo.cs b/SmokeTests/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000000..8fb601dfd8a
--- /dev/null
+++ b/SmokeTests/Properties/AssemblyInfo.cs
@@ -0,0 +1,31 @@
+// 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.CompilerServices;
+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("SmokeTest")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("SmokeTest")]
+[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/SmokeTests/Properties/Default.rd.xml b/SmokeTests/Properties/Default.rd.xml
new file mode 100644
index 00000000000..af00722cdf9
--- /dev/null
+++ b/SmokeTests/Properties/Default.rd.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SmokeTests/SmokeTest.csproj b/SmokeTests/SmokeTest.csproj
new file mode 100644
index 00000000000..6bcdfa5b2b8
--- /dev/null
+++ b/SmokeTests/SmokeTest.csproj
@@ -0,0 +1,105 @@
+
+
+
+
+ Debug
+ x86
+ {A6E4CB52-1025-4BBA-9C65-BB871D1FB53F}
+ AppContainerExe
+ Properties
+ SmokeTest
+ SmokeTest.$(CurrentProject)
+ en-US
+ UAP
+ 10.0.19041.0
+ 10.0.17134.0
+ 14
+ 512
+ {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ true
+ false
+ $(Platform)
+ Always
+ StoreUpload
+ $(Platform)
+ ;2008;SA0001
+
+
+ SmokeTest_$(CurrentProject)
+ obj\$(CurrentProject)\
+ bin\$(CurrentProject)\$(Platform)\$(Configuration)\
+
+
+ true
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
+ full
+ false
+ prompt
+ true
+
+
+ TRACE;NETFX_CORE;WINDOWS_UWP
+ true
+ pdbonly
+ false
+ prompt
+ true
+ true
+
+
+ PackageReference
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ App.xaml
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+
+
+ MainPage.$(CurrentProject).xaml
+
+
+ MSBuild:Compile
+ Designer
+
+
+
+
+ 6.2.10
+
+
+
+
+
+
+ 14.0
+
+
+
+
\ No newline at end of file
diff --git a/SmokeTests/SmokeTests.proj b/SmokeTests/SmokeTests.proj
new file mode 100644
index 00000000000..1fc3a349d9d
--- /dev/null
+++ b/SmokeTests/SmokeTests.proj
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+ x86
+ Release
+ Microsoft.Toolkit;Microsoft.Toolkit.Uwp.UI.Controls;Microsoft.Toolkit.Uwp.UI
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ x86;x64;ARM;ARM64
+ bin
+ %(ToolkitPackage.Identity)
+
+
+
+ %(BuildPlatform.Identity)
+
+
+
+
+
+ %(BuildConfiguration.Identity)
+
+
+
+ Platform=%(ProjectsPerConfig.Platform);Configuration=%(ProjectsPerConfig.Configuration)
+
+
+
+
+
+
+ ../bin/nupkg/*.nupkg
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SmokeTests/nuget.config b/SmokeTests/nuget.config
new file mode 100644
index 00000000000..45d8eaca234
--- /dev/null
+++ b/SmokeTests/nuget.config
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 76470fb759b..c6c3dcd7b7e 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -47,6 +47,9 @@ steps:
- powershell: .\build\build.ps1 -target=Package
displayName: Package
+- powershell: .\build\build.ps1 -target=SmokeTest
+ displayName: SmokeTest
+
- task: PublishTestResults@2
inputs:
testResultsFormat: 'VSTest'
@@ -70,3 +73,16 @@ steps:
pathToPublish: .\bin\nupkg
artifactType: container
artifactName: Packages
+
+- task: CopyFiles@2
+ inputs:
+ sourceFolder: .\SmokeTests\AppPackages
+ contents: '**\*.appxbundle'
+ targetFolder: $(build.artifactstagingdirectory)\SmokeTestBundles
+
+- task: PublishBuildArtifacts@1
+ displayName: Publish Smoke Test Artifacts
+ inputs:
+ pathToPublish:$(build.artifactstagingdirectory)\SmokeTestBundles
+ artifactType: container
+ artifactName: SmokeTestBundles
diff --git a/build/build.cake b/build/build.cake
index 51d5ed13ee7..f7a9ac18451 100644
--- a/build/build.cake
+++ b/build/build.cake
@@ -303,6 +303,12 @@ Task("Test")
DotNetCoreTest(file.FullPath, testSettings);
}).DeferOnError();
+Task("SmokeTest")
+ .Description("Runs all Smoke Tests")
+ .Does(() =>
+{
+ MSBuild(baseDir + "/SmokeTests/SmokeTests.proj");
+}).DeferOnError();
//////////////////////////////////////////////////////////////////////