Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 12 additions & 7 deletions lib/parameter.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class Parameter {
/**
* Create a Parameter instance from an rlc_interfaces/msg/Parameter message.
* @constructs
* @param {rlc_interfaces/msg/Parameter} parameterMsg - The message to convert to a parameter.
* @param {rcl_interfaces/msg/Parameter} parameterMsg - The message to convert to a parameter.
* @return {Parameter} - The new instance.
*/
static fromParameterMessage(parameterMsg) {
Expand All @@ -89,25 +89,25 @@ class Parameter {
value = parameterMsg.value.bool_array_value;
break;
case ParameterType.PARAMETER_BYTE_ARRAY:
value = parameterMsg.value.byte_array_value;
value = Array.from(parameterMsg.value.byte_array_value);
break;
case ParameterType.PARAMETER_DOUBLE:
value = parameterMsg.value.double_value;
break;
case ParameterType.PARAMETER_DOUBLE_ARRAY:
value = parameterMsg.value.double_array_value;
value = Array.from(parameterMsg.value.double_array_value);
break;
case ParameterType.PARAMETER_INTEGER:
value = parameterMsg.value.integer_value;
break;
case ParameterType.PARAMETER_INTEGER_ARRAY:
value = parameterMsg.value.integer_array_value;
value = Array.from(parameterMsg.value.integer_array_value);
break;
case ParameterType.PARAMETER_STRING:
value = parameterMsg.value.string_value;
break;
case ParameterType.PARAMETER_STRING_ARRAY:
value = parameterMsg.value.string_array_value;
value = Array.from(parameterMsg.value.string_array_value);
break;
}

Expand Down Expand Up @@ -771,6 +771,7 @@ function validValue(value, type) {
case ParameterType.PARAMETER_BYTE_ARRAY:
case ParameterType.PARAMETER_INTEGER_ARRAY:
case ParameterType.PARAMETER_DOUBLE_ARRAY:
case ParameterType.PARAMETER_STRING_ARRAY:
const values = value;
result = _validArray(values, type);
break;
Expand All @@ -788,14 +789,17 @@ function _validArray(values, type) {
if (type === ParameterType.PARAMETER_BOOL_ARRAY) {
arrayElementType = ParameterType.PARAMETER_BOOL;
} else if (type === ParameterType.PARAMETER_BYTE_ARRAY) {
arrayElementType = ParameterType.PARAMETER_BYTE;
arrayElementType = ParameterType.PARAMETER_INTEGER;
}
if (type === ParameterType.PARAMETER_INTEGER_ARRAY) {
arrayElementType = ParameterType.PARAMETER_INTEGER;
}
if (type === ParameterType.PARAMETER_DOUBLE_ARRAY) {
arrayElementType = ParameterType.PARAMETER_DOUBLE;
}
if (type === ParameterType.PARAMETER_STRING_ARRAY) {
arrayElementType = ParameterType.PARAMETER_STRING;
}

return values.reduce(
(compatible, val) =>
Expand All @@ -811,7 +815,8 @@ function _isArrayParameterType(type) {
type === ParameterType.PARAMETER_BOOL_ARRAY ||
type === ParameterType.PARAMETER_BYTE_ARRAY ||
type === ParameterType.PARAMETER_INTEGER_ARRAY ||
type === ParameterType.PARAMETER_DOUBLE_ARRAY
type === ParameterType.PARAMETER_DOUBLE_ARRAY ||
type === ParameterType.PARAMETER_STRING_ARRAY
);
}

Expand Down
172 changes: 172 additions & 0 deletions test/test-parameters.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const assertUtils = require('./utils.js');
const assertThrowsError = assertUtils.assertThrowsError;
const IsClose = require('is-close');
const rclnodejs = require('../index.js');
const loader = require('../lib/interface_loader.js');

const ParameterType = rclnodejs.ParameterType;
const Parameter = rclnodejs.Parameter;
Expand Down Expand Up @@ -102,6 +103,177 @@ describe('rclnodejs parameters test suite', function () {
});
});

describe('convert fromParameterMessage test suite', function () {
it('should convert PARAMETER_NOT_SET type', function () {
let param_msg = new (loader.loadInterface(
'rcl_interfaces/msg/Parameter'
))();
param_msg.name = 'not_set_param';
param_msg.value.type = ParameterType.PARAMETER_NOT_SET;

let param;
assert.doesNotThrow(() => {
param = Parameter.fromParameterMessage(param_msg);
});
assert.strictEqual(param.name, 'not_set_param');
assert.strictEqual(param.type, ParameterType.PARAMETER_NOT_SET);
assert.strictEqual(param.value, undefined);
});

it('should convert PARAMETER_BOOL type', function () {
let param_msg = new (loader.loadInterface(
'rcl_interfaces/msg/Parameter'
))();
param_msg.name = 'bool_param';
param_msg.value.type = ParameterType.PARAMETER_BOOL;
param_msg.value.bool_value = false;

let param;
assert.doesNotThrow(() => {
param = Parameter.fromParameterMessage(param_msg);
});
assert.strictEqual(param.name, 'bool_param');
assert.strictEqual(param.type, ParameterType.PARAMETER_BOOL);
assert.strictEqual(param.value, false);
});

it('should convert PARAMETER_BOOL_ARRAY type', function () {
let param_msg = new (loader.loadInterface(
'rcl_interfaces/msg/Parameter'
))();
param_msg.name = 'bool_array_param';
param_msg.value.type = ParameterType.PARAMETER_BOOL_ARRAY;
param_msg.value.bool_array_value = [true, false, true];

let param;
assert.doesNotThrow(() => {
param = Parameter.fromParameterMessage(param_msg);
});
assert.strictEqual(param.name, 'bool_array_param');
assert.strictEqual(param.type, ParameterType.PARAMETER_BOOL_ARRAY);
assert.deepStrictEqual(param.value, [true, false, true]);
});

it('should convert PARAMETER_BYTE_ARRAY type', function () {
let param_msg = new (loader.loadInterface(
'rcl_interfaces/msg/Parameter'
))();
param_msg.name = 'byte_array_param';
param_msg.value.type = ParameterType.PARAMETER_BYTE_ARRAY;
param_msg.value.byte_array_value = [1, 2, 3];

let param;
assert.doesNotThrow(() => {
param = Parameter.fromParameterMessage(param_msg);
});
assert.strictEqual(param.name, 'byte_array_param');
assert.strictEqual(param.type, ParameterType.PARAMETER_BYTE_ARRAY);
assert.deepStrictEqual(param.value, [1, 2, 3]);
});

it('should convert PARAMETER_DOUBLE type', function () {
let param_msg = new (loader.loadInterface(
'rcl_interfaces/msg/Parameter'
))();
param_msg.name = 'double_param';
param_msg.value.type = ParameterType.PARAMETER_DOUBLE;
param_msg.value.double_value = 1.23;

let param;
assert.doesNotThrow(() => {
param = Parameter.fromParameterMessage(param_msg);
});
assert.strictEqual(param.name, 'double_param');
assert.strictEqual(param.type, ParameterType.PARAMETER_DOUBLE);
assert.strictEqual(param.value, 1.23);
});

it('should convert PARAMETER_DOUBLE_ARRAY type', function () {
let param_msg = new (loader.loadInterface(
'rcl_interfaces/msg/Parameter'
))();
param_msg.name = 'double_array_param';
param_msg.value.type = ParameterType.PARAMETER_DOUBLE_ARRAY;
param_msg.value.double_array_value = [1.1, 2.2, 3.3, 4.4, 5.5];

let param;
assert.doesNotThrow(() => {
param = Parameter.fromParameterMessage(param_msg);
});
assert.strictEqual(param.name, 'double_array_param');
assert.strictEqual(param.type, ParameterType.PARAMETER_DOUBLE_ARRAY);
assert.deepStrictEqual(param.value, [1.1, 2.2, 3.3, 4.4, 5.5]);
});

it('should convert PARAMETER_INTEGER type', function () {
let param_msg = new (loader.loadInterface(
'rcl_interfaces/msg/Parameter'
))();
param_msg.name = 'integer_param';
param_msg.value.type = ParameterType.PARAMETER_INTEGER;
param_msg.value.integer_value = 123;

let param;
assert.doesNotThrow(() => {
param = Parameter.fromParameterMessage(param_msg);
});
assert.strictEqual(param.name, 'integer_param');
assert.strictEqual(param.type, ParameterType.PARAMETER_INTEGER);
assert.strictEqual(param.value, 123);
});

it('should convert PARAMETER_INTEGER_ARRAY type', function () {
let param_msg = new (loader.loadInterface(
'rcl_interfaces/msg/Parameter'
))();
param_msg.name = 'integer_array_param';
param_msg.value.type = ParameterType.PARAMETER_INTEGER_ARRAY;
param_msg.value.integer_array_value = [1, 2, 3, 4, 5];

let param;
assert.doesNotThrow(() => {
param = Parameter.fromParameterMessage(param_msg);
});
assert.strictEqual(param.name, 'integer_array_param');
assert.strictEqual(param.type, ParameterType.PARAMETER_INTEGER_ARRAY);
assert.deepStrictEqual(param.value, [1, 2, 3, 4, 5]);
});

it('should convert PARAMETER_STRING type', function () {
let param_msg = new (loader.loadInterface(
'rcl_interfaces/msg/Parameter'
))();
param_msg.name = 'string_param';
param_msg.value.type = ParameterType.PARAMETER_STRING;
param_msg.value.string_value = 'hello world';

let param;
assert.doesNotThrow(() => {
param = Parameter.fromParameterMessage(param_msg);
});
assert.strictEqual(param.name, 'string_param');
assert.strictEqual(param.type, ParameterType.PARAMETER_STRING);
assert.strictEqual(param.value, 'hello world');
});

it('should convert PARAMETER_STRING_ARRAY type', function () {
let param_msg = new (loader.loadInterface(
'rcl_interfaces/msg/Parameter'
))();
param_msg.name = 'string_array_param';
param_msg.value.type = ParameterType.PARAMETER_STRING_ARRAY;
param_msg.value.string_array_value = ['hello', 'world'];

let param;
assert.doesNotThrow(() => {
param = Parameter.fromParameterMessage(param_msg);
});
assert.strictEqual(param.name, 'string_array_param');
assert.strictEqual(param.type, ParameterType.PARAMETER_STRING_ARRAY);
assert.deepStrictEqual(param.value, ['hello', 'world']);
});
});

describe('range tests', function () {
it('Math IsClose test', function () {
assert.ok(IsClose.isClose(1.0, 1.0, DEFAULT_NUMERIC_RANGE_TOLERANCE));
Expand Down