コード例 #1
0
 public void GetDynamicStringInEnglish_NoDefault_FindsEnglish()
 {
     using (var folder = new TempFolder("GetDynamicStringInEnglish_NoDefault_FindsEnglish"))
     {
         SetupManager(folder, "en");
         Assert.That(LocalizationManager.GetDynamicString(AppId, "blahId", null), Is.EqualTo("blah"), "With no default supplied, should find saved English");
     }
 }
コード例 #2
0
 public void GetDynamicString_ArabicTMXHasArabicValue_ArabicTMXWins()
 {
     using (var folder = new TempFolder("GetDynamicString_EnglishTMXHasDIfferentStringThanParameter_ParameterWins"))
     {
         SetupManager(folder, "ar");
         Assert.AreEqual("inArabic", LocalizationManager.GetDynamicString(AppId, "theId", "from c# code"));
     }
 }
コード例 #3
0
 public void GetDynamicStringOrEnglish()
 {
     using (var folder = new TempFolder("GetDynamicString_EnglishTMXHasDIfferentStringThanParameter_ParameterWins"))
     {
         SetupManager(folder, "ar");
         Assert.AreEqual("blahInEnglishInCode", GetBlah("en"), "If asked for English, should give whatever is in the code.");
         Assert.AreEqual("blahInFrench", GetBlah("fr"), "We do have french for this, should have found it.");
         Assert.AreEqual("blahInEnglishInCode", GetBlah("ar"), "We don't have french so should get the English from code.");
     }
 }
コード例 #4
0
 [TestCase(new[] { "ar", "fr", "en" }, "blahInFrench", "fr", TestName = "GetString_OverloadThatTakesListOfLanguages_Works_7")]         // our arabic doesn't have a translation of 'blah', so fall to French
 public void GetString_OverloadThatTakesListOfLanguages_Works(IEnumerable <string> preferredLangIds, string expectedResult, string expectedLanguage)
 {
     using (var folder = new TempFolder("GetString"))
     {
         SetupManager(folder, "ii" /* UI language not important */);
         string languageFound;
         var    result = LocalizationManager.GetString("blahId", "blahInEnglishCode", "comment", preferredLangIds, out languageFound);
         Assert.AreEqual(expectedResult, result);
         Assert.AreEqual(expectedLanguage, languageFound);
     }
 }
コード例 #5
0
        public float FractionApproved(string langId)
        {
            LocalizationManager.UseLanguageCodeFolders = true;
            using (var folder = new TempFolder())
            {
                AddRandomTranslation("ii", GetInstalledDirectory(folder));
                SetupManager(folder, "ii" /* UI language not important */);

                return(LocalizationManager.FractionApproved(langId));
            }
        }
コード例 #6
0
        private static void MakeEnglishTmxWithApparentOrphan(TempFolder folder)
        {
            var englishDoc = new TMXDocument {
                Header = { SourceLang = "en" }
            };

            englishDoc.Header.SetPropValue(LocalizationManager.kAppVersionPropTag, LowerVersion);
            englishDoc.AddTransUnit(MakeTransUnit("en", null, "Title", "SuperClassMethod.TestId", false));             // This is the one ID found in our test code
            englishDoc.AddTransUnit(MakeTransUnit("en", null, "Title", "AnotherContext.AnotherDialog.TestId", true));  // Simulates an 'orphan' that we can't otherwise tell we need.
            Directory.CreateDirectory(GetInstalledDirectory(folder));
            englishDoc.Save(Path.Combine(GetInstalledDirectory(folder), LocalizationManager.GetTmxFileNameForLanguage(AppId, "en")));
        }
コード例 #7
0
 public void GetAvailableUILanguageTags_FindsThreeLanguages()
 {
     using (var folder = new TempFolder("GetAvailableUILanguageTags_FindsThreeLanguages"))
     {
         SetupManager(folder, "en");
         var tags = LocalizationManager.GetAvailableUILanguageTags(GetInstalledDirectory(folder), AppId).ToArray();
         Assert.That(tags.Length, Is.EqualTo(3));
         Assert.That(tags.Contains("ar"), Is.True);
         Assert.That(tags.Contains("en"), Is.True);
         Assert.That(tags.Contains("fr"), Is.True);
     }
 }
