test(ccli): add fixture corpus for CCLI paste parser
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
parent
a10068e783
commit
02de6b03c0
8
.sisyphus/evidence/task-1-fixture-coverage.txt
Normal file
8
.sisyphus/evidence/task-1-fixture-coverage.txt
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
ls tests/fixtures/ccli/*.txt | wc -l
|
||||
22
|
||||
|
||||
grep -rl "Strophe\|Refrain" tests/fixtures/ccli/ | wc -l
|
||||
4
|
||||
|
||||
grep -rl "(Repeat)" tests/fixtures/ccli/ | wc -l
|
||||
2
|
||||
9
.sisyphus/evidence/task-1-fixture-sanity.txt
Normal file
9
.sisyphus/evidence/task-1-fixture-sanity.txt
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
ddev exec php artisan test --filter=CcliFixtureSanityTest
|
||||
|
||||
PASS Tests\Feature\CcliFixtureSanityTest
|
||||
✓ ccli fixture corpus has at least 20 txt files
|
||||
✓ each ccli fixture is valid utf8 with section labels and title
|
||||
✓ ccli fixture corpus covers german labels
|
||||
✓ ccli fixture corpus covers repeat markers
|
||||
|
||||
Tests: 4 passed (160 assertions)
|
||||
61
.sisyphus/notepads/ccli-songselect-import/learnings.md
Normal file
61
.sisyphus/notepads/ccli-songselect-import/learnings.md
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
# CCLI SongSelect Import — Learnings
|
||||
|
||||
## [2026-05-10] Session Start
|
||||
|
||||
### Architecture Decisions
|
||||
- Manual paste + bookmarklet approach (NO server-side scraping — Cloudflare/ToS blocker)
|
||||
- CcliPasteParser is closure-injectable (mirrors ChurchToolsService pattern for testability)
|
||||
- All songs upserted via CcliImportService mirroring ProImportService::import() shape
|
||||
- Translation stored inline on SongSlide.text_content_translated (no separate model)
|
||||
- default_translation_language = APP-GLOBAL Setting (not per-user)
|
||||
|
||||
### Key Codebase Facts
|
||||
- Song.ccli_id is UNIQUE indexed nullable — primary CCLI match key
|
||||
- SongSlide: text_content (original), text_content_translated (translation)
|
||||
- Labels are GLOBAL (shared across all songs) — labels table with name + color
|
||||
- ProImportService::import() is the template for upsert (not upsertSong — that method doesn't exist)
|
||||
- SettingsController::AGENDA_KEYS constant whitelist for Settings KV
|
||||
- TranslationService::importFromText distributes lines preserving local slide line counts
|
||||
- ArrangementDialog.vue lines 488-532 = searchable song select (where CCLI buttons go)
|
||||
|
||||
### CCLI SongSelect "View Lyrics" Page Format
|
||||
- Title on first non-empty line
|
||||
- Section label as standalone line (e.g., "Verse 1", "Chorus")
|
||||
- Lyrics lines under each section
|
||||
- Footer: copyright (©), CCLI number (e.g., "CCLI # 1234567"), author
|
||||
|
||||
### Section Label Regex (English + German + variants)
|
||||
```
|
||||
/^(Verse|Chorus|Bridge|Pre-Chorus|Tag|Ending|Intro|Interlude|Outro|Misc|Strophe|Refrain|Brücke|Vorrefrain|Schluss|Zwischenspiel)\s*(\d+[a-z]?)?(\s*\((?:Repeat|Wdh\.?)\))?(\s*[xX]\s*\d+)?$/i
|
||||
```
|
||||
|
||||
### Language Mapping (EN ↔ DE)
|
||||
- Verse ↔ Strophe
|
||||
- Chorus ↔ Refrain
|
||||
- Bridge ↔ Brücke
|
||||
- Pre-Chorus ↔ Vorrefrain
|
||||
- Ending ↔ Schluss
|
||||
- Interlude ↔ Zwischenspiel
|
||||
|
||||
### Test Fixture Format
|
||||
Fixtures are synthetic CCLI-format text files. Format:
|
||||
```
|
||||
Test Song Title
|
||||
Test Artist
|
||||
|
||||
Verse 1
|
||||
Line 1 of verse
|
||||
Line 2 of verse
|
||||
|
||||
Chorus
|
||||
Chorus line 1
|
||||
Chorus line 2
|
||||
|
||||
© 2024 Test Publishing
|
||||
CCLI # 9999001
|
||||
```
|
||||
|
||||
### Fixture Corpus Notes
|
||||
- Keep fixture titles/artists anonymized and numeric (`Test Song N`, `Test Artist N`)
|
||||
- Include both English and German section labels in the corpus so parser regex coverage stays broad
|
||||
- Add edge cases for missing footer pieces, whitespace, repeat markers, and suffix labels (`2a`, `x2`, `(Repeat)`)
|
||||
66
tests/Feature/CcliFixtureSanityTest.php
Normal file
66
tests/Feature/CcliFixtureSanityTest.php
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\File;
|
||||
|
||||
test('ccli fixture corpus has at least 20 txt files', function (): void {
|
||||
$files = glob(base_path('tests/fixtures/ccli/*.txt'));
|
||||
|
||||
expect($files)->not->toBeEmpty();
|
||||
expect(count($files))->toBeGreaterThanOrEqual(20);
|
||||
});
|
||||
|
||||
test('each ccli fixture is valid utf8 with section labels and title', function (): void {
|
||||
$files = glob(base_path('tests/fixtures/ccli/*.txt'));
|
||||
|
||||
expect($files)->not->toBeEmpty();
|
||||
|
||||
foreach ($files as $file) {
|
||||
$content = File::get($file);
|
||||
$basename = basename($file);
|
||||
|
||||
expect(mb_detect_encoding($content, 'UTF-8', true))->toBe('UTF-8', $basename.' not UTF-8');
|
||||
expect(strlen($content))->toBeGreaterThanOrEqual(100, $basename.' too small');
|
||||
expect(strlen($content))->toBeLessThanOrEqual(50000, $basename.' too large');
|
||||
expect((bool) preg_match('/^(Verse|Chorus|Bridge|Pre-Chorus|Tag|Ending|Intro|Interlude|Outro|Misc|Strophe|Refrain|Brücke|Vorrefrain|Schluss|Zwischenspiel)/im', $content))->toBeTrue($basename.' has no section label');
|
||||
|
||||
$lines = preg_split('/\r\n|\n|\r/', $content);
|
||||
$firstNonEmpty = '';
|
||||
|
||||
foreach ($lines as $line) {
|
||||
if (trim($line) !== '') {
|
||||
$firstNonEmpty = trim($line);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
expect($firstNonEmpty)->not->toBeEmpty($basename.' has no title line');
|
||||
}
|
||||
});
|
||||
|
||||
test('ccli fixture corpus covers german labels', function (): void {
|
||||
$files = glob(base_path('tests/fixtures/ccli/*.txt'));
|
||||
$germanLabelFound = false;
|
||||
|
||||
foreach ($files as $file) {
|
||||
if (preg_match('/Strophe|Refrain|Brücke/i', File::get($file))) {
|
||||
$germanLabelFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
expect($germanLabelFound)->toBeTrue('No fixture with German labels found');
|
||||
});
|
||||
|
||||
test('ccli fixture corpus covers repeat markers', function (): void {
|
||||
$files = glob(base_path('tests/fixtures/ccli/*.txt'));
|
||||
$repeatFound = false;
|
||||
|
||||
foreach ($files as $file) {
|
||||
if (preg_match('/\(Repeat\)|[xX]\s*\d+/i', File::get($file))) {
|
||||
$repeatFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
expect($repeatFound)->toBeTrue('No fixture with repeat markers found');
|
||||
});
|
||||
29
tests/fixtures/ccli/5-verses.txt
vendored
Normal file
29
tests/fixtures/ccli/5-verses.txt
vendored
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
Test Song 22
|
||||
Test Artist 22
|
||||
|
||||
Verse 1
|
||||
First verse opens with a hopeful line
|
||||
Keeping time with the steady rhyme
|
||||
|
||||
Verse 2
|
||||
Second verse moves the story forward
|
||||
Singing truth with a gentler chord
|
||||
|
||||
Verse 3
|
||||
Third verse carries the middle ground
|
||||
Bringing peace in a calming sound
|
||||
|
||||
Verse 4
|
||||
Fourth verse points us to the light
|
||||
Holding fast through the longest night
|
||||
|
||||
Verse 5
|
||||
Fifth verse closes the journey well
|
||||
With a final line that rings and swells
|
||||
|
||||
Chorus
|
||||
We will sing until the dawn
|
||||
Faithful hearts will carry on
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999022
|
||||
50
tests/fixtures/ccli/README.md
vendored
Normal file
50
tests/fixtures/ccli/README.md
vendored
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
# CCLI Fixture Corpus
|
||||
|
||||
Synthetic CCLI SongSelect "View Lyrics" page text fixtures for testing the `CcliPasteParser`.
|
||||
|
||||
## Anonymization
|
||||
|
||||
- Song titles use `Test Song N`
|
||||
- Artist names use `Test Artist N`
|
||||
- CCLI IDs use `9999XXX`
|
||||
- Lyrics are synthetic but keep realistic SongSelect structure
|
||||
|
||||
## Format
|
||||
|
||||
Each fixture follows this structure:
|
||||
|
||||
1. Song title (first line)
|
||||
2. Artist name
|
||||
3. Blank line
|
||||
4. Section label on its own line
|
||||
5. Lyric lines
|
||||
6. Repeated section blocks as needed
|
||||
7. Footer copyright line starting with `©`
|
||||
8. Footer `CCLI # NNNNNNN`
|
||||
|
||||
## Coverage
|
||||
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| english-only-multi-verse.txt | Standard EN song with Verse/Chorus/Bridge |
|
||||
| english-only-single-verse.txt | Minimal song with one verse and one chorus |
|
||||
| english-german-side-by-side.txt | Alternating EN/DE labels |
|
||||
| english-french.txt | English labels with French lyrics |
|
||||
| english-spanish.txt | English labels with Spanish lyrics |
|
||||
| english-dutch.txt | English labels with Dutch lyrics |
|
||||
| english-italian.txt | English labels with Italian lyrics |
|
||||
| german-only.txt | German labels only |
|
||||
| repeat-marker.txt | Repeat markers like `(Repeat)` and `x2` |
|
||||
| verse-letter-suffix.txt | Verse suffixes like `2a` and `2b` |
|
||||
| mixed-german-english-labels.txt | Mixed EN/DE labels |
|
||||
| missing-copyright.txt | No copyright line |
|
||||
| missing-year.txt | `©` without year |
|
||||
| whitespace-edge-cases.txt | Leading/trailing spaces and double blanks |
|
||||
| umlauts.txt | German umlauts and ß |
|
||||
| long-bridge.txt | Long bridge with internal blank line |
|
||||
| pre-chorus.txt | Pre-Chorus sections |
|
||||
| tag-ending.txt | Tag and Ending sections |
|
||||
| intro-outro.txt | Intro and Outro sections |
|
||||
| interlude-misc.txt | Interlude and Misc sections |
|
||||
| no-translation.txt | English-only import case |
|
||||
| 5-verses.txt | Stress test with five verses |
|
||||
21
tests/fixtures/ccli/english-dutch.txt
vendored
Normal file
21
tests/fixtures/ccli/english-dutch.txt
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
Test Song 6
|
||||
Test Artist 6
|
||||
|
||||
Verse 1
|
||||
In het licht van Uw genade
|
||||
We find our place and stand secure
|
||||
|
||||
Chorus
|
||||
We praise Your name with lifted hands
|
||||
Uw trouw blijft voor altijd bestaan
|
||||
|
||||
Verse 2
|
||||
Wanneer de stormen om ons slaan
|
||||
You calm the sea and carry us through
|
||||
|
||||
Chorus
|
||||
We praise Your name with lifted hands
|
||||
Uw trouw blijft voor altijd bestaan
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999006
|
||||
21
tests/fixtures/ccli/english-french.txt
vendored
Normal file
21
tests/fixtures/ccli/english-french.txt
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
Test Song 4
|
||||
Test Artist 4
|
||||
|
||||
Verse 1
|
||||
Nous levons les yeux vers toi Seigneur
|
||||
Ta paix remplit nos cœurs ce matin
|
||||
|
||||
Chorus
|
||||
We sing Your name with joyful sound
|
||||
Ton amour nous porte maintenant
|
||||
|
||||
Verse 2
|
||||
Dans le silence, ta voix nous guide
|
||||
Every step is safe within Your light
|
||||
|
||||
Chorus
|
||||
We sing Your name with joyful sound
|
||||
Ton amour nous porte maintenant
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999004
|
||||
21
tests/fixtures/ccli/english-german-side-by-side.txt
vendored
Normal file
21
tests/fixtures/ccli/english-german-side-by-side.txt
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
Test Song 3
|
||||
Test Artist 3
|
||||
|
||||
Verse 1
|
||||
English lyrics line 1 for the opening theme
|
||||
English lyrics line 2 keeps the melody warm
|
||||
|
||||
Strophe 1
|
||||
Deutsche Liedzeile 1 zum gleichen Gedanken
|
||||
Deutsche Liedzeile 2 trägt den Refrain vor
|
||||
|
||||
Chorus
|
||||
English chorus line 1 with bright harmony
|
||||
English chorus line 2 with steady praise
|
||||
|
||||
Refrain
|
||||
Deutscher Refrain Zeile 1 für die Gemeinde
|
||||
Deutscher Refrain Zeile 2 klingt gemeinsam
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999003
|
||||
21
tests/fixtures/ccli/english-italian.txt
vendored
Normal file
21
tests/fixtures/ccli/english-italian.txt
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
Test Song 7
|
||||
Test Artist 7
|
||||
|
||||
Verse 1
|
||||
Nel silenzio ascoltiamo Te
|
||||
We are renewed by mercy's song
|
||||
|
||||
Chorus
|
||||
We will follow where You lead
|
||||
Ti adoriamo con verità
|
||||
|
||||
Verse 2
|
||||
Ogni passo porta pace nuova
|
||||
Your light remains and never fades
|
||||
|
||||
Chorus
|
||||
We will follow where You lead
|
||||
Ti adoriamo con verità
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999007
|
||||
26
tests/fixtures/ccli/english-only-multi-verse.txt
vendored
Normal file
26
tests/fixtures/ccli/english-only-multi-verse.txt
vendored
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
Test Song 1
|
||||
Test Artist 1
|
||||
|
||||
Verse 1
|
||||
Morning light breaks through the quiet room
|
||||
Hands are open, hearts awake to You
|
||||
Grace is rising like the dawn anew
|
||||
|
||||
Chorus
|
||||
We lift our song and breathe Your name
|
||||
We lift our eyes and sing Your praise
|
||||
|
||||
Verse 2
|
||||
When the night has tried to claim our hope
|
||||
You remain the anchor of our souls
|
||||
|
||||
Bridge
|
||||
Faith will stand when every fear has passed
|
||||
Love will last, Your promise holds fast
|
||||
|
||||
Chorus
|
||||
We lift our song and breathe Your name
|
||||
We lift our eyes and sing Your praise
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999001
|
||||
13
tests/fixtures/ccli/english-only-single-verse.txt
vendored
Normal file
13
tests/fixtures/ccli/english-only-single-verse.txt
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Test Song 2
|
||||
Test Artist 2
|
||||
|
||||
Verse 1
|
||||
You are near in every breath we take
|
||||
You are here when shadows start to fade
|
||||
|
||||
Chorus
|
||||
Jesus, You are steady and true
|
||||
We rest our hope and trust in You
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999002
|
||||
21
tests/fixtures/ccli/english-spanish.txt
vendored
Normal file
21
tests/fixtures/ccli/english-spanish.txt
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
Test Song 5
|
||||
Test Artist 5
|
||||
|
||||
Verse 1
|
||||
Tu gracia llena cada rincón
|
||||
We stand amazed before Your throne
|
||||
|
||||
Chorus
|
||||
We will declare Your faithful love
|
||||
Cantaremos hoy tu gran verdad
|
||||
|
||||
Verse 2
|
||||
Cuando el camino no se ve
|
||||
Your hand is still the one we seek
|
||||
|
||||
Chorus
|
||||
We will declare Your faithful love
|
||||
Cantaremos hoy tu gran verdad
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999005
|
||||
21
tests/fixtures/ccli/german-only.txt
vendored
Normal file
21
tests/fixtures/ccli/german-only.txt
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
Test Song 8
|
||||
Test Artist 8
|
||||
|
||||
Strophe 1
|
||||
Du führst uns sanft durch jeden Tag
|
||||
Dein Licht bleibt nah, auch wenn es dunkel mag
|
||||
|
||||
Refrain
|
||||
Wir singen laut von deiner Gnade
|
||||
Dein Name bleibt, was immer komme
|
||||
|
||||
Strophe 2
|
||||
Wenn Zweifel kommen, hältst du fest
|
||||
Dein Friede gibt uns neuen Rest
|
||||
|
||||
Brücke
|
||||
Du bist treu, du bist treu, du bist treu
|
||||
Unser Herz vertraut dir neu
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999008
|
||||
20
tests/fixtures/ccli/interlude-misc.txt
vendored
Normal file
20
tests/fixtures/ccli/interlude-misc.txt
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
Test Song 20
|
||||
Test Artist 20
|
||||
|
||||
Verse 1
|
||||
We enter in with open hands
|
||||
Trusting You will lead the band
|
||||
|
||||
Interlude
|
||||
Instrumental line carries the thought
|
||||
|
||||
Misc
|
||||
Spoken blessing for the room
|
||||
Quiet hope that fills the tomb
|
||||
|
||||
Chorus
|
||||
We declare Your name aloud
|
||||
Standing humble, strong, and proud
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999020
|
||||
20
tests/fixtures/ccli/intro-outro.txt
vendored
Normal file
20
tests/fixtures/ccli/intro-outro.txt
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
Test Song 19
|
||||
Test Artist 19
|
||||
|
||||
Intro
|
||||
Instrumental opening for the gathering
|
||||
|
||||
Verse 1
|
||||
You call us close and make us whole
|
||||
You hold the broken, heal the soul
|
||||
|
||||
Chorus
|
||||
We worship You with all we are
|
||||
You shine like morning, near and far
|
||||
|
||||
Outro
|
||||
Soft and steady as we go
|
||||
Your peace remains and overflows
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999019
|
||||
23
tests/fixtures/ccli/long-bridge.txt
vendored
Normal file
23
tests/fixtures/ccli/long-bridge.txt
vendored
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
Test Song 16
|
||||
Test Artist 16
|
||||
|
||||
Verse 1
|
||||
We start in silence and receive Your peace
|
||||
Every burden falls as Your kindness speaks
|
||||
|
||||
Bridge
|
||||
When the night is long, You are still our song
|
||||
We can trust Your word; it has never failed
|
||||
|
||||
There is room for hope in the waiting line
|
||||
Even now Your light reaches every heart
|
||||
|
||||
We will not give up, we will not let go
|
||||
You are with us here, and You make us whole
|
||||
|
||||
Chorus
|
||||
We lift our hands and sing again
|
||||
Your faithful love will never end
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999016
|
||||
12
tests/fixtures/ccli/missing-copyright.txt
vendored
Normal file
12
tests/fixtures/ccli/missing-copyright.txt
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
Test Song 12
|
||||
Test Artist 12
|
||||
|
||||
Verse 1
|
||||
Simple lines for a missing footer test
|
||||
The parser should still read the body
|
||||
|
||||
Chorus
|
||||
We are here to sing again
|
||||
Lifted hope in words and men
|
||||
|
||||
CCLI # 9999012
|
||||
13
tests/fixtures/ccli/missing-year.txt
vendored
Normal file
13
tests/fixtures/ccli/missing-year.txt
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Test Song 13
|
||||
Test Artist 13
|
||||
|
||||
Verse 1
|
||||
This fixture keeps the symbol only
|
||||
No year is written in the footer line
|
||||
|
||||
Chorus
|
||||
We still can see the copyright mark
|
||||
And parse the lines in steady order
|
||||
|
||||
© Test Publishing House
|
||||
CCLI # 9999013
|
||||
21
tests/fixtures/ccli/mixed-german-english-labels.txt
vendored
Normal file
21
tests/fixtures/ccli/mixed-german-english-labels.txt
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
Test Song 11
|
||||
Test Artist 11
|
||||
|
||||
Strophe 1
|
||||
Unsere Herzen stehen auf
|
||||
Your mercy lifts us higher now
|
||||
|
||||
Chorus
|
||||
We give You praise forevermore
|
||||
Gemeinsam singen wir empor
|
||||
|
||||
Strophe 2
|
||||
Wenn der Abend still wird hier
|
||||
We know You stay, You are near
|
||||
|
||||
Refrain
|
||||
Dein Name klingt in jedem Raum
|
||||
We follow You and hold the sound
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999011
|
||||
21
tests/fixtures/ccli/no-translation.txt
vendored
Normal file
21
tests/fixtures/ccli/no-translation.txt
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
Test Song 21
|
||||
Test Artist 21
|
||||
|
||||
Verse 1
|
||||
This song is plain and purely English
|
||||
It gives a simple import test case
|
||||
|
||||
Chorus
|
||||
We sing the words as written here
|
||||
No translation layer appears
|
||||
|
||||
Verse 2
|
||||
Every line remains intact
|
||||
For parser coverage and feedback
|
||||
|
||||
Chorus
|
||||
We sing the words as written here
|
||||
No translation layer appears
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999021
|
||||
29
tests/fixtures/ccli/pre-chorus.txt
vendored
Normal file
29
tests/fixtures/ccli/pre-chorus.txt
vendored
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
Test Song 17
|
||||
Test Artist 17
|
||||
|
||||
Verse 1
|
||||
We walk by faith and not by sight
|
||||
You lead us through the quiet night
|
||||
|
||||
Pre-Chorus
|
||||
Now our hearts are turning near
|
||||
Every promise becomes clear
|
||||
|
||||
Chorus
|
||||
We sing because You are enough
|
||||
We sing because Your love is strong
|
||||
|
||||
Verse 2
|
||||
When the road bends, You are there
|
||||
Holding every answered prayer
|
||||
|
||||
Pre-Chorus
|
||||
Now our hearts are turning near
|
||||
Every promise becomes clear
|
||||
|
||||
Chorus
|
||||
We sing because You are enough
|
||||
We sing because Your love is strong
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999017
|
||||
17
tests/fixtures/ccli/repeat-marker.txt
vendored
Normal file
17
tests/fixtures/ccli/repeat-marker.txt
vendored
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
Test Song 9
|
||||
Test Artist 9
|
||||
|
||||
Verse 1
|
||||
We remember all Your kindness here
|
||||
Every step is marked by perfect care
|
||||
|
||||
Chorus 1 (Repeat)
|
||||
Lift the sound again and again
|
||||
Praise will rise and never end
|
||||
|
||||
Bridge x2
|
||||
Open heaven, pour Your peace
|
||||
Hold us close and set us free
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999009
|
||||
21
tests/fixtures/ccli/tag-ending.txt
vendored
Normal file
21
tests/fixtures/ccli/tag-ending.txt
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
Test Song 18
|
||||
Test Artist 18
|
||||
|
||||
Verse 1
|
||||
We have seen Your mercy move
|
||||
We have heard Your steady voice
|
||||
|
||||
Chorus
|
||||
All our days belong to You
|
||||
We will follow and rejoice
|
||||
|
||||
Tag
|
||||
Holy, holy, holy Lord
|
||||
We keep singing more and more
|
||||
|
||||
Ending
|
||||
Faithful God, forever stay
|
||||
Guide our hearts along the way
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999018
|
||||
17
tests/fixtures/ccli/umlauts.txt
vendored
Normal file
17
tests/fixtures/ccli/umlauts.txt
vendored
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
Test Song 15
|
||||
Test Artist 15
|
||||
|
||||
Strophe 1
|
||||
Ähren im Wind, die Herzen singen
|
||||
Öffne den Himmel, lass Gnade klingen
|
||||
|
||||
Refrain
|
||||
Über allem steht dein Name klar
|
||||
Fußspuren führen uns Jahr um Jahr
|
||||
|
||||
Brücke
|
||||
Für immer bist du gut und wahr
|
||||
Größer ist deine Liebe, wunderbar
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999015
|
||||
21
tests/fixtures/ccli/verse-letter-suffix.txt
vendored
Normal file
21
tests/fixtures/ccli/verse-letter-suffix.txt
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
Test Song 10
|
||||
Test Artist 10
|
||||
|
||||
Verse 1
|
||||
The morning comes and we arise
|
||||
Hope is rising in our eyes
|
||||
|
||||
Verse 2a
|
||||
When the road is hard and long
|
||||
You still teach our hearts to sing
|
||||
|
||||
Verse 2b
|
||||
When the answers do not show
|
||||
Still Your faithfulness will grow
|
||||
|
||||
Chorus
|
||||
We will trust You all our days
|
||||
And we will walk in steadfast grace
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999010
|
||||
14
tests/fixtures/ccli/whitespace-edge-cases.txt
vendored
Normal file
14
tests/fixtures/ccli/whitespace-edge-cases.txt
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Test Song 14
|
||||
Test Artist 14
|
||||
|
||||
Verse 1
|
||||
Leading spaces on this lyric line
|
||||
Trailing spaces on this lyric line
|
||||
|
||||
|
||||
Chorus
|
||||
This chorus follows after double blanks
|
||||
Another line with extra spaces
|
||||
|
||||
© 2024 Test Publishing House
|
||||
CCLI # 9999014
|
||||
Loading…
Reference in a new issue