diff --git a/rosidl_gen/generator.json b/rosidl_gen/generator.json index b7b3ac7d..2f499ff5 100644 --- a/rosidl_gen/generator.json +++ b/rosidl_gen/generator.json @@ -1,6 +1,6 @@ { "name": "rosidl-generator", - "version": "0.5.0", + "version": "0.5.1", "description": "Generate JavaScript object from ROS IDL(.msg) files", "main": "index.js", "authors": [ diff --git a/rosidl_gen/templates/message.dot b/rosidl_gen/templates/message.dot index d9b2ca56..1f8939f9 100644 --- a/rosidl_gen/templates/message.dot +++ b/rosidl_gen/templates/message.dot @@ -824,6 +824,10 @@ class {{=arrayWrapper}} { get classType() { return {{=arrayWrapper}}; } + + toPlainObject(enableTypedArray) { + return translator.toPlainObject(this, enableTypedArray); + } } {{? it.spec.constants != undefined && it.spec.constants.length}} diff --git a/test/test-array-data.js b/test/test-array-data.js index 4e2b33da..eac2742c 100644 --- a/test/test-array-data.js +++ b/test/test-array-data.js @@ -19,10 +19,7 @@ const deepEqual = require('deep-equal'); const rclnodejs = require('../index.js'); const translator = require('../rosidl_gen/message_translator.js'); const arrayGen = require('./array_generator.js'); - -function isTypedArray(v) { - return ArrayBuffer.isView(v) && !(v instanceof DataView); -} +const { isTypedArray } = require('./utils.js'); describe('rclnodejs message communication', function () { this.timeout(60 * 1000); diff --git a/test/test-message-properties-validation.js b/test/test-message-properties-validation.js index 98cb964b..e2c22376 100644 --- a/test/test-message-properties-validation.js +++ b/test/test-message-properties-validation.js @@ -175,13 +175,12 @@ describe('Rclnodejs message properities validation', function () { // Assign the property with a plain object. left[i] = testData.value[i]; if (typeof left[i].toPlainObject === 'function') { - assert.ok(deepEqual(testData.value[i], left[i].toPlainObject())); - } else if (left[i].classType && left[i].classType.isROSArray) { - left[i].data.forEach((value, index) => { - assert.ok( - deepEqual(testData.value[i][index], value.toPlainObject()) - ); - }); + assert.ok( + deepEqual( + testData.value[i], + left[i].toPlainObject(/*enableTypedArray=*/ true) + ) + ); } else { assert.ok(deepEqual(testData.value[i], left[i])); } diff --git a/test/test-message-translator-complex.js b/test/test-message-translator-complex.js index 7d91bb79..b7365bc6 100644 --- a/test/test-message-translator-complex.js +++ b/test/test-message-translator-complex.js @@ -14,14 +14,9 @@ 'use strict'; -const assert = require('assert'); const rclnodejs = require('../index.js'); const deepEqual = require('deep-equal'); -function isTypedArray(v) { - return ArrayBuffer.isView(v) && !(v instanceof DataView); -} - describe('Rclnodejs message translation: complex types', function () { this.timeout(60 * 1000); diff --git a/test/test-message-translator-primitive.js b/test/test-message-translator-primitive.js index 9e7f1cc3..5bcefb71 100644 --- a/test/test-message-translator-primitive.js +++ b/test/test-message-translator-primitive.js @@ -17,10 +17,7 @@ const rclnodejs = require('../index.js'); const deepEqual = require('deep-equal'); const arrayGen = require('./array_generator.js'); - -function isTypedArray(v) { - return ArrayBuffer.isView(v) && !(v instanceof DataView); -} +const { isTypedArray } = require('./utils.js'); /* eslint-disable camelcase */ /* eslint-disable indent */ diff --git a/test/utils.js b/test/utils.js index 9bbe6379..2c09a440 100644 --- a/test/utils.js +++ b/test/utils.js @@ -85,10 +85,15 @@ function createDelay(millis) { return new Promise((resolve) => setTimeout(resolve, millis)); } +function isTypedArray(v) { + return ArrayBuffer.isView(v) && !(v instanceof DataView); +} + module.exports = { assertMember: assertMember, assertThrowsError: assertThrowsError, createDelay: createDelay, getAvailablePath: getAvailablePath, launchPythonProcess: launchPythonProcess, + isTypedArray: isTypedArray, };