diff options
| author | salmonik <raisersoft@proton.me> | 2026-05-22 17:57:08 +0200 |
|---|---|---|
| committer | salmonik <raisersoft@proton.me> | 2026-05-22 17:57:08 +0200 |
| commit | 956e3be3808f918923aef3259ea5b28bfc055b03 (patch) | |
| tree | a49e441366c28960cbe0cd6c26c60fd866295fe5 /tests | |
| parent | fix for new symphony API and less debug info in release (diff) | |
| download | rsplayer-956e3be3808f918923aef3259ea5b28bfc055b03.tar.gz rsplayer-956e3be3808f918923aef3259ea5b28bfc055b03.zip | |
Fix metadata extraction for symphonia 0.6 and add Albums shuffle mode
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/playback.rs | 2 | ||||
| -rw-r--r-- | tests/queue.rs | 105 |
2 files changed, 107 insertions, 0 deletions
diff --git a/tests/playback.rs b/tests/playback.rs index 80ecf58..1513a4d 100644 --- a/tests/playback.rs +++ b/tests/playback.rs | |||
| @@ -127,6 +127,8 @@ fn test_player_set_shuffle() { | |||
| 127 | let mut player = Player::new(); | 127 | let mut player = Player::new(); |
| 128 | player.set_shuffle(ShuffleMode::All); | 128 | player.set_shuffle(ShuffleMode::All); |
| 129 | assert_eq!(player.shuffle, ShuffleMode::All); | 129 | assert_eq!(player.shuffle, ShuffleMode::All); |
| 130 | player.set_shuffle(ShuffleMode::Albums); | ||
| 131 | assert_eq!(player.shuffle, ShuffleMode::Albums); | ||
| 130 | } | 132 | } |
| 131 | 133 | ||
| 132 | #[test] | 134 | #[test] |
diff --git a/tests/queue.rs b/tests/queue.rs index ccc6e54..2dd9f8c 100644 --- a/tests/queue.rs +++ b/tests/queue.rs | |||
| @@ -286,6 +286,8 @@ fn test_shuffle_modes() { | |||
| 286 | assert_eq!(*q.shuffle_mode(), ShuffleMode::All); | 286 | assert_eq!(*q.shuffle_mode(), ShuffleMode::All); |
| 287 | q.set_shuffle(ShuffleMode::Album); | 287 | q.set_shuffle(ShuffleMode::Album); |
| 288 | assert_eq!(*q.shuffle_mode(), ShuffleMode::Album); | 288 | assert_eq!(*q.shuffle_mode(), ShuffleMode::Album); |
| 289 | q.set_shuffle(ShuffleMode::Albums); | ||
| 290 | assert_eq!(*q.shuffle_mode(), ShuffleMode::Albums); | ||
| 289 | q.set_shuffle(ShuffleMode::None); | 291 | q.set_shuffle(ShuffleMode::None); |
| 290 | assert_eq!(*q.shuffle_mode(), ShuffleMode::None); | 292 | assert_eq!(*q.shuffle_mode(), ShuffleMode::None); |
| 291 | } | 293 | } |
| @@ -486,6 +488,109 @@ fn test_track_no_metadata_fields() { | |||
| 486 | assert!(t.album.is_none()); | 488 | assert!(t.album.is_none()); |
| 487 | } | 489 | } |
| 488 | 490 | ||
| 491 | // ---------- Shuffle albums ---------- | ||
| 492 | |||
| 493 | #[test] | ||
| 494 | fn test_shuffle_albums_groups_tracks_by_album() { | ||
| 495 | let mut q = Queue::new(); | ||
| 496 | q.push_track(track( | ||
| 497 | "/music/a1.mp3", | ||
| 498 | Some("A1"), | ||
| 499 | Some("Artist"), | ||
| 500 | Some("Album A"), | ||
| 501 | )); | ||
| 502 | q.push_track(track( | ||
| 503 | "/music/a2.mp3", | ||
| 504 | Some("A2"), | ||
| 505 | Some("Artist"), | ||
| 506 | Some("Album A"), | ||
| 507 | )); | ||
| 508 | q.push_track(track( | ||
| 509 | "/music/b1.mp3", | ||
| 510 | Some("B1"), | ||
| 511 | Some("Artist"), | ||
| 512 | Some("Album B"), | ||
| 513 | )); | ||
| 514 | q.push_track(track( | ||
| 515 | "/music/b2.mp3", | ||
| 516 | Some("B2"), | ||
| 517 | Some("Artist"), | ||
| 518 | Some("Album B"), | ||
| 519 | )); | ||
| 520 | q.push_track(track( | ||
| 521 | "/music/c1.mp3", | ||
| 522 | Some("C1"), | ||
| 523 | Some("Artist"), | ||
| 524 | Some("Album C"), | ||
| 525 | )); | ||
| 526 | // Queue: Album A (a1, a2), Album B (b1, b2), Album C (c1) | ||
| 527 | |||
| 528 | q.set_shuffle(ShuffleMode::Albums); | ||
| 529 | q.shuffle_initial(); // full shuffle of everything (as happens at play start) | ||
| 530 | |||
| 531 | let shuffled = q.shuffled_indices().to_vec(); | ||
| 532 | assert_eq!(shuffled.len(), 5); | ||
| 533 | |||
| 534 | // Tracks from the same album must appear as a contiguous block | ||
| 535 | let shuffled_tracks: Vec<_> = shuffled.iter().map(|&i| q.track_at(i).unwrap()).collect(); | ||
| 536 | |||
| 537 | // Find positions of all tracks | ||
| 538 | let a_positions: Vec<_> = shuffled_tracks | ||
| 539 | .iter() | ||
| 540 | .enumerate() | ||
| 541 | .filter(|(_, t)| t.album.as_deref() == Some("Album A")) | ||
| 542 | .map(|(i, _)| i) | ||
| 543 | .collect(); | ||
| 544 | let b_positions: Vec<_> = shuffled_tracks | ||
| 545 | .iter() | ||
| 546 | .enumerate() | ||
| 547 | .filter(|(_, t)| t.album.as_deref() == Some("Album B")) | ||
| 548 | .map(|(i, _)| i) | ||
| 549 | .collect(); | ||
| 550 | |||
| 551 | assert_eq!(a_positions.len(), 2, "Album A should have 2 tracks"); | ||
| 552 | assert_eq!(b_positions.len(), 2, "Album B should have 2 tracks"); | ||
| 553 | assert_eq!( | ||
| 554 | a_positions[1] - a_positions[0], | ||
| 555 | 1, | ||
| 556 | "Album A tracks should be contiguous" | ||
| 557 | ); | ||
| 558 | assert_eq!( | ||
| 559 | b_positions[1] - b_positions[0], | ||
| 560 | 1, | ||
| 561 | "Album B tracks should be contiguous" | ||
| 562 | ); | ||
| 563 | } | ||
| 564 | |||
| 565 | #[test] | ||
| 566 | fn test_shuffle_albums_solo_track_forms_own_group() { | ||
| 567 | let mut q = Queue::new(); | ||
| 568 | q.push_track(track("/music/x.mp3", Some("X"), None, None)); | ||
| 569 | q.push_track(track("/music/y.mp3", Some("Y"), None, Some("Album Y"))); | ||
| 570 | q.push_track(track("/music/z.mp3", Some("Z"), None, Some("Album Y"))); | ||
| 571 | |||
| 572 | q.set_shuffle(ShuffleMode::Albums); | ||
| 573 | let shuffled = q.shuffled_indices().to_vec(); | ||
| 574 | assert_eq!(shuffled.len(), 3); | ||
| 575 | |||
| 576 | // Track without album should form its own group of size 1 | ||
| 577 | // Tracks y and z share Album Y and should be adjacent | ||
| 578 | let shuffled_tracks: Vec<_> = shuffled.iter().map(|&i| q.track_at(i).unwrap()).collect(); | ||
| 579 | let y_pos = shuffled_tracks | ||
| 580 | .iter() | ||
| 581 | .position(|t| t.title.as_deref() == Some("Y")) | ||
| 582 | .unwrap(); | ||
| 583 | let z_pos = shuffled_tracks | ||
| 584 | .iter() | ||
| 585 | .position(|t| t.title.as_deref() == Some("Z")) | ||
| 586 | .unwrap(); | ||
| 587 | assert_eq!( | ||
| 588 | (y_pos as isize - z_pos as isize).abs(), | ||
| 589 | 1, | ||
| 590 | "tracks from same album must be adjacent" | ||
| 591 | ); | ||
| 592 | } | ||
| 593 | |||
| 489 | // ---------- Shuffle restore ---------- | 594 | // ---------- Shuffle restore ---------- |
| 490 | 595 | ||
| 491 | #[test] | 596 | #[test] |
