diff --git a/SafeExamBrowser.Applications.Contracts/ApplicationInfo.cs b/SafeExamBrowser.Applications.Contracts/ApplicationInfo.cs
index 58572d10..aa4a32b0 100644
--- a/SafeExamBrowser.Applications.Contracts/ApplicationInfo.cs
+++ b/SafeExamBrowser.Applications.Contracts/ApplicationInfo.cs
@@ -15,6 +15,11 @@ namespace SafeExamBrowser.Applications.Contracts
///
public class ApplicationInfo
{
+ ///
+ /// Indicates whether the application should be automatically started.
+ ///
+ public bool AutoStart { get; set; }
+
///
/// The name of the application.
///
diff --git a/SafeExamBrowser.Applications/ApplicationFactory.cs b/SafeExamBrowser.Applications/ApplicationFactory.cs
index 8e061650..99b6db3c 100644
--- a/SafeExamBrowser.Applications/ApplicationFactory.cs
+++ b/SafeExamBrowser.Applications/ApplicationFactory.cs
@@ -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;
diff --git a/SafeExamBrowser.Client.UnitTests/ClientControllerTests.cs b/SafeExamBrowser.Client.UnitTests/ClientControllerTests.cs
index cbbe9da5..bdb48d94 100644
--- a/SafeExamBrowser.Client.UnitTests/ClientControllerTests.cs
+++ b/SafeExamBrowser.Client.UnitTests/ClientControllerTests.cs
@@ -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();
+ var application2 = new Mock();
+ var application3 = new Mock();
+
+ 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()
{
diff --git a/SafeExamBrowser.Client.UnitTests/Operations/BrowserOperationTests.cs b/SafeExamBrowser.Client.UnitTests/Operations/BrowserOperationTests.cs
index 3eb4668c..a24d6384 100644
--- a/SafeExamBrowser.Client.UnitTests/Operations/BrowserOperationTests.cs
+++ b/SafeExamBrowser.Client.UnitTests/Operations/BrowserOperationTests.cs
@@ -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 browser;
private ClientContext context;
private Mock logger;
+ private AppSettings settings;
private Mock taskbar;
private Mock taskView;
private Mock uiFactory;
@@ -36,11 +38,13 @@ namespace SafeExamBrowser.Client.UnitTests.Operations
browser = new Mock();
context = new ClientContext();
logger = new Mock();
+ settings = new AppSettings();
taskbar = new Mock();
taskView = new Mock();
uiFactory = new Mock();
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");
}
}
}
diff --git a/SafeExamBrowser.Client.UnitTests/Operations/ShellOperationTests.cs b/SafeExamBrowser.Client.UnitTests/Operations/ShellOperationTests.cs
index a24e02d9..f36f4dec 100644
--- a/SafeExamBrowser.Client.UnitTests/Operations/ShellOperationTests.cs
+++ b/SafeExamBrowser.Client.UnitTests/Operations/ShellOperationTests.cs
@@ -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");
}
diff --git a/SafeExamBrowser.Client/ClientController.cs b/SafeExamBrowser.Client/ClientController.cs
index cc41bec7..f26ecd93 100644
--- a/SafeExamBrowser.Client/ClientController.cs
+++ b/SafeExamBrowser.Client/ClientController.cs
@@ -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()