예제 #1
0
        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
        }
예제 #2
0
        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
                    }
        }
예제 #3
0
        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"));
        }
예제 #7
0
        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");
        }
예제 #8
0
		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");
		}
예제 #9
0
        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
        }
예제 #11
0
        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");
        }
예제 #12
0
        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));
        }
예제 #13
0
        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));
        }
예제 #14
0
        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));
        }
예제 #15
0
        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
        }
예제 #18
0
		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));
		}
예제 #19
0
		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));
		}
예제 #23
0
 public bool Contains(string layout, string locale)
 {
     return(Contains(DefaultKeyboardDefinition.GetId(locale, layout)));
 }
예제 #24
0
 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
        }