PlaybackStateBridge.test.ets 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { AppStorage } from '@kit.ArkUI'
  2. import { describe, expect, it } from '@ohos/hypium'
  3. import { PlaybackStateBridge } from '../../../main/ets/controller/PlaybackStateBridge'
  4. import { VideoItem } from '../../../main/ets/viewmodel/VideoItem'
  5. export default function playbackStateBridgeTest() {
  6. describe('PlaybackStateBridgeTest', () => {
  7. it('replaceQueueSyncsCurrentSongAndIndex', 0, () => {
  8. const bridge = PlaybackStateBridge.getInstance()
  9. const songs: VideoItem[] = [
  10. new VideoItem('Song A', '1', '/music/a.flac', 0, 0, '2026-04-02'),
  11. new VideoItem('Song B', '2', '/music/b.flac', 0, 0, '2026-04-02')
  12. ]
  13. bridge.reset()
  14. bridge.replaceQueue(songs, 99)
  15. const snapshot = bridge.getSnapshot()
  16. expect(snapshot.queue.length).assertEqual(2)
  17. expect(snapshot.currentIndex).assertEqual(1)
  18. expect(snapshot.currentSong?.filePath ?? '').assertEqual('/music/b.flac')
  19. const storedQueue = AppStorage.get<VideoItem[]>('currentQueue') ?? []
  20. expect(storedQueue.length).assertEqual(2)
  21. expect(storedQueue[1]?.filePath ?? '').assertEqual('/music/b.flac')
  22. expect(AppStorage.get<VideoItem>('currentSong')?.filePath ?? '').assertEqual('/music/b.flac')
  23. expect(AppStorage.get<number>('currentQueueIndex')).assertEqual(1)
  24. })
  25. it('updatePlaybackStateDoesNotDropQueue', 0, () => {
  26. const bridge = PlaybackStateBridge.getInstance()
  27. const songs: VideoItem[] = [
  28. new VideoItem('Song A', '1', '/music/a.flac', 0, 0, '2026-04-02')
  29. ]
  30. bridge.reset()
  31. bridge.replaceQueue(songs, 0)
  32. bridge.updatePlaybackState(true, 1350, 4200)
  33. const snapshot = bridge.getSnapshot()
  34. expect(snapshot.isPlaying).assertTrue()
  35. expect(snapshot.positionMs).assertEqual(1350)
  36. expect(snapshot.durationMs).assertEqual(4200)
  37. expect(snapshot.currentSong?.filePath ?? '').assertEqual('/music/a.flac')
  38. expect(AppStorage.get<boolean>('isPlaying')).assertTrue()
  39. })
  40. it('replaceQueueWithEmptyQueueResetsPlaybackState', 0, () => {
  41. const bridge = PlaybackStateBridge.getInstance()
  42. bridge.reset()
  43. bridge.replaceQueue([], 0)
  44. const snapshot = bridge.getSnapshot()
  45. expect(snapshot.queue.length).assertEqual(0)
  46. expect(snapshot.currentIndex).assertEqual(-1)
  47. expect(snapshot.isPlaying).assertFalse()
  48. expect(AppStorage.get<boolean>('isPlaying')).assertFalse()
  49. })
  50. })
  51. }