Public Access
Desktop: give the host-key, delete and sign-out questions the keyboard on their harmless answer, and let Escape say no
This commit is contained in:
1 parent
372a7cbdc7
commit
6c09bdecb6
11 files changed
+498
-92
No files matched your search
@@ -0,0 +1,69 @@
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Threading;
|
||||
using DodoSSH.Client.App.Views;
|
||||
using DodoSSH.Client.Session;
|
||||
using DodoSSH.Client.Shell.ViewModels;
|
||||
using DodoSSH.Client.Ssh;
|
||||
using DodoSSH.Client.Storage;
|
||||
using DodoSSH.Client.Terminal;
|
||||
using DodoSSH.Client.Transfer;
|
||||
using DodoSSH.Crypto;
|
||||
using NSubstitute;
|
||||
|
||||
namespace DodoSSH.Client.App.Layout.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// The real main window over a real shell, for the tests that are about where the keyboard goes.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// <see cref="LayoutHarnessTests.WhyTheWindowItselfIsNeverShown"/> says this window cannot be shown here: the
|
||||
/// terminal's WebView refuses this thread's apartment when it is attached. It is taken out of the tree before
|
||||
/// the window is shown, which is everything that test is about and nothing these are.
|
||||
/// </remarks>
|
||||
internal static class WholeWindow
|
||||
{
|
||||
internal const string Passphrase = "a sufficiently long passphrase";
|
||||
|
||||
internal static readonly Argon2Profile CheapProfile =
|
||||
Argon2Profile.FromStoredParameters(memoryKibibytes: 8 * 1024, passes: 1, parallelism: 1);
|
||||
|
||||
internal static TerminalWorkspace Workspace() =>
|
||||
new(
|
||||
new InMemoryTerminalAssetProvider(new Dictionary<string, TerminalAsset>(StringComparer.Ordinal)),
|
||||
Substitute.For<ISshConnectionFactory>(),
|
||||
TimeProvider.System);
|
||||
|
||||
internal static MainWindowViewModel Shell(ClientCacheFactory caches, TerminalWorkspace workspace) =>
|
||||
new(
|
||||
new ClientPaths(Path.Combine(Path.GetTempPath(), $"dodossh-focus-{Guid.CreateVersion7():N}")),
|
||||
caches,
|
||||
workspace,
|
||||
new VaultKnownHostStore(),
|
||||
new UnavailableDeviceKeyStore(),
|
||||
static (_, _) => throw new InvalidOperationException("A layout test has no network."),
|
||||
TimeProvider.System,
|
||||
Substitute.For<ISftpSessionFactory>(),
|
||||
CheapProfile);
|
||||
|
||||
internal static void Show(MainWindowViewModel shell, Action<MainWindow> assert)
|
||||
{
|
||||
var window = new MainWindow { DataContext = shell };
|
||||
|
||||
if (window.FindControl<NativeWebView>("Terminal") is { Parent: Panel panel } web)
|
||||
{
|
||||
panel.Children.Remove(web);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
LayoutHarness.Settle(window, LayoutHarness.MinimumWidth, LayoutHarness.MinimumHeight);
|
||||
Dispatcher.UIThread.RunJobs();
|
||||
|
||||
assert(window);
|
||||
}
|
||||
finally
|
||||
{
|
||||
window.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user