# 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