public void SparseAnalyses_NoEdits_SimpleSegmentParagraph() { // First set sparse analyses on wordforms that have multiple occurrences. ParagraphBuilder pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.SimpleSegmentPara); ParagraphAnnotatorForParagraphBuilder tapb = new ParagraphAnnotatorForParagraphBuilder(pb); pb.ParseParagraph(); string gloss; IWfiGloss gloss_xxxyalola1_2 = tapb.SetDefaultWordGloss(1, 2, out gloss); IWfiGloss gloss_xxxnihimbilira2_1 = tapb.SetDefaultWordGloss(2, 1, out gloss); // now parse through the text and make sure our two glosses are maintained. pb.ParseParagraph(); Assert.AreEqual(gloss_xxxyalola1_2, tapb.GetAnalysis(1, 2)); Assert.AreEqual(gloss_xxxnihimbilira2_1, tapb.GetAnalysis(2, 1)); // validate the rest of the stuff. tapb.ValidateAnnotations(); }
public void SegmentInitialUppercaseWordMatchesLowercaseWordform() { // prepopulate lowercase Wordforms new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.SimpleSegmentPara).ParseParagraph(); // Build and parse paragraph var pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.MixedCases); var tapb = new ParagraphAnnotatorForParagraphBuilder(pb); pb.ParseParagraph(); // Verify WF's are reused across case iff appropriate: Assert.AreEqual( tapb.GetAnalysis(0, 0), tapb.GetAnalysis(1, 1), "Initial Xxxpus should have been interpreted as sentence case"); Assert.AreNotEqual(tapb.GetAnalysis(0, 1), tapb.GetAnalysis(1, 2), "Mid-sentence Xxxyalola should not match lowercase WF"); Assert.AreNotEqual(tapb.GetAnalysis(0, 2), tapb.GetAnalysis(1, 0), "Congratulations! You fixed it! Please Assert.AreEqual with this message: xxxnihimbilira should have been reused for segment initial."); Assert.AreNotEqual(tapb.GetAnalysis(0, 2), tapb.GetAnalysis(2, 1), "XXXNIHIMBILIRA should have been given its own all-caps WF"); }
public void SparseAnalyses_SimpleEdits_SimpleSegmentParagraph_DuplicateWordforms_AddWhitespace_LT5313() { // First set sparse analyses on wordforms that have multiple occurrences. ParagraphBuilder pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.SimpleSegmentPara); pb.ParseParagraph(); ParagraphAnnotatorForParagraphBuilder tapb = new ParagraphAnnotatorForParagraphBuilder(pb); string gloss; var gloss0_1 = tapb.SetDefaultWordGloss(0, 1, out gloss); // xxxyalola 1 var gloss1_1 = tapb.SetDefaultWordGloss(1, 1, out gloss); // xxxpus 2 var gloss2_1 = tapb.SetDefaultWordGloss(2, 1, out gloss); // xxxnihimbilira 3 tapb.ValidateAnnotations(); // precondition testing. // Append whitespace in the text, and see if the analyses still show up in the right place // (cf. LT-5313). pb.ReplaceTrailingWhitepace(0, 0, 1); pb.RebuildParagraphContentFromAnnotations(); pb.ParseParagraph(); Assert.AreEqual(gloss0_1, tapb.GetAnalysis(0, 1)); Assert.AreEqual(gloss1_1, tapb.GetAnalysis(1, 1)); Assert.AreEqual(gloss2_1, tapb.GetAnalysis(2, 1)); tapb.ValidateAnnotations(); }
public void SparseAnalyses_NoEdits_MixedCaseWordformsParagraph() { // First set sparse analyses on wordforms that have multiple occurrences. ParagraphBuilder pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.MixedCases); ParagraphAnnotatorForParagraphBuilder tapb = new ParagraphAnnotatorForParagraphBuilder(pb); pb.ParseParagraph(); // set the corresponding annotations to lowercase wordforms. IWfiWordform wf_xxxpus0_0 = tapb.SetAlternateCase("Xxxpus", 0, StringCaseStatus.allLower); IWfiWordform wf_xxxnihimbilira1_0 = tapb.SetAlternateCase("Xxxnihimbilira", 0, StringCaseStatus.allLower); IWfiWordform wf_xxxhesyla2_0 = tapb.SetAlternateCase("Xxxhesyla", 0, StringCaseStatus.allLower); IWfiWordform wf_xxxnihimbilira2_1 = tapb.SetAlternateCase("XXXNIHIMBILIRA", 0, StringCaseStatus.allLower); pb.ParseParagraph(); Assert.AreEqual(wf_xxxpus0_0, tapb.GetAnalysis(0, 0)); Assert.AreEqual(wf_xxxnihimbilira1_0, tapb.GetAnalysis(1, 0)); Assert.AreEqual(wf_xxxhesyla2_0, tapb.GetAnalysis(2, 0)); Assert.AreEqual(wf_xxxnihimbilira2_1, tapb.GetAnalysis(2, 1)); tapb.ValidateAnnotations(); }
public void SparseAnalyses_SimpleEdits_SimpleSegmentParagraph_DuplicateWordforms() { // First set sparse analyses on wordforms that have multiple occurrences. ParagraphBuilder pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.SimpleSegmentPara); ParagraphAnnotatorForParagraphBuilder tapb = new ParagraphAnnotatorForParagraphBuilder(pb); pb.ParseParagraph(); IWfiGloss gloss_xxxyalola0_1 = tapb.SetDefaultWordGloss("xxxyalola", 0); // gloss first occurrence. IWfiGloss gloss_xxxpus1_1 = tapb.SetDefaultWordGloss("xxxpus", 1); // gloss second occurrence. IWfiGloss gloss_xxxnihimbilira2_1 = tapb.SetDefaultWordGloss("xxxnihimbilira", 2); // gloss third occurrence. pb.ParseParagraph(); var actualAnalysis_xxxyalola0_1 = tapb.GetAnalysis(0, 1); var actualAnalysis_xxxpus1_1 = tapb.GetAnalysis(1, 1); var actualAnalysis_xxxnihimbilira2_1 = tapb.GetAnalysis(2, 1); Assert.AreEqual(gloss_xxxyalola0_1, actualAnalysis_xxxyalola0_1); Assert.AreEqual(gloss_xxxpus1_1, actualAnalysis_xxxpus1_1); Assert.AreEqual(gloss_xxxnihimbilira2_1, actualAnalysis_xxxnihimbilira2_1); // verify the rest tapb.ValidateAnnotations(); // Replace some occurrences of these wordforms from the text to validate the analysis does not show up on the wrong occurrence. // Remove the first occurrence of 'xxxnihimbilira'; the (newly) second occurrence should still have the gloss. pb.ReplaceSegmentForm("xxxnihimbilira", 0, ""); pb.RebuildParagraphContentFromAnnotations(); pb.ParseParagraph(); actualAnalysis_xxxnihimbilira2_1 = tapb.GetAnalysis(2, 1); Assert.AreEqual(gloss_xxxnihimbilira2_1, actualAnalysis_xxxnihimbilira2_1); tapb.ValidateAnnotations(); // Remove first occurrence of 'xxxpus'; the next one should still have the gloss. pb.ReplaceSegmentForm("xxxpus", 0, ""); pb.RebuildParagraphContentFromAnnotations(); pb.ParseParagraph(); actualAnalysis_xxxpus1_1 = tapb.GetAnalysis(1, 1); Assert.AreEqual(gloss_xxxpus1_1, actualAnalysis_xxxpus1_1); tapb.ValidateAnnotations(); }
public void SparseAnalyses_SimpleEdits_SimpleSegmentParagraph_DuplicateWordforms_RemoveSegment_LT5376() { // First set sparse analyses on wordforms that have multiple occurrences. ParagraphBuilder pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.SimpleSegmentPara); pb.ParseParagraph(); ParagraphAnnotatorForParagraphBuilder tapb = new ParagraphAnnotatorForParagraphBuilder(pb); tapb.SetDefaultWordGloss("xxxyalola", 0); // gloss first occurrence. tapb.ValidateAnnotations(); // Remove first sentence containing 'xxxyalola'; its annotation should be removed. pb.RemoveSegment(0); pb.RebuildParagraphContentFromAnnotations(); pb.ParseParagraph(); tapb.ValidateAnnotations(); }
//[Ignore("FWC-16: this test causes NUnit to hang in fixture teardown - need more investigation")] public void Phrase_MakeAndBreak() { // 1. Make Phrases IList<int[]> secondaryPathsToJoinWords = new List<int[]>(); IList<int[]> secondaryPathsToBreakPhrases = new List<int[]>(); ParagraphBuilder pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.PhraseWordforms); ParagraphAnnotatorForParagraphBuilder tapb = new ParagraphAnnotatorForParagraphBuilder(pb); pb.ParseParagraph(); // first do a basic phrase (without secondary phrases (guesses)) and break it // [xxxpus xxxyalola] xxxnihimbilira. xxxpus xxxyalola xxxhesyla xxxnihimbilira. xxxpus xxxyalola xxxnihimbilira tapb.MergeAdjacentAnnotations(0, 0, secondaryPathsToJoinWords, secondaryPathsToBreakPhrases); tapb.ValidateAnnotations(true); // \xxxpus\ \xxxyalola\ xxxnihimbilira. xxxpus xxxyalola xxxhesyla xxxnihimbilira. xxxpus xxxyalola xxxnihimbilira secondaryPathsToJoinWords.Clear(); secondaryPathsToBreakPhrases.Clear(); tapb.BreakPhrase(0, 0, secondaryPathsToBreakPhrases, secondaryPathsToJoinWords, null); tapb.ValidateAnnotations(true); // make phrases with secondary phrases (guesses). // [xxxpus xxxyalola] xxxnihimbilira. {xxxpus xxxyalola} xxxhesyla xxxnihimbilira. {xxxpus xxxyalola} xxxnihimbilira secondaryPathsToJoinWords.Clear(); secondaryPathsToBreakPhrases.Clear(); secondaryPathsToJoinWords.Add(new int[2] { 1, 0 }); // {xxxpus xxxyalola} xxxhesyla secondaryPathsToJoinWords.Add(new int[2] { 2, 0 }); // {xxxpus xxxyalola} xxxnihimbilira tapb.MergeAdjacentAnnotations(0, 0, secondaryPathsToJoinWords, secondaryPathsToBreakPhrases); // then check that the last phrase has been properly annotated. tapb.ValidateAnnotations(); // JohnT: in 6.0, making the larger phrase would apparently get rid of the guessed phrase. // in 7.0+ there's no distinction between a guess and user-made phrase, so once it exists it doesn't go away. // [xxxpus xxxyalola xxxnihimbilira]. [xxxpus xxxyalola] xxxhesyla xxxnihimbilira. {xxxpus xxxyalola xxxnihimbilira}. secondaryPathsToJoinWords.Clear(); secondaryPathsToBreakPhrases.Clear(); // 7.0+ secondaryPathsToBreakPhrases.Add(new int[2] { 1, 0 }); // \xxxpus\ \xxxyalola\ xxxhesyla secondaryPathsToJoinWords.Add(new int[2] { 2, 0 }); // {{xxxpus xxxyalola} xxxnihimbilira} tapb.MergeAdjacentAnnotations(0, 0, secondaryPathsToJoinWords, secondaryPathsToBreakPhrases); tapb.ValidateAnnotations(); // [xxxpus xxxyalola xxxnihimbilira]. [xxxpus xxxyalola] xxxhesyla xxxnihimbilira. {xxxpus xxxyalola xxxnihimbilira} // 7.0+ nothing to do here; it's in this state after the previous change. //secondaryPathsToJoinWords.Clear(); //secondaryPathsToBreakPhrases.Clear(); //tapb.MergeAdjacentAnnotations(1, 0, secondaryPathsToJoinWords, secondaryPathsToBreakPhrases); //tapb.ValidateAnnotations(); // 2. Break Phrases. // [xxxpus xxxyalola xxxnihimbilira]. \xxxpus\ \xxxyalola\ xxxhesyla xxxnihimbilira. {xxxpus xxxyalola xxxnihimbilira} secondaryPathsToJoinWords.Clear(); secondaryPathsToBreakPhrases.Clear(); tapb.BreakPhrase(1, 0, secondaryPathsToBreakPhrases, secondaryPathsToJoinWords, null); tapb.ValidateAnnotations(); // [\xxxpus\ \xxxyalola\ \xxxnihimbilira\]. xxxpus xxxyalola xxxhesyla xxxnihimbilira. {\xxxpus\ \xxxyalola\ \xxxnihimbilira\} secondaryPathsToBreakPhrases.Clear(); // 7.0+ secondaryPathsToBreakPhrases.Add(new int[2] { 2, 0 }); // {\xxxpus\ \xxxyalola\ \xxxnihimbilira\} tapb.BreakPhrase(0, 0, secondaryPathsToBreakPhrases, secondaryPathsToJoinWords, null); tapb.ValidateAnnotations(); // 7.0+ breaking the guessed phrase has to be an extra step. tapb.BreakPhrase(2, 0, secondaryPathsToBreakPhrases, secondaryPathsToJoinWords, null); tapb.ValidateAnnotations(); // gloss the second occurrence of xxxyalola and check that we don't overwrite it with a secondary guess. secondaryPathsToJoinWords.Clear(); secondaryPathsToBreakPhrases.Clear(); // [xxxpus xxxyalola] xxxnihimbilira. xxxpus [xxxyalola] xxxhesyla xxxnihimbilira. {xxxpus xxxyalola} xxxnihimbilira tapb.SetDefaultWordGloss("xxxyalola", 1); secondaryPathsToJoinWords.Add(new int[2] { 2, 0 }); // {xxxpus xxxyalola} xxxnihimbilira tapb.MergeAdjacentAnnotations(0, 0, secondaryPathsToJoinWords, secondaryPathsToBreakPhrases); tapb.ValidateAnnotations(); // reparse so that we can 'confirm' "xxxpus xxxyalola" phrase. tapb.SetDefaultWordGloss("xxxpus xxxyalola", 0); // 'confirm' this merge. tapb.ValidateAnnotations(); // join the last occurrence of 'xxxpus xxxyalola xxxnihimbilira' // and check that we don't overwrite the first join of 'xxxpus xxxyalola' with a secondary guess. secondaryPathsToJoinWords.Clear(); secondaryPathsToBreakPhrases.Clear(); // [xxxpus xxxyalola] xxxnihimbilira. xxxpus [xxxyalola] xxxhesyla xxxnihimbilira. [xxxpus xxxyalola xxxnihimbilira] tapb.MergeAdjacentAnnotations(2, 0, secondaryPathsToJoinWords, secondaryPathsToBreakPhrases); tapb.ValidateAnnotations(); // reparse so that we can 'confirm' "xxxpus xxxyalola xxxnihimbilira" phrase. tapb.SetDefaultWordGloss("xxxpus xxxyalola xxxnihimbilira", 0); // 'confirm' this merge. tapb.ValidateAnnotations(); // make sure we can break our analysis. secondaryPathsToJoinWords.Clear(); secondaryPathsToBreakPhrases.Clear(); // [xxxpus xxxyalola] xxxnihimbilira. xxxpus [xxxyalola] xxxhesyla xxxnihimbilira. {\xxxpus\ \xxxyalola\} \xxxnihimbilira\ // In 6.0, apparently we would re-guess the shorter pus yalola phrase. In 7.0+, breaking a phrase does not // produce a new parse and new phrase guesses. Otherwise, if the longer phrase still existed somewhere else, // it would be guessed again! Don't see how this ever worked right, except that after breaking the phrase the // user would usually annotate the parts before there was occasion to re-parse. // 7.0+ secondaryPathsToJoinWords.Add(new int[2] { 2, 0 }); // {xxxpus xxxyalola} xxxnihimbilira tapb.BreakPhrase(2, 0, secondaryPathsToBreakPhrases, secondaryPathsToJoinWords, "xxxpus xxxyalola"); tapb.ValidateAnnotations(); }
public void Phrase_SimpleEdits_LT6244() { // 1. Make Phrases IList<int[]> secondaryPathsToJoinWords = new List<int[]>(); IList<int[]> secondaryPathsToBreakPhrases = new List<int[]>(); ParagraphBuilder pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.PhraseWordforms); ParagraphAnnotatorForParagraphBuilder tapb = new ParagraphAnnotatorForParagraphBuilder(pb); pb.ParseParagraph(); // first do a basic phrase (without secondary phrases (guesses)) // xxxpus xxxyalola xxxnihimbilira. xxxpus xxxyalola [xxxhesyla xxxnihimbilira]. xxxpus xxxyalola xxxnihimbilira tapb.MergeAdjacentAnnotations(1, 2, secondaryPathsToJoinWords, secondaryPathsToBreakPhrases); tapb.ValidateAnnotations(true); // edit the second word in the phrase. pb.ReplaceSegmentForm("xxxhesyla xxxnihimbilira", 0, "xxxhesyla xxxra"); pb.BreakPhraseAnnotation(1, 2); // this edit should break the phrase back into words. tapb.ValidateAnnotations(); }
public void NoAnalyses_SimpleEdits_MultipleWritingSystemsParagraph() { ParagraphBuilder pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.MultipleWritingSystems); // verify that our wfics point to wordforms in the expected wss. pb.ParseParagraph(); ParagraphAnnotatorForParagraphBuilder tapb = new ParagraphAnnotatorForParagraphBuilder(pb); FdoValidator.ValidateCbaWordToBaselineWord(tapb, 0, 0); //FdoValidator.ValidateCbaWordToBaselineWord(tapb, 0, 1); // currently considered punctuation. //FdoValidator.ValidateCbaWordToBaselineWord(tapb, 1, 0); // french word considered punctuation. //FdoValidator.ValidateCbaWordToBaselineWord(tapb, 1, 1); // eng word considered punctuation // FdoValidator.ValidateCbaWordToBaselineWord(tapb, 1, 4); // german word considered punctuation. // validate the rest tapb.ValidateAnnotations(); // xxxpus xxes xxxnihimbilira. xxfr xxen xxxnihimbilira xxxpus xxde. xxkal xxkal xxxxhesyla xxxxhesyla. // xxkal: German (de) -- occurrence 0 // xxkal: Kalaba (xkal) -- occurrence 1 Dictionary<string, int> expectedOccurrences = pb.ExpectedWordformsAndOccurrences; CheckExpectedWordformsAndOccurrences(pb.ActualParagraph, expectedOccurrences); // replace the german occurrence of "xxkal" with a xkal version. int wsDe; FdoValidator.GetTssStringValue(tapb, 2, 0, out wsDe); int wsVernDef = Cache.DefaultVernWs; Assert.AreNotEqual(wsVernDef, wsDe, "Precondition: did not expect to have a default vern ws."); pb.ReplaceSegmentForm(2, 0, "xxkal", wsVernDef); var segformNode = pb.SegmentFormNode(2, 0); // Now it should parse as a wfic. var linkNode = segformNode.SelectSingleNode("AnnotationType34/Link"); linkNode.Attributes["guid"].Value = ParagraphBuilder.WficGuid; linkNode.Attributes["name"].Value = "Wordform In Context"; expectedOccurrences.Remove("xxkal" + wsDe.ToString()); expectedOccurrences["xxkal" + wsVernDef.ToString()] += 1; pb.RebuildParagraphContentFromAnnotations(true); pb.ParseParagraph(); int wsAnalysis2_0; FdoValidator.GetTssStringValue(tapb, 2, 0, out wsAnalysis2_0); Assert.AreEqual(Cache.DefaultVernWs, wsAnalysis2_0, "Precondition: expected to have default vern ws."); FdoValidator.ValidateCbaWordToBaselineWord(tapb, 2, 0); // validate the rest. tapb.ValidateAnnotations(); CheckExpectedWordformsAndOccurrences(pb.ActualParagraph, expectedOccurrences); }
public void Phrase_Make() { // 1. Make Phrases IList<int[]> secondaryPathsToJoinWords = new List<int[]>(); IList<int[]> secondaryPathsToBreakPhrases = new List<int[]>(); ParagraphBuilder pb = new ParagraphBuilder(m_textsDefn, m_text1, (int) Text1ParaIndex.PhraseWordforms); ParagraphAnnotatorForParagraphBuilder tapb = new ParagraphAnnotatorForParagraphBuilder(pb); XmlNode paraDef0 = pb.ParagraphDefinition.CloneNode(true); XmlNode paraDef_afterJoin1_2; pb.ParseParagraph(); // xxxpus xxxyalola xxxnihimbilira. xxxpus xxxyalola [xxxhesyla xxxnihimbilira]. xxxpus xxxyalola xxxnihimbilira tapb.MergeAdjacentAnnotations(1, 2, secondaryPathsToJoinWords, secondaryPathsToBreakPhrases); tapb.ValidateAnnotations(); }
public void NoAnalyses_NoEdits_MultipleWritingSystemsParagraph_LT5379() { var pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.MultipleWritingSystems); var tapb = new ParagraphAnnotatorForParagraphBuilder(pb); pb.ParseParagraph(); tapb.ValidateAnnotations(); }
public void NoAnalyses_NoEdits_PhraseWordforms() { // 1. Setup Tests with a basic phrase ParagraphBuilder pb = new ParagraphBuilder(m_textsDefn, m_text1, (int) Text1ParaIndex.PhraseWordforms); // first do a basic phrase (without secondary phrases (guesses)) // xxxpus xxxyalola xxxnihimbilira. [xxxpus xxxyalola] xxxhesyla xxxnihimbilira. xxxpus xxxyalola xxxnihimbilira pb.MergeAdjacentAnnotations(1, 0); // generate mock ids pb.RebuildParagraphContentFromAnnotations(); // now produce a guess to establish the phrase annotation. var tapb = new ParagraphAnnotatorForParagraphBuilder(pb); pb.ParseParagraph(); pb.ActualParagraph.SegmentsOS[1].AnalysesRS.RemoveAt(0); // delete "xxxpus" // now replace "xxxyalola" with the new phrase form "xxxpus xxxyalola" IAnalysis beforeParse_phrase1_0 = pb.ExportCbaNodeToReal(1, 0); //string gloss; //IWfiGloss wg_phrase1_0 = tapb.SetDefaultWordGloss(1, 0, out gloss); // NOTE: Precondition checks to make sure we set up the annotation properly // The real test: now parse and verify that we maintained the expected result for the phrase annotation. pb.ParseParagraph(); var afterParse_actualWordform = tapb.GetAnalysis(1, 0); Assert.AreEqual(beforeParse_phrase1_0, afterParse_actualWordform, "word mismatch"); // verify the rest. tapb.ValidateAnnotations(); }
public void NoAnalyses_NoEdits( [Values(Text1ParaIndex.EmptyParagraph, Text1ParaIndex.SimpleSegmentPara, Text1ParaIndex.ComplexPunctuations, Text1ParaIndex.MixedCases, Text1ParaIndex.MultipleWritingSystems)] Text1ParaIndex paraIdx) { var pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)paraIdx); var tapb = new ParagraphAnnotatorForParagraphBuilder(pb); pb.ParseParagraph(); tapb.ValidateAnnotations(); }
public void Phrase_MakeAndBreak_UndoRedo() { CheckDisposed(); // 1. Make Phrases IList<int[]> secondaryPathsToJoinWords = new List<int[]>(); IList<int[]> secondaryPathsToBreakPhrases = new List<int[]>(); WordformInventory wfi = m_fdoCache.LangProject.WordformInventoryOA as WordformInventory; ParagraphBuilder pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.PhraseWordforms); ParagraphAnnotatorForParagraphBuilder tapb = new ParagraphAnnotatorForParagraphBuilder(pb); XmlNode paraDef0 = pb.ParagraphDefinition.CloneNode(true); XmlNode paraDef_afterJoin1_2; using (new UndoRedoTaskHelper(Cache, "Phrase_MakeAndBreak_UndoRedo_Join", "Phrase_MakeAndBreak_UndoRedo_Join")) { // xxxpus xxxyalola xxxnihimbilira. xxxpus xxxyalola [xxxhesyla xxxnihimbilira]. xxxpus xxxyalola xxxnihimbilira tapb.MergeAdjacentAnnotations(1, 2, secondaryPathsToJoinWords, secondaryPathsToBreakPhrases); tapb.ValidateAnnotations(); paraDef_afterJoin1_2 = pb.ParagraphDefinition.CloneNode(true) ; } UndoResult ures; Cache.Undo(out ures); WordformInventory.OnChangedWordformsOC(); pb.ParagraphDefinition = paraDef0; pb.ParseParagraph(false, false, false); tapb.ValidateAnnotations(); Cache.Redo(out ures); WordformInventory.OnChangedWordformsOC(); pb.ParagraphDefinition = paraDef_afterJoin1_2; pb.ParseParagraph(false, false, false); tapb.ValidateAnnotations(); paraDef_afterJoin1_2 = pb.ParagraphDefinition.CloneNode(true); XmlNode paraDef_afterBreak1_2; using (new UndoRedoTaskHelper(Cache, "Phrase_MakeAndBreak_UndoRedo_Break", "Phrase_MakeAndBreak_UndoRedo_Break")) { // xxxpus xxxyalola xxxnihimbilira. xxxpus xxxyalola /xxxhesyla/ /xxxnihimbilira/. xxxpus xxxyalola xxxnihimbilira secondaryPathsToJoinWords.Clear(); secondaryPathsToBreakPhrases.Clear(); tapb.BreakPhrase(1, 2, secondaryPathsToBreakPhrases, secondaryPathsToJoinWords, null); tapb.ValidateAnnotations(); paraDef_afterBreak1_2 = pb.ParagraphDefinition.CloneNode(true); } Cache.Undo(out ures); WordformInventory.OnChangedWordformsOC(); pb.ParagraphDefinition = paraDef_afterJoin1_2; pb.ParseParagraph(false, false, false); tapb.ValidateAnnotations(); Cache.Redo(out ures); WordformInventory.OnChangedWordformsOC(); pb.ParagraphDefinition = paraDef_afterBreak1_2; pb.ParseParagraph(false, false, false); tapb.ValidateAnnotations(); }
public void NoAnalyses_SimpleEdits_MultipleWritingSystemsParagraph() { CheckDisposed(); ParagraphBuilder pb = new ParagraphBuilder(m_textsDefn, m_text1, (int)Text1ParaIndex.MultipleWritingSystems); pb.ParseParagraph(true, true); // xxxpus xxes xxxnihimbilira. xxfr xxen xxxnihimbilira xxxpus xxde. xxkal xxkal xxxxhesyla xxxxhesyla. // xxkal: German (de) -- occurrence 0 // xxkal: Kalaba (xkal) -- occurrence 1 Dictionary<string, int> expectedOccurrences = pb.ExpectedWordformsAndOccurrences; WordformInventory wfi = Cache.LangProject.WordformInventoryOA as WordformInventory; CheckExpectedWordformsAndOccurrences(wfi, expectedOccurrences); // replace the german occurrence of "xxkal" with a xkal version. int hvoSeg2 = pb.ActualParagraph.Segments[2]; int hvoSegForm2_0 = pb.ActualParagraph.SegmentForms(hvoSeg2)[0]; StTxtPara.TwficInfo ti2_0 = new StTxtPara.TwficInfo(Cache, hvoSegForm2_0); int wsDe = StringUtils.GetWsAtOffset(pb.ActualParagraph.Contents.UnderlyingTsString, ti2_0.Object.BeginOffset); int wsVernDef = Cache.DefaultVernWs; Assert.AreNotEqual(wsVernDef, wsDe, "did not expect to have a default vern ws."); pb.ReplaceSegmentForm(2, 0, "xxkal", wsVernDef); expectedOccurrences.Remove("xxkal" + wsDe.ToString()); expectedOccurrences["xxkal" + wsVernDef.ToString()] += 1; pb.RebuildParagraphContentFromAnnotations(true, true); CheckExpectedWordformsAndOccurrences(wfi, expectedOccurrences); }