SEBWIN-312: Implemented auto-start mechanism for applications.
This commit is contained in:
parent
5ccbd2aae4
commit
d7a4dc8782
6 changed files with 50 additions and 5 deletions
|
@ -15,6 +15,11 @@ namespace SafeExamBrowser.Applications.Contracts
|
|||
/// </summary>
|
||||
public class ApplicationInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Indicates whether the application should be automatically started.
|
||||
/// </summary>
|
||||
public bool AutoStart { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The name of the application.
|
||||
/// </summary>
|
||||
|
|
|
@ -64,7 +64,7 @@ namespace SafeExamBrowser.Applications
|
|||
private IApplication BuildApplication(string executablePath, WhitelistApplication settings)
|
||||
{
|
||||
var icon = new IconResource { Type = IconResourceType.Embedded, Uri = new Uri(executablePath) };
|
||||
var info = new ApplicationInfo { Icon = icon, Name = settings.DisplayName, Tooltip = settings.Description ?? settings.DisplayName };
|
||||
var info = new ApplicationInfo { AutoStart = settings.AutoStart, Icon = icon, Name = settings.DisplayName, Tooltip = settings.Description ?? settings.DisplayName };
|
||||
var application = new ExternalApplication(executablePath, info, logger.CloneFor(settings.DisplayName), processFactory);
|
||||
|
||||
return application;
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
using System;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Moq;
|
||||
using SafeExamBrowser.Applications.Contracts;
|
||||
using SafeExamBrowser.Browser.Contracts;
|
||||
using SafeExamBrowser.Browser.Contracts.Events;
|
||||
using SafeExamBrowser.Communication.Contracts.Data;
|
||||
|
@ -624,6 +625,28 @@ namespace SafeExamBrowser.Client.UnitTests
|
|||
taskbar.Verify(t => t.Show(), Times.Never);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Startup_MustAutoStartApplications()
|
||||
{
|
||||
var application1 = new Mock<IApplication>();
|
||||
var application2 = new Mock<IApplication>();
|
||||
var application3 = new Mock<IApplication>();
|
||||
|
||||
application1.SetupGet(a => a.Info).Returns(new ApplicationInfo { AutoStart = true });
|
||||
application2.SetupGet(a => a.Info).Returns(new ApplicationInfo { AutoStart = false });
|
||||
application3.SetupGet(a => a.Info).Returns(new ApplicationInfo { AutoStart = true });
|
||||
context.Applications.Add(application1.Object);
|
||||
context.Applications.Add(application2.Object);
|
||||
context.Applications.Add(application3.Object);
|
||||
operationSequence.Setup(o => o.TryPerform()).Returns(OperationResult.Success);
|
||||
|
||||
sut.TryStart();
|
||||
|
||||
application1.Verify(a => a.Start(), Times.Once);
|
||||
application2.Verify(a => a.Start(), Times.Never);
|
||||
application3.Verify(a => a.Start(), Times.Once);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TerminationActivator_MustCorrectlyInitiateShutdown()
|
||||
{
|
||||
|
|
|
@ -11,6 +11,7 @@ using Moq;
|
|||
using SafeExamBrowser.Browser.Contracts;
|
||||
using SafeExamBrowser.Client.Operations;
|
||||
using SafeExamBrowser.Logging.Contracts;
|
||||
using SafeExamBrowser.Settings;
|
||||
using SafeExamBrowser.UserInterface.Contracts;
|
||||
using SafeExamBrowser.UserInterface.Contracts.Shell;
|
||||
|
||||
|
@ -23,6 +24,7 @@ namespace SafeExamBrowser.Client.UnitTests.Operations
|
|||
private Mock<IBrowserApplication> browser;
|
||||
private ClientContext context;
|
||||
private Mock<ILogger> logger;
|
||||
private AppSettings settings;
|
||||
private Mock<ITaskbar> taskbar;
|
||||
private Mock<ITaskView> taskView;
|
||||
private Mock<IUserInterfaceFactory> uiFactory;
|
||||
|
@ -36,11 +38,13 @@ namespace SafeExamBrowser.Client.UnitTests.Operations
|
|||
browser = new Mock<IBrowserApplication>();
|
||||
context = new ClientContext();
|
||||
logger = new Mock<ILogger>();
|
||||
settings = new AppSettings();
|
||||
taskbar = new Mock<ITaskbar>();
|
||||
taskView = new Mock<ITaskView>();
|
||||
uiFactory = new Mock<IUserInterfaceFactory>();
|
||||
|
||||
context.Browser = browser.Object;
|
||||
context.Settings = settings;
|
||||
|
||||
sut = new BrowserOperation(actionCenter.Object, context, logger.Object, taskbar.Object, taskView.Object, uiFactory.Object);
|
||||
}
|
||||
|
@ -48,6 +52,9 @@ namespace SafeExamBrowser.Client.UnitTests.Operations
|
|||
[TestMethod]
|
||||
public void MustPeformCorrectly()
|
||||
{
|
||||
settings.ActionCenter.EnableActionCenter = true;
|
||||
settings.Taskbar.EnableTaskbar = true;
|
||||
|
||||
sut.Perform();
|
||||
|
||||
browser.Verify(c => c.Initialize(), Times.Once);
|
||||
|
@ -66,6 +73,7 @@ namespace SafeExamBrowser.Client.UnitTests.Operations
|
|||
public void TODO()
|
||||
{
|
||||
// TODO: Test initialization of task view!
|
||||
Assert.Fail("TODO");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -172,9 +172,9 @@ namespace SafeExamBrowser.Client.UnitTests.Operations
|
|||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Perform_MustInitializeTaskView()
|
||||
public void TODO()
|
||||
{
|
||||
// Only start activator if ALT+TAB enabled!
|
||||
// TODO: Only start activator if ALT+TAB enabled! -> Perform_MustInitializeTaskView
|
||||
Assert.Fail("TODO");
|
||||
}
|
||||
|
||||
|
|
|
@ -105,7 +105,7 @@ namespace SafeExamBrowser.Client
|
|||
{
|
||||
RegisterEvents();
|
||||
ShowShell();
|
||||
StartBrowser();
|
||||
AutoStartApplications();
|
||||
|
||||
var communication = runtime.InformClientReady();
|
||||
|
||||
|
@ -239,10 +239,19 @@ namespace SafeExamBrowser.Client
|
|||
}
|
||||
}
|
||||
|
||||
private void StartBrowser()
|
||||
private void AutoStartApplications()
|
||||
{
|
||||
logger.Info("Starting browser application...");
|
||||
Browser.Start();
|
||||
|
||||
foreach (var application in context.Applications)
|
||||
{
|
||||
if (application.Info.AutoStart)
|
||||
{
|
||||
logger.Info($"Auto-starting '{application.Info.Name}'...");
|
||||
application.Start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplicationMonitor_ExplorerStarted()
|
||||
|
|
Loading…
Add table
Reference in a new issue