示例#1
0
        /// <summary>
        /// Helper method for FixHyperlinkFolder_linkTextSameAsLink_isUpdated and
        /// FixHyperlinkFolder_linkTextSameAsLinkDespiteChangeOfPlatform_linkTextIsUpdated.
        /// </summary>
        private void FixHyperlinkFolder_linkTextSameAsLink_helper(string origPathSetInDatabase,
                                                                  string lookupPath, string lookupResultToVerify, string pathToRebaseFrom,
                                                                  string pathToRebaseTo, string rebasedPathToVerify)
        {
            var entry = MakeEntry("kick", "hit with foot");

            var       link          = origPathSetInDatabase;
            ITsString paragraph     = TsStringUtils.MakeString("abc" + link + "def", Cache.DefaultAnalWs);
            var       linkBeginning = "abc".Length;
            var       linkEnding    = linkBeginning + link.Length;
            var       bldr          = paragraph.GetBldr();
            var       linkStyle     = MakeStyle("testStyle");

            StringServices.MarkTextInBldrAsHyperlink(bldr, linkBeginning, linkEnding, link, linkStyle);
            entry.LiteralMeaning.AnalysisDefaultWritingSystem = bldr.GetString();

            var hyperlinkInfo = StringServices.GetHyperlinksInFolder(Cache, lookupPath);

            // There should be one hyperlink, and with the proper path.
            Assert.That(hyperlinkInfo, Has.Count.EqualTo(1), "Mistake in unit test");
            var relPath = lookupResultToVerify;

            VerifyHyperlinkInfo(hyperlinkInfo, entry, LexEntryTags.kflidLiteralMeaning,
                                Cache.DefaultAnalWs, linkBeginning, linkEnding, relPath);
            VerifyObjData(entry.LiteralMeaning.AnalysisDefaultWritingSystem, linkBeginning,
                          linkEnding, link);

            // Update links
            StringServices.FixHyperlinkFolder(hyperlinkInfo, pathToRebaseFrom, pathToRebaseTo);
            VerifyHyperlinkInfo(hyperlinkInfo, entry, LexEntryTags.kflidLiteralMeaning,
                                Cache.DefaultAnalWs, linkBeginning, linkEnding, lookupResultToVerify);

            // Check that link text was updated, not just its link

            VerifyObjData(entry.LiteralMeaning.AnalysisDefaultWritingSystem, linkBeginning,
                          linkBeginning + rebasedPathToVerify.Length, rebasedPathToVerify);

            var       linkInfo   = hyperlinkInfo.First();
            var       obj        = linkInfo.Object;
            var       domainData = obj.Cache.DomainDataByFlid;
            ITsString updatedParagraph;

            if (linkInfo.Ws == 0)
            {
                updatedParagraph = domainData.get_StringProp(obj.Hvo, linkInfo.Flid);
            }
            else
            {
                updatedParagraph = domainData.get_MultiStringAlt(obj.Hvo, linkInfo.Flid, linkInfo.Ws);
            }
            Assert.That(updatedParagraph.Text, Is.EqualTo("abc" + rebasedPathToVerify + "def"),
                        "Link text was not updated properly");
        }
