From 71c504627554acf6eba0d0a685dfdaca5dd28d2b Mon Sep 17 00:00:00 2001 From: dbuechel Date: Thu, 21 Feb 2019 10:39:36 +0100 Subject: [PATCH] SEBWIN-296: Implemented unit tests for XML serializer. --- .../DataFormats/XmlParserTests.cs | 27 + .../DataFormats/XmlSerializerTests.cs | 265 ++++++ .../DataFormats/XmlTestSettings.xml | 795 ++++++++++++++++++ ...ExamBrowser.Configuration.UnitTests.csproj | 7 +- 4 files changed, 1093 insertions(+), 1 deletion(-) create mode 100644 SafeExamBrowser.Configuration.UnitTests/DataFormats/XmlTestSettings.xml diff --git a/SafeExamBrowser.Configuration.UnitTests/DataFormats/XmlParserTests.cs b/SafeExamBrowser.Configuration.UnitTests/DataFormats/XmlParserTests.cs index fcb73344..c4430ad1 100644 --- a/SafeExamBrowser.Configuration.UnitTests/DataFormats/XmlParserTests.cs +++ b/SafeExamBrowser.Configuration.UnitTests/DataFormats/XmlParserTests.cs @@ -14,6 +14,7 @@ using System.Reflection; using System.Text; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; +using SafeExamBrowser.Configuration.ConfigurationData; using SafeExamBrowser.Configuration.DataFormats; using SafeExamBrowser.Contracts.Configuration; using SafeExamBrowser.Contracts.Configuration.DataFormats; @@ -80,6 +81,24 @@ namespace SafeExamBrowser.Configuration.UnitTests.DataFormats Assert.AreEqual(4, (dictThree["dictThreeKeyTwo"] as List)[3]); } + [TestMethod] + public void MustCorrectlyParseTestSettings() + { + var data = LoadTestSettings(); + var result = sut.TryParse(data); + + Assert.AreEqual(LoadStatus.Success, result.Status); + Assert.AreEqual(FormatType.Xml, result.Format); + Assert.IsNull(result.Encryption); + Assert.IsNotNull(result.RawData); + + Assert.AreEqual(true, result.RawData[Keys.Browser.AllowConfigurationDownloads]); + Assert.AreEqual(0, result.RawData[Keys.ConfigurationFile.ConfigurationPurpose]); + Assert.AreEqual("https://safeexambrowser.org/start", result.RawData[Keys.General.StartUrl]); + Assert.AreEqual(true, result.RawData[Keys.Input.Keyboard.EnableF5]); + Assert.IsInstanceOfType(result.RawData[Keys.Network.Certificates.EmbeddedCertificates], typeof(List)); + } + [TestMethod] public void MustCheckForRootDictionary() { @@ -172,5 +191,13 @@ namespace SafeExamBrowser.Configuration.UnitTests.DataFormats return data; } + + private Stream LoadTestSettings() + { + var path = $"{nameof(SafeExamBrowser)}.{nameof(Configuration)}.{nameof(UnitTests)}.{nameof(DataFormats)}.XmlTestSettings.xml"; + var data = Assembly.GetAssembly(GetType()).GetManifestResourceStream(path); + + return data; + } } } diff --git a/SafeExamBrowser.Configuration.UnitTests/DataFormats/XmlSerializerTests.cs b/SafeExamBrowser.Configuration.UnitTests/DataFormats/XmlSerializerTests.cs index bcd77d5a..21a795d0 100644 --- a/SafeExamBrowser.Configuration.UnitTests/DataFormats/XmlSerializerTests.cs +++ b/SafeExamBrowser.Configuration.UnitTests/DataFormats/XmlSerializerTests.cs @@ -6,17 +6,282 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml.Linq; using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; +using SafeExamBrowser.Configuration.DataFormats; +using SafeExamBrowser.Contracts.Configuration; +using SafeExamBrowser.Contracts.Configuration.DataFormats; +using SafeExamBrowser.Contracts.Logging; namespace SafeExamBrowser.Configuration.UnitTests.DataFormats { [TestClass] public class XmlSerializerTests { + private Mock logger; + private XmlSerializer sut; + [TestInitialize] public void Initialize() { + logger = new Mock(); + sut = new XmlSerializer(logger.Object); + } + [TestMethod] + public void MustOnlySupportXmlFormat() + { + var values = Enum.GetValues(typeof(FormatType)); + + foreach (var value in values) + { + if (value is FormatType format && format != FormatType.Xml) + { + Assert.IsFalse(sut.CanSerialize(format)); + } + } + + Assert.IsTrue(sut.CanSerialize(FormatType.Xml)); + } + + [TestMethod] + public void MustCorrectlySerializeEmptyDictionary() + { + var result = sut.TrySerialize(new Dictionary()); + + Assert.AreEqual(SaveStatus.Success, result.Status); + Assert.IsNotNull(result.Data); + Assert.AreNotEqual(0, result.Data.Length); + + result.Data.Seek(0, SeekOrigin.Begin); + + var xml = XDocument.Load(result.Data); + + Assert.AreEqual(XmlElement.Root, xml.Root.Name); + Assert.AreEqual(1, xml.Root.Nodes().Count()); + Assert.AreEqual(XmlElement.Dictionary, (xml.Root.Nodes().First() as XElement).Name); + Assert.IsTrue((xml.Root.Nodes().First() as XElement).IsEmpty); + } + + [TestMethod] + public void MustCorrectlySerializeDictionary() + { + var data = new Dictionary { { "abc", 1 }, { "def", 2 }, { "ghi", 3 } }; + var result = sut.TrySerialize(data); + + Assert.AreEqual(SaveStatus.Success, result.Status); + + result.Data.Seek(0, SeekOrigin.Begin); + + var xml = XDocument.Load(result.Data); + + Assert.AreEqual(XmlElement.Root, xml.Root.Name); + Assert.AreEqual(1, xml.Root.Nodes().Count()); + + var dictionary = xml.Root.Nodes().First() as XElement; + + Assert.AreEqual(XmlElement.Key, (dictionary.Nodes().ElementAt(0) as XElement).Name); + Assert.AreEqual("abc", (dictionary.Nodes().ElementAt(0) as XElement).Value); + Assert.AreEqual(XmlElement.Integer, (dictionary.Nodes().ElementAt(1) as XElement).Name); + Assert.AreEqual(1, Convert.ToInt32((dictionary.Nodes().ElementAt(1) as XElement).Value)); + Assert.AreEqual(XmlElement.Key, (dictionary.Nodes().ElementAt(2) as XElement).Name); + Assert.AreEqual("def", (dictionary.Nodes().ElementAt(2) as XElement).Value); + Assert.AreEqual(XmlElement.Integer, (dictionary.Nodes().ElementAt(3) as XElement).Name); + Assert.AreEqual(2, Convert.ToInt32((dictionary.Nodes().ElementAt(3) as XElement).Value)); + Assert.AreEqual(XmlElement.Key, (dictionary.Nodes().ElementAt(4) as XElement).Name); + Assert.AreEqual("ghi", (dictionary.Nodes().ElementAt(4) as XElement).Value); + Assert.AreEqual(XmlElement.Integer, (dictionary.Nodes().ElementAt(5) as XElement).Name); + Assert.AreEqual(3, Convert.ToInt32((dictionary.Nodes().ElementAt(5) as XElement).Value)); + } + + [TestMethod] + public void MustCorrectlySerializeArray() + { + var data = new Dictionary { { "test", new List { 12.3, 23.4, 34.5, 45.6 } } }; + var result = sut.TrySerialize(data); + + Assert.AreEqual(SaveStatus.Success, result.Status); + + result.Data.Seek(0, SeekOrigin.Begin); + + var xml = XDocument.Load(result.Data); + + Assert.AreEqual(XmlElement.Root, xml.Root.Name); + Assert.AreEqual(1, xml.Root.Nodes().Count()); + + var dictionary = xml.Root.Nodes().First() as XElement; + var array = dictionary.Nodes().ElementAt(1) as XElement; + var values = array.Nodes().Cast(); + + Assert.AreEqual(XmlElement.Array, array.Name); + Assert.AreEqual(4, values.Count()); + Assert.AreEqual(XmlElement.Real, values.ElementAt(0).Name); + Assert.AreEqual(12.3, Convert.ToDouble(values.ElementAt(0).Value)); + Assert.AreEqual(XmlElement.Real, values.ElementAt(1).Name); + Assert.AreEqual(23.4, Convert.ToDouble(values.ElementAt(1).Value)); + Assert.AreEqual(XmlElement.Real, values.ElementAt(2).Name); + Assert.AreEqual(34.5, Convert.ToDouble(values.ElementAt(2).Value)); + Assert.AreEqual(XmlElement.Real, values.ElementAt(3).Name); + Assert.AreEqual(45.6, Convert.ToDouble(values.ElementAt(3).Value)); + } + + [TestMethod] + public void MustCorrectlySerializeNestedCollections() + { + var data = new Dictionary + { + { "ArrayOfDictionaries", + new List + { + new Dictionary + { + { "Double", 123.5 }, + { "Text", "Hello World!" } + }, + new Dictionary + { + { "InnerArray", new List { 6, 7, 8 } } + } + } + }, + { "SomeDictionary", new Dictionary { { "blubb", 123 } } }, + { "SomeArray", new List { 1, 2, 3, 4 } } + }; + var result = sut.TrySerialize(data); + + Assert.AreEqual(SaveStatus.Success, result.Status); + + result.Data.Seek(0, SeekOrigin.Begin); + + var xml = XDocument.Load(result.Data); + + Assert.AreEqual(XmlElement.Root, xml.Root.Name); + Assert.AreEqual(1, xml.Root.Nodes().Count()); + + var dictionary = xml.Root.Nodes().First() as XElement; + var arrayOfDictionaries = dictionary.Nodes().ElementAt(1) as XElement; + var innerDictionaryOne = arrayOfDictionaries.Nodes().ElementAt(0) as XElement; + var innerDictionaryTwo = arrayOfDictionaries.Nodes().ElementAt(1) as XElement; + var innerDictionaryTwoArray = innerDictionaryTwo.Nodes().ElementAt(1) as XElement; + var someArray = dictionary.Nodes().ElementAt(3) as XElement; + var someDictionary = dictionary.Nodes().ElementAt(5) as XElement; + + Assert.AreEqual(6, dictionary.Nodes().Count()); + Assert.AreEqual(2, arrayOfDictionaries.Nodes().Count()); + Assert.AreEqual(4, someArray.Nodes().Count()); + Assert.AreEqual(2, someDictionary.Nodes().Count()); + + Assert.AreEqual(XmlElement.Array, arrayOfDictionaries.Name); + Assert.AreEqual(XmlElement.Array, someArray.Name); + Assert.AreEqual(XmlElement.Dictionary, someDictionary.Name); + + Assert.AreEqual(123.5, Convert.ToDouble((innerDictionaryOne.Nodes().ElementAt(1) as XElement).Value)); + Assert.AreEqual("Hello World!", (innerDictionaryOne.Nodes().ElementAt(3) as XElement).Value); + Assert.AreEqual(6, Convert.ToInt32((innerDictionaryTwoArray.Nodes().ElementAt(0) as XElement).Value)); + Assert.AreEqual(7, Convert.ToInt32((innerDictionaryTwoArray.Nodes().ElementAt(1) as XElement).Value)); + Assert.AreEqual(8, Convert.ToInt32((innerDictionaryTwoArray.Nodes().ElementAt(2) as XElement).Value)); + + Assert.AreEqual(1, Convert.ToInt32((someArray.Nodes().ElementAt(0) as XElement).Value)); + Assert.AreEqual(2, Convert.ToInt32((someArray.Nodes().ElementAt(1) as XElement).Value)); + Assert.AreEqual(3, Convert.ToInt32((someArray.Nodes().ElementAt(2) as XElement).Value)); + Assert.AreEqual(4, Convert.ToInt32((someArray.Nodes().ElementAt(3) as XElement).Value)); + + Assert.AreEqual(123, Convert.ToInt32((someDictionary.Nodes().ElementAt(1) as XElement).Value)); + } + + [TestMethod] + public void MustCorectlySerializeSimpleTypes() + { + var data = new Dictionary + { + { "SomeData", Convert.FromBase64String("/5vlF76sb+5vgkhjiNTOn7l1SN3Ho2UAMJD3TtLo49M=") }, + { "SomeDate", new DateTime(2019, 02, 20, 14, 30, 00, 123, DateTimeKind.Utc) }, + { "SomeBoolean", true }, + { "AnotherBoolean", false }, + { "SomeInteger", 4567 }, + { "SomeDouble", 4567.8912 }, + { "SomeText", "Here goes some text" } + }; + var result = sut.TrySerialize(data); + + Assert.AreEqual(SaveStatus.Success, result.Status); + + result.Data.Seek(0, SeekOrigin.Begin); + + var xml = XDocument.Load(result.Data); + + Assert.AreEqual(XmlElement.Root, xml.Root.Name); + Assert.AreEqual(1, xml.Root.Nodes().Count()); + + var dictionary = xml.Root.Nodes().First() as XElement; + + Assert.AreEqual(XmlElement.Key, (dictionary.Nodes().ElementAt(0) as XElement).Name); + Assert.AreEqual("AnotherBoolean", (dictionary.Nodes().ElementAt(0) as XElement).Value); + Assert.AreEqual(false, Convert.ToBoolean((dictionary.Nodes().ElementAt(1) as XElement).Name.LocalName)); + + Assert.AreEqual(XmlElement.Key, (dictionary.Nodes().ElementAt(2) as XElement).Name); + Assert.AreEqual("SomeBoolean", (dictionary.Nodes().ElementAt(2) as XElement).Value); + Assert.AreEqual(true, Convert.ToBoolean((dictionary.Nodes().ElementAt(3) as XElement).Name.LocalName)); + + Assert.AreEqual(XmlElement.Key, (dictionary.Nodes().ElementAt(4) as XElement).Name); + Assert.AreEqual("SomeData", (dictionary.Nodes().ElementAt(4) as XElement).Value); + Assert.AreEqual(XmlElement.Data, (dictionary.Nodes().ElementAt(5) as XElement).Name); + Assert.AreEqual("/5vlF76sb+5vgkhjiNTOn7l1SN3Ho2UAMJD3TtLo49M=", (dictionary.Nodes().ElementAt(5) as XElement).Value); + + Assert.AreEqual(XmlElement.Key, (dictionary.Nodes().ElementAt(6) as XElement).Name); + Assert.AreEqual("SomeDate", (dictionary.Nodes().ElementAt(6) as XElement).Value); + Assert.AreEqual(XmlElement.Date, (dictionary.Nodes().ElementAt(7) as XElement).Name); + Assert.AreEqual("2019-02-20T14:30:00.123Z", (dictionary.Nodes().ElementAt(7) as XElement).Value); + + Assert.AreEqual(XmlElement.Key, (dictionary.Nodes().ElementAt(8) as XElement).Name); + Assert.AreEqual("SomeDouble", (dictionary.Nodes().ElementAt(8) as XElement).Value); + Assert.AreEqual(XmlElement.Real, (dictionary.Nodes().ElementAt(9) as XElement).Name); + Assert.AreEqual(4567.8912, Convert.ToDouble((dictionary.Nodes().ElementAt(9) as XElement).Value)); + + Assert.AreEqual(XmlElement.Key, (dictionary.Nodes().ElementAt(10) as XElement).Name); + Assert.AreEqual("SomeInteger", (dictionary.Nodes().ElementAt(10) as XElement).Value); + Assert.AreEqual(XmlElement.Integer, (dictionary.Nodes().ElementAt(11) as XElement).Name); + Assert.AreEqual(4567, Convert.ToInt32((dictionary.Nodes().ElementAt(11) as XElement).Value)); + + Assert.AreEqual(XmlElement.Key, (dictionary.Nodes().ElementAt(12) as XElement).Name); + Assert.AreEqual("SomeText", (dictionary.Nodes().ElementAt(12) as XElement).Value); + Assert.AreEqual(XmlElement.String, (dictionary.Nodes().ElementAt(13) as XElement).Name); + Assert.AreEqual("Here goes some text", (dictionary.Nodes().ElementAt(13) as XElement).Value); + } + + [TestMethod] + public void MustSerializeNullAsString() + { + var data = new Dictionary { { "test", null } }; + var result = sut.TrySerialize(data); + + Assert.AreEqual(SaveStatus.Success, result.Status); + + result.Data.Seek(0, SeekOrigin.Begin); + + var xml = XDocument.Load(result.Data); + + Assert.AreEqual(XmlElement.Root, xml.Root.Name); + Assert.AreEqual(1, xml.Root.Nodes().Count()); + + var dictionary = xml.Root.Nodes().First() as XElement; + + Assert.IsTrue((dictionary.Nodes().ElementAt(1) as XElement).IsEmpty); + Assert.AreEqual(XmlElement.String, (dictionary.Nodes().ElementAt(1) as XElement).Name); + } + + [TestMethod] + public void MustFailForUnknownSimpleType() + { + var data = new Dictionary { { "test", new Tuple(123) } }; + var result = sut.TrySerialize(data); + + Assert.AreEqual(SaveStatus.InvalidData, result.Status); } } } diff --git a/SafeExamBrowser.Configuration.UnitTests/DataFormats/XmlTestSettings.xml b/SafeExamBrowser.Configuration.UnitTests/DataFormats/XmlTestSettings.xml new file mode 100644 index 00000000..f1c73284 --- /dev/null +++ b/SafeExamBrowser.Configuration.UnitTests/DataFormats/XmlTestSettings.xml @@ -0,0 +1,795 @@ + + + + + originatorVersion + SEB_Win_2.1.1 + startURL + https://safeexambrowser.org/start + startResource + + sebServerURL + + hashedAdminPassword + + allowQuit + + ignoreExitKeys + + hashedQuitPassword + + exitKey1 + 2 + exitKey2 + 10 + exitKey3 + 5 + sebMode + 0 + browserMessagingSocket + ws://localhost:8706 + browserMessagingPingTime + 120000 + sebConfigPurpose + 0 + allowPreferencesWindow + + useAsymmetricOnlyEncryption + + browserViewMode + 0 + mainBrowserWindowWidth + 100% + mainBrowserWindowHeight + 100% + mainBrowserWindowPositioning + 1 + enableBrowserWindowToolbar + + hideBrowserWindowToolbar + + showMenuBar + + showTaskBar + + taskBarHeight + 40 + touchOptimized + + enableZoomText + + enableZoomPage + + zoomMode + 0 + allowSpellCheck + + allowDictionaryLookup + + allowSpellCheckDictionary + + additionalDictionaries + + showReloadButton + + showTime + + showInputLanguage + + enableTouchExit + + oskBehavior + 2 + audioControlEnabled + + audioMute + + audioVolumeLevel + 25 + audioSetVolumeLevel + + browserScreenKeyboard + + newBrowserWindowByLinkPolicy + 2 + newBrowserWindowByScriptPolicy + 2 + newBrowserWindowByLinkBlockForeign + + newBrowserWindowByScriptBlockForeign + + newBrowserWindowByLinkWidth + 1000 + newBrowserWindowByLinkHeight + 100% + newBrowserWindowByLinkPositioning + 2 + enablePlugIns + + enableJava + + enableJavaScript + + blockPopUpWindows + + allowVideoCapture + + allowAudioCapture + + allowBrowsingBackForward + + newBrowserWindowNavigation + + removeBrowserProfile + + removeLocalStorage + + enableSebBrowser + + browserWindowAllowReload + + newBrowserWindowAllowReload + + showReloadWarning + + newBrowserWindowShowReloadWarning + + browserUserAgentWinDesktopMode + 0 + browserUserAgentWinDesktopModeCustom + + browserUserAgentWinTouchMode + 0 + browserUserAgentWinTouchModeIPad + Mozilla/5.0 (iPad; CPU OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.3 Mobile/15E216 Safari/605.1.15 + browserUserAgentWinTouchModeCustom + + browserUserAgent + + browserUserAgentMac + 0 + browserUserAgentMacCustom + + browserWindowTitleSuffix + + allowDownUploads + + downloadDirectoryOSX + ~/Downloads + downloadDirectoryWin + + openDownloads + + chooseFileToUploadPolicy + 0 + downloadPDFFiles + + allowPDFPlugIn + + downloadAndOpenSebConfig + + examKeySalt + /5vlF76sb+5vgkhjiNTOn7l1SN3Ho2UAMJD3TtLo49M= + browserExamKey + + browserURLSalt + + sendBrowserExamKey + + quitURL + + quitURLConfirm + + restartExamURL + + restartExamUseStartURL + + restartExamText + + restartExamPasswordProtected + + additionalResources + + monitorProcesses + + allowSwitchToApplications + + allowFlashFullscreen + + permittedProcesses + + + active + + autostart + + iconInTaskbar + + runInBackground + + allowUserToChooseApp + + strongKill + + os + 1 + title + SEB + description + + executable + firefox.exe + originalName + firefox.exe + path + ../xulrunner/ + identifier + Firefox + windowHandlingProcess + + arguments + + + + prohibitedProcesses + + + active + + currentUser + + strongKill + + os + 1 + executable + join.me + originalName + join.me + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + RPCSuite + originalName + RPCSuite + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + RPCService + originalName + RPCService + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + RemotePCDesktop + originalName + RemotePCDesktop + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + beamyourscreen-host + originalName + beamyourscreen-host + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + AeroAdmin + originalName + AeroAdmin + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + Mikogo-host + originalName + Mikogo-host + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + chromoting + originalName + chromoting + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + vncserverui + originalName + vncserverui + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + vncviewer + originalName + vncviewer + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + vncserver + originalName + vncserver + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + TeamViewer + originalName + TeamViewer + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + GotoMeetingWinStore + originalName + GotoMeetingWinStore + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + g2mcomm.exe + originalName + g2mcomm.exe + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + SkypeHost + originalName + SkypeHost + description + + identifier + + windowHandlingProcess + + user + + + + active + + currentUser + + strongKill + + os + 1 + executable + Skype + originalName + Skype + description + + identifier + + windowHandlingProcess + + user + + + + enableURLFilter + + enableURLContentFilter + + URLFilterRules + + URLFilterEnable + + URLFilterEnableContentFilter + + blacklistURLFilter + + whitelistURLFilter + + urlFilterTrustedContent + + urlFilterRegex + + embeddedCertificates + + pinEmbeddedCertificates + + proxySettingsPolicy + 0 + proxies + + ExceptionsList + + ExcludeSimpleHostnames + + AutoDiscoveryEnabled + + AutoConfigurationEnabled + + AutoConfigurationJavaScript + + AutoConfigurationURL + + FTPPassive + + HTTPEnable + + HTTPPort + 80 + HTTPProxy + + HTTPRequiresPassword + + HTTPUsername + + HTTPPassword + + HTTPSEnable + + HTTPSPort + 443 + HTTPSProxy + + HTTPSRequiresPassword + + HTTPSUsername + + HTTPSPassword + + FTPEnable + + FTPPort + 21 + FTPProxy + + FTPRequiresPassword + + FTPUsername + + FTPPassword + + SOCKSEnable + + SOCKSPort + 1080 + SOCKSProxy + + SOCKSRequiresPassword + + SOCKSUsername + + SOCKSPassword + + RTSPEnable + + RTSPPort + 554 + RTSPProxy + + RTSPRequiresPassword + + RTSPUsername + + RTSPPassword + + + sebServicePolicy + 1 + allowVirtualMachine + + allowScreenSharing + + enablePrivateClipboard + + createNewDesktop + + killExplorerShell + + enableLogging + + logDirectoryOSX + ~/Documents + logDirectoryWin + + allowWlan + + lockOnMessageSocketClose + + minMacOSVersion + 4 + enableAppSwitcherCheck + + forceAppFolderInstall + + allowUserAppFolderInstall + + allowSiri + + allowDictation + + detectStoppedProcess + + allowDisplayMirroring + + allowedDisplaysMaxNumber + 1 + allowedDisplayBuiltin + + insideSebEnableSwitchUser + + insideSebEnableLockThisComputer + + insideSebEnableChangeAPassword + + insideSebEnableStartTaskManager + + insideSebEnableLogOff + + insideSebEnableShutDown + + insideSebEnableEaseOfAccess + + insideSebEnableVmWareClientShade + + insideSebEnableEnableNetworkConnectionSelector + + hookKeys + + enableEsc + + enableCtrlEsc + + enableAltEsc + + enableAltTab + + enableAltF4 + + enableStartMenu + + enableRightMouse + + enablePrintScreen + + enableAltMouseWheel + + enableF1 + + enableF2 + + enableF3 + + enableF4 + + enableF5 + + enableF6 + + enableF7 + + enableF8 + + enableF9 + + enableF10 + + enableF11 + + enableF12 + + + \ No newline at end of file diff --git a/SafeExamBrowser.Configuration.UnitTests/SafeExamBrowser.Configuration.UnitTests.csproj b/SafeExamBrowser.Configuration.UnitTests/SafeExamBrowser.Configuration.UnitTests.csproj index 39778e07..4d9e254a 100644 --- a/SafeExamBrowser.Configuration.UnitTests/SafeExamBrowser.Configuration.UnitTests.csproj +++ b/SafeExamBrowser.Configuration.UnitTests/SafeExamBrowser.Configuration.UnitTests.csproj @@ -81,6 +81,8 @@ ..\packages\System.ValueTuple.4.5.0\lib\netstandard1.0\System.ValueTuple.dll + + @@ -97,6 +99,7 @@ + @@ -111,7 +114,9 @@ - + + Designer +