From 3b745756103265395ff27dd4c24ffa0d7d22fcda Mon Sep 17 00:00:00 2001 From: Hannes Staffler Date: Thu, 26 Jul 2018 17:44:18 +0200 Subject: [PATCH 1/2] added fix for normal queues --- .../AudioPlayer/item/AudioItemQueue.swift | 10 ++++--- .../AudioItemQueue_Tests.swift | 27 ++++++++++++++++++- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/AudioPlayer/AudioPlayer/item/AudioItemQueue.swift b/AudioPlayer/AudioPlayer/item/AudioItemQueue.swift index 8ab18c6..0e7ee8b 100644 --- a/AudioPlayer/AudioPlayer/item/AudioItemQueue.swift +++ b/AudioPlayer/AudioPlayer/item/AudioItemQueue.swift @@ -178,12 +178,14 @@ class AudioItemQueue { if mode.contains(.repeatAll) && nextPosition <= 0 { nextPosition = queue.count } - + while nextPosition > 0 { - let previousPosition = nextPosition - 1 + var previousPosition = nextPosition - 1 nextPosition = previousPosition + if previousPosition == queue.count - 1 && mode == .normal { + previousPosition -= 1 + } let item = queue[previousPosition] - if shouldConsiderItem(item: item) { historic.append(item) return item @@ -199,7 +201,7 @@ class AudioItemQueue { /// A boolean value indicating whether the queue has a previous item to play or not. var hasPreviousItem: Bool { if !queue.isEmpty && - (nextPosition > 0 || mode.contains(.repeat) || mode.contains(.repeatAll)) { + ((nextPosition > 0 && queue.count > 1) || mode.contains(.repeat) || mode.contains(.repeatAll)) { return true } return false diff --git a/AudioPlayer/AudioPlayerTests/AudioItemQueue_Tests.swift b/AudioPlayer/AudioPlayerTests/AudioItemQueue_Tests.swift index b2d2014..64ab299 100644 --- a/AudioPlayer/AudioPlayerTests/AudioItemQueue_Tests.swift +++ b/AudioPlayer/AudioPlayerTests/AudioItemQueue_Tests.swift @@ -156,6 +156,32 @@ class AudioItemQueue_Tests: XCTestCase { XCTAssert(queue.hasNextItem) XCTAssert(queue.previousItem() === item1) } + + func testPreviousWithTwoItems() { + let queue = AudioItemQueue(items: [item1, item2], mode: .normal) + print("1: \(queue.nextPosition)") + XCTAssertFalse(queue.hasPreviousItem) + XCTAssert(queue.nextItem() === item1) + print("2: \(queue.nextPosition)") + XCTAssertTrue(queue.hasPreviousItem) + XCTAssert(queue.nextItem() === item2) + print("3: \(queue.nextPosition)") + XCTAssertTrue(queue.hasPreviousItem) + XCTAssert(queue.previousItem() === item1) + print("4: \(queue.nextPosition)") + XCTAssert(queue.nextItem() === item2) + print("5: \(queue.nextPosition)") + } + + func testPreviousWithOneItem() { + let queue = AudioItemQueue(items: [item1], mode: .normal) + XCTAssertFalse(queue.hasPreviousItem) + XCTAssertTrue(queue.hasNextItem) + + XCTAssert(queue.nextItem() === item1) + XCTAssertFalse(queue.hasPreviousItem) + XCTAssertFalse(queue.hasNextItem) + } func testPreviousInRepeatMode() { let queue = AudioItemQueue(items: [item1, item2, item3], mode: .repeat) @@ -214,7 +240,6 @@ class AudioItemQueue_Tests: XCTestCase { queue.nextPosition = queue.queue.count queue.delegate = delegate - XCTAssert(queue.previousItem() === item3) XCTAssert(queue.previousItem() === item1) XCTAssertNil(queue.previousItem()) } From 4e023a72597dea2725c121ecad3f03a3f1b63472 Mon Sep 17 00:00:00 2001 From: Hannes Staffler Date: Thu, 26 Jul 2018 17:52:03 +0200 Subject: [PATCH 2/2] fixed tests --- .../AudioPlayer/item/AudioItemQueue.swift | 2 +- .../AudioItemQueue_Tests.swift | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/AudioPlayer/AudioPlayer/item/AudioItemQueue.swift b/AudioPlayer/AudioPlayer/item/AudioItemQueue.swift index 0e7ee8b..49aadc1 100644 --- a/AudioPlayer/AudioPlayer/item/AudioItemQueue.swift +++ b/AudioPlayer/AudioPlayer/item/AudioItemQueue.swift @@ -201,7 +201,7 @@ class AudioItemQueue { /// A boolean value indicating whether the queue has a previous item to play or not. var hasPreviousItem: Bool { if !queue.isEmpty && - ((nextPosition > 0 && queue.count > 1) || mode.contains(.repeat) || mode.contains(.repeatAll)) { + (nextPosition > 1 || mode.contains(.repeat) || mode.contains(.repeatAll)) { return true } return false diff --git a/AudioPlayer/AudioPlayerTests/AudioItemQueue_Tests.swift b/AudioPlayer/AudioPlayerTests/AudioItemQueue_Tests.swift index 64ab299..26fb772 100644 --- a/AudioPlayer/AudioPlayerTests/AudioItemQueue_Tests.swift +++ b/AudioPlayer/AudioPlayerTests/AudioItemQueue_Tests.swift @@ -157,20 +157,26 @@ class AudioItemQueue_Tests: XCTestCase { XCTAssert(queue.previousItem() === item1) } - func testPreviousWithTwoItems() { + func testHasPrevious() { let queue = AudioItemQueue(items: [item1, item2], mode: .normal) - print("1: \(queue.nextPosition)") XCTAssertFalse(queue.hasPreviousItem) XCTAssert(queue.nextItem() === item1) - print("2: \(queue.nextPosition)") + XCTAssertFalse(queue.hasPreviousItem) + XCTAssert(queue.nextItem() === item2) XCTAssertTrue(queue.hasPreviousItem) + XCTAssert(queue.previousItem() === item1) + XCTAssert(queue.nextItem() === item2) + } + + func testPreviousWithTwoItems() { + let queue = AudioItemQueue(items: [item1, item2], mode: .normal) + XCTAssertFalse(queue.hasPreviousItem) + XCTAssert(queue.nextItem() === item1) + XCTAssertFalse(queue.hasPreviousItem) XCTAssert(queue.nextItem() === item2) - print("3: \(queue.nextPosition)") XCTAssertTrue(queue.hasPreviousItem) XCTAssert(queue.previousItem() === item1) - print("4: \(queue.nextPosition)") XCTAssert(queue.nextItem() === item2) - print("5: \(queue.nextPosition)") } func testPreviousWithOneItem() {