コード例 #8
0
        /// <summary>
        /// - "Installs" English, Arabic, and French
        /// - Sets the UI language
        /// - Constructs a LocalizationManager and adds it to LocalizationManager.LoadedManagers[AppId]
        /// </summary>
        private static void SetupManager(TempFolder folder, string uiLanguageId = null)
        {
            AddEnglishTmx(GetInstalledDirectory(folder), AppVersion);
            AddArabicTmx(GetInstalledDirectory(folder));
            AddFrenchTmx(GetInstalledDirectory(folder));

            LocalizationManager.SetUILanguage(uiLanguageId, true);
            var manager = new LocalizationManager(AppId, AppName, AppVersion,
                                                  GetInstalledDirectory(folder), GetGeneratedDirectory(folder), GetUserModifiedDirectory(folder));

            // REVIEW (Hasso) 2015.01: Since AppId is static, I wonder what conflicts this may cause (even though each test has its own TempFolder)
            LocalizationManager.LoadedManagers[AppId] = manager;
        }
コード例 #9
0
        private static void MakeArabicTmxWithApparentOrphans(TempFolder folder, string englishForObsoleteTitle)
        {
            var arabicDoc = new TMXDocument {
                Header = { SourceLang = "ar" }
            };

            arabicDoc.Header.SetPropValue(LocalizationManager.kAppVersionPropTag, LowerVersion);
            // Note that we do NOT have arabic for SuperClassMethod.TestId. We may end up getting a translation from the orphan, however.
            arabicDoc.AddTransUnit(MakeTransUnit("ar", "Title", "Title in Arabic", "AnotherContext.AnotherDialog.TestId", true));             // Not an orphan, because English TMX has this too
            // Interpreted as an orphan iff englishForObsoleteTitle is "Title" (matching the English for SuperClassMethod.TestId)
            arabicDoc.AddTransUnit(MakeTransUnit("ar", englishForObsoleteTitle, "Title in Arabic", "AnObsoleteNameForSuperclass.TestId", true));
            Directory.CreateDirectory(GetInstalledDirectory(folder));
            arabicDoc.Save(Path.Combine(GetInstalledDirectory(folder), LocalizationManager.GetTmxFileNameForLanguage(AppId, "ar")));
        }
コード例 #10
0
        public void CreateOrUpdateDefaultTmxFileIfNecessary_CopiesInstalledIfAvailable()
        {
            using (var folder = new TempFolder("CreateOrUpdate_CopiesInstalledIfAvailable"))
            {
                // SUT (buried down in there somewhere)
                SetupManager(folder);

                // verify presence and identicality of the generated file to the installed file
                var filename          = LocalizationManager.GetTmxFileNameForLanguage(AppId, LocalizationManager.kDefaultLang);
                var installedFilePath = Path.Combine(GetInstalledDirectory(folder), filename);
                var generatedFilePath = Path.Combine(GetGeneratedDirectory(folder), filename);
                Assert.That(File.Exists(generatedFilePath), "Generated file {0} should exist", generatedFilePath);
                FileAssert.AreEqual(installedFilePath, generatedFilePath, "Generated file should be copied from and identical to Installed file");
            }
        }
コード例 #11
0
        public void OrphanLogicNotUsedForEnglish()
        {
            using (var folder = new TempFolder("OrphanLogicNotUsedForEnglish"))
            {
                MakeEnglishTmxWithApparentOrphan(folder);
                var manager = new LocalizationManager(AppId, AppName, AppVersion,
                                                      GetInstalledDirectory(folder), GetUserModifiedDirectory(folder), GetUserModifiedDirectory(folder));

                LocalizationManager.LoadedManagers[AppId] = manager;

                Assert.That(LocalizationManager.GetDynamicStringOrEnglish(AppId, "SuperClassMethod.TestId", null, null, "en"), Is.EqualTo("Title"));
                // This will fail if we treated it as an orphan: the ID will not occur at all in the TMX.
                Assert.That(LocalizationManager.GetDynamicStringOrEnglish(AppId, "AnotherContext.AnotherDialog.TestId", null, null, "en"), Is.EqualTo("Title"));
            }
        }
