69 lines
2.7 KiB
Ruby
69 lines
2.7 KiB
Ruby
# encoding: UTF-8
|
|
|
|
require_relative "test_helper"
|
|
require_relative "../lib/meow/media"
|
|
require_relative "../lib/meow/msp"
|
|
|
|
module MeowMSPTest
|
|
MSP = MeowClient::MSP
|
|
|
|
MeowTest.test("MSP maps sound defaults into a shared media request") do
|
|
action = MSP::Adapter.new.parse("!!SOUND(weather/thunder)")
|
|
request = action.request
|
|
MeowTest.assert_equal(:play, action.type)
|
|
MeowTest.assert_equal("weather/thunder.wav", request.name)
|
|
MeowTest.assert_equal("sound", request.kind)
|
|
MeowTest.assert_equal("weather", request.tag)
|
|
MeowTest.assert_equal(100, request.volume)
|
|
MeowTest.assert_equal(1, request.loops)
|
|
MeowTest.assert_equal(50, request.priority)
|
|
MeowTest.refute(request.continue_existing)
|
|
MeowTest.assert(request.allow_insecure_http)
|
|
end
|
|
|
|
MeowTest.test("MSP accepts case-insensitive parameters and quoted legacy URLs") do
|
|
action = MSP::Adapter.new.parse(
|
|
'!!MUSIC(theme v=75 l=-1 c=0 t=zone u="http://media.example/game sounds/")'
|
|
)
|
|
request = action.request
|
|
MeowTest.assert_equal("theme.mid", request.name)
|
|
MeowTest.assert_equal("music", request.kind)
|
|
MeowTest.assert_equal("zone", request.tag)
|
|
MeowTest.assert_equal(75, request.volume)
|
|
MeowTest.assert_equal(-1, request.loops)
|
|
MeowTest.refute(request.continue_existing)
|
|
MeowTest.assert_equal("msp:music", request.key)
|
|
MeowTest.assert_equal("http://media.example/game sounds/", request.url)
|
|
end
|
|
|
|
MeowTest.test("MSP default URL and stop actions remain protocol-local") do
|
|
adapter = MSP::Adapter.new
|
|
default_action = adapter.parse("!!SOUND(Off U=http://media.example/sounds/)")
|
|
MeowTest.assert_equal(:default_url, default_action.type)
|
|
adapter.default_url = default_action.url
|
|
|
|
play = adapter.parse("!!SOUND(bell.wav)")
|
|
stop = adapter.parse("!!MUSIC(Off)")
|
|
MeowTest.assert_equal("http://media.example/sounds/", play.request.url)
|
|
MeowTest.assert_equal(:stop, stop.type)
|
|
MeowTest.assert_equal("music", stop.request.kind)
|
|
end
|
|
|
|
MeowTest.test("MSP recognizes out-of-band bodies but not mid-line text") do
|
|
adapter = MSP::Adapter.new
|
|
action = adapter.parse_bytes("SOUND(chime.wav U=http://media.example/)".b, "UTF-8")
|
|
MeowTest.assert_equal(:play, action.type)
|
|
MeowTest.assert_equal(nil, adapter.parse("chat says !!SOUND(chime.wav)"))
|
|
end
|
|
|
|
MeowTest.test("MSP reports invalid values and unsupported wildcards") do
|
|
adapter = MSP::Adapter.new
|
|
bad_volume = adapter.parse("!!SOUND(chime.wav V=101)")
|
|
wildcard = adapter.parse("!!SOUND(chime*.wav)")
|
|
unterminated = adapter.parse('!!SOUND(chime.wav U="http://media.example/)')
|
|
MeowTest.assert_equal(:error, bad_volume.type)
|
|
MeowTest.assert_equal(:error, wildcard.type)
|
|
MeowTest.assert_equal(:error, unterminated.type)
|
|
end
|
|
end
|