@@ -294,8 +294,23 @@ describe('Rclnodejs - Python message type testing', function() {
294294 rclnodejs . spin ( node ) ;
295295 } ) ;
296296
297- // it('Array', function(done) {
298- // });
297+ it ( 'Array' , function ( done ) {
298+ var node = rclnodejs . createNode ( 'array_js_subscription' ) ;
299+ const ByteMultiArray = rclnodejs . require ( 'std_msgs' ) . msg . ByteMultiArray ;
300+ var destroy = false ;
301+ var publisher = utils . launchPythonProcess ( [ `${ __dirname } /py/publisher_msg.py` , 'Array' ] ) ;
302+ var subscription = node . createSubscription ( ByteMultiArray , 'Array_py_js_channel' , ( msg ) => {
303+ assert . deepStrictEqual ( msg . data , [ 65 , 66 , 67 ] ) ;
304+
305+ if ( ! destroy ) {
306+ node . destroy ( ) ;
307+ publisher . kill ( 'SIGINT' ) ;
308+ destroy = true ;
309+ }
310+ done ( ) ;
311+ } ) ;
312+ rclnodejs . spin ( node ) ;
313+ } ) ;
299314
300315 it ( 'Header' , function ( done ) {
301316 var node = rclnodejs . createNode ( 'header_js_publisher' ) ;
@@ -733,6 +748,47 @@ describe('Rclnodejs - Python message type testing', function() {
733748 describe ( 'Rclnodejs publisher - Python subscription: compound msg types' , function ( ) {
734749 this . timeout ( 60 * 1000 ) ;
735750
751+ it ( 'Array' , function ( done ) {
752+ var node = rclnodejs . createNode ( 'multiarray_js_publisher' ) ;
753+ const Byte = rclnodejs . require ( 'std_msgs' ) . msg . Byte ;
754+ const MultiArrayDimension = rclnodejs . require ( 'std_msgs' ) . msg . MultiArrayDimension ;
755+ const MultiArrayLayout = rclnodejs . require ( 'std_msgs' ) . msg . MultiArrayLayout ;
756+ const ByteMultiArray = rclnodejs . require ( 'std_msgs' ) . msg . ByteMultiArray ;
757+
758+ let lengthDim = new MultiArrayDimension ( ) ;
759+ lengthDim . label = 'length' ;
760+ lengthDim . size = 1 ;
761+ lengthDim . stride = 3 ;
762+
763+ let layout = new MultiArrayLayout ( ) ;
764+ layout . dim . fill ( [ lengthDim ] ) ;
765+ // eslint-disable-next-line
766+ layout . data_offset = 0 ;
767+
768+ let byteArray = new ByteMultiArray ( ) ;
769+ byteArray . layout = layout ;
770+ byteArray . data = [ 65 , 66 , 67 ] ;
771+
772+ var destroy = false ;
773+ var subscription = utils . launchPythonProcess ( [ `${ __dirname } /py/subscription_msg.py` , 'Array' ] ) ;
774+ var publisher = node . createPublisher ( ByteMultiArray , 'Array_js_py_channel' ) ;
775+ const expected = 'ABC' ;
776+ subscription . stdout . on ( 'data' , ( data ) => {
777+ if ( ! destroy ) {
778+ clearInterval ( timer ) ;
779+ assert . deepStrictEqual ( data . toString ( ) , expected ) ;
780+ done ( ) ;
781+ node . destroy ( ) ;
782+ subscription . kill ( 'SIGINT' ) ;
783+ destroy = true ;
784+ }
785+ } ) ;
786+ var timer = setInterval ( ( ) => {
787+ publisher . publish ( byteArray ) ;
788+ } , 100 ) ;
789+ rclnodejs . spin ( node ) ;
790+ } ) ;
791+
736792 it ( 'ColorRGBA' , function ( done ) {
737793 var node = rclnodejs . createNode ( 'colorrgba_js_publisher' ) ;
738794 const ColorRGBA = rclnodejs . require ( 'std_msgs' ) . msg . ColorRGBA ;
0 commit comments