|
1 |
| -// Copyright (c) 2003-2018 SIL International |
| 1 | +// Copyright (c) 2003-2022 SIL International |
2 | 2 | // This software is licensed under the LGPL, version 2.1 or later
|
3 | 3 | // (http://www.gnu.org/licenses/lgpl-2.1.html)
|
4 | 4 |
|
@@ -549,23 +549,70 @@ public void Reference()
|
549 | 549 | AddDataToMatthew();
|
550 | 550 | var para1 = (IStTxtPara) m_book.SectionsOS[1].ContentOA.ParagraphsOS[0]; // Actually ScrTxtPara
|
551 | 551 | var seg = para1.SegmentsOS[1]; // first content ref, after the chapter and verse number stuff.
|
552 |
| - Assert.That(para1.Reference(seg, seg.BeginOffset + 1).Text, Is.EqualTo("MAT 1:1")); |
| 552 | + var v1Seg1Idx = seg.BeginOffset + 1; |
| 553 | + Assert.That(para1.Reference(seg, v1Seg1Idx).Text, Is.EqualTo("MAT 1:1")); |
| 554 | + Assert.That(para1.ReferenceForSorting(seg, v1Seg1Idx).Text, Is.EqualTo($"0 Scr 40_MAT 00001:00001 {v1Seg1Idx:D10}")); |
553 | 555 | AddRunToMockedPara(para1, "Verse two second sentence.", null);
|
554 |
| - var v2seg1 = para1.SegmentsOS[3]; // first segment of two-sentence verse |
555 |
| - Assert.That(para1.Reference(v2seg1, v2seg1.BeginOffset + 1).Text, Is.EqualTo("MAT 1:2a")); |
556 |
| - var v2seg2 = para1.SegmentsOS[4]; // first segment of two-sentence verse |
557 |
| - Assert.That(para1.Reference(v2seg2, v2seg2.BeginOffset + 1).Text, Is.EqualTo("MAT 1:2b")); |
| 556 | + var v2Seg1 = para1.SegmentsOS[3]; // first segment of two-sentence verse |
| 557 | + var v2Seg1Idx = v2Seg1.BeginOffset + 1; |
| 558 | + Assert.That(para1.Reference(v2Seg1, v2Seg1Idx).Text, Is.EqualTo("MAT 1:2a")); |
| 559 | + Assert.That(para1.ReferenceForSorting(v2Seg1, v2Seg1Idx).Text, Is.EqualTo($"0 Scr 40_MAT 00001:00002a {v2Seg1Idx:D10}")); |
| 560 | + var v2Seg2 = para1.SegmentsOS[4]; // first segment of two-sentence verse |
| 561 | + var v2Seg2Idx = v2Seg2.BeginOffset + 1; |
| 562 | + Assert.That(para1.Reference(v2Seg2, v2Seg2Idx).Text, Is.EqualTo("MAT 1:2b")); |
| 563 | + Assert.That(para1.ReferenceForSorting(v2Seg2, v2Seg2Idx).Text, Is.EqualTo($"0 Scr 40_MAT 00001:00002b {v2Seg2Idx:D10}")); |
558 | 564 | IStTxtPara para2 = AddParaToMockedSectionContent((IScrSection)para1.Owner.Owner, ScrStyleNames.NormalParagraph);
|
559 | 565 | AddRunToMockedPara(para2, "Verse 2 seg 3", null);
|
560 |
| - var v2seg3 = para2.SegmentsOS[0]; // third segment of three-sentence verse split over two paragraphs. |
561 |
| - Assert.That(para2.Reference(v2seg3, v2seg3.BeginOffset + 1).Text, Is.EqualTo("MAT 1:2c")); |
| 566 | + var v2Seg3 = para2.SegmentsOS[0]; // third segment of three-sentence verse split over two paragraphs. |
| 567 | + var v2Seg3Idx = v2Seg3.BeginOffset + 1; |
| 568 | + Assert.That(para2.Reference(v2Seg3, v2Seg3Idx).Text, Is.EqualTo("MAT 1:2c")); |
| 569 | + Assert.That(para2.ReferenceForSorting(v2Seg3, v2Seg3Idx).Text, Is.EqualTo($"0 Scr 40_MAT 00001:00002c {v2Seg3Idx:D10}")); |
562 | 570 | var newSection = AddSectionToMockedBook(m_book);
|
563 | 571 | IStTxtPara para3 = AddParaToMockedSectionContent(newSection, ScrStyleNames.NormalParagraph);
|
564 | 572 | AddRunToMockedPara(para3, "Verse 2 seg 4", null);
|
565 |
| - var v2seg4 = para3.SegmentsOS[0]; // fourth segment of four-sentence verse split over two sections(!). |
| 573 | + var v2Seg4 = para3.SegmentsOS[0]; // fourth segment of four-sentence verse split over two sections(!). |
| 574 | + var v2Seg4Idx = v2Seg4.BeginOffset + 1; |
566 | 575 | // JohnT: arguably this should give MAT 1:2d. The current implementation does not detect the
|
567 | 576 | // segments in the previous section.
|
568 |
| - Assert.That(para3.Reference(v2seg4, v2seg4.BeginOffset + 1).Text, Is.EqualTo("MAT 1:2")); |
| 577 | + Assert.That(para3.Reference(v2Seg4, v2Seg4Idx).Text, Is.EqualTo("MAT 1:2")); |
| 578 | + Assert.That(para3.ReferenceForSorting(v2Seg4, v2Seg4Idx).Text, Is.EqualTo($"0 Scr 40_MAT 00001:00002 {v2Seg4Idx:D10}")); |
| 579 | + |
| 580 | + var scrBook1Samuel = CreateBookData(9, "1 Samuel"); |
| 581 | + //var scrBookSusanna = CreateBookData(75/*?*/, "Susanna"); |
| 582 | + // TODO (Hasso) 2022.03: Enoch or some other >100 book |
| 583 | + } |
| 584 | + |
| 585 | + [Test] |
| 586 | + public void Reference_IntroPara() |
| 587 | + { |
| 588 | + // add section and empty paragraph |
| 589 | + var section = AddSectionToMockedBook(m_book, true); |
| 590 | + var para = AddParaToMockedSectionContent(section, ScrStyleNames.IntroParagraph); |
| 591 | + var seg = para.SegmentsOS[0]; |
| 592 | + const int ich = 3; |
| 593 | + Assert.That(para.Reference(seg, ich).Text, Is.EqualTo("Matthew (TODO)")); |
| 594 | + Assert.That(para.ReferenceForSorting(seg, ich).Text, Is.EqualTo("0 Scr 40_MAT 00001:00000 0000000003")); |
| 595 | + } |
| 596 | + |
| 597 | + [Test] |
| 598 | + public void Reference_BookTitle() |
| 599 | + { |
| 600 | + // add title |
| 601 | + var title = AddTitleToMockedBook(m_book, "This is the title"); |
| 602 | + var para = (IStTxtPara)title.ParagraphsOS[0]; |
| 603 | + var seg = para.SegmentsOS[0]; |
| 604 | + const int ich = 5; |
| 605 | + Assert.That(para.Reference(seg, ich).Text, Is.EqualTo("Matthew (Title)")); |
| 606 | + Assert.That(para.ReferenceForSorting(seg, ich).Text, Is.EqualTo("0 Scr 40_MAT 0 0000000005")); |
| 607 | + } |
| 608 | + |
| 609 | + [TestCase("", ExpectedResult = "00000")] |
| 610 | + [TestCase("9", ExpectedResult = "00009")] |
| 611 | + [TestCase("176", ExpectedResult = "00176")] |
| 612 | + [TestCase("31103", ExpectedResult = "31103")] |
| 613 | + public string ZeroPadForStringComparison(string intInRef) |
| 614 | + { |
| 615 | + return ScrTxtPara.ZeroPadForStringComparison(intInRef); |
569 | 616 | }
|
570 | 617 | #endregion
|
571 | 618 |
|
|
0 commit comments