Changeset 4fbe2c1 in Klonkt for test/mixtape-ui.test.js


Ignore:
Timestamp:
08/22/2026 10:35:33 AM (3 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
c0e463b
Parents:
8bb3b09
Message:

Een bandje loopt niet rond: het stopt aan het eind, en aan het begin

Robins eis (22-8). Drie omlopen zaten in de weg, en de stilste was de keten:
na het laatste nummer hing die nummer een er weer achter, en omdat de wachtrij
EEN doorlopende tijdlijn is merk je dat niet eens als een trackwissel -- de
band gaat gewoon door alsof er meer op stond.

  • De keten haakt in bandmodus niets meer aan voorbij het laatste nummer.
  • next() pauzeert daar in plaats van om te lopen. ended roept next() aan, dus dit is wat de band echt laat stoppen.
  • prev() loopt aan het begin niet naar achteren om: terugspoelen voorbij de kop levert de kop op, niet het laatste nummer.
  • Vooruit prefetchen stopt ook aan het eind.

De drie modulo's blijven staan voor een gewone wachtrij; die hoort wel te
blijven rondlopen. Daar staat een test op, anders sneuvelt dat gedrag stil.

TERUGSPOELEN IS NU ECHT SPOELEN, ook over de nummergrenzen. Op de MSE-motor
ging dat al vanzelf (de band is een tijdlijn). Op de blob-motor landde het in
de KOP van het vorige nummer, en dan kom je nooit ergens in het midden uit; nu
zet hij pendingSeek zodat je aan het EIND van dat nummer uitkomt.

EN EEN FOUT DIE IK ER ZELF MEE INTRODUCEERDE, gevonden door het te draaien en
niet door te lezen: bij een MediaSource vuurt ended pas als de stream dicht
is, en die ging alleen dicht bij een wachtrij van een. Sinds de keten aan het
eind niets meer aanhaakt bleef de band dus hangen op de laatste seconde --
teller stil, isPlaying() waar, spoelen draaiend. Gemeten: 125,6 van 125,7.
De stream sluit nu ook aan het eind van een bandje.

Spoelen stopt vanzelf bij de kop en de staart: beweegt de teller twee rondes
niet, dan is er geen band meer. Anders bleven de spoelen draaien terwijl er
niets gebeurde.

Nagemeten op dev: band loopt af -> laatste nummer, gestopt, teller op 125,7 van
125,7, spoelen stil, knop terug op Afspelen. next() op het laatste nummer
blijft staan; prev() op het eerste spoelt naar de kop.

audio-player v37, MOD_V 54.

Co-Authored-By: Claude Opus 5 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • test/mixtape-ui.test.js

    r8bb3b09 r4fbe2c1  
    166166  assert.doesNotMatch(mod, /p\.next\(\); else p\.prev\(\)/, 'de oude sprong per nummer');
    167167});
     168
     169test('een bandje loopt niet rond, aan geen van beide kanten', () => {
     170  const speler = fs.readFileSync('src/assets/js/audio-player.js', 'utf8');
     171
     172  // De keten mag na het laatste nummer niet nummer een er weer achter hangen.
     173  // Dat was de stilste van de drie: omdat het EEN doorlopende tijdlijn is merk
     174  // je die omloop niet eens als een trackwissel, de band gaat gewoon door.
     175  assert.match(speler, /if \(tapeMode && volgendeInRij > queue\.length - 1\) return;/,
     176    'de keten hoort te stoppen aan het eind van de band');
     177
     178  // ended roept next() aan, dus zonder deze tak begint de band opnieuw.
     179  assert.match(speler, /if \(tapeMode && currentIndex >= queue\.length - 1\) \{ pause\(\); return; \}/,
     180    'aan het eind stoppen in plaats van omlopen');
     181
     182  // En terugspoelen voorbij het begin levert de kop van de band op, niet het
     183  // laatste nummer.
     184  assert.match(speler, /if \(tapeMode && currentIndex === 0\) \{/,
     185    'aan het begin niet naar achteren omlopen');
     186
     187  // Alle drie de modulo's zijn nog aanwezig voor de NIET-bandmodus: een gewone
     188  // playlist hoort wel te blijven rondlopen.
     189  assert.equal((speler.match(/% queue\.length/g) || []).length, 3,
     190    'de omloop van een gewone wachtrij mag niet gesneuveld zijn');
     191});
     192
     193test('terugspoelen komt in het vorige nummer uit aan het EIND', () => {
     194  const speler = fs.readFileSync('src/assets/js/audio-player.js', 'utf8');
     195  // Zonder dit sprong terugspoelen naar de kop van het vorige nummer, en kwam
     196  // je nooit ergens in het midden uit -- dat is geen terugspoelen maar
     197  // terugspringen. Geldt voor de blob-motor; op MSE is de band een tijdlijn en
     198  // gaat het vanzelf goed.
     199  assert.match(speler, /pendingSeek = Number\.MAX_SAFE_INTEGER;/);
     200});
     201
     202test('aan het eind van de band gaat de stream dicht', () => {
     203  const speler = fs.readFileSync('src/assets/js/audio-player.js', 'utf8');
     204  // ZONDER DIT HANGT DE BAND. Bij een MediaSource vuurt `ended` pas als de
     205  // stream gesloten is. Sinds een bandje niet meer rondloopt haakt de keten na
     206  // het laatste nummer niets meer aan, en dan bleef hij op de laatste seconde
     207  // staan: teller stil, isPlaying() waar, spoelen draaiend. Gemeten op dev
     208  // (22-8): 125,6 van 125,7 en daar bleef hij staan.
     209  assert.match(speler, /const laatsteVanDeBand = tapeMode && qIndex >= queue\.length - 1;/);
     210  assert.match(speler, /if \(\(queue\.length === 1 \|\| laatsteVanDeBand\) && ms && ms\.readyState === 'open'\)/);
     211});
Note: See TracChangeset for help on using the changeset viewer.