diff --git a/src/Samples.UITest/InformationManager.Test/InformationManager.Test.csproj b/src/Samples.UITest/InformationManager.Test/InformationManager.Test.csproj new file mode 100644 index 00000000..37552950 --- /dev/null +++ b/src/Samples.UITest/InformationManager.Test/InformationManager.Test.csproj @@ -0,0 +1,19 @@ + + + net8.0-windows + UITest.InformationManager + + enable + enable + + + + + + + + + + + + diff --git a/src/Samples.UITest/InformationManager.Test/Tests/GeneralTest.cs b/src/Samples.UITest/InformationManager.Test/Tests/GeneralTest.cs new file mode 100644 index 00000000..36e5cc51 --- /dev/null +++ b/src/Samples.UITest/InformationManager.Test/Tests/GeneralTest.cs @@ -0,0 +1,27 @@ +using FlaUI.Core.AutomationElements; +using FlaUI.Core.Capturing; +using UITest.SystemViews; +using Xunit; +using Xunit.Abstractions; + +namespace UITest.InformationManager.Tests; + +public class GeneralTest(ITestOutputHelper log) : UITest(log) +{ + [Fact] + public void AboutTest() => Run(() => + { + Launch(); + var window = GetShellWindow(); + window.AboutButton.Click(); + + var messageBox = window.FirstModalWindow().As(); + Assert.Equal("Waf Information Manager", messageBox.Title); + Log.WriteLine(messageBox.Message); + Assert.StartsWith("Waf Information Manager ", messageBox.Message); + Capture.Screen().ToFile(GetScreenshotFile("About")); + messageBox.Buttons[0].Click(); + + window.ExitButton.Click(); + }); +} diff --git a/src/Samples.UITest/InformationManager.Test/UITest.cs b/src/Samples.UITest/InformationManager.Test/UITest.cs new file mode 100644 index 00000000..ce3d5b4e --- /dev/null +++ b/src/Samples.UITest/InformationManager.Test/UITest.cs @@ -0,0 +1,41 @@ +using FlaUI.Core; +using FlaUI.Core.AutomationElements; +using System.Diagnostics; +using UITest.InformationManager.Views; +using Xunit; +using Xunit.Abstractions; + +[assembly: CollectionBehavior(DisableTestParallelization = true)] + +namespace UITest.InformationManager; + +public abstract class UITest(ITestOutputHelper log) : UITestBase(log, "InformationManager.exe", + Environment.GetEnvironmentVariable("UITestExePath") ?? "out/InformationManager/Release/net8.0-windows/", + Environment.GetEnvironmentVariable("UITestOutputPath") ?? "out/Samples.UITest/InformationManager/") +{ + public Application Launch(LaunchArguments? arguments = null, bool resetSettings = true) + { + Log.WriteLine(""); + if (resetSettings) + { + var productName = FileVersionInfo.GetVersionInfo(Executable).ProductName ?? throw new InvalidOperationException("Could not read the ProductName from the exe."); + var settingsFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), productName, "Settings", "Settings.xml"); + if (File.Exists(settingsFile)) File.Delete(settingsFile); + Log.WriteLine($"Delete settings: {settingsFile}"); + } + var args = (arguments ?? new LaunchArguments()).ToArguments(); + Log.WriteLine($"Launch: {args}"); + return App = Application.Launch(Executable, args); + } + + public ShellWindow GetShellWindow() => App!.GetMainWindow(Automation).As(); +} + +public record LaunchArguments(string? UICulture = "en-US", string? Culture = "en-US", string? AdditionalArguments = null) : LaunchArgumentsBase +{ + public override string ToArguments() + { + string?[] args = [CreateArg(UICulture), CreateArg(Culture), AdditionalArguments]; + return string.Join(" ", args.Where(x => !string.IsNullOrEmpty(x))); + } +} \ No newline at end of file diff --git a/src/Samples.UITest/InformationManager.Test/Views/ShellWindow.cs b/src/Samples.UITest/InformationManager.Test/Views/ShellWindow.cs new file mode 100644 index 00000000..b0c76754 --- /dev/null +++ b/src/Samples.UITest/InformationManager.Test/Views/ShellWindow.cs @@ -0,0 +1,11 @@ +using FlaUI.Core; +using FlaUI.Core.AutomationElements; + +namespace UITest.InformationManager.Views; + +public class ShellWindow(FrameworkAutomationElementBase element) : Window(element) +{ + public Button AboutButton => this.Find("AboutButton").AsButton(); + + public Button ExitButton => this.Find("ExitButton").AsButton(); +} diff --git a/src/Samples.UITest/Samples.UITest.sln b/src/Samples.UITest/Samples.UITest.sln index cb64ab9f..3b467a48 100644 --- a/src/Samples.UITest/Samples.UITest.sln +++ b/src/Samples.UITest/Samples.UITest.sln @@ -5,9 +5,11 @@ VisualStudioVersion = 17.9.34714.143 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Writer.Test", "Writer.Test\Writer.Test.csproj", "{8FBAB64A-51F5-40F8-8B56-4AEE7BE49838}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BookLibrary.Test", "BookLibrary.Test\BookLibrary.Test.csproj", "{A239DB72-F7D9-4DE9-83F9-E0D852FA5F8F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BookLibrary.Test", "BookLibrary.Test\BookLibrary.Test.csproj", "{A239DB72-F7D9-4DE9-83F9-E0D852FA5F8F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UITest.Core", "UITest.Core\UITest.Core.csproj", "{4B2174D9-B723-42AA-90DA-2F556409F19A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UITest.Core", "UITest.Core\UITest.Core.csproj", "{4B2174D9-B723-42AA-90DA-2F556409F19A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InformationManager.Test", "InformationManager.Test\InformationManager.Test.csproj", "{18006BE9-7056-48FB-97CF-F7B25C43358B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -27,6 +29,10 @@ Global {4B2174D9-B723-42AA-90DA-2F556409F19A}.Debug|Any CPU.Build.0 = Debug|Any CPU {4B2174D9-B723-42AA-90DA-2F556409F19A}.Release|Any CPU.ActiveCfg = Release|Any CPU {4B2174D9-B723-42AA-90DA-2F556409F19A}.Release|Any CPU.Build.0 = Release|Any CPU + {18006BE9-7056-48FB-97CF-F7B25C43358B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {18006BE9-7056-48FB-97CF-F7B25C43358B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {18006BE9-7056-48FB-97CF-F7B25C43358B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {18006BE9-7056-48FB-97CF-F7B25C43358B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/System.Waf/Samples/InformationManager/Assembler/App.xaml.cs b/src/System.Waf/Samples/InformationManager/Assembler/App.xaml.cs index ce94488b..0ca28bf0 100644 --- a/src/System.Waf/Samples/InformationManager/Assembler/App.xaml.cs +++ b/src/System.Waf/Samples/InformationManager/Assembler/App.xaml.cs @@ -4,6 +4,7 @@ using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.Globalization; +using System.IO; using System.Waf.Applications; using System.Waf.Applications.Services; using System.Windows; @@ -75,18 +76,20 @@ protected override void OnStartup(StartupEventArgs e) catalog.Catalogs.Add(new AssemblyCatalog(typeof(IMessageService).Assembly)); // WinApplicationFramework // Load module assemblies as well. See App.config file. - foreach (var x in Settings.Default.ModuleAssemblies) catalog.Catalogs.Add(new AssemblyCatalog(x)); + var baseDir = AppContext.BaseDirectory; + foreach (var x in Settings.Default.ModuleAssemblies) + { + catalog.Catalogs.Add(new AssemblyCatalog(Path.Combine(baseDir, x!))); + } container = new(catalog, CompositionOptions.DisableSilentRejection); var batch = new CompositionBatch(); batch.AddExportedValue(container); container.Compose(batch); - // Initialize all presentation services var presentationServices = container.GetExportedValues(); foreach (var x in presentationServices) x.Initialize(); - // Initialize and run all module controllers moduleControllers = container.GetExportedValues(); foreach (var x in moduleControllers) x.Initialize(); foreach (var x in moduleControllers) x.Run(); diff --git a/src/System.Waf/Samples/InformationManager/Infrastructure.Modules.Presentation/Views/ShellWindow.xaml b/src/System.Waf/Samples/InformationManager/Infrastructure.Modules.Presentation/Views/ShellWindow.xaml index 132a73ae..79ae8ece 100644 --- a/src/System.Waf/Samples/InformationManager/Infrastructure.Modules.Presentation/Views/ShellWindow.xaml +++ b/src/System.Waf/Samples/InformationManager/Infrastructure.Modules.Presentation/Views/ShellWindow.xaml @@ -24,8 +24,8 @@ - - + +