Add tests for player and event.

This commit is contained in:
Pim Kunis 2020-10-11 18:15:16 +02:00
parent 362826eb2f
commit 2802e5fbf7
6 changed files with 85 additions and 16 deletions

28
test/event_test.exs Normal file
View file

@ -0,0 +1,28 @@
defmodule MIDITools.EventTest do
use ExUnit.Case
doctest MIDITools.Event
alias MIDITools.Event
test "note event" do
assert %Event.Note{channel: 0, tone: 60, start_time: 1, end_time: 1000, velocity: 127} =
Event.Note.new(0, 60, 1, 1000, 127)
end
test "change program event" do
assert %Event.ChangeProgram{channel: 0, time: 1, program: 40} =
Event.ChangeProgram.new(0, 1, 40)
end
test "note event conversion" do
note = Event.Note.new(0, 60, 1, 1000, 127)
[note_on, note_off] = Event.convert(note)
assert {1, <<0x90, 60, 127>>} = note_on
assert {1000, <<0x80, 60, 64>>} = note_off
end
test "change program event conversion" do
change_program = Event.ChangeProgram.new(0, 1, 40)
assert [{1, <<0xC0, 40>>}] = Event.convert(change_program)
end
end

View file

@ -1,8 +0,0 @@
defmodule MIDIToolsTest do
use ExUnit.Case
doctest MIDITools
test "greets the world" do
assert MIDITools.hello() == :world
end
end

42
test/player_test.exs Normal file
View file

@ -0,0 +1,42 @@
defmodule MIDITools.PlayerTest do
use ExUnit.Case
doctest MIDITools.Player
alias MIDITools.Player
setup do
{:ok, _pid} = Player.start_link()
:ok
end
setup_all do
events = Enum.map(1..4, &MIDITools.Event.Note.new(9, 51, &1 * 500, (&1 + 1) * 500, 127))
duration = 2000
[events: events, duration: duration]
end
test "play", %{events: events, duration: duration} do
assert :ok = Player.generate_schedule(events, duration)
assert :ok = Player.play()
Process.sleep(2500)
end
test "pause & resume", %{events: events, duration: duration} do
Player.generate_schedule(events, duration)
Player.play()
Process.sleep(1100)
assert :ok = Player.pause()
Process.sleep(500)
assert :ok = Player.resume()
Process.sleep(1400)
end
test "pause & resume edge cases", %{events: events, duration: duration} do
Player.generate_schedule(events, duration)
assert {:error, :not_started} = Player.pause()
assert {:error, :not_paused} = Player.resume()
Player.play()
Player.pause()
assert {:error, :already_paused} = Player.pause()
end
end