def test_linebased_channel_without_response(tc): channel = Preprogrammed_gtp_channel("") channel.send_command("protocol_version", []) tc.assertRaisesRegexp(GtpChannelClosed, "^engine has closed the response channel$", channel.get_response) channel.close()
def test_linebased_channel_without_response(tc): channel = Preprogrammed_gtp_channel("") channel.send_command("protocol_version", []) tc.assertRaisesRegexp( GtpChannelClosed, "^engine has closed the response channel$", channel.get_response) channel.close()
def test_linebased_channel_with_gmp_response(tc): channel = Preprogrammed_gtp_channel("\x01\xa1\xa0\x80", hangs_before_eof=True) channel.send_command("protocol_version", []) tc.assertRaisesRegexp(GtpProtocolError, "appears to be speaking GMP", channel.get_response) channel.close()
def test_linebased_channel_with_gmp_response(tc): channel = Preprogrammed_gtp_channel("\x01\xa1\xa0\x80", hangs_before_eof=True) channel.send_command("protocol_version", []) tc.assertRaisesRegexp( GtpProtocolError, "appears to be speaking GMP", channel.get_response) channel.close()
def test_linebased_channel_hang(tc): # Correct behaviour for a GTP controller here is to wait for a newline. # (Would be nice to have a timeout.) # This serves as a check that the hangs_before_eof modelling is working. channel = Preprogrammed_gtp_channel("=prompt> ", hangs_before_eof=True) channel.send_command("protocol_version", []) tc.assertRaisesRegexp(SupporterError, "this would hang", channel.get_response) channel.close()
def test_linebased_channel_with_usage_message_response(tc): channel = Preprogrammed_gtp_channel( "Usage: randomprogram [options]\n\nOptions:\n" "--help show this help message and exit\n") channel.send_command("protocol_version", []) tc.assertRaisesRegexp(GtpProtocolError, "^engine isn't speaking GTP: first byte is 'U'$", channel.get_response) channel.close()
def test_linebased_channel_with_usage_message_response(tc): channel = Preprogrammed_gtp_channel( "Usage: randomprogram [options]\n\nOptions:\n" "--help show this help message and exit\n") channel.send_command("protocol_version", []) tc.assertRaisesRegexp( GtpProtocolError, "^engine isn't speaking GTP: first byte is 'U'$", channel.get_response) channel.close()
def test_linebased_channel_hang(tc): # Correct behaviour for a GTP controller here is to wait for a newline. # (Would be nice to have a timeout.) # This serves as a check that the hangs_before_eof modelling is working. channel = Preprogrammed_gtp_channel("=prompt> ", hangs_before_eof=True) channel.send_command("protocol_version", []) tc.assertRaisesRegexp( SupporterError, "this would hang", channel.get_response) channel.close()
def test_linebased_channel_with_broken_response_pipe(tc): channel = Preprogrammed_gtp_channel("= 2\n\n? unreached\n\n") channel.send_command("protocol_version", []) tc.assertEqual(channel.get_response(), (False, "2")) channel.break_response_stream() channel.send_command("list_commands", []) tc.assertRaisesRegexp(GtpChannelClosed, "^engine has closed the response channel$", channel.get_response) channel.close()
def test_linebased_channel_with_broken_response_pipe(tc): channel = Preprogrammed_gtp_channel("= 2\n\n? unreached\n\n") channel.send_command("protocol_version", []) tc.assertEqual(channel.get_response(), (False, "2")) channel.break_response_stream() channel.send_command("list_commands", []) tc.assertRaisesRegexp( GtpChannelClosed, "^engine has closed the response channel$", channel.get_response) channel.close()
def test_linebased_channel(tc): channel = Preprogrammed_gtp_channel("=\n\n=\n\n") tc.assertEqual(channel.get_command_stream(), "") channel.send_command("play", ["b", "a3"]) tc.assertEqual(channel.get_command_stream(), "play b a3\n") tc.assertEqual(channel.get_response(), (False, "")) channel.send_command("quit", []) tc.assertEqual(channel.get_command_stream(), "play b a3\nquit\n") tc.assertEqual(channel.get_response(), (False, "")) tc.assertRaisesRegexp(GtpChannelClosed, "engine has closed the response channel", channel.get_response) channel.close()
def test_linebased_channel(tc): channel = Preprogrammed_gtp_channel("=\n\n=\n\n") tc.assertEqual(channel.get_command_stream(), "") channel.send_command("play", ["b", "a3"]) tc.assertEqual(channel.get_command_stream(), "play b a3\n") tc.assertEqual(channel.get_response(), (False, "")) channel.send_command("quit", []) tc.assertEqual(channel.get_command_stream(), "play b a3\nquit\n") tc.assertEqual(channel.get_response(), (False, "")) tc.assertRaisesRegexp( GtpChannelClosed, "engine has closed the response channel", channel.get_response) channel.close()
def test_channel_command_validation(tc): channel = Preprogrammed_gtp_channel("\n\n") # empty command tc.assertRaises(ValueError, channel.send_command, "", []) # space in command tc.assertRaises(ValueError, channel.send_command, "play b a3", []) # space after command tc.assertRaises(ValueError, channel.send_command, "play ", ["b", "a3"]) # control character in command tc.assertRaises(ValueError, channel.send_command, "pla\x01y", ["b", "a3"]) # unicode command tc.assertRaises(ValueError, channel.send_command, u"protocol_version", []) # space in argument tc.assertRaises(ValueError, channel.send_command, "play", ["b a3"]) # unicode argument tc.assertRaises(ValueError, channel.send_command, "play ", [u"b", "a3"]) # high characters channel.send_command("pl\xc3\xa1y", ["b", "\xc3\xa13"]) tc.assertEqual(channel.get_command_stream(), "pl\xc3\xa1y b \xc3\xa13\n")
def test_channel_command_validation(tc): channel = Preprogrammed_gtp_channel("\n\n") # empty command tc.assertRaises(ValueError, channel.send_command, "", []) # space in command tc.assertRaises(ValueError, channel.send_command, "play b a3", []) # space after command tc.assertRaises(ValueError, channel.send_command, "play ", ["b", "a3"]) # control character in command tc.assertRaises(ValueError, channel.send_command, "pla\x01y", ["b", "a3"]) # unicode command tc.assertRaises(ValueError, channel.send_command, u"protocol_version", []) # space in argument tc.assertRaises(ValueError, channel.send_command, "play", ["b a3"]) # unicode argument tc.assertRaises(ValueError, channel.send_command, "play ", [u"b", "a3"]) # high characters channel.send_command("pl\xc3\xa1y", ["b", "\xc3\xa13"]) tc.assertEqual(channel.get_command_stream(), "pl\xc3\xa1y b \xc3\xa13\n")
def test_linebased_channel_responses(tc): channel = Preprogrammed_gtp_channel("= 2\n\n" # failure response "? unknown command\n\n" # final response with no newlines "= ok") channel.send_command("protocol_version", []) tc.assertEqual(channel.get_response(), (False, "2")) channel.send_command("xyzzy", ["1", "2"]) tc.assertEqual(channel.get_response(), (True, "unknown command")) channel.send_command("quit", ["1", "2"]) tc.assertEqual(channel.get_response(), (False, "ok"))
def test_linebased_channel_responses(tc): channel = Preprogrammed_gtp_channel( "= 2\n\n" # failure response "? unknown command\n\n" # final response with no newlines "= ok") channel.send_command("protocol_version", []) tc.assertEqual(channel.get_response(), (False, "2")) channel.send_command("xyzzy", ["1", "2"]) tc.assertEqual(channel.get_response(), (True, "unknown command")) channel.send_command("quit", ["1", "2"]) tc.assertEqual(channel.get_response(), (False, "ok"))
def test_linebased_channel_with_interactive_response(tc): channel = Preprogrammed_gtp_channel("prompt> \n", hangs_before_eof=True) channel.send_command("protocol_version", []) tc.assertRaisesRegexp(GtpProtocolError, "^engine isn't speaking GTP", channel.get_response) channel.close()
def test_linebased_channel_with_interactive_response(tc): channel = Preprogrammed_gtp_channel("prompt> \n", hangs_before_eof=True) channel.send_command("protocol_version", []) tc.assertRaisesRegexp( GtpProtocolError, "^engine isn't speaking GTP", channel.get_response) channel.close()