コード例 #12
0
        public void OrphanLogicUsedForArabic_ButNotIfFoundInEnglishTmx()
        {
            using (var folder = new TempFolder("OrphanLogicUsedForArabic_ButNotIfFoundInEnglishTmx"))
            {
                MakeEnglishTmxWithApparentOrphan(folder);
                MakeArabicTmxWithApparentOrphans(folder, "Title");
                var manager = new LocalizationManager(AppId, AppName, AppVersion,
                                                      GetInstalledDirectory(folder), GetUserModifiedDirectory(folder), GetUserModifiedDirectory(folder));

                LocalizationManager.LoadedManagers[AppId] = manager;

                Assert.That(LocalizationManager.GetDynamicStringOrEnglish(AppId, "SuperClassMethod.TestId", null, null, "en"), Is.EqualTo("Title"));
                Assert.That(LocalizationManager.GetDynamicStringOrEnglish(AppId, "AnotherContext.AnotherDialog.TestId", null, null, "en"), Is.EqualTo("Title"));
                Assert.That(LocalizationManager.GetDynamicStringOrEnglish(AppId, "SuperClassMethod.TestId", null, null, "ar"), Is.EqualTo("Title in Arabic"));                 // remapped AnObsoleteNameForSuperclass.TestId
                Assert.That(LocalizationManager.GetDynamicStringOrEnglish(AppId, "AnotherContext.AnotherDialog.TestId", null, null, "ar"), Is.EqualTo("Title in Arabic"));     // not remapped, since English tmx validates it
            }
        }
コード例 #13
0
        public void ValidateInFoldersAgainstSchema()
        {
            LocalizationManager.UseLanguageCodeFolders = true;
            using (var folder = new TempFolder("FileLocation"))
            {
                Directory.CreateDirectory(folder.Path);
                new XLiffLocalizationManagerTests().SetupManager(folder);

                var schemas = new XmlSchemaSet();
                using (var reader = XmlReader.Create(SchemaLocation))
                {
                    schemas.Add("urn:oasis:names:tc:xliff:document:1.2", reader);

                    //English
                    var filename =
                        LocalizationManager.GetTranslationFileNameForLanguage("test", "en");
                    Assert.AreEqual(Path.Combine("en", "test.xlf"), filename);
                    var filepath = Path.Combine(folder.Path, filename);
                    var document = XDocument.Load(filepath);
                    document.Validate(schemas, (sender, args) =>
                                      Assert.Fail("Xliff saved at {0} did not validate against schema: {1}",
                                                  filepath, args.Message));

                    //French
                    filename =
                        LocalizationManager.GetTranslationFileNameForLanguage("test", "fr");
                    Assert.AreEqual(Path.Combine("fr", "test.xlf"), filename);
                    filepath = Path.Combine(folder.Path, filename);
                    document = XDocument.Load(filepath);
                    document.Validate(schemas, (sender, args) =>
                                      Assert.Fail("Xliff saved at {0} did not validate against schema: {1}",
                                                  filepath, args.Message));

                    //Arabic
                    filename =
                        LocalizationManager.GetTranslationFileNameForLanguage("test", "ar");
                    Assert.AreEqual(Path.Combine("ar", "test.xlf"), filename);
                    filepath = Path.Combine(folder.Path, filename);
                    document = XDocument.Load(filepath);
                    document.Validate(schemas, (sender, args) =>
                                      Assert.Fail("Xliff saved at {0} did not validate against schema: {1}",
                                                  filepath, args.Message));
                }
            }
        }
