- Timestamp:
- 08/22/2026 09:54:51 AM (3 weeks ago)
- Branches:
- main
- Children:
- 8bb3b09
- Parents:
- 16fd4fe
- File:
-
- 1 edited
-
test/mixtape-ui.test.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
test/mixtape-ui.test.js
r16fd4fe re679bce 86 86 // bestaat en sloeg zichzelf dan over -- groen zonder iets te meten. 87 87 const html = AudioEmbedService.embedPlaylistShortcodes('<p>[[playlist:tape]]</p>', (id) => (id === 'tape' ? pl : null)); 88 assert.match(html, /📼 Mixtape/, 'een mixtape hoort zichzelf zo te noemen'); 88 // Het teken zat eerst in de tekst; nu staat er een echte cassette getekend en 89 // is het woord genoeg. De eis blijft dezelfde: hij noemt zichzelf goed. 90 assert.match(html, /class="tape-kind">Mixtape</, 'een mixtape hoort zichzelf zo te noemen'); 89 91 assert.doesNotMatch(html, /💿 Album/, 'en niet het jasje van een album te dragen'); 90 92 }); … … 129 131 assert.doesNotMatch(html, /class="post-album"/); 130 132 }); 133 134 test('de cassetteknop staat in de selectorlijst van de speler', () => { 135 // DIT IS DE TEST DIE ONTBRAK. De markup-tests hierboven waren groen terwijl 136 // op de knop drukken niets deed: audio-player.js kiest zijn knoppen met een 137 // lijst met KLASSENAMEN, niet met een regel over data-attributen. Alle juiste 138 // data-pcms-* dragen helpt dan niets. 139 const speler = fs.readFileSync('src/assets/js/audio-player.js', 'utf8'); 140 const m = speler.match(/const PLAY_SELECTOR =\s*\n?\s*'([^']+)'/); 141 assert.ok(m, 'PLAY_SELECTOR moet te vinden zijn -- is hij hernoemd, dan dekt deze test niets meer'); 142 assert.match(m[1], /\.tape-btn--play/, 143 'zonder deze klasse doet de afspeelknop van het bandje niets'); 144 }); 145 146 test('een bandje gaat als EEN object de speler in', () => { 147 const speler = fs.readFileSync('src/assets/js/audio-player.js', 'utf8'); 148 // De stand moet vanaf het blok worden doorgegeven; zonder dit is een mixtape 149 // in de speler gewoon weer een rij nummers. 150 assert.match(speler, /asTape: album\.dataset\.pcmsAlbumKind === 'mixtape'/); 151 // En hij moet een paginawissel overleven, anders valt de speler halverwege 152 // terug op de nummertitel. 153 assert.match(speler, /queue, currentIndex, albumName, tapeMode,/, 'in de sessie opslaan'); 154 assert.match(speler, /tapeMode = !!s\.tapeMode;/, 'en terugzetten'); 155 // De opgeslagen tijd is de positie BINNEN het nummer, ook in bandmodus: bij 156 // herstellen begint de keten opnieuw. Slaat hij de bandteller op, dan springt 157 // een hersteld bandje naar een plek die in dat nummer niet bestaat. 158 assert.match(speler, /time: trackTijd\(\)\.cur \|\| 0,/); 159 }); 160 161 test('spoelen gaat in seconden, niet per nummer', () => { 162 const mod = fs.readFileSync('src/assets/js/mod/tape.js', 'utf8'); 163 assert.match(mod, /seekBy\(/, 'spoelen hoort over de tijdlijn te gaan'); 164 // next()/prev() mag hier niet meer voorkomen als spoelgebaar: dat is een 165 // playlistknop en maakt van de cassette een lijst met een plaatje. 166 assert.doesNotMatch(mod, /p\.next\(\); else p\.prev\(\)/, 'de oude sprong per nummer'); 167 });
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)