@@ -37,8 +37,8 @@ describe('Cross-language interaction', function() {
3737 const rclString = rclnodejs . require ( 'std_msgs' ) . msg . String ;
3838 var destroy = false ;
3939 var cppTalkPath = path . join ( process . env [ 'AMENT_PREFIX_PATH' ] , 'lib' , 'demo_nodes_cpp' , 'talker' ) ;
40- var cppTalker = childProcess . spawn ( cppTalkPath ) ;
41- var subscription = node . createSubscription ( rclString , 'chatter ' , ( msg ) => {
40+ var cppTalker = childProcess . spawn ( cppTalkPath , [ '-t' , 'cpp_js_chatter' ] ) ;
41+ var subscription = node . createSubscription ( rclString , 'cpp_js_chatter ' , ( msg ) => {
4242 assert . ok ( / H e l l o W o r l d : / . test ( msg . data ) ) ;
4343 if ( ! destroy ) {
4444 node . destroy ( ) ;
@@ -76,8 +76,8 @@ describe('Cross-language interaction', function() {
7676
7777 let text = 'Greeting from Node.js publisher' ;
7878 let cppListenerPath = path . join ( process . env [ 'AMENT_PREFIX_PATH' ] , 'lib' , 'demo_nodes_cpp' , 'listener' ) ;
79- var cppListener = childProcess . spawn ( cppListenerPath ) ;
80- var publisher = node . createPublisher ( rclString , 'chatter ' ) ;
79+ var cppListener = childProcess . spawn ( cppListenerPath , [ '-t' , 'js_cpp_chatter' ] ) ;
80+ var publisher = node . createPublisher ( rclString , 'js_cpp_chatter ' ) ;
8181 var msg = new rclString ( ) ;
8282 msg . data = text ;
8383 var timer = setInterval ( ( ) => {
@@ -127,12 +127,12 @@ describe('Cross-language interaction', function() {
127127
128128 describe ( 'Node.js client' , function ( ) {
129129 it ( 'Node.js client should work with Python service' , function ( done ) {
130- var node = rclnodejs . createNode ( 'js_add_client ' ) ;
130+ var node = rclnodejs . createNode ( 'js_py_add_client ' ) ;
131131 const AddTwoInts = rclnodejs . require ( 'example_interfaces' ) . srv . AddTwoInts ;
132132 var destroy = false ;
133133
134134 var pyService = utils . launchPythonProcess ( [ `${ __dirname } /py/service.py` ] ) ;
135- var client = node . createClient ( AddTwoInts , 'py_js_add_service ' ) ;
135+ var client = node . createClient ( AddTwoInts , 'js_py_add_two_ints ' ) ;
136136 let request = new AddTwoInts . Request ( ) ;
137137 request . a = 1 ;
138138 request . b = 2 ;
@@ -152,15 +152,44 @@ describe('Cross-language interaction', function() {
152152
153153 rclnodejs . spin ( node ) ;
154154 } ) ;
155+
156+ it ( 'Node.js client should work with C++ service' , function ( done ) {
157+ var node = rclnodejs . createNode ( 'js_cpp_add_client' ) ;
158+ const AddTwoInts = rclnodejs . require ( 'example_interfaces' ) . srv . AddTwoInts ;
159+ var client = node . createClient ( AddTwoInts , 'js_cpp_add_two_ints' ) ;
160+ let request = new AddTwoInts . Request ( ) ;
161+ request . a = 1 ;
162+ request . b = 2 ;
163+
164+ var destroy = false ;
165+ var cppServicePath = path . join ( process . env [ 'AMENT_PREFIX_PATH' ] ,
166+ 'lib' ,
167+ 'demo_nodes_cpp' ,
168+ 'add_two_ints_server' ) ;
169+ var cppService = childProcess . spawn ( cppServicePath , [ '-s' , 'js_cpp_add_two_ints' ] ) ;
170+ var timer = node . createTimer ( 100 , ( ) => {
171+ client . sendRequest ( request , ( response ) => {
172+ if ( ! destroy ) {
173+ timer . cancel ( ) ;
174+ assert . deepStrictEqual ( response . sum , 3 ) ;
175+ node . destroy ( ) ;
176+ cppService . kill ( 'SIGINT' ) ;
177+ destroy = true ;
178+ done ( ) ;
179+ }
180+ } ) ;
181+ } ) ;
182+ rclnodejs . spin ( node ) ;
183+ } ) ;
155184 } ) ;
156-
185+
157186 describe ( 'Node.js service' , function ( ) {
158187 it ( 'Node.js service should work with Python client' , function ( done ) {
159- var node = rclnodejs . createNode ( 'js_add_service ' ) ;
188+ var node = rclnodejs . createNode ( 'py_js_add_service ' ) ;
160189 const AddTwoInts = rclnodejs . require ( 'example_interfaces' ) . srv . AddTwoInts ;
161190 var destroy = false ;
162191
163- var service = node . createService ( AddTwoInts , 'js_py_add_service ' , ( request , response ) => {
192+ var service = node . createService ( AddTwoInts , 'py_js_add_two_ints ' , ( request , response ) => {
164193 assert . deepStrictEqual ( typeof request . a , 'number' ) ;
165194 assert . deepStrictEqual ( typeof request . b , 'number' ) ;
166195 response . sum = request . a + request . b ;
@@ -178,5 +207,30 @@ describe('Cross-language interaction', function() {
178207 }
179208 } ) ;
180209 } ) ;
210+
211+ it ( 'Node.js service should work with C++ client' , function ( done ) {
212+ var node = rclnodejs . createNode ( 'cpp_js_add_service' ) ;
213+ const AddTwoInts = rclnodejs . require ( 'example_interfaces' ) . srv . AddTwoInts ;
214+ var destroy = false ;
215+
216+ var service = node . createService ( AddTwoInts , 'cpp_js_add_two_ints' , ( request , response ) => {
217+ assert . deepStrictEqual ( typeof request . a , 'number' ) ;
218+ assert . deepStrictEqual ( typeof request . b , 'number' ) ;
219+ response . sum = request . a + request . b ;
220+ return response ;
221+ } ) ;
222+ rclnodejs . spin ( node ) ;
223+
224+ var cppClientPath = path . join ( process . env [ 'AMENT_PREFIX_PATH' ] ,
225+ 'lib' ,
226+ 'demo_nodes_cpp' ,
227+ 'add_two_ints_client' ) ;
228+ var cppClient = childProcess . spawn ( cppClientPath , [ '-s' , 'cpp_js_add_two_ints' ] ) ;
229+ cppClient . stdout . on ( 'data' , function ( data ) {
230+ assert . deepStrictEqual ( data . toString ( ) . trim ( ) , 'Result of add_two_ints: 5' ) ;
231+ node . destroy ( ) ;
232+ done ( ) ;
233+ } ) ;
234+ } ) ;
181235 } ) ;
182236} ) ;
0 commit comments