Fix parsing bug for star shorthand

This commit is contained in:
Jeremy Wall 2020-08-10 16:48:50 -04:00
parent 05500cfbfe
commit 1f40bac176
2 changed files with 37 additions and 9 deletions

View File

@ -1,6 +1,12 @@
import { BibleReference, Overlap } from './bible-reference'; import { BibleReference, Overlap } from './bible-reference';
describe('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', () => { it('Should parse the reference: Gen 1-2', () => {
const ref = new BibleReference('Gen 1-2').toString(); const ref = new BibleReference('Gen 1-2').toString();
expect(ref).toBe('Genesis 1:1 - 2:25'); expect(ref).toBe('Genesis 1:1 - 2:25');
@ -309,7 +315,9 @@ describe('Reference Overlap Detection', () => {
const rightRef = new BibleReference('Gen 1:4-6'); const rightRef = new BibleReference('Gen 1:4-6');
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Intersect); 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.Subset)).toBeNull();
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).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'); const rightRef = new BibleReference('Gen 1:1-8');
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Intersect); 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.Subset)).toBeNull();
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).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'); const rightRef = new BibleReference('Gen 1:1-10');
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Subset); 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.Subset)).toEqual(new BibleReference('Gen 1:1-10'));
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull(); 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.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.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.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(); 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.overlap(leftRef, rightRef)).toBe(Overlap.Subset);
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull(); 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.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(); 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.overlap(leftRef, rightRef)).toBe(Overlap.Intersect);
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull(); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull();
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).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(); 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.overlap(leftRef, rightRef)).toBe(Overlap.Intersect);
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull(); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull();
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).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(); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
}); });

View File

@ -565,7 +565,7 @@ export class BibleReference {
if (this.section.end.chapter === 0) { if (this.section.end.chapter === 0) {
this.section.end.chapter = this.section.start.chapter; 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; this.section.end.verse = this.section.start.verse;
} }
if (this.section.start.verse === 0) { if (this.section.start.verse === 0) {
@ -1015,7 +1015,11 @@ export class BibleReference {
this.ref = StringUtils.ltrim(this.ref.toLowerCase()); this.ref = StringUtils.ltrim(this.ref.toLowerCase());
let verse = ''; let verse = '';
if (this.ref[0] === '*') { 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); this.ref = this.ref.slice(1);
return; return;
} }
@ -1055,6 +1059,10 @@ export class BibleReference {
if (self.ref.search(/:/) !== -1 || foundSecondBook || !foundFirstVerse) { if (self.ref.search(/:/) !== -1 || foundSecondBook || !foundFirstVerse) {
self.parseChapter(isEnd); 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); self.parseVerse(true, isEnd);
}); });
} }