コード例 #14
0
        public void GetDynamicString_EnglishAndArabicHaveDifferentValuesOfEnglishString_EnglishTMXWins()
        {
            using (var folder = new TempFolder("GetString_EnglishAndArabicHaveDifferentValuesOfEnglishString_EnglishTMXWins"))
            {
                SetupManager(folder, "en");
                //This was the original assertion, and it worked:
                //   Assert.AreEqual("from English TMX", LocalizationManager.GetDynamicString(AppId, "theId", "some default"));
                //However, later I decided, I don't care what is in the English TMX, either. If the c# code just gave a new
                // value for this, what the c# code said should win. Who cares what's in the English TMX. It's only real
                // purpose in life is to provide a list of strings that have been disovered dynamically when the translator
                // needs a list of strings to translate (without it, the translator would have to cause the program to visit
                // each part of the UI so as to trip over all the GetDynamicString() calls.

                //So now, this is correct:

                Assert.AreEqual("from the c# code", LocalizationManager.GetDynamicString(AppId, "theId", "from the c# code"));
            }
        }
コード例 #15
0
        public void CreateOrUpdateDefaultTmxFileIfNecessary_DoesNotOverwriteUpToDateGeneratedFile()
        {
            using (var folder = new TempFolder("CreateOrUpdate_DoesNotOverwriteUpToDateGeneratedFile"))
            {
                var filename          = LocalizationManager.GetTmxFileNameForLanguage(AppId, LocalizationManager.kDefaultLang);
                var generatedFilePath = Path.Combine(GetGeneratedDirectory(folder), filename);

                // "generate" an English TMX for a higher version
                Directory.CreateDirectory(GetGeneratedDirectory(folder));
                AddEnglishTmx(GetGeneratedDirectory(folder), HigherVersion);
                var generatedTmxContents = File.ReadAllText(generatedFilePath);

                // SUT (buried down in there somewhere)
                SetupManager(folder);

                // verify identicality of the generated file to its previous state
                Assert.AreEqual(generatedTmxContents, File.ReadAllText(generatedFilePath), "Generated file should not have been overwritten");
            }
        }
コード例 #16
0
        public void LocalizedStringCache_LoadGroupNodes_DoesntLoadNoLongerUsedUnitsUIEnglish()
        {
            using (var folder = new TempFolder("LoadGroupNodes_EnglishTMXHasNoLongerUsedProperty_ArabicDoesnt_NoLongerUsedWins_EnglishUI"))
            {
                // Add a "generated" TMX for a lower version to force regeneration
                Directory.CreateDirectory(GetGeneratedDirectory(folder));
                AddEnglishTmx(GetGeneratedDirectory(folder), LowerVersion);

                SetupManager(folder, "en");
                var mgr      = LocalizationManager.LoadedManagers[AppId];
                var treeView = new TreeView();
                var node     = new LocTreeNode(mgr, mgr.Name, null, mgr.Name);
                treeView.Nodes.Add(node);
                var treeNodes = node.Nodes;
                mgr.StringCache.LoadGroupNodes(treeNodes);
                Assert.IsFalse(treeNodes.ContainsKey("notUsedId"));
                Assert.IsTrue(treeNodes.ContainsKey("theId"));
            }
        }
コード例 #17
0
        public void OrphanLogicNotUsed_WithWrongEnglishSource()
        {
            using (var folder = new TempFolder("OrphanLogicNotUsed_WithWrongEnglishSource"))
            {
                MakeEnglishTmxWithApparentOrphan(folder);
                // The critical difference compared to OrphanLogicUsedForArabic_ButNotIfFoundInEnglishTmx is that the English version of the orphan doesn't match
                MakeArabicTmxWithApparentOrphans(folder, "Some other Title, unrelated to SuperclassMethod.TestId");
                var manager = new LocalizationManager(AppId, AppName, AppVersion,
                                                      GetInstalledDirectory(folder), GetUserModifiedDirectory(folder), GetUserModifiedDirectory(folder));

                LocalizationManager.LoadedManagers[AppId] = manager;

                Assert.That(LocalizationManager.GetDynamicStringOrEnglish(AppId, "SuperClassMethod.TestId", null, null, "en"), Is.EqualTo("Title"));
                Assert.That(LocalizationManager.GetDynamicStringOrEnglish(AppId, "AnotherContext.AnotherDialog.TestId", null, null, "en"), Is.EqualTo("Title"));
                Assert.That(LocalizationManager.GetDynamicStringOrEnglish(AppId, "SuperClassMethod.TestId", null, null, "ar"), Is.EqualTo("Title"));                       // no remapping, English doesn't match, so we have no Arabic, use English
                Assert.That(LocalizationManager.GetDynamicStringOrEnglish(AppId, "AnotherContext.AnotherDialog.TestId", null, null, "ar"), Is.EqualTo("Title in Arabic")); // not remapped, since English tmx validates it
                // We don't really care what happens to the entry for AnObsoleteNameForSuperclass.TestId, since presumably it is truly obsolete.
            }
        }
