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';
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();
});

View File

@ -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);
});
}