broken changes
This commit is contained in:
@@ -2140,6 +2140,21 @@ extension KJamsCloneTests {
|
||||
control.selectItem(withTag:0);_ = control.sendAction(try XCTUnwrap(control.action),to:control.target)
|
||||
XCTAssertEqual(selected,0)
|
||||
}
|
||||
@MainActor func testLiveAudioRoutingKeepsPlayingPositionAndPausedState() async throws {
|
||||
let output = try XCTUnwrap(DJAudioDevice.defaultOutput())
|
||||
let audio = try XCTUnwrap(Bundle(for:Self.self).resourceURL?.appendingPathComponent("Fixtures/Demo.mp3"))
|
||||
let player = Player(persistsMix:false);player.volume = 0;defer { player.stop() }
|
||||
try player.load(.init(id:1,title:"Routing",audio:audio.path,cdg:nil,rating:0,plays:0))
|
||||
player.seek(0.5);try await Task.sleep(nanoseconds:100_000_000)
|
||||
let before = player.time
|
||||
try player.routeOutput(output,firstChannel:0)
|
||||
XCTAssertTrue(player.playing);XCTAssertGreaterThanOrEqual(player.time,before-0.05)
|
||||
try await Task.sleep(nanoseconds:100_000_000)
|
||||
XCTAssertGreaterThan(player.time,before)
|
||||
player.toggle();let paused = player.time
|
||||
try player.routeOutput(output,firstChannel:0)
|
||||
XCTAssertFalse(player.playing);XCTAssertEqual(player.time,paused,accuracy:0.02)
|
||||
}
|
||||
@MainActor func testAudioOutputsAndActualFourChannelRoutingWhenInterfaceAttached() async throws {
|
||||
let outputs = DJAudioDevice.outputs()
|
||||
print("DJ audio discovery:",outputs.map { "\($0.name) [\($0.outputChannels) out / \($0.inputChannels) in]" }.joined(separator:", "))
|
||||
@@ -2328,6 +2343,48 @@ extension KJamsCloneTests {
|
||||
}
|
||||
|
||||
extension KJamsCloneTests {
|
||||
func testLoopMouseRangesResizeMoveCreateAndClamp() throws {
|
||||
let loop = 1.0...3.0
|
||||
let left = DJLoopDrag(x:100,viewport:0,span:6,width:600,loop:loop,create:false)
|
||||
XCTAssertEqual(left.mode,.start);XCTAssertEqual(left.range(x:50,duration:6),0.5...3)
|
||||
let right = DJLoopDrag(x:300,viewport:0,span:6,width:600,loop:loop,create:false)
|
||||
XCTAssertEqual(right.mode,.end);XCTAssertEqual(right.range(x:450,duration:6),1...4.5)
|
||||
let move = DJLoopDrag(x:200,viewport:0,span:6,width:600,loop:loop,create:false)
|
||||
XCTAssertEqual(move.mode,.move);XCTAssertEqual(move.range(x:300,duration:6),2...4)
|
||||
XCTAssertEqual(move.range(x:-200,duration:6),0...2)
|
||||
XCTAssertEqual(move.range(x:900,duration:6),4...6)
|
||||
let create = DJLoopDrag(x:400,viewport:0,span:6,width:600,loop:nil,create:true)
|
||||
XCTAssertEqual(create.range(x:200,duration:6),2...4)
|
||||
let seek = DJLoopDrag(x:500,viewport:0,span:6,width:600,loop:loop,create:false)
|
||||
XCTAssertEqual(seek.mode,.seek);XCTAssertNil(seek.range(x:400,duration:6))
|
||||
let narrow = try XCTUnwrap(left.range(x:500,duration:6))
|
||||
XCTAssertEqual(narrow.upperBound-narrow.lowerBound,0.1,accuracy:0.00001)
|
||||
}
|
||||
@MainActor func testActualMouseDragMovesAndResizesPlayingLoop() async throws {
|
||||
let file = try XCTUnwrap(Bundle(for:Self.self).resourceURL?.appendingPathComponent("Fixtures/Demo.mp3"))
|
||||
let player = Player(persistsMix:false);player.volume = 0;defer { player.stop() }
|
||||
try player.load(.init(id:1,title:"Mouse Loop",audio:file.path,cdg:nil,rating:0,plays:0),startPlaying:false)
|
||||
player.defineLoop(start:0.5,end:1.5);player.seek(0.75);player.toggle()
|
||||
var frozen: Double?
|
||||
let host = NSHostingView(rootView:Color.black.modifier(DJLoopWaveInteraction(player:player,start:0,span:3,width:600,frozenStart:Binding(get:{frozen},set:{frozen = $0}))).frame(width:600,height:100))
|
||||
host.frame = NSRect(x:0,y:0,width:600,height:100)
|
||||
let window = NSWindow(contentRect:host.frame,styleMask:[.borderless],backing:.buffered,defer:false)
|
||||
window.contentView = host;window.setFrameOrigin(NSPoint(x:-10000,y:-10000));window.orderFront(nil);window.makeKey()
|
||||
defer { window.orderOut(nil);window.contentView = nil }
|
||||
try await Task.sleep(nanoseconds:100_000_000);host.layoutSubtreeIfNeeded()
|
||||
func drag(_ from: Double,_ to: Double) async throws {
|
||||
for (type,x) in [(NSEvent.EventType.leftMouseDown,from),(.leftMouseDragged,to),(.leftMouseUp,to)] {
|
||||
let event = try XCTUnwrap(NSEvent.mouseEvent(with:type,location:NSPoint(x:x,y:50),modifierFlags:[],timestamp:ProcessInfo.processInfo.systemUptime,windowNumber:window.windowNumber,context:nil,eventNumber:0,clickCount:1,pressure:type == .leftMouseUp ? 0 : 1))
|
||||
NSApp.sendEvent(event)
|
||||
}
|
||||
try await Task.sleep(nanoseconds:50_000_000)
|
||||
}
|
||||
try await drag(200,300)
|
||||
XCTAssertEqual(player.loopIn!,1,accuracy:0.01);XCTAssertEqual(player.loopOut!,2,accuracy:0.01)
|
||||
try await drag(200,150)
|
||||
XCTAssertEqual(player.loopIn!,0.75,accuracy:0.01);XCTAssertEqual(player.loopOut!,2,accuracy:0.01)
|
||||
XCTAssertTrue(player.playing);XCTAssertTrue(player.loopEnabled);XCTAssertNil(frozen)
|
||||
}
|
||||
@MainActor private func automixFixture(_ root: URL) throws -> (DJSystem,[Song]) {
|
||||
let system = DJSystem(storageURL:root),library = try XCTUnwrap(system.library)
|
||||
let fixture = try XCTUnwrap(Bundle(for:Self.self).resourceURL?.appendingPathComponent("Fixtures/Demo.mp3"))
|
||||
|
||||
Reference in New Issue
Block a user