示例#2
0
        public void GetHyperlinksInFolder()
        {
            // Test cases cover multistring, regular string, two matches in same string, and a link that doesn't match.
            var        entry     = MakeEntry("kick", "hit with foot");
            var        link      = FileUtils.ChangeWindowsPathIfLinux(@"c:\testlangproj\linkedFiles\other\Myfile.wav");
            ITsString  tss       = TsStringUtils.MakeString("This here is a link", Cache.DefaultAnalWs);
            ITsStrBldr bldr      = tss.GetBldr();
            var        linkStyle = MakeStyle("testStyle");

            StringServices.MarkTextInBldrAsHyperlink(bldr, 5, 9, link, linkStyle);
            entry.LiteralMeaning.AnalysisDefaultWritingSystem = bldr.GetString();

            var para = MakeSimpleText("OneTwoSix");

            bldr = para.Contents.GetBldr();
            StringServices.MarkTextInBldrAsHyperlink(bldr, 0, 3, link, linkStyle);
            StringServices.MarkTextInBldrAsHyperlink(bldr, 3, 6, "This is a link but not matching", linkStyle);
            StringServices.MarkTextInBldrAsHyperlink(bldr, 6, 9, link, linkStyle);
            para.Contents = bldr.GetString();

            var para2 = MakeSimpleText("ab" + link + "cd" + link + "ef");

            bldr = para2.Contents.GetBldr();
            StringServices.MarkTextInBldrAsHyperlink(bldr, 2, link.Length + 2, link, linkStyle);
            StringServices.MarkTextInBldrAsHyperlink(bldr, 4 + link.Length, 4 + 2 * link.Length, link, linkStyle);
            para2.Contents = bldr.GetString();

            var hyperlinkInfo = StringServices.GetHyperlinksInFolder(Cache, FileUtils.ChangeWindowsPathIfLinux(@"c:\testlangproj\linkedFiles"));

            Assert.That(hyperlinkInfo, Has.Count.EqualTo(5), "should find all four matching links but not the other one");
            var relPath = FileUtils.ChangeWindowsPathIfLinux(@"other\Myfile.wav");

            VerifyHyperlinkInfo(hyperlinkInfo, entry, LexEntryTags.kflidLiteralMeaning, Cache.DefaultAnalWs, 5, 9, relPath);
            VerifyHyperlinkInfo(hyperlinkInfo, para, StTxtParaTags.kflidContents, 0, 0, 3, relPath);
            VerifyHyperlinkInfo(hyperlinkInfo, para, StTxtParaTags.kflidContents, 0, 6, 9, relPath);
            VerifyHyperlinkInfo(hyperlinkInfo, para2, StTxtParaTags.kflidContents, 0, 2, link.Length + 2, relPath);
            VerifyHyperlinkInfo(hyperlinkInfo, para2, StTxtParaTags.kflidContents, 0, 4 + link.Length, 4 + 2 * link.Length, relPath);

            StringServices.FixHyperlinkFolder(hyperlinkInfo, FileUtils.ChangeWindowsPathIfLinux(@"c:\testlangproj\linkedFiles"), FileUtils.ChangeWindowsPathIfLinux(@"c:\testlangproj\externalLinks"));
            var newText = FileUtils.ChangeWindowsPathIfLinux(@"c:\testlangproj\externalLinks\other\Myfile.wav");

            VerifyObjData(entry.LiteralMeaning.AnalysisDefaultWritingSystem, 5, 9, FileUtils.ChangeWindowsPathIfLinux(@"c:\testlangproj\externalLinks\other\Myfile.wav"));
            VerifyObjData(para.Contents, 0, 3, newText);
            VerifyObjData(para.Contents, 6, 9, newText);
            Assert.That(para2.Contents.Text, Is.EqualTo("ab" + newText + "cd" + newText + "ef"));
            VerifyObjData(para2.Contents, 2, newText.Length + 2, newText);
            VerifyObjData(para2.Contents, 4 + newText.Length, 4 + 2 * newText.Length, newText);
        }
示例#3
0
        public void FixHyperlinkFolder_changeOfPlatform()
        {
            // When running on Windows, call "foreign"="Linux" and "current"="Windows".
            // When running on Linux, call "foreign"="Windows" and "current"="Linux".

            string origPathSetInDatabase          = MiscUtils.IsUnix ? @"c:\origdir\file.txt" : "/origdir/file.txt";
            string newPlatformStyleLookupPath     = MiscUtils.IsUnix ? "/origdir" : @"C:\origdir";
            string newPlatformStyleResultToVerify = MiscUtils.IsUnix ? "file.txt" : "file.txt";
            string pathToRebaseFrom    = MiscUtils.IsUnix ? "/origdir" : @"C:\origdir";
            string pathToRebaseTo      = MiscUtils.IsUnix ? "/newdir" : @"C:\newdir";
            string rebasedPathToVerify = MiscUtils.IsUnix ? "/newdir/file.txt": @"C:\newdir\file.txt";

            // Add an external link into database and look it up
            var output = GetHyperlinksInFolder_changeOfPlatform_helper(origPathSetInDatabase,
                                                                       newPlatformStyleLookupPath, newPlatformStyleResultToVerify);
            var hyperlinkInfo = output.Item1;
            var entry         = output.Item2;

            // Update link paths using currentOS-style paths, even though they are presently stored
            // as foreign-style paths.
            StringServices.FixHyperlinkFolder(hyperlinkInfo, pathToRebaseFrom, pathToRebaseTo);
            VerifyHyperlinkInfo(hyperlinkInfo, entry, LexEntryTags.kflidLiteralMeaning, Cache.DefaultAnalWs, 5, 9, newPlatformStyleResultToVerify);
            VerifyObjData(entry.LiteralMeaning.AnalysisDefaultWritingSystem, 5, 9, rebasedPathToVerify);
        }