www.gusucode.com > Zaber Device Control Toolbox > tests/TestAsciiMessage.m

    %% Test: Constructor initializes fields correctly with numeric data and non-defaults.
message = Zaber.AsciiMessage(1, 'foo', [ 0.1 -23 456789012345 ], 'AxisNo', 4, 'MessageId', 5);
assert(message.DeviceNo == 1);
assert(strcmp(message.Command, 'foo'));
assert(isequal(message.Data, [ 0.1 -23 456789012345 ]));
assert(strcmp(message.DataString, '0.1 -23 456789012345'));
assert(message.MessageId == 5);
assert(message.AxisNo == 4);
assert(strcmp(message.Flags, ''));
assert(~message.IsError);
assert(message.MessageType == Zaber.MessageType.Request);
assert(message.IsIdle);

%% Test: Constructor initializes fields correctly with string data.
message = Zaber.AsciiMessage(1, 'foo', '0.1 -23 456789012345');
assert(message.DeviceNo == 1);
assert(strcmp(message.Command, 'foo'));
assert(isequal(message.Data, [ 0.1 -23 456789012345 ]));
assert(strcmp(message.DataString, '0.1 -23 456789012345'));
assert(isequal(message.MessageId, -1));
assert(message.AxisNo == 0);
assert(strcmp(message.Flags, ''));
assert(~message.IsError);
assert(message.MessageType == Zaber.MessageType.Request);
assert(message.IsIdle);

%% Test: Constructor initializes fields correctly with no data.
message = Zaber.AsciiMessage(1, 'foo', []);
assert(message.DeviceNo == 1);
assert(strcmp(message.Command, 'foo'));
assert(isequal(message.Data, [ ]));
assert(strcmp(message.DataString, ''));
assert(isequal(message.MessageId, -1));
assert(message.AxisNo == 0);
assert(strcmp(message.Flags, ''));
assert(~message.IsError);
assert(message.MessageType == Zaber.MessageType.Request);
assert(message.IsIdle);

%% Test: Serialize with small int data
message = Zaber.AsciiMessage(1, 'foo', 2);
s = native2unicode(message.serialize());
assert(strcmp(s, sprintf('/1 0 foo 2\r\n')));

%% Test: Serialize with large int data
message = Zaber.AsciiMessage(1, 'foo', 12345678901234);
s = native2unicode(message.serialize());
assert(strcmp(s, sprintf('/1 0 foo 12345678901234\r\n')));

%% Test: Serialize with float data
message = Zaber.AsciiMessage(1, 'foo', 0.0123);
s = native2unicode(message.serialize());
assert(strcmp(s, sprintf('/1 0 foo 0.0123\r\n')));

%% Test: Serialize with no data
message = Zaber.AsciiMessage(1, 'foo', []);
s = native2unicode(message.serialize());
assert(strcmp(s, sprintf('/1 0 foo\r\n')));

%% Test: Serialize with message ID
message = Zaber.AsciiMessage(1, 'foo', [ 2 3 ], 'AxisNo', 4, 'MessageId', 5);
s = native2unicode(message.serialize());
assert(strcmp(s, sprintf('/1 4 5 foo 2 3\r\n')));

%% Test: Serialize with checksum
message = Zaber.AsciiMessage(1, 'foo', 2);
s = native2unicode(message.serialize(true));
assert(strcmp(s, sprintf('/1 0 foo 2:C9\r\n')));

%% Test: Deserialize request from string
message = Zaber.AsciiMessage.deserialize(sprintf('/1 3 foo 2\r\n'));
assert(message.DeviceNo == 1);
assert(strcmp(message.Command, 'foo'));
assert(message.Data == 2);
assert(strcmp(message.DataString, '2'));
assert(message.MessageId == -1);
assert(message.AxisNo == 3);
assert(strcmp(message.Flags, ''));
assert(~message.IsError);
assert(message.MessageType == Zaber.MessageType.Request);
assert(message.IsIdle);

%% Test: Deserialize response from string
message = Zaber.AsciiMessage.deserialize(sprintf('@1 3 OK IDLE -- 7 3 4\r\n'));
assert(message.DeviceNo == 1);
assert(strcmp(message.Command, ''));
assert(isequal(message.Data, [7 3 4]));
assert(strcmp(message.DataString, '7 3 4'));
assert(message.MessageId == -1);
assert(message.AxisNo == 3);
assert(strcmp(message.Flags, '--'));
assert(~message.IsError);
assert(message.MessageType == Zaber.MessageType.Response);
assert(message.IsIdle);

%% Test: Deserialize response from byte array
message = Zaber.AsciiMessage.deserialize(unicode2native(sprintf('@1 3 OK IDLE -- 0\r\n')));
assert(message.DeviceNo == 1);
assert(strcmp(message.Command, ''));
assert(message.Data == 0);
assert(strcmp(message.DataString, '0'));
assert(message.MessageId == -1);
assert(message.AxisNo == 3);
assert(strcmp(message.Flags, '--'));
assert(~message.IsError);
assert(message.MessageType == Zaber.MessageType.Response);
assert(message.IsIdle);

