From 1f40bac17655cab95feb162d758a9c19f60ab6e0 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Mon, 10 Aug 2020 16:48:50 -0400 Subject: [PATCH] Fix parsing bug for star shorthand --- app/db/src/app/common/bible-reference.spec.ts | 34 +++++++++++++++---- app/db/src/app/common/bible-reference.ts | 12 +++++-- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/app/db/src/app/common/bible-reference.spec.ts b/app/db/src/app/common/bible-reference.spec.ts index 2f60b76a..9d3cbf13 100644 --- a/app/db/src/app/common/bible-reference.spec.ts +++ b/app/db/src/app/common/bible-reference.spec.ts @@ -1,6 +1,12 @@ import { BibleReference, Overlap } from './bible-reference'; describe('Reference', () => { + it('Should understand the * shorthand', () => { + const ref = new BibleReference('Gen 1:1-*'); + expect(ref.section.end.chapter).toBe(1); + expect(ref.section.end.verse).toBe(31); + }); + it('Should parse the reference: Gen 1-2', () => { const ref = new BibleReference('Gen 1-2').toString(); expect(ref).toBe('Genesis 1:1 - 2:25'); @@ -309,7 +315,9 @@ describe('Reference Overlap Detection', () => { const rightRef = new BibleReference('Gen 1:4-6'); expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Intersect); - expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-6')); + expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual( + new BibleReference('Gen 1:1-6') + ); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toBeNull(); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull(); }); @@ -319,7 +327,9 @@ describe('Reference Overlap Detection', () => { const rightRef = new BibleReference('Gen 1:1-8'); expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Intersect); - expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-10')); + expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual( + new BibleReference('Gen 1:1-10') + ); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toBeNull(); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull(); }); @@ -329,7 +339,9 @@ describe('Reference Overlap Detection', () => { const rightRef = new BibleReference('Gen 1:1-10'); expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Subset); - expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-10')); + expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual( + new BibleReference('Gen 1:1-10') + ); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toEqual(new BibleReference('Gen 1:1-10')); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull(); }); @@ -341,7 +353,9 @@ describe('Reference Overlap Detection', () => { expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Equal); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toEqual(new BibleReference('Gen 1:1-10')); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toEqual(new BibleReference('Gen 1:1-10')); - expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-10')); + expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual( + new BibleReference('Gen 1:1-10') + ); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull(); }); @@ -352,7 +366,9 @@ describe('Reference Overlap Detection', () => { expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Subset); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull(); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toEqual(new BibleReference('Gen 1:1-10')); - expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-10')); + expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual( + new BibleReference('Gen 1:1-10') + ); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull(); }); @@ -363,7 +379,9 @@ describe('Reference Overlap Detection', () => { expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Intersect); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull(); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toBeNull(); - expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-2:10')); + expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual( + new BibleReference('Gen 1:1-2:10') + ); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull(); }); @@ -374,7 +392,9 @@ describe('Reference Overlap Detection', () => { expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Intersect); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull(); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toBeNull(); - expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-2:10')); + expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual( + new BibleReference('Gen 1:1-2:10') + ); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull(); }); diff --git a/app/db/src/app/common/bible-reference.ts b/app/db/src/app/common/bible-reference.ts index 6101d6c7..010c8f89 100644 --- a/app/db/src/app/common/bible-reference.ts +++ b/app/db/src/app/common/bible-reference.ts @@ -565,7 +565,7 @@ export class BibleReference { if (this.section.end.chapter === 0) { this.section.end.chapter = this.section.start.chapter; } - if (Number(this.section.start.verse) > Number(this.section.end.verse) && this.section.start.chapter === this.section.end.chapter) { + if (this.section.start.verse > this.section.end.verse && this.section.start.chapter === this.section.end.chapter) { this.section.end.verse = this.section.start.verse; } if (this.section.start.verse === 0) { @@ -1015,7 +1015,11 @@ export class BibleReference { this.ref = StringUtils.ltrim(this.ref.toLowerCase()); let verse = ''; if (this.ref[0] === '*') { - thing.verse = 0; + if (isEnd) { + thing.verse = this.section.book.chapters[thing.chapter]; + } else { + thing.verse = 0; + } this.ref = this.ref.slice(1); return; } @@ -1055,6 +1059,10 @@ export class BibleReference { if (self.ref.search(/:/) !== -1 || foundSecondBook || !foundFirstVerse) { self.parseChapter(isEnd); } + if (this.section.end.chapter === 0) { + this.section.end.chapter = this.section.start.chapter; + } + // Fixup chapter here probably self.parseVerse(true, isEnd); }); }