public void GetWSForInputMethod_PrefersWSCurrentIfEqualMatches() { var wsEn = new CoreWritingSystemDefinition("en"); var wsEnUS = new CoreWritingSystemDefinition("en-US"); var wsEnIpa = new CoreWritingSystemDefinition("en-fonipa"); var wsFr = new CoreWritingSystemDefinition("fr"); var wsDe = new CoreWritingSystemDefinition("de"); DefaultKeyboardDefinition kbdEn = CreateKeyboard("English", "en-US"); wsEn.LocalKeyboard = kbdEn; DefaultKeyboardDefinition kbdEnIpa = CreateKeyboard("English-IPA", "en-US"); wsEnIpa.LocalKeyboard = kbdEnIpa; wsEnUS.LocalKeyboard = kbdEn; // exact same keyboard used! DefaultKeyboardDefinition kbdFr = CreateKeyboard("French", "fr-FR"); wsFr.LocalKeyboard = kbdFr; DefaultKeyboardDefinition kbdDe = CreateKeyboard("German", "de-DE"); wsDe.LocalKeyboard = kbdDe; CoreWritingSystemDefinition[] wss = { wsEn, wsFr, wsDe, wsEnIpa, wsEnUS }; // Exact matches Assert.That(SimpleRootSite.GetWSForInputMethod(kbdEn, wsFr, wss), Is.EqualTo(wsEn)); // first of 2 Assert.That(SimpleRootSite.GetWSForInputMethod(kbdEn, wsEn, wss), Is.EqualTo(wsEn)); // prefer default Assert.That(SimpleRootSite.GetWSForInputMethod(kbdEn, wsEnUS, wss), Is.EqualTo(wsEnUS)); // prefer default }
public void RoundTrippingLdmlDoesNotDuplicateSections() { using (var roundTripOut2 = new TempFile()) using (var roundTripOut = new TempFile()) using (var tempFile = new TempFile()) { using (var writer = new StreamWriter(tempFile.Path, false, Encoding.UTF8)) { writer.Write( @"<?xml version='1.0' encoding='utf-8'?> <ldml> <identity> <version number='' /> <language type='qaa' /> <variant type='x-lel' /> </identity> <collations /> <special xmlns:fw='urn://fieldworks.sil.org/ldmlExtensions/v1'> <fw:graphiteEnabled value='False' /> <fw:windowsLCID value='1036' /> </special> </ldml>".Replace("'", "\"")); } var ws = new WritingSystemDefinition(); var dataMapper = new LdmlDataMapper(); dataMapper.Read(tempFile.Path, ws); var keyboard1 = new DefaultKeyboardDefinition(); keyboard1.Locale = "en-US"; keyboard1.Layout = "MyFavoriteKeyboard"; keyboard1.OperatingSystem = PlatformID.MacOSX; // pick something that for sure won't be our default ws.AddKnownKeyboard(keyboard1); using (var fileStream = new FileStream(tempFile.Path, FileMode.Open)) { dataMapper.Write(roundTripOut.Path, ws, fileStream); } AssertThatXmlIn.File(roundTripOut.Path).HasSpecifiedNumberOfMatchesForXpath("/ldml/special/*[local-name()='windowsLCID']", 1); var secondTripMapper = new LdmlDataMapper(); var secondTripWs = new WritingSystemDefinition(); secondTripMapper.Read(roundTripOut.Path, secondTripWs); secondTripWs.AddKnownKeyboard(new DefaultKeyboardDefinition() { Locale = "qaa", Layout = "x-tel", OperatingSystem = PlatformID.Xbox }); secondTripWs.WindowsLcid = "1037"; using (var fileStream = new FileStream(roundTripOut.Path, FileMode.Open)) { secondTripMapper.Write(roundTripOut2.Path, secondTripWs, fileStream); } AssertThatXmlIn.File(roundTripOut2.Path).HasSpecifiedNumberOfMatchesForXpath("/ldml/special/*[local-name()='windowsLCID']", 1); //Element duplicated on round trip } }
public void GetWsForInputMethod_CorrectlyPrioritizesInputMethod() { var wsEn = new CoreWritingSystemDefinition("en"); var wsEnIpa = new CoreWritingSystemDefinition("en-fonipa"); var wsFr = new CoreWritingSystemDefinition("fr"); var wsDe = new CoreWritingSystemDefinition("de"); DefaultKeyboardDefinition kbdEn = CreateKeyboard("English", "en-US"); wsEn.LocalKeyboard = kbdEn; DefaultKeyboardDefinition kbdEnIpa = CreateKeyboard("English-IPA", "en-US"); wsEnIpa.LocalKeyboard = kbdEnIpa; DefaultKeyboardDefinition kbdFr = CreateKeyboard("French", "fr-FR"); wsFr.LocalKeyboard = kbdFr; DefaultKeyboardDefinition kbdDe = CreateKeyboard("German", "de-DE"); wsDe.LocalKeyboard = kbdDe; CoreWritingSystemDefinition[] wss = { wsEn, wsFr, wsDe, wsEnIpa }; // Exact match selects correct one, even though there are other matches for layout and/or culture Assert.That(SimpleRootSite.GetWSForInputMethod(kbdEn, wsFr, wss), Is.EqualTo(wsEn)); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdEnIpa, wsEn, wss), Is.EqualTo(wsEnIpa)); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdFr, wsDe, wss), Is.EqualTo(wsFr)); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdDe, wsEn, wss), Is.EqualTo(wsDe)); }
public void GetWsForInputLanguage_GetsMatchingWsByCulture() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var kbdEn = new DefaultKeyboardDefinition() { Layout = "English", Locale = "en-US" }; wsEn.LocalKeyboard = kbdEn; var kbdFr = new DefaultKeyboardDefinition() { Layout = "French", Locale = "fr-FR" }; wsFr.LocalKeyboard = kbdFr; Assert.That(RepositoryUnderTest.GetWsForInputLanguage("", new CultureInfo("en-US"), wsEn, new[] { wsEn, wsFr }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("", new CultureInfo("en-US"), wsFr, new[] { wsEn, wsFr }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("", new CultureInfo("en-US"), wsEn, new[] { wsFr, wsEn }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("", new CultureInfo("en-US"), wsFr, new[] { wsFr, wsEn }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("", new CultureInfo("fr-FR"), wsEn, new[] { wsFr, wsEn }), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("", new CultureInfo("fr-FR"), wsEn, new[] { wsEn, wsFr }), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("", new CultureInfo("fr-FR"), null, new[] { wsEn, wsFr }), Is.EqualTo(wsFr)); }
public void GetWsForInputLanguage_PrefersCurrentLayoutIfTwoMatch() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var kbdEn = new DefaultKeyboardDefinition() { Layout = "English", Locale = "en-US" }; wsEn.LocalKeyboard = kbdEn; var kbdFr = new DefaultKeyboardDefinition() { Layout = "English", Locale = "fr-US" }; wsFr.LocalKeyboard = kbdFr; Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("de-DE"), wsEn, new[] { wsEn, wsFr }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("de-DE"), wsFr, new[] { wsEn, wsFr }), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("de-DE"), wsEn, new[] { wsFr, wsEn }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("de-DE"), wsFr, new[] { wsFr, wsEn }), Is.EqualTo(wsFr)); }
public void LocalKeyboardSettings_RetrievesLocalKeyboardData() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var kbd1 = new DefaultKeyboardDefinition() { Layout = "English", Locale = "en-GB", OperatingSystem = PlatformID.Win32NT }; wsEn.LocalKeyboard = kbd1; var result = RepositoryUnderTest.LocalKeyboardSettings; var root = XElement.Parse(result); Assert.That(root.Elements("keyboard").Count(), Is.EqualTo(1), "should have local keyboard for en but not fr"); var keyboardElt = root.Elements("keyboard").First(); Assert.That(keyboardElt.Attribute("layout").Value, Is.EqualTo("English")); Assert.That(keyboardElt.Attribute("locale").Value, Is.EqualTo("en-GB")); Assert.That(keyboardElt.Attribute("ws").Value, Is.EqualTo("en")); }
public void DoesWritingSystemUseKeyman_NonKeymanKeyboardReturnsFalse() { CoreWritingSystemDefinition ws = Cache.LangProject.DefaultAnalysisWritingSystem; var testKeyboard = new DefaultKeyboardDefinition("test", "keyboard", "layout", "locale", true); ws.KnownKeyboards.Add(testKeyboard); Assert.That(ReapRamp.DoesWritingSystemUseKeyman(ws), Is.False, "Unable to determine if a writing system is keyman, the location or name of the class in Palaso probably changed"); }
public void DoesWritingSystemUseKeyman_NonKeymanKeyboardReturnsFalse() { var ws = Cache.LangProject.DefaultAnalysisWritingSystem; var palasoWs = ws as PalasoWritingSystem; var testKeyboard = new DefaultKeyboardDefinition { IsAvailable = true }; // ReSharper disable once PossibleNullReferenceException palasoWs.AddKnownKeyboard(testKeyboard); Assert.That(ReapRamp.DoesWritingSystemUseKeyman(ws), Is.False, "Unable to determine if a writing system is keyman, the location or name of the class in Palaso probably changed"); }
public void KeyboardsDontEqualNull() { var keyboard1 = new DefaultKeyboardDefinition() { Layout = "layout1", Locale = "en-US", OperatingSystem = PlatformID.MacOSX }; DefaultKeyboardDefinition keyboard2 = null; Assert.That(keyboard1 == keyboard2, Is.False); Assert.That(keyboard2 == keyboard1, Is.False); Assert.That(keyboard1 != keyboard2, Is.True); Assert.That(keyboard2 != keyboard1, Is.True); }
public void GetWsForInputLanguage_CorrectlyPrioritizesLayoutAndCulture() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsEnIpa = new WritingSystemDefinition("en-fonipa"); RepositoryUnderTest.Set(wsEnIpa); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var wsDe = new WritingSystemDefinition("de"); RepositoryUnderTest.Set(wsDe); var kbdEn = new DefaultKeyboardDefinition() { Layout = "English", Locale = "en-US" }; wsEn.LocalKeyboard = kbdEn; var kbdEnIpa = new DefaultKeyboardDefinition() { Layout = "English-IPA", Locale = "en-US" }; wsEnIpa.LocalKeyboard = kbdEnIpa; var kbdFr = new DefaultKeyboardDefinition() { Layout = "French", Locale = "fr-FR" }; wsFr.LocalKeyboard = kbdFr; var kbdDe = new DefaultKeyboardDefinition() { Layout = "English", Locale = "de-DE" }; wsDe.LocalKeyboard = kbdDe; var wss = new IWritingSystemDefinition[] { wsEn, wsFr, wsDe, wsEnIpa }; // Exact match selects correct one, even though there are other matches for layout and/or culture Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("en-US"), wsFr, wss), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English-IPA", new CultureInfo("en-US"), wsEn, wss), Is.EqualTo(wsEnIpa)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("French", new CultureInfo("fr-FR"), wsDe, wss), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("de-DE"), wsEn, wss), Is.EqualTo(wsDe)); // If there is no exact match, but there are matches by both layout and culture, we prefer layout (even though there is a // culture match for the default WS) Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("fr-FR"), wsFr, wss), Is.EqualTo(wsEn)); // first of two equally good matches }
public void DoesWritingSystemUseKeyman_NonKeymanKeyboardReturnsFalse() { var ws = Cache.LangProject.DefaultAnalysisWritingSystem; var palasoWs = ws as PalasoWritingSystem; var testKeyboard = new DefaultKeyboardDefinition { IsAvailable = true }; // ReSharper disable once PossibleNullReferenceException palasoWs.AddKnownKeyboard(testKeyboard); Assert.That(ReapRamp.DoesWritingSystemUseKeyman(ws), Is.False, "Unable to determine if a writing system is keyman, the location or name of the class in Palaso probably changed"); }
public void RoundtripKnownKeyboards() { var ldmlAdaptor = new LdmlDataMapper(); Keyboard.Controller = new MyKeyboardController(); const string sortRules = "(A̍ a̍)"; var wsWithKnownKeyboards = new WritingSystemDefinition(); var keyboard1 = new DefaultKeyboardDefinition(); keyboard1.Locale = "en-US"; keyboard1.Layout = "MyFavoriteKeyboard"; keyboard1.OperatingSystem = PlatformID.MacOSX; // pick something that for sure won't be our default wsWithKnownKeyboards.AddKnownKeyboard(keyboard1); var keyboard2 = new DefaultKeyboardDefinition(); keyboard2.Locale = "en-GB"; keyboard2.Layout = "SusannasFavoriteKeyboard"; keyboard2.OperatingSystem = PlatformID.Unix; wsWithKnownKeyboards.AddKnownKeyboard(keyboard2); var wsFromLdml = new WritingSystemDefinition(); using (var tempFile = new TempFile()) { ldmlAdaptor.Write(tempFile.Path, wsWithKnownKeyboards, null); ldmlAdaptor.Read(tempFile.Path, wsFromLdml); } var knownKeyboards = wsFromLdml.KnownKeyboards.ToList(); Assert.That(knownKeyboards, Has.Count.EqualTo(2), "restored WS should have known keyboards"); var keyboard1FromLdml = knownKeyboards[0]; Assert.That(keyboard1FromLdml.Layout, Is.EqualTo("MyFavoriteKeyboard")); Assert.That(keyboard1FromLdml.Locale, Is.EqualTo("en-US")); Assert.That(keyboard1FromLdml.OperatingSystem, Is.EqualTo(PlatformID.MacOSX)); Assert.That(keyboard1FromLdml, Is.InstanceOf <MyKeyboardDefn>(), "Reader should have used controller to create keyboard defn"); var keyboard2FromLdml = knownKeyboards[1]; Assert.That(keyboard2FromLdml.Layout, Is.EqualTo("SusannasFavoriteKeyboard")); Assert.That(keyboard2FromLdml.Locale, Is.EqualTo("en-GB")); Assert.That(keyboard2FromLdml.OperatingSystem, Is.EqualTo(PlatformID.Unix)); }
public void GetWSForInputMethod_PrefersCurrentLayoutIfTwoMatch() { var wsEn = new CoreWritingSystemDefinition("en"); var wsFr = new CoreWritingSystemDefinition("fr"); DefaultKeyboardDefinition kbdEn = CreateKeyboard("English", "en-US"); wsEn.LocalKeyboard = kbdEn; DefaultKeyboardDefinition kbdFr = CreateKeyboard("French", "fr-FR"); wsFr.LocalKeyboard = kbdFr; DefaultKeyboardDefinition kbdDe = CreateKeyboard("German", "de-DE"); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdDe, wsEn, new[] { wsEn, wsFr }), Is.EqualTo(wsEn)); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdDe, wsFr, new[] { wsEn, wsFr }), Is.EqualTo(wsFr)); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdDe, wsEn, new[] { wsFr, wsEn }), Is.EqualTo(wsEn)); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdDe, wsFr, new[] { wsFr, wsEn }), Is.EqualTo(wsFr)); }
public void GetWSForInputMethod_GetsMatchingWSByInputMethod() { var wsEn = new CoreWritingSystemDefinition("en"); var wsFr = new CoreWritingSystemDefinition("fr"); DefaultKeyboardDefinition kbdEn = CreateKeyboard("English", "en-US"); wsEn.LocalKeyboard = kbdEn; DefaultKeyboardDefinition kbdFr = CreateKeyboard("French", "fr-FR"); wsFr.LocalKeyboard = kbdFr; Assert.That(SimpleRootSite.GetWSForInputMethod(kbdEn, wsEn, new[] { wsEn, wsFr }), Is.EqualTo(wsEn)); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdEn, wsFr, new[] { wsEn, wsFr }), Is.EqualTo(wsEn)); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdEn, wsEn, new[] { wsFr, wsEn }), Is.EqualTo(wsEn)); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdEn, wsFr, new[] { wsFr, wsEn }), Is.EqualTo(wsEn)); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdFr, wsEn, new[] { wsFr, wsEn }), Is.EqualTo(wsFr)); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdFr, wsEn, new[] { wsEn, wsFr }), Is.EqualTo(wsFr)); Assert.That(SimpleRootSite.GetWSForInputMethod(kbdFr, null, new[] { wsEn, wsFr }), Is.EqualTo(wsFr)); }
public void KeyboardEqualityDependsOnExpectedProperties() { var keyboard1 = new DefaultKeyboardDefinition() { Layout = "layout1", Locale = "en-US", OperatingSystem = PlatformID.MacOSX }; var keyboard2 = new DefaultKeyboardDefinition() { Layout = "layout1", Locale = "en-US", OperatingSystem = PlatformID.MacOSX }; Assert.That(keyboard1 == keyboard2, Is.True); Assert.That(keyboard1.GetHashCode() == keyboard2.GetHashCode()); Assert.That(keyboard1 != keyboard2, Is.False); IKeyboardDefinition kbd1 = keyboard1; IKeyboardDefinition kbd2 = keyboard2; Assert.That(kbd1.Equals(kbd2), Is.True); keyboard2.Layout = "layout2"; Assert.That(keyboard1 == keyboard2, Is.False); Assert.That(keyboard1.GetHashCode() != keyboard2.GetHashCode()); Assert.That(keyboard1 != keyboard2, Is.True); Assert.That(kbd1.Equals(kbd2), Is.False); keyboard2.Layout = "layout1"; Assert.That(keyboard1 == keyboard2, Is.True); keyboard2.Locale = "en-GB"; Assert.That(keyboard1 == keyboard2, Is.False); Assert.That(keyboard1.GetHashCode() != keyboard2.GetHashCode()); Assert.That(keyboard1 != keyboard2, Is.True); Assert.That(kbd1.Equals(kbd2), Is.False); keyboard2.Locale = "en-US"; Assert.That(keyboard1 == keyboard2, Is.True); keyboard2.OperatingSystem = PlatformID.Unix; Assert.That(keyboard1 == keyboard2, Is.True, "Equality should NOT depend on OS"); Assert.That(keyboard1.GetHashCode() == keyboard2.GetHashCode(), "Hash should NOT depend on OS"); Assert.That(keyboard1 != keyboard2, Is.False); Assert.That(kbd1.Equals(kbd2), Is.True); }
public void SettingLocalKeyboardSettings_UpdatesLocalKeyboardsForExistingWritingSystems() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var kbd1 = new DefaultKeyboardDefinition() { Layout = "English", Locale = "en-GB", OperatingSystem = PlatformID.Win32NT }; wsEn.LocalKeyboard = kbd1; RepositoryUnderTest.LocalKeyboardSettings = @"<keyboards> <keyboard ws='en' layout='English' locale='en-AU'/> <keyboard ws='fr' layout='French-IPA' locale='fr-FR'/> </keyboards>"; Assert.That(wsEn.LocalKeyboard.Locale, Is.EqualTo("en-AU")); Assert.That(wsFr.LocalKeyboard.Layout, Is.EqualTo("French-IPA")); Assert.That(wsEn.LocalKeyboard.OperatingSystem, Is.EqualTo(Environment.OSVersion.Platform)); }
public void GetWsForInputLanguage_CorrectlyPrioritizesLayoutAndCulture() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsEnIpa = new WritingSystemDefinition("en-fonipa"); RepositoryUnderTest.Set(wsEnIpa); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var wsDe = new WritingSystemDefinition("de"); RepositoryUnderTest.Set(wsDe); var kbdEn = new DefaultKeyboardDefinition() { Layout = "English", Locale = "en-US" }; wsEn.LocalKeyboard = kbdEn; var kbdEnIpa = new DefaultKeyboardDefinition() { Layout = "English-IPA", Locale = "en-US" }; wsEnIpa.LocalKeyboard = kbdEnIpa; var kbdFr = new DefaultKeyboardDefinition() { Layout = "French", Locale = "fr-FR" }; wsFr.LocalKeyboard = kbdFr; var kbdDe = new DefaultKeyboardDefinition() { Layout = "English", Locale = "de-DE" }; wsDe.LocalKeyboard = kbdDe; var wss = new IWritingSystemDefinition[] {wsEn, wsFr, wsDe, wsEnIpa}; // Exact match selects correct one, even though there are other matches for layout and/or culture Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("en-US"), wsFr, wss), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English-IPA", new CultureInfo("en-US"), wsEn, wss), Is.EqualTo(wsEnIpa)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("French", new CultureInfo("fr-FR"), wsDe, wss), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("de-DE"), wsEn, wss), Is.EqualTo(wsDe)); // If there is no exact match, but there are matches by both layout and culture, we prefer layout (even though there is a // culture match for the default WS) Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("fr-FR"), wsFr, wss), Is.EqualTo(wsEn)); // first of two equally good matches }
public void RoundtripKnownKeyboards() { var ldmlAdaptor = new LdmlDataMapper(); Keyboard.Controller = new MyKeyboardController(); const string sortRules = "(A̍ a̍)"; var wsWithKnownKeyboards = new WritingSystemDefinition(); var keyboard1 = new DefaultKeyboardDefinition(); keyboard1.Locale = "en-US"; keyboard1.Layout = "MyFavoriteKeyboard"; keyboard1.OperatingSystem = PlatformID.MacOSX; // pick something that for sure won't be our default wsWithKnownKeyboards.AddKnownKeyboard(keyboard1); var keyboard2 = new DefaultKeyboardDefinition(); keyboard2.Locale = "en-GB"; keyboard2.Layout = "SusannasFavoriteKeyboard"; keyboard2.OperatingSystem = PlatformID.Unix; wsWithKnownKeyboards.AddKnownKeyboard(keyboard2); var wsFromLdml = new WritingSystemDefinition(); using (var tempFile = new TempFile()) { ldmlAdaptor.Write(tempFile.Path, wsWithKnownKeyboards, null); ldmlAdaptor.Read(tempFile.Path, wsFromLdml); } var knownKeyboards = wsFromLdml.KnownKeyboards.ToList(); Assert.That(knownKeyboards, Has.Count.EqualTo(2), "restored WS should have known keyboards"); var keyboard1FromLdml = knownKeyboards[0]; Assert.That(keyboard1FromLdml.Layout, Is.EqualTo("MyFavoriteKeyboard")); Assert.That(keyboard1FromLdml.Locale, Is.EqualTo("en-US")); Assert.That(keyboard1FromLdml.OperatingSystem, Is.EqualTo(PlatformID.MacOSX)); Assert.That(keyboard1FromLdml, Is.InstanceOf<MyKeyboardDefn>(), "Reader should have used controller to create keyboard defn"); var keyboard2FromLdml = knownKeyboards[1]; Assert.That(keyboard2FromLdml.Layout, Is.EqualTo("SusannasFavoriteKeyboard")); Assert.That(keyboard2FromLdml.Locale, Is.EqualTo("en-GB")); Assert.That(keyboard2FromLdml.OperatingSystem, Is.EqualTo(PlatformID.Unix)); }
public void RoundTrippingLdmlDoesNotDuplicateSections() { using(var roundTripOut2 = new TempFile()) using(var roundTripOut = new TempFile()) using(var tempFile = new TempFile()) { using(var writer = new StreamWriter(tempFile.Path, false, Encoding.UTF8)) { writer.Write( @"<?xml version='1.0' encoding='utf-8'?> <ldml> <identity> <version number='' /> <language type='qaa' /> <variant type='x-lel' /> </identity> <collations /> <special xmlns:fw='urn://fieldworks.sil.org/ldmlExtensions/v1'> <fw:graphiteEnabled value='False' /> <fw:windowsLCID value='1036' /> </special> </ldml>".Replace("'", "\"")); } var ws = new WritingSystemDefinition(); var dataMapper = new LdmlDataMapper(); dataMapper.Read(tempFile.Path, ws); var keyboard1 = new DefaultKeyboardDefinition(); keyboard1.Locale = "en-US"; keyboard1.Layout = "MyFavoriteKeyboard"; keyboard1.OperatingSystem = PlatformID.MacOSX; // pick something that for sure won't be our default ws.AddKnownKeyboard(keyboard1); using(var fileStream = new FileStream(tempFile.Path, FileMode.Open)) { dataMapper.Write(roundTripOut.Path, ws, fileStream); } AssertThatXmlIn.File(roundTripOut.Path).HasSpecifiedNumberOfMatchesForXpath("/ldml/special/*[local-name()='windowsLCID']", 1); var secondTripMapper = new LdmlDataMapper(); var secondTripWs = new WritingSystemDefinition(); secondTripMapper.Read(roundTripOut.Path, secondTripWs); secondTripWs.AddKnownKeyboard(new DefaultKeyboardDefinition() { Locale = "qaa", Layout = "x-tel", OperatingSystem = PlatformID.Xbox }); secondTripWs.WindowsLcid = "1037"; using(var fileStream = new FileStream(roundTripOut.Path, FileMode.Open)) { secondTripMapper.Write(roundTripOut2.Path, secondTripWs, fileStream); } AssertThatXmlIn.File(roundTripOut2.Path).HasSpecifiedNumberOfMatchesForXpath("/ldml/special/*[local-name()='windowsLCID']", 1); //Element duplicated on round trip } }
public void GetWsForInputLanguage_PrefersWsCurrentIfEqualMatches() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsEnUS = new WritingSystemDefinition("en-US"); RepositoryUnderTest.Set(wsEnUS); var wsEnIpa = new WritingSystemDefinition("en-fonipa"); RepositoryUnderTest.Set(wsEnIpa); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var wsDe = new WritingSystemDefinition("de"); RepositoryUnderTest.Set(wsDe); var kbdEn = new DefaultKeyboardDefinition() { Layout = "English", Locale = "en-US" }; wsEn.LocalKeyboard = kbdEn; var kbdEnIpa = new DefaultKeyboardDefinition() { Layout = "English-IPA", Locale = "en-US" }; wsEnIpa.LocalKeyboard = kbdEnIpa; wsEnUS.LocalKeyboard = kbdEn; // exact same keyboard used! var kbdFr = new DefaultKeyboardDefinition() { Layout = "French", Locale = "fr-FR" }; wsFr.LocalKeyboard = kbdFr; var kbdDe = new DefaultKeyboardDefinition() { Layout = "English", Locale = "de-DE" }; wsDe.LocalKeyboard = kbdDe; var wss = new IWritingSystemDefinition[] { wsEn, wsFr, wsDe, wsEnIpa, wsEnUS }; // Exact matches Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("en-US"), wsFr, wss), Is.EqualTo(wsEn)); // first of 2 Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("en-US"), wsEn, wss), Is.EqualTo(wsEn)); // prefer default Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("en-US"), wsEnUS, wss), Is.EqualTo(wsEnUS)); // prefer default // Match on Layout only Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("fr-FR"), wsFr, wss), Is.EqualTo(wsEn)); // first of 3 Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("fr-FR"), wsEn, wss), Is.EqualTo(wsEn)); // prefer default Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("fr-FR"), wsEnUS, wss), Is.EqualTo(wsEnUS)); // prefer default Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("fr-FR"), wsDe, wss), Is.EqualTo(wsDe)); // prefer default // Match on culture only Assert.That(RepositoryUnderTest.GetWsForInputLanguage("Nonsence", new CultureInfo("en-US"), wsDe, wss), Is.EqualTo(wsEn)); // first of 3 Assert.That(RepositoryUnderTest.GetWsForInputLanguage("Nonsence", new CultureInfo("en-US"), wsEn, wss), Is.EqualTo(wsEn)); // prefer default Assert.That(RepositoryUnderTest.GetWsForInputLanguage("Nonsence", new CultureInfo("en-US"), wsEnUS, wss), Is.EqualTo(wsEnUS)); // prefer default Assert.That(RepositoryUnderTest.GetWsForInputLanguage("Nonsence", new CultureInfo("en-US"), wsEnIpa, wss), Is.EqualTo(wsEnIpa)); // prefer default }
public void LocalKeyboardSettings_RetrievesLocalKeyboardData() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var kbd1 = new DefaultKeyboardDefinition() {Layout = "English", Locale = "en-GB", OperatingSystem = PlatformID.Win32NT}; wsEn.LocalKeyboard = kbd1; var result = RepositoryUnderTest.LocalKeyboardSettings; var root = XElement.Parse(result); Assert.That(root.Elements("keyboard").Count(), Is.EqualTo(1), "should have local keyboard for en but not fr"); var keyboardElt = root.Elements("keyboard").First(); Assert.That(keyboardElt.Attribute("layout").Value, Is.EqualTo("English")); Assert.That(keyboardElt.Attribute("locale").Value, Is.EqualTo("en-GB")); Assert.That(keyboardElt.Attribute("ws").Value, Is.EqualTo("en")); }
public void GetWsForInputMethod_GetsMatchingWsByInputMethod() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var kbdEn = new DefaultKeyboardDefinition {Layout = "English", Locale = "en-US"}; wsEn.LocalKeyboard = kbdEn; var kbdFr = new DefaultKeyboardDefinition {Layout = "French", Locale = "fr-FR"}; wsFr.LocalKeyboard = kbdFr; Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdEn, wsEn, new[] { wsEn, wsFr }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdEn, wsFr, new[] { wsEn, wsFr }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdEn, wsEn, new[] { wsFr, wsEn }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdEn, wsFr, new[] { wsFr, wsEn }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdFr, wsEn, new[] { wsFr, wsEn }), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdFr, wsEn, new[] { wsEn, wsFr }), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdFr, null, new[] { wsEn, wsFr }), Is.EqualTo(wsFr)); }
public bool Contains(string layout, string locale) { return(Contains(DefaultKeyboardDefinition.GetId(locale, layout))); }
public IKeyboardDefinition this[string layout, string locale] { get { return(this[DefaultKeyboardDefinition.GetId(locale, layout)]); } }
public void GetWsForInputLanguage_PrefersCurrentLayoutIfTwoMatch() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var kbdEn = new DefaultKeyboardDefinition() { Layout = "English", Locale = "en-US" }; wsEn.LocalKeyboard = kbdEn; var kbdFr = new DefaultKeyboardDefinition() { Layout = "English", Locale = "fr-US" }; wsFr.LocalKeyboard = kbdFr; Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("de-DE"), wsEn, new[] { wsEn, wsFr }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("de-DE"), wsFr, new[] { wsEn, wsFr }), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("de-DE"), wsEn, new[] { wsFr, wsEn }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("de-DE"), wsFr, new[] { wsFr, wsEn }), Is.EqualTo(wsFr)); }
public void GetWsForInputMethod_CorrectlyPrioritizesInputMethod() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsEnIpa = new WritingSystemDefinition("en-fonipa"); RepositoryUnderTest.Set(wsEnIpa); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var wsDe = new WritingSystemDefinition("de"); RepositoryUnderTest.Set(wsDe); var kbdEn = new DefaultKeyboardDefinition() { Layout = "English", Locale = "en-US" }; wsEn.LocalKeyboard = kbdEn; var kbdEnIpa = new DefaultKeyboardDefinition() { Layout = "English-IPA", Locale = "en-US" }; wsEnIpa.LocalKeyboard = kbdEnIpa; var kbdFr = new DefaultKeyboardDefinition() { Layout = "French", Locale = "fr-FR" }; wsFr.LocalKeyboard = kbdFr; var kbdDe = new DefaultKeyboardDefinition() { Layout = "English", Locale = "de-DE" }; wsDe.LocalKeyboard = kbdDe; var wss = new IWritingSystemDefinition[] {wsEn, wsFr, wsDe, wsEnIpa}; // Exact match selects correct one, even though there are other matches for layout and/or culture Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdEn, wsFr, wss), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdEnIpa, wsEn, wss), Is.EqualTo(wsEnIpa)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdFr, wsDe, wss), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdDe, wsEn, wss), Is.EqualTo(wsDe)); }
public void GetWsForInputLanguage_ReturnsCurrentIfNoneMatches() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var kbdEn = new DefaultKeyboardDefinition() { Layout = "English", Locale = "en-US" }; wsEn.LocalKeyboard = kbdEn; var kbdFr = new DefaultKeyboardDefinition() { Layout = "French", Locale = "en-US" }; wsFr.LocalKeyboard = kbdFr; Assert.That(RepositoryUnderTest.GetWsForInputLanguage("", new CultureInfo("fr-FR"), wsEn, new[] { wsEn, wsFr }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("", new CultureInfo("fr-FR"), wsFr, new[] { wsEn, wsFr }), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("", new CultureInfo("fr-FR"), wsEn, new[] { wsFr, wsEn }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("", new CultureInfo("fr-FR"), wsFr, new[] { wsFr, wsEn }), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputLanguage("", new CultureInfo("fr-FR"), null, new[] { wsFr, wsEn }), Is.Null); }
public void GetWsForInputMethod_ReturnsCurrentIfNoneMatches() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var kbdEn = new DefaultKeyboardDefinition() { Layout = "English", Locale = "en-US" }; wsEn.LocalKeyboard = kbdEn; var kbdFr = new DefaultKeyboardDefinition() { Layout = "French", Locale = "en-US" }; wsFr.LocalKeyboard = kbdFr; var kbdDe = new DefaultKeyboardDefinition() {Layout = "German", Locale = "de-DE"}; Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdDe, wsEn, new[] { wsEn, wsFr }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdDe, wsFr, new[] { wsEn, wsFr }), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdDe, wsEn, new[] { wsFr, wsEn }), Is.EqualTo(wsEn)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdDe, wsFr, new[] { wsFr, wsEn }), Is.EqualTo(wsFr)); Assert.That(RepositoryUnderTest.GetWsForInputMethod(kbdDe, null, new[] { wsFr, wsEn }), Is.Null); }
public void SettingLocalKeyboardSettings_UpdatesLocalKeyboardsForExistingWritingSystems() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var kbd1 = new DefaultKeyboardDefinition() {Layout = "English", Locale = "en-GB", OperatingSystem = PlatformID.Win32NT}; wsEn.LocalKeyboard = kbd1; RepositoryUnderTest.LocalKeyboardSettings = @"<keyboards> <keyboard ws='en' layout='English' locale='en-AU'/> <keyboard ws='fr' layout='French-IPA' locale='fr-FR'/> </keyboards>"; Assert.That(wsEn.LocalKeyboard.Locale, Is.EqualTo("en-AU")); Assert.That(wsFr.LocalKeyboard.Layout, Is.EqualTo("French-IPA")); Assert.That(wsEn.LocalKeyboard.OperatingSystem, Is.EqualTo(Environment.OSVersion.Platform)); }
public void GetWsForInputLanguage_PrefersWsCurrentIfEqualMatches() { var wsEn = new WritingSystemDefinition("en"); RepositoryUnderTest.Set(wsEn); var wsEnUS = new WritingSystemDefinition("en-US"); RepositoryUnderTest.Set(wsEnUS); var wsEnIpa = new WritingSystemDefinition("en-fonipa"); RepositoryUnderTest.Set(wsEnIpa); var wsFr = new WritingSystemDefinition("fr"); RepositoryUnderTest.Set(wsFr); var wsDe = new WritingSystemDefinition("de"); RepositoryUnderTest.Set(wsDe); var kbdEn = new DefaultKeyboardDefinition() { Layout = "English", Locale = "en-US" }; wsEn.LocalKeyboard = kbdEn; var kbdEnIpa = new DefaultKeyboardDefinition() { Layout = "English-IPA", Locale = "en-US" }; wsEnIpa.LocalKeyboard = kbdEnIpa; wsEnUS.LocalKeyboard = kbdEn; // exact same keyboard used! var kbdFr = new DefaultKeyboardDefinition() { Layout = "French", Locale = "fr-FR" }; wsFr.LocalKeyboard = kbdFr; var kbdDe = new DefaultKeyboardDefinition() { Layout = "English", Locale = "de-DE" }; wsDe.LocalKeyboard = kbdDe; var wss = new IWritingSystemDefinition[] { wsEn, wsFr, wsDe, wsEnIpa, wsEnUS }; // Exact matches Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("en-US"), wsFr, wss), Is.EqualTo(wsEn)); // first of 2 Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("en-US"), wsEn, wss), Is.EqualTo(wsEn)); // prefer default Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("en-US"), wsEnUS, wss), Is.EqualTo(wsEnUS)); // prefer default // Match on Layout only Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("fr-FR"), wsFr, wss), Is.EqualTo(wsEn)); // first of 3 Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("fr-FR"), wsEn, wss), Is.EqualTo(wsEn)); // prefer default Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("fr-FR"), wsEnUS, wss), Is.EqualTo(wsEnUS)); // prefer default Assert.That(RepositoryUnderTest.GetWsForInputLanguage("English", new CultureInfo("fr-FR"), wsDe, wss), Is.EqualTo(wsDe)); // prefer default // Match on culture only Assert.That(RepositoryUnderTest.GetWsForInputLanguage("Nonsence", new CultureInfo("en-US"), wsDe, wss), Is.EqualTo(wsEn)); // first of 3 Assert.That(RepositoryUnderTest.GetWsForInputLanguage("Nonsence", new CultureInfo("en-US"), wsEn, wss), Is.EqualTo(wsEn)); // prefer default Assert.That(RepositoryUnderTest.GetWsForInputLanguage("Nonsence", new CultureInfo("en-US"), wsEnUS, wss), Is.EqualTo(wsEnUS)); // prefer default Assert.That(RepositoryUnderTest.GetWsForInputLanguage("Nonsence", new CultureInfo("en-US"), wsEnIpa, wss), Is.EqualTo(wsEnIpa)); // prefer default }