%% Test: Deserialize response with multiple data values
message = Zaber.AsciiMessage.deserialize(sprintf('@1 3 OK IDLE -- -0.0012345 55 9876543210\r\n'));
assert(message.DeviceNo == 1);
assert(strcmp(message.Command, ''));
assert(isequal(message.Data, [-0.0012345 55 9876543210]));
assert(strcmp(message.DataString, '-0.0012345 55 9876543210'));
assert(message.MessageId == -1);
assert(message.AxisNo == 3);
assert(strcmp(message.Flags, '--'));
assert(~message.IsError);
assert(message.MessageType == Zaber.MessageType.Response);
assert(message.IsIdle);

%% Test: Deserialize busy response from string
message = Zaber.AsciiMessage.deserialize(sprintf('@1 3 OK BUSY -- 0\r\n'));
assert(strcmp(message.Flags, '--'));
assert(~message.IsError);
assert(message.MessageType == Zaber.MessageType.Response);
assert(~message.IsIdle);

%% Test: Deserialize error response from string
message = Zaber.AsciiMessage.deserialize(sprintf('@1 3 RJ IDLE WR AGAIN\r\n'));
assert(strcmp(message.Flags, 'WR'));
assert(message.IsError);
assert(message.MessageType == Zaber.MessageType.Response);
assert(message.IsIdle);
assert(strcmp(message.DataString, 'AGAIN'));

%% Test: Deserialize info message from string
message = Zaber.AsciiMessage.deserialize(sprintf('#1 3 foo 2 bar 4\r\n'));
assert(message.DeviceNo == 1);
assert(strcmp(message.Command, ''));
assert(isequal(message.Data, [2 4]));
assert(strcmp(message.DataString, 'foo 2 bar 4'));
assert(message.MessageId == -1);
assert(message.AxisNo == 3);
assert(strcmp(message.Flags, ''));
assert(~message.IsError);
assert(message.MessageType == Zaber.MessageType.Info);
assert(message.IsIdle);

%% Test: Deserialize alert message from string
message = Zaber.AsciiMessage.deserialize(sprintf('!1 3 BUSY --\r\n'));
assert(message.DeviceNo == 1);
assert(strcmp(message.Command, ''));
assert(isempty(message.Data));
assert(strcmp(message.DataString, ''));
assert(message.MessageId == -1);
assert(message.AxisNo == 3);
assert(strcmp(message.Flags, '--'));
assert(~message.IsError);
assert(message.MessageType == Zaber.MessageType.Alert);
assert(~message.IsIdle);

%% Test: Deserialize response with message ID and checksum
message = Zaber.AsciiMessage.deserialize(sprintf('@1 3 9 OK IDLE -- 0:61\r\n'));
assert(message.DeviceNo == 1);
assert(strcmp(message.Command, ''));
assert(message.Data == 0);
assert(strcmp(message.DataString, '0'));
assert(message.MessageId == 9);
assert(message.AxisNo == 3);
assert(strcmp(message.Flags, '--'));
assert(~message.IsError);
assert(message.MessageType == Zaber.MessageType.Response);
assert(message.IsIdle);

%% Test: Deserialize response with bad checksum
hadError = false;
try
    message = Zaber.AsciiMessage.deserialize(sprintf('@1 3 9 OK IDLE -- 0:60\r\n'));
catch e
    text = getReport(e);
    assert(~isequal(strfind(text, 'checksum'), []));
    hadError = true;
end
assert(hadError, 'An exception was expected');

%% Test: Deserialize truncated response
hadError = false;
try
    message = Zaber.AsciiMessage.deserialize(sprintf('@1 3 9 OK IDLE --'));
catch e
    text = getReport(e);
    assert(~isequal(strfind(text, 'enough'), []));
    hadError = true;
end
assert(hadError, 'An exception was expected');

%% Test: Deserialize response with bogus axis number
hadError = false;
try
    message = Zaber.AsciiMessage.deserialize(sprintf('@1 a OK IDLE -- 0\r\n'));
catch e
    text = getReport(e);
    assert(~isequal(strfind(text, 'axis'), []));
    hadError = true;
end
assert(hadError, 'An exception was expected');

%% Test: Deserialize response with bogus device number
hadError = false;
try
    message = Zaber.AsciiMessage.deserialize(sprintf('@x 1 OK IDLE -- 0\r\n'));
catch e
    text = getReport(e);
    assert(~isequal(strfind(text, 'device'), []));
    hadError = true;
end
assert(hadError, 'An exception was expected');

%% Test: Deserialize bogus message type
hadError = false;
try
    message = Zaber.AsciiMessage.deserialize(sprintf('Frumple!\r\n'));
catch e
    text = getReport(e);
    assert(~isequal(strfind(text, 'Unrecognized'), []));
    hadError = true;
end
assert(hadError, 'An exception was expected');


%% Cleanup
clear all;