Skip to content

Commit 6074f26

Browse files
author
Greg Trihus
committed
Enhance refMatch functionality to support same verse letter ranges and improve test coverage for edge cases. Added tests for valid and invalid letter suffix scenarios.
1 parent e1d650e commit 6074f26

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

src/renderer/src/__tests__/refMatch.test.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,16 @@ test('shoulc fail with beg with letter < end with letter, 1:1b-1a', () => {
7979
expect(refMatch('1:1b-1a')).toBeNull();
8080
});
8181

82-
test('should fail with beg with letter < end as letter, 1:1b-c', () => {
83-
expect(refMatch('1:1b-c')).toBeNull();
82+
test('same verse letter range 1:22a-b', () => {
83+
expect(refMatch('1:22a-b')).not.toBeNull();
84+
});
85+
86+
test('same verse letter range 1:1b-c', () => {
87+
expect(refMatch('1:1b-c')).not.toBeNull();
88+
});
89+
90+
test('should fail same verse letter range when end is before start, 1:1c-b', () => {
91+
expect(refMatch('1:1c-b')).toBeNull();
8492
});
8593

8694
test('should fail with beg as letter < end with letter, 1:b-2c', () => {

src/renderer/src/utils/refMatch.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,16 @@ export const refMatch = (ref: string): RegExpExecArray | null => {
1010
if (parseInt(arg3 || '0') !== parseInt(chapter || '0') + 1) return null;
1111
return m;
1212
} else if (arg3) {
13+
// Same verse, letter-suffix range (e.g. 1:22a-b = verse 22, parts a through b).
14+
const sameVerseLetterEnd =
15+
/^[a-e]$/i.test(arg3) &&
16+
/^(\d+)([a-e])$/i.exec(verseStart || '');
17+
if (sameVerseLetterEnd) {
18+
const [, , startLetter] = sameVerseLetterEnd;
19+
const endLetter = arg3.toLowerCase();
20+
if (endLetter <= startLetter.toLowerCase()) return null;
21+
return m;
22+
}
1323
const vBeg = parseInt(verseStart || '');
1424
const vEnd = parseInt(arg3 || '');
1525
if (Number.isNaN(vBeg) || Number.isNaN(vEnd)) return null;

0 commit comments

Comments
 (0)