コード例 #18
0
        public void CreateOrUpdateDefaultTmxFileIfNecessary_CopiesOverEmptyGeneratedFile()
        {
            using (var folder = new TempFolder("CreateOrUpdate_CopiesOverEmptyGeneratedFile"))
            {
                var filename          = LocalizationManager.GetTmxFileNameForLanguage(AppId, LocalizationManager.kDefaultLang);
                var installedFilePath = Path.Combine(GetInstalledDirectory(folder), filename);
                var generatedFilePath = Path.Combine(GetGeneratedDirectory(folder), filename);

                // generate an empty English TMX file
                Directory.CreateDirectory(GetGeneratedDirectory(folder));
                var fileStream = File.Open(generatedFilePath, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
                fileStream.Close();

                // SUT (buried down in there somewhere)
                SetupManager(folder);

                // verify identicality of the generated file to the installed file
                FileAssert.AreEqual(installedFilePath, generatedFilePath, "Generated file should be copied from and identical to Installed file");
            }
        }
コード例 #19
0
        public void GetAvailableUILanguageTags_AddRandomTranslation_FindsTmxFileInUserModifiedDirectory()
        {
            using (var folder = new TempFolder())
            {
                SetupManager(folder);

                // add a custom localization in the User Modified directory
                AddRandomTranslation("ii", GetUserModifiedDirectory(folder));

                // load available localizations
                var lm   = LocalizationManager.LoadedManagers.Values.First();
                var tags = lm.GetAvailableUILanguageTags().ToArray();

                // was the 'ii' tag found?
                Assert.That(tags.Contains("ii"), Is.True,
                            "Tag 'ii' not found.");

                // is the TMX file in the User Modified directory?
                Assert.That(File.Exists(Path.Combine(GetUserModifiedDirectory(folder), "test.ii.tmx")), Is.True,
                            "File 'test.ii.tmx' not found in User Modified directory.");
            }
        }
コード例 #20
0
        public void CreateOrUpdateDefaultTmxFileIfNecessary_OverwritesOutdatedGeneratedFile()
        {
            using (var folder = new TempFolder("CreateOrUpdate_OverwritesOutdatedGeneratedFile"))
            {
                var filename          = LocalizationManager.GetTmxFileNameForLanguage(AppId, LocalizationManager.kDefaultLang);
                var generatedFilePath = Path.Combine(GetGeneratedDirectory(folder), filename);

                // "generate" an English TMX for a lower version
                Directory.CreateDirectory(GetGeneratedDirectory(folder));
                AddEnglishTmx(GetGeneratedDirectory(folder), LowerVersion);

                // SUT (buried down in there somewhere)
                SetupManager(folder);

                // verify that the generated file has been updated to the current version
                var headerElt  = XElement.Load(generatedFilePath).Element("header");
                var verElement = headerElt == null ? null
                                        : headerElt.Elements("prop").FirstOrDefault(e => (string)e.Attribute("type") == LocalizationManager.kAppVersionPropTag);
                var generatedVersion = verElement == null ? null : new Version(verElement.Value);
                Assert.AreEqual(new Version(AppVersion), generatedVersion, "Generated file should have been updated to the current version");
            }
        }
コード例 #21
0
 private static string GetUserModifiedDirectory(TempFolder parentDir)
 {
     return(parentDir.Combine("userModified"));
 }
コード例 #22
0
 private static string GetInstalledDirectory(TempFolder parentDir)
 {
     return(parentDir.Path);            // no reason we can't use the root temp dir for the "installed" Tmx's
 }
コード例 #23
0
 private static string GetGeneratedDirectory(TempFolder parentDir)
 {
     return(parentDir.Combine("generated"));
 }