Skip to content

Commit f8fd620

Browse files
authored
Pump deep-equal to latest version (#1045)
Fix: #1044
1 parent 93a6ab3 commit f8fd620

8 files changed

+58
-90
lines changed

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,14 @@
4343
"type": "git",
4444
"url": "git+https://github.com/RobotWebTools/rclnodejs.git"
4545
},
46-
"//": "Pin deep-equal to ^1.1.1",
4746
"devDependencies": {
4847
"@babel/eslint-parser": "^7.25.9",
4948
"@typescript-eslint/eslint-plugin": "^8.18.0",
5049
"@typescript-eslint/parser": "^8.18.0",
5150
"babel-eslint": "^10.1.0",
5251
"clang-format": "^1.8.0",
5352
"commander": "^13.1.0",
54-
"deep-equal": "^1.1.1",
53+
"deep-equal": "^2.2.3",
5554
"eslint": "^9.16.0",
5655
"eslint-config-prettier": "^10.0.1",
5756
"eslint-plugin-prettier": "^5.2.1",

test/test-action-server.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ describe('rclnodejs action server', function () {
446446
let result = await handle.getResult();
447447
assert.ok(result);
448448
assert.ok(handle.status, GoalStatus.STATUS_SUCCEEDED);
449-
assert.ok(deepEqual(result.sequence, testSequence));
449+
assert.ok(deepEqual(result.sequence, Int32Array.from(testSequence)));
450450

451451
server.destroy();
452452
});
@@ -480,7 +480,7 @@ describe('rclnodejs action server', function () {
480480
let result = await handle.getResult();
481481
assert.ok(result);
482482
assert.ok(handle.status, GoalStatus.STATUS_ABORTED);
483-
assert.ok(deepEqual(result.sequence, testSequence));
483+
assert.ok(deepEqual(result.sequence, Int32Array.from(testSequence)));
484484

485485
server.destroy();
486486
});
@@ -515,7 +515,7 @@ describe('rclnodejs action server', function () {
515515
assert.ok(result);
516516
// Goal status should default to aborted
517517
assert.ok(handle.status, GoalStatus.STATUS_ABORTED);
518-
assert.ok(deepEqual(result.sequence, testSequence));
518+
assert.ok(deepEqual(result.sequence, Int32Array.from(testSequence)));
519519

520520
server.destroy();
521521
});
@@ -543,7 +543,7 @@ describe('rclnodejs action server', function () {
543543
assert.ok(result);
544544
// Goal status should default to aborted
545545
assert.ok(handle.status, GoalStatus.STATUS_ABORTED);
546-
assert.ok(deepEqual(result.sequence, []));
546+
assert.ok(deepEqual(result.sequence, Int32Array.from([])));
547547

548548
server.destroy();
549549
});
@@ -660,7 +660,7 @@ describe('rclnodejs action server', function () {
660660
await assertUtils.createDelay(50);
661661

662662
assert.ok(feedbackMessage);
663-
assert.ok(deepEqual(sequence, feedbackMessage.sequence));
663+
assert.ok(deepEqual(Int32Array.from(sequence), feedbackMessage.sequence));
664664

665665
server.destroy();
666666
});
@@ -704,7 +704,7 @@ describe('rclnodejs action server', function () {
704704
await assertUtils.createDelay(50);
705705

706706
assert.ok(feedbackMessage);
707-
assert.ok(deepEqual(sequence, feedbackMessage.sequence));
707+
assert.ok(deepEqual(Int32Array.from(sequence), feedbackMessage.sequence));
708708

709709
server.destroy();
710710
});

test/test-array-data.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
'use strict';
1616

1717
const assert = require('assert');
18-
const childProcess = require('child_process');
1918
const deepEqual = require('deep-equal');
2019
const rclnodejs = require('../index.js');
2120
const translator = require('../rosidl_gen/message_translator.js');
@@ -180,10 +179,10 @@ describe('rclnodejs message communication', function () {
180179
assert(msg.layout.data_offset === v.layout.data_offset);
181180

182181
assert(msg.data);
183-
if (isTypedArray(v.data)) {
184-
assert.deepStrictEqual(msg.data, v.data);
185-
} else {
182+
if (isTypedArray(v.data) && isTypedArray(msg.data)) {
186183
assert.ok(deepEqual(msg.data, v.data));
184+
} else {
185+
assert.ok(deepEqual(Array.from(msg.data), v.data));
187186
}
188187
}
189188

test/test-message-properties-validation.js

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ describe('Rclnodejs message properities validation', function () {
7575
frame_id: '1234567x',
7676
},
7777
name: ['Willy', 'Tacky'],
78-
position: [1, 7, 3, 4, 2, 2, 8],
79-
velocity: [8, 9, 6, 4],
80-
effort: [1, 0, 2, 6, 7],
78+
position: Float64Array.from([1, 7, 3, 4, 2, 2, 8]),
79+
velocity: Float64Array.from([8, 9, 6, 4]),
80+
effort: Float64Array.from([1, 0, 2, 6, 7]),
8181
},
8282
},
8383
{
@@ -92,7 +92,7 @@ describe('Rclnodejs message properities validation', function () {
9292
],
9393
data_offset: 1024,
9494
},
95-
data: [1.0, 2.0, 3.0, 8.5, 6.75, 0.5, -0.25],
95+
data: Float32Array.from([1.0, 2.0, 3.0, 8.5, 6.75, 0.5, -0.25]),
9696
},
9797
},
9898
{
@@ -157,11 +157,11 @@ describe('Rclnodejs message properities validation', function () {
157157
channels: [
158158
{
159159
name: 'rgb',
160-
values: [0.0, 1.5, 2.0, 3.75],
160+
values: Float32Array.from([0.0, 1.5, 2.0, 3.75]),
161161
},
162162
{
163163
name: 'intensity',
164-
values: [10.0, 21.5, 2.0, 3.75],
164+
values: Float32Array.from([10.0, 21.5, 2.0, 3.75]),
165165
},
166166
],
167167
},
@@ -174,7 +174,17 @@ describe('Rclnodejs message properities validation', function () {
174174
for (let i in testData.value) {
175175
// Assign the property with a plain object.
176176
left[i] = testData.value[i];
177-
deepEqual(left[i], right[i]);
177+
if (typeof left[i].toPlainObject === 'function') {
178+
assert.ok(deepEqual(testData.value[i], left[i].toPlainObject()));
179+
} else if (left[i].classType && left[i].classType.isROSArray) {
180+
left[i].data.forEach((value, index) => {
181+
assert.ok(
182+
deepEqual(testData.value[i][index], value.toPlainObject())
183+
);
184+
});
185+
} else {
186+
assert.ok(deepEqual(testData.value[i], left[i]));
187+
}
178188
}
179189
});
180190
});

test/test-message-translator-complex.js

Lines changed: 9 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ const assert = require('assert');
1818
const rclnodejs = require('../index.js');
1919
const deepEqual = require('deep-equal');
2020

21+
function isTypedArray(v) {
22+
return ArrayBuffer.isView(v) && !(v instanceof DataView);
23+
}
24+
2125
describe('Rclnodejs message translation: complex types', function () {
2226
this.timeout(60 * 1000);
2327

@@ -98,43 +102,22 @@ describe('Rclnodejs message translation: complex types', function () {
98102
pkg: 'sensor_msgs',
99103
type: 'JointState',
100104
values: [
101-
{
102-
header: {
103-
stamp: { sec: 11223, nanosec: 44556 },
104-
frame_id: '1234567x',
105-
},
106-
name: ['Willy', 'Tacky'],
107-
position: [1, 7, 3, 4, 2, 2, 8],
108-
velocity: [8, 9, 6, 4],
109-
effort: [1, 0, 2, 6, 7],
110-
},
111105
{
112106
header: {
113107
stamp: { sec: 11223, nanosec: 44556 },
114108
frame_id: '0001234567x',
115109
},
116110
name: ['Goodly', 'Lovely', 'Angel', 'Neatly', 'Perfect', 'Tacky'],
117-
position: [1, 23, 7, 3, 4, 2, 2, 8],
118-
velocity: [1, 9, 8, 9, 6, 4],
119-
effort: [2, 1, 1, 0, 2, 6, 7],
111+
position: Float64Array.from([1, 23, 7, 3, 4, 2, 2, 8]),
112+
velocity: Float64Array.from([1, 9, 8, 9, 6, 4]),
113+
effort: Float64Array.from([2, 1, 1, 0, 2, 6, 7]),
120114
},
121115
],
122116
},
123117
{
124118
pkg: 'std_msgs',
125119
type: 'Float32MultiArray',
126120
values: [
127-
{
128-
layout: {
129-
dim: [
130-
{ label: 'height', size: 480, stride: 921600 },
131-
{ label: 'width', size: 640, stride: 1920 },
132-
{ label: 'channel', size: 3, stride: 8 },
133-
],
134-
data_offset: 1024,
135-
},
136-
data: [1.0, 2.0, 3.0, 8.5, 6.75, 0.5, -0.25],
137-
},
138121
{
139122
layout: {
140123
dim: [
@@ -152,17 +135,6 @@ describe('Rclnodejs message translation: complex types', function () {
152135
pkg: 'std_msgs',
153136
type: 'Int32MultiArray',
154137
values: [
155-
{
156-
layout: {
157-
dim: [
158-
{ label: 'height', size: 10, stride: 600 },
159-
{ label: 'width', size: 20, stride: 60 },
160-
{ label: 'channel', size: 3, stride: 4 },
161-
],
162-
data_offset: 0,
163-
},
164-
data: [-10, 1, 2, 3, 8, 6, 0, -25], // Provide data via Array
165-
},
166138
{
167139
layout: {
168140
dim: [
@@ -180,17 +152,6 @@ describe('Rclnodejs message translation: complex types', function () {
180152
pkg: 'std_msgs',
181153
type: 'Int16MultiArray',
182154
values: [
183-
{
184-
layout: {
185-
dim: [
186-
{ label: 'height', size: 10, stride: 600 },
187-
{ label: 'width', size: 20, stride: 60 },
188-
{ label: 'channel', size: 3, stride: 4 },
189-
],
190-
data_offset: 0,
191-
},
192-
data: [-10, 1, 2, 3, 8, 6, 0, -25], // Provide data via Array
193-
},
194155
{
195156
layout: {
196157
dim: [
@@ -208,17 +169,6 @@ describe('Rclnodejs message translation: complex types', function () {
208169
pkg: 'std_msgs',
209170
type: 'Int8MultiArray',
210171
values: [
211-
{
212-
layout: {
213-
dim: [
214-
{ label: 'height', size: 10, stride: 600 },
215-
{ label: 'width', size: 20, stride: 60 },
216-
{ label: 'channel', size: 3, stride: 4 },
217-
],
218-
data_offset: 0,
219-
},
220-
data: [-10, 1, 2, 3, 8, 6, 0, -25], // Provide data via Array
221-
},
222172
{
223173
layout: {
224174
dim: [
@@ -250,11 +200,11 @@ describe('Rclnodejs message translation: complex types', function () {
250200
channels: [
251201
{
252202
name: 'rgb',
253-
values: [0.0, 1.5, 2.0, 3.75],
203+
values: Float32Array.from([0.0, 1.5, 2.0, 3.75]),
254204
},
255205
{
256206
name: 'intensity',
257-
values: [10.0, 21.5, 2.0, 3.75],
207+
values: Float32Array.from([10.0, 21.5, 2.0, 3.75]),
258208
},
259209
],
260210
},

test/test-message-translator-primitive.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ const rclnodejs = require('../index.js');
1818
const deepEqual = require('deep-equal');
1919
const arrayGen = require('./array_generator.js');
2020

21+
function isTypedArray(v) {
22+
return ArrayBuffer.isView(v) && !(v instanceof DataView);
23+
}
24+
2125
/* eslint-disable camelcase */
2226
/* eslint-disable indent */
2327

@@ -219,7 +223,11 @@ describe('Rclnodejs message translation: primitive types array', function () {
219223
return new Promise((resolve, reject) => {
220224
const sub = node.createSubscription(MessageType, topic, (value) => {
221225
// For primitive types, msgs are defined as a single `.data` field
222-
if (deepEqual(value.data, testData.values)) {
226+
if (
227+
(isTypedArray(value.data) &&
228+
deepEqual(Array.from(value.data), testData.values)) ||
229+
deepEqual(value.data, testData.values)
230+
) {
223231
node.destroy();
224232
resolve();
225233
} else {
@@ -474,7 +482,11 @@ describe('Rclnodejs message translation: TypedArray large data', function () {
474482
return new Promise((resolve, reject) => {
475483
const sub = node.createSubscription(MessageType, topic, (value) => {
476484
// For primitive types, msgs are defined as a single `.data` field
477-
if (deepEqual(value.data, testData.values)) {
485+
if (
486+
(isTypedArray(value.data) &&
487+
deepEqual(Array.from(value.data), testData.values)) ||
488+
deepEqual(value.data, testData.values)
489+
) {
478490
node.destroy();
479491
resolve();
480492
} else {

test/test-msg-type-cpp-node.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ const path = require('path');
2121
const childProcess = require('child_process');
2222
const deepEqual = require('deep-equal');
2323
const rclnodejs = require('../index.js');
24-
const utils = require('./utils.js');
2524

2625
describe('Rclnodejs - Cpp message type testing', function () {
2726
var cppSubscriptionPath = path.join(__dirname, 'cpp', 'subscription_msg');
@@ -423,7 +422,7 @@ describe('Rclnodejs - Cpp message type testing', function () {
423422
],
424423
data_offset: 0,
425424
},
426-
data: [65, 66, 67],
425+
data: Uint8Array.from([65, 66, 67]),
427426
};
428427

429428
var publisher = node.createPublisher(
@@ -491,12 +490,11 @@ describe('Rclnodejs - Cpp message type testing', function () {
491490
frame_id: 'main frame',
492491
},
493492
name: ['Tom', 'Jerry'],
494-
position: [1, 2],
495-
velocity: [2, 3],
496-
effort: [4, 5, 6],
493+
position: Float64Array.from([1, 2]),
494+
velocity: Float64Array.from([2, 3]),
495+
effort: Float64Array.from([4, 5, 6]),
497496
};
498497

499-
var destroy = false;
500498
var publisher = node.createPublisher(
501499
JointState,
502500
'JointState_js_cpp_channel'

test/test-msg-type-py-node.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ describe('Rclnodejs - Python message type testing', function () {
447447
],
448448
data_offset: 0,
449449
},
450-
data: [65, 66, 67],
450+
data: Uint8Array.from([65, 66, 67]),
451451
};
452452

453453
var destroy = false;
@@ -560,9 +560,9 @@ describe('Rclnodejs - Python message type testing', function () {
560560
frame_id: 'main frame',
561561
},
562562
name: ['Tom', 'Jerry'],
563-
position: [1, 2],
564-
velocity: [2, 3],
565-
effort: [4, 5, 6],
563+
position: Float64Array.from([1, 2]),
564+
velocity: Float64Array.from([2, 3]),
565+
effort: Float64Array.from([4, 5, 6]),
566566
};
567567

568568
var destroy = false;

0 commit comments

Comments
 (0)