Skip to content

Commit

Permalink
UnitTests: fixing player seek tests
Browse files Browse the repository at this point in the history
  • Loading branch information
BLeeEZ committed Apr 9, 2021
1 parent ff9815c commit d3a5876
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 5 deletions.
2 changes: 1 addition & 1 deletion Amperfy/Common/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
return backendProxy
}()
lazy var player = {
return MusicPlayer(coreData: persistentLibraryStorage.getPlayerData(), downloadManager: downloadManager, backendAudioPlayer: BackendAudioPlayer(songDownloader: downloadManager, songCache: persistentLibraryStorage))
return MusicPlayer(coreData: persistentLibraryStorage.getPlayerData(), downloadManager: downloadManager, backendAudioPlayer: BackendAudioPlayer(mediaPlayer: AVPlayer(), songDownloader: downloadManager, songCache: persistentLibraryStorage))
}()
lazy var downloadManager: DownloadManager = {
let requestManager = RequestManager()
Expand Down
5 changes: 3 additions & 2 deletions Amperfy/Player/BackendAudioPlayer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class BackendAudioPlayer: SongDownloadNotifiable {

private let songDownloader: SongDownloadable
private let songCache: SongFileCachable
private let player = AVPlayer()
private let player: AVPlayer
private let updateElapsedTimeInterval = CMTime(seconds: 1.0, preferredTimescale: CMTimeScale(NSEC_PER_SEC))
private var latestPlayRequest: PlayRequest?
private let semaphore = DispatchSemaphore(value: 1)
Expand Down Expand Up @@ -61,7 +61,8 @@ class BackendAudioPlayer: SongDownloadNotifiable {
return player.currentItem != nil
}

init(songDownloader: SongDownloadable, songCache: SongFileCachable) {
init(mediaPlayer: AVPlayer, songDownloader: SongDownloadable, songCache: SongFileCachable) {
self.player = mediaPlayer
self.songDownloader = songDownloader
self.songCache = songCache

Expand Down
38 changes: 36 additions & 2 deletions AmperfyTests/Cases/Player/MusicPlayerTest.swift
Original file line number Diff line number Diff line change
@@ -1,6 +1,34 @@
import XCTest
import AVFoundation
@testable import Amperfy

class MOCK_AVPlayerItem: AVPlayerItem {
override var status: AVPlayerItem.Status {
return AVPlayerItem.Status.readyToPlay
}
}

class MOCK_AVPlayer: AVPlayer {
var useMockCurrentItem = false

override var currentItem: AVPlayerItem? {
guard let curItem = super.currentItem else { return nil }
if !useMockCurrentItem {
return curItem
} else {
return MOCK_AVPlayerItem(asset: curItem.asset)
}
}

override func currentTime() -> CMTime {
let oldUseMock = useMockCurrentItem
useMockCurrentItem = false
let curTime = super.currentTime()
useMockCurrentItem = oldUseMock
return curTime
}
}

class MOCK_SongDownloader: SongDownloadable {

var downloadCount = 0
Expand Down Expand Up @@ -32,7 +60,8 @@ class MusicPlayerTest: XCTestCase {
var songDownloader: MOCK_SongDownloader!
var backendPlayer: BackendAudioPlayer!
var playerData: PlayerData!
var testPlayer: MusicPlayer!
var testPlayer: Amperfy.MusicPlayer!
var mockAVPlayer: MOCK_AVPlayer!

var songCached: Song!
var songToDownload: Song!
Expand All @@ -42,7 +71,8 @@ class MusicPlayerTest: XCTestCase {
cdHelper = CoreDataHelper()
storage = cdHelper.createSeededStorage()
songDownloader = MOCK_SongDownloader()
backendPlayer = BackendAudioPlayer(songDownloader: songDownloader, songCache: storage)
mockAVPlayer = MOCK_AVPlayer()
backendPlayer = BackendAudioPlayer(mediaPlayer: mockAVPlayer, songDownloader: songDownloader, songCache: storage)
playerData = storage.getPlayerData()
testPlayer = MusicPlayer(coreData: playerData, downloadManager: songDownloader, backendAudioPlayer: backendPlayer)

Expand Down Expand Up @@ -216,7 +246,9 @@ class MusicPlayerTest: XCTestCase {
func testSeek_FilledPlaylist() {
testPlayer.play(song: songCached)
testPlayer.seek(toSecond: 3.0)
mockAVPlayer.useMockCurrentItem = true
XCTAssertEqual(testPlayer.elapsedTime, 3.0)
mockAVPlayer.useMockCurrentItem = false
}

func testPlayPreviousOrReplay_EmptyPlaylist() {
Expand All @@ -236,7 +268,9 @@ class MusicPlayerTest: XCTestCase {
prepareWithCachedPlaylist()
testPlayer.play(songInPlaylistAt: 3)
testPlayer.seek(toSecond: 10.0)
mockAVPlayer.useMockCurrentItem = true
testPlayer.playPreviousOrReplay()
mockAVPlayer.useMockCurrentItem = false
XCTAssertEqual(testPlayer.currentlyPlaying?.index, 3)
XCTAssertEqual(testPlayer.elapsedTime, 0.0)
}
Expand Down

0 comments on commit d3a5876

Please sign in to comment.