@@ -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 ) ;
@@ -347,6 +349,37 @@ assert.throws(function() {
347
349
b . indexOf ( [ ] ) ;
348
350
} ) ;
349
351
352
+ // Test weird offset arguments.
353
+ // The following offsets coerce to NaN or 0, searching the whole Buffer
354
+ assert . strictEqual ( b . indexOf ( 'b' , undefined ) , 1 ) ;
355
+ assert . strictEqual ( b . indexOf ( 'b' , { } ) , 1 ) ;
356
+ assert . strictEqual ( b . indexOf ( 'b' , 0 ) , 1 ) ;
357
+ assert . strictEqual ( b . indexOf ( 'b' , null ) , 1 ) ;
358
+ assert . strictEqual ( b . indexOf ( 'b' , [ ] ) , 1 ) ;
359
+
360
+ // The following offset coerces to 2, in other words +[2] === 2
361
+ assert . strictEqual ( b . indexOf ( 'b' , [ 2 ] ) , - 1 ) ;
362
+
363
+ // Behavior should match String.indexOf()
364
+ assert . strictEqual (
365
+ b . indexOf ( 'b' , undefined ) ,
366
+ s . indexOf ( 'b' , undefined ) ) ;
367
+ assert . strictEqual (
368
+ b . indexOf ( 'b' , { } ) ,
369
+ s . indexOf ( 'b' , { } ) ) ;
370
+ assert . strictEqual (
371
+ b . indexOf ( 'b' , 0 ) ,
372
+ s . indexOf ( 'b' , 0 ) ) ;
373
+ assert . strictEqual (
374
+ b . indexOf ( 'b' , null ) ,
375
+ s . indexOf ( 'b' , null ) ) ;
376
+ assert . strictEqual (
377
+ b . indexOf ( 'b' , [ ] ) ,
378
+ s . indexOf ( 'b' , [ ] ) ) ;
379
+ assert . strictEqual (
380
+ b . indexOf ( 'b' , [ 2 ] ) ,
381
+ s . indexOf ( 'b' , [ 2 ] ) ) ;
382
+
350
383
// All code for handling encodings is shared between Buffer.indexOf and
351
384
// Buffer.lastIndexOf, so only testing the separate lastIndexOf semantics.
352
385
@@ -401,13 +434,37 @@ assert.equal(b.lastIndexOf(0x61, Infinity), 0);
401
434
assert . equal ( b . lastIndexOf ( 0x0 ) , - 1 ) ;
402
435
403
436
// Test weird offset arguments.
404
- // Behaviour should match String.lastIndexOf:
405
- assert . equal ( b . lastIndexOf ( 'b' , 0 ) , - 1 ) ;
406
- assert . equal ( b . lastIndexOf ( 'b' , undefined ) , 1 ) ;
407
- assert . equal ( b . lastIndexOf ( 'b' , null ) , - 1 ) ;
408
- assert . equal ( b . lastIndexOf ( 'b' , { } ) , 1 ) ;
409
- assert . equal ( b . lastIndexOf ( 'b' , [ ] ) , - 1 ) ;
410
- assert . equal ( b . lastIndexOf ( 'b' , [ 2 ] ) , 1 ) ;
437
+ // The following offsets coerce to NaN, searching the whole Buffer
438
+ assert . strictEqual ( b . lastIndexOf ( 'b' , undefined ) , 1 ) ;
439
+ assert . strictEqual ( b . lastIndexOf ( 'b' , { } ) , 1 ) ;
440
+
441
+ // The following offsets coerce to 0
442
+ assert . strictEqual ( b . lastIndexOf ( 'b' , 0 ) , - 1 ) ;
443
+ assert . strictEqual ( b . lastIndexOf ( 'b' , null ) , - 1 ) ;
444
+ assert . strictEqual ( b . lastIndexOf ( 'b' , [ ] ) , - 1 ) ;
445
+
446
+ // The following offset coerces to 2, in other words +[2] === 2
447
+ assert . strictEqual ( b . lastIndexOf ( 'b' , [ 2 ] ) , 1 ) ;
448
+
449
+ // Behavior should match String.lastIndexOf()
450
+ assert . strictEqual (
451
+ b . lastIndexOf ( 'b' , undefined ) ,
452
+ s . lastIndexOf ( 'b' , undefined ) ) ;
453
+ assert . strictEqual (
454
+ b . lastIndexOf ( 'b' , { } ) ,
455
+ s . lastIndexOf ( 'b' , { } ) ) ;
456
+ assert . strictEqual (
457
+ b . lastIndexOf ( 'b' , 0 ) ,
458
+ s . lastIndexOf ( 'b' , 0 ) ) ;
459
+ assert . strictEqual (
460
+ b . lastIndexOf ( 'b' , null ) ,
461
+ s . lastIndexOf ( 'b' , null ) ) ;
462
+ assert . strictEqual (
463
+ b . lastIndexOf ( 'b' , [ ] ) ,
464
+ s . lastIndexOf ( 'b' , [ ] ) ) ;
465
+ assert . strictEqual (
466
+ b . lastIndexOf ( 'b' , [ 2 ] ) ,
467
+ s . lastIndexOf ( 'b' , [ 2 ] ) ) ;
411
468
412
469
// Test needles longer than the haystack.
413
470
assert . strictEqual ( b . lastIndexOf ( 'aaaaaaaaaaaaaaa' , 'ucs2' ) , - 1 ) ;
0 commit comments