@@ -11,6 +11,8 @@ const buf_f = Buffer.from('f');
11
11
const buf_z = Buffer . from ( 'z' ) ;
12
12
const buf_empty = Buffer . from ( '' ) ;
13
13
14
+ const s = 'abcdef' ;
15
+
14
16
assert . strictEqual ( b . indexOf ( 'a' ) , 0 ) ;
15
17
assert . strictEqual ( b . indexOf ( 'a' , 1 ) , - 1 ) ;
16
18
assert . strictEqual ( b . indexOf ( 'a' , - 1 ) , - 1 ) ;
@@ -359,6 +361,37 @@ assert.throws(() => {
359
361
b . indexOf ( [ ] ) ;
360
362
} , argumentExpected ) ;
361
363
364
+ // Test weird offset arguments.
365
+ // The following offsets coerce to NaN or 0, searching the whole Buffer
366
+ assert . strictEqual ( b . indexOf ( 'b' , undefined ) , 1 ) ;
367
+ assert . strictEqual ( b . indexOf ( 'b' , { } ) , 1 ) ;
368
+ assert . strictEqual ( b . indexOf ( 'b' , 0 ) , 1 ) ;
369
+ assert . strictEqual ( b . indexOf ( 'b' , null ) , 1 ) ;
370
+ assert . strictEqual ( b . indexOf ( 'b' , [ ] ) , 1 ) ;
371
+
372
+ // The following offset coerces to 2, in other words +[2] === 2
373
+ assert . strictEqual ( b . indexOf ( 'b' , [ 2 ] ) , - 1 ) ;
374
+
375
+ // Behavior should match String.indexOf()
376
+ assert . strictEqual (
377
+ b . indexOf ( 'b' , undefined ) ,
378
+ s . indexOf ( 'b' , undefined ) ) ;
379
+ assert . strictEqual (
380
+ b . indexOf ( 'b' , { } ) ,
381
+ s . indexOf ( 'b' , { } ) ) ;
382
+ assert . strictEqual (
383
+ b . indexOf ( 'b' , 0 ) ,
384
+ s . indexOf ( 'b' , 0 ) ) ;
385
+ assert . strictEqual (
386
+ b . indexOf ( 'b' , null ) ,
387
+ s . indexOf ( 'b' , null ) ) ;
388
+ assert . strictEqual (
389
+ b . indexOf ( 'b' , [ ] ) ,
390
+ s . indexOf ( 'b' , [ ] ) ) ;
391
+ assert . strictEqual (
392
+ b . indexOf ( 'b' , [ 2 ] ) ,
393
+ s . indexOf ( 'b' , [ 2 ] ) ) ;
394
+
362
395
// All code for handling encodings is shared between Buffer.indexOf and
363
396
// Buffer.lastIndexOf, so only testing the separate lastIndexOf semantics.
364
397
@@ -413,14 +446,38 @@ assert.strictEqual(b.lastIndexOf(0x61, Infinity), 0);
413
446
assert . strictEqual ( b . lastIndexOf ( 0x0 ) , - 1 ) ;
414
447
415
448
// Test weird offset arguments.
416
- // Behaviour should match String.lastIndexOf:
417
- assert . strictEqual ( b . lastIndexOf ( 'b' , 0 ) , - 1 ) ;
449
+ // The following offsets coerce to NaN, searching the whole Buffer
418
450
assert . strictEqual ( b . lastIndexOf ( 'b' , undefined ) , 1 ) ;
419
- assert . strictEqual ( b . lastIndexOf ( 'b' , null ) , - 1 ) ;
420
451
assert . strictEqual ( b . lastIndexOf ( 'b' , { } ) , 1 ) ;
452
+
453
+ // The following offsets coerce to 0
454
+ assert . strictEqual ( b . lastIndexOf ( 'b' , 0 ) , - 1 ) ;
455
+ assert . strictEqual ( b . lastIndexOf ( 'b' , null ) , - 1 ) ;
421
456
assert . strictEqual ( b . lastIndexOf ( 'b' , [ ] ) , - 1 ) ;
457
+
458
+ // The following offset coerces to 2, in other words +[2] === 2
422
459
assert . strictEqual ( b . lastIndexOf ( 'b' , [ 2 ] ) , 1 ) ;
423
460
461
+ // Behavior should match String.lastIndexOf()
462
+ assert . strictEqual (
463
+ b . lastIndexOf ( 'b' , undefined ) ,
464
+ s . lastIndexOf ( 'b' , undefined ) ) ;
465
+ assert . strictEqual (
466
+ b . lastIndexOf ( 'b' , { } ) ,
467
+ s . lastIndexOf ( 'b' , { } ) ) ;
468
+ assert . strictEqual (
469
+ b . lastIndexOf ( 'b' , 0 ) ,
470
+ s . lastIndexOf ( 'b' , 0 ) ) ;
471
+ assert . strictEqual (
472
+ b . lastIndexOf ( 'b' , null ) ,
473
+ s . lastIndexOf ( 'b' , null ) ) ;
474
+ assert . strictEqual (
475
+ b . lastIndexOf ( 'b' , [ ] ) ,
476
+ s . lastIndexOf ( 'b' , [ ] ) ) ;
477
+ assert . strictEqual (
478
+ b . lastIndexOf ( 'b' , [ 2 ] ) ,
479
+ s . lastIndexOf ( 'b' , [ 2 ] ) ) ;
480
+
424
481
// Test needles longer than the haystack.
425
482
assert . strictEqual ( b . lastIndexOf ( 'aaaaaaaaaaaaaaa' , 'ucs2' ) , - 1 ) ;
426
483
assert . strictEqual ( b . lastIndexOf ( 'aaaaaaaaaaaaaaa' , 'utf8' ) , - 1 ) ;
0 commit comments