@@ -18,22 +18,23 @@ const assert = require('assert');
1818const path = require ( 'path' ) ;
1919const childProcess = require ( 'child_process' ) ;
2020const rclnodejs = require ( '../index.js' ) ;
21+ const utils = require ( './utils.js' ) ;
2122
2223describe ( 'Cross-language interaction' , function ( ) {
23- describe ( 'Node.js Subcription' , function ( ) {
24- this . timeout ( 60 * 1000 ) ;
24+ this . timeout ( 60 * 1000 ) ;
2525
26- before ( function ( ) {
27- return rclnodejs . init ( ) ;
28- } ) ;
26+ before ( function ( ) {
27+ return rclnodejs . init ( ) ;
28+ } ) ;
2929
30- after ( function ( ) {
31- rclnodejs . shutdown ( ) ;
32- } ) ;
30+ after ( function ( ) {
31+ rclnodejs . shutdown ( ) ;
32+ } ) ;
3333
34+ describe ( 'Node.js Subcription' , function ( ) {
3435 it ( 'Node.js subscription should receive msg from C++ publisher' , ( done ) => {
3536 var node = rclnodejs . createNode ( 'cpp_pub_js_sub' ) ;
36- var rclString = rclnodejs . require ( 'std_msgs' ) . msg . String ;
37+ const rclString = rclnodejs . require ( 'std_msgs' ) . msg . String ;
3738 var destroy = false ;
3839 var cppTalkPath = path . join ( process . env [ 'AMENT_PREFIX_PATH' ] , 'lib' , 'demo_nodes_cpp' , 'talker' ) ;
3940 var cppTalker = childProcess . spawn ( cppTalkPath ) ;
@@ -42,45 +43,35 @@ describe('Cross-language interaction', function() {
4243 if ( ! destroy ) {
4344 node . destroy ( ) ;
4445 cppTalker . kill ( 'SIGINT' ) ;
45- destroy = true ;
46+ destroy = true ;
47+ done ( ) ;
4648 }
47- done ( ) ;
4849 } ) ;
4950 rclnodejs . spin ( node ) ;
5051 } ) ;
5152
5253 it ( 'Node.js subscription should receive msg from Python publisher' , ( done ) => {
5354 var node = rclnodejs . createNode ( 'cpp_pub_py_sub' ) ;
54- var rclString = rclnodejs . require ( 'std_msgs' ) . msg . String ;
55+ const rclString = rclnodejs . require ( 'std_msgs' ) . msg . String ;
5556 var destroy = false ;
56- var pyTalker = childProcess . spawn ( 'python3' , [ `${ __dirname } /py/talker.py` ] ) ;
57+ var pyTalker = utils . launchPythonProcess ( [ `${ __dirname } /py/talker.py` ] ) ;
5758 var subscription = node . createSubscription ( rclString , 'py_js_chatter' , ( msg ) => {
5859 assert . ok ( / H e l l o W o r l d / . test ( msg . data ) ) ;
5960 if ( ! destroy ) {
6061 node . destroy ( ) ;
6162 pyTalker . kill ( 'SIGINT' ) ;
62- destroy = true ;
63+ destroy = true ;
64+ done ( ) ;
6365 }
64- done ( ) ;
6566 } ) ;
6667 rclnodejs . spin ( node ) ;
6768 } ) ;
6869 } ) ;
6970
7071 describe ( 'Node.js publisher' , function ( ) {
71- this . timeout ( 60 * 1000 ) ;
72-
73- before ( function ( ) {
74- return rclnodejs . init ( ) ;
75- } ) ;
76-
77- after ( function ( ) {
78- rclnodejs . shutdown ( ) ;
79- } ) ;
80-
8172 it ( 'Cpp subscription should receive msg from Node.js publisher' , ( done ) => {
8273 var node = rclnodejs . createNode ( 'js_pub_cpp_sub' ) ;
83- var rclString = rclnodejs . require ( 'std_msgs' ) . msg . String ;
74+ const rclString = rclnodejs . require ( 'std_msgs' ) . msg . String ;
8475 var destroy = false ;
8576
8677 let text = 'Greeting from Node.js publisher' ;
@@ -95,41 +86,41 @@ describe('Cross-language interaction', function() {
9586
9687 cppListener . stdout . on ( 'data' , ( data ) => {
9788 if ( ! destroy ) {
98- clearInterval ( timer ) ;
9989 assert . ok ( new RegExp ( text ) . test ( data . toString ( ) ) ) ;
100- done ( ) ;
90+ clearInterval ( timer ) ;
10191 node . destroy ( ) ;
10292 cppListener . kill ( 'SIGINT' ) ;
10393 destroy = true ;
94+ done ( ) ;
10495 }
10596 } ) ;
10697 rclnodejs . spin ( node ) ;
10798 } ) ;
10899
109100 it ( 'Python subscription should receive msg from Node.js publisher' , function ( done ) {
110101 var node = rclnodejs . createNode ( 'js_pub_py_sub' ) ;
111- var rclString = rclnodejs . require ( 'std_msgs' ) . msg . String ;
102+ const rclString = rclnodejs . require ( 'std_msgs' ) . msg . String ;
112103 var destroy = false ;
113104
114- let text = 'Greeting from Node.js publisher' ;
115- var pyListener = childProcess . spawn ( 'python3' , [ `${ __dirname } /py/listener.py` ] ) ;
105+ let text = 'Greeting from Node.js publisher to Python subscription ' ;
106+ var pyListener = utils . launchPythonProcess ( [ `${ __dirname } /py/listener.py` ] ) ;
116107 var publisher = node . createPublisher ( rclString , 'js_py_chatter' ) ;
117108 var msg = new rclString ( ) ;
118109 msg . data = text ;
119110
111+ var timer = setInterval ( ( ) => {
112+ publisher . publish ( msg ) ;
113+ } , 100 ) ;
120114 pyListener . stdout . on ( 'data' , ( data ) => {
121115 if ( ! destroy ) {
122- clearInterval ( timer ) ;
123116 assert . ok ( new RegExp ( text ) . test ( data . toString ( ) ) ) ;
124- done ( ) ;
117+ clearInterval ( timer ) ;
125118 node . destroy ( ) ;
126119 pyListener . kill ( 'SIGINT' ) ;
127120 destroy = true ;
121+ done ( ) ;
128122 }
129123 } ) ;
130- var timer = setInterval ( ( ) => {
131- publisher . publish ( msg ) ;
132- } , 100 ) ;
133124 rclnodejs . spin ( node ) ;
134125 } ) ;
135126 } ) ;
0 commit comments