@@ -295,3 +295,196 @@ class JavapTests extends DisassemblerTest:
295
295
assertDisassemblyIncludes(" public java.lang.String trim();" , out)
296
296
}
297
297
end JavapTests
298
+
299
+ // Test output filters
300
+ class JavapFilterSelectionTests :
301
+ // test -sysinfo disassembly
302
+ private val listSysinfo =
303
+ """ Size 51190 bytes
304
+ | MD5 checksum fa1f9a810f5fff1bac4c3d1ae2051ab5
305
+ | Compiled from "List.scala"
306
+ |public abstract class scala.collection.immutable.List<A> extends scala.collection.immutable.AbstractSeq<A> implements scala.collection.immutable.LinearSeq<A>, scala.collection.StrictOptimizedLinearSeqOps<A, scala.collection.immutable.List, scala.collection.immutable.List<A>>, scala.collection.immutable.StrictOptimizedSeqOps<A, scala.collection.immutable.List, scala.collection.immutable.List<A>>, scala.collection.generic.DefaultSerializable {
307
+ | public static scala.collection.SeqOps unapplySeq(scala.collection.SeqOps);
308
+ | public scala.collection.LinearSeq drop(int);
309
+ | public scala.collection.LinearSeq dropWhile(scala.Function1);
310
+ | public java.lang.Object drop(int);
311
+ | public java.lang.Object sorted(scala.math.Ordering);
312
+ |}
313
+ """ .stripMargin
314
+
315
+ @ Test
316
+ def `select drop from listSysinfo` : Unit =
317
+ assertEquals(
318
+ """ | public scala.collection.LinearSeq drop(int);
319
+ | public java.lang.Object drop(int);
320
+ |""" .stripMargin,
321
+ Javap .filterSelection(" List#drop" )(listSysinfo))
322
+
323
+ // test -l disassembly
324
+ private val listL =
325
+ """ Compiled from "List.scala"
326
+ |public abstract class scala.collection.immutable.List<A> extends scala.collection.immutable.AbstractSeq<A> implements scala.collection.immutable.LinearSeq<A>, scala.collection.StrictOptimizedLinearSeqOps<A, scala.collection.immutable.List, scala.collection.immutable.List<A>>, scala.collection.immutable.StrictOptimizedSeqOps<A, scala.collection.immutable.List, scala.collection.immutable.List<A>>, scala.collection.generic.DefaultSerializable {
327
+ | public static scala.collection.SeqOps unapplySeq(scala.collection.SeqOps);
328
+ | LineNumberTable:
329
+ | line 648: 4
330
+ |
331
+ | public scala.collection.LinearSeq drop(int);
332
+ | LineNumberTable:
333
+ | line 79: 0
334
+ | LocalVariableTable:
335
+ | Start Length Slot Name Signature
336
+ | 0 6 0 this Lscala/collection/immutable/List;
337
+ | 0 6 1 n I
338
+ |
339
+ | public scala.collection.LinearSeq dropWhile(scala.Function1);
340
+ | LineNumberTable:
341
+ | line 79: 0
342
+ | LocalVariableTable:
343
+ | Start Length Slot Name Signature
344
+ | 0 6 0 this Lscala/collection/immutable/List;
345
+ | 0 6 1 p Lscala/Function1;
346
+ |
347
+ | public java.lang.Object drop(int);
348
+ | LineNumberTable:
349
+ | line 79: 0
350
+ | LocalVariableTable:
351
+ | Start Length Slot Name Signature
352
+ | 0 6 0 this Lscala/collection/immutable/List;
353
+ | 0 6 1 n I
354
+ |
355
+ | public java.lang.Object sorted(scala.math.Ordering);
356
+ | LineNumberTable:
357
+ | line 79: 0
358
+ | LocalVariableTable:
359
+ | Start Length Slot Name Signature
360
+ | 0 6 0 this Lscala/collection/immutable/List;
361
+ | 0 6 1 ord Lscala/math/Ordering;
362
+ |}
363
+ """ .stripMargin
364
+
365
+ @ Test
366
+ def `select drop from listL` : Unit =
367
+ assertEquals(
368
+ """ | public scala.collection.LinearSeq drop(int);
369
+ | LineNumberTable:
370
+ | line 79: 0
371
+ | LocalVariableTable:
372
+ | Start Length Slot Name Signature
373
+ | 0 6 0 this Lscala/collection/immutable/List;
374
+ | 0 6 1 n I
375
+ | public java.lang.Object drop(int);
376
+ | LineNumberTable:
377
+ | line 79: 0
378
+ | LocalVariableTable:
379
+ | Start Length Slot Name Signature
380
+ | 0 6 0 this Lscala/collection/immutable/List;
381
+ | 0 6 1 n I
382
+ |""" .stripMargin,
383
+ Javap .filterSelection(" List#drop" )(listL))
384
+
385
+ // test -v disassembly // TODO implement
386
+ private val listV =
387
+ """ |
388
+ """ .stripMargin
389
+
390
+ // test -s disassembly
391
+ private val listS =
392
+ """ Compiled from "List.scala"
393
+ |public abstract class scala.collection.immutable.List<A> extends scala.collection.immutable.AbstractSeq<A> implements scala.collection.immutable.LinearSeq<A>, scala.collection.StrictOptimizedLinearSeqOps<A, scala.collection.immutable.List, scala.collection.immutable.List<A>>, scala.collection.immutable.StrictOptimizedSeqOps<A, scala.collection.immutable.List, scala.collection.immutable.List<A>>, scala.collection.generic.DefaultSerializable {
394
+ | public static scala.collection.SeqOps unapplySeq(scala.collection.SeqOps);
395
+ | descriptor: (Lscala/collection/SeqOps;)Lscala/collection/SeqOps;
396
+ |
397
+ | public scala.collection.LinearSeq drop(int);
398
+ | descriptor: (I)Lscala/collection/LinearSeq;
399
+ |
400
+ | public scala.collection.LinearSeq dropWhile(scala.Function1);
401
+ | descriptor: (Lscala/Function1;)Lscala/collection/LinearSeq;
402
+ |
403
+ | public java.lang.Object drop(int);
404
+ | descriptor: (I)Ljava/lang/Object;
405
+ |
406
+ | public java.lang.Object sorted(scala.math.Ordering);
407
+ | descriptor: (Lscala/math/Ordering;)Ljava/lang/Object;
408
+ |}
409
+ """ .stripMargin
410
+
411
+ @ Test
412
+ def `select drop from listS` : Unit =
413
+ assertEquals(
414
+ """ | public scala.collection.LinearSeq drop(int);
415
+ | descriptor: (I)Lscala/collection/LinearSeq;
416
+ | public java.lang.Object drop(int);
417
+ | descriptor: (I)Ljava/lang/Object;
418
+ |""" .stripMargin,
419
+ Javap .filterSelection(" List#drop" )(listS))
420
+
421
+ private val listC =
422
+ """ Compiled from "List.scala"
423
+ |public abstract class scala.collection.immutable.List<A> extends scala.collection.immutable.AbstractSeq<A> implements scala.collection.immutable.LinearSeq<A>, scala.collection.StrictOptimizedLinearSeqOps<A, scala.collection.immutable.List, scala.collection.immutable.List<A>>, scala.collection.immutable.StrictOptimizedSeqOps<A, scala.collection.immutable.List, scala.collection.immutable.List<A>>, scala.collection.generic.DefaultSerializable {
424
+ | public static scala.collection.SeqOps unapplySeq(scala.collection.SeqOps);
425
+ | Code:
426
+ | 0: getstatic #43 // Field scala/collection/immutable/List$.MODULE$:Lscala/collection/immutable/List$;
427
+ | 3: pop
428
+ | 4: aload_0
429
+ | 5: areturn
430
+ |
431
+ | public scala.collection.LinearSeq drop(int);
432
+ | Code:
433
+ | 0: aload_0
434
+ | 1: iload_1
435
+ | 2: invokestatic #223 // InterfaceMethod scala/collection/StrictOptimizedLinearSeqOps.drop$:(Lscala/collection/StrictOptimizedLinearSeqOps;I)Lscala/collection/LinearSeq;
436
+ | 5: areturn
437
+ |
438
+ | public scala.collection.LinearSeq dropWhile(scala.Function1);
439
+ | Code:
440
+ | 0: aload_0
441
+ | 1: aload_1
442
+ | 2: invokestatic #230 // InterfaceMethod scala/collection/StrictOptimizedLinearSeqOps.dropWhile$:(Lscala/collection/StrictOptimizedLinearSeqOps;Lscala/Function1;)Lscala/collection/LinearSeq;
443
+ | 5: areturn
444
+ |
445
+ | public java.lang.Object drop(int);
446
+ | Code:
447
+ | 0: aload_0
448
+ | 1: iload_1
449
+ | 2: invokevirtual #792 // Method drop:(I)Lscala/collection/LinearSeq;
450
+ | 5: areturn
451
+ |
452
+ | public java.lang.Object sorted(scala.math.Ordering);
453
+ | Code:
454
+ | 0: aload_0
455
+ | 1: aload_1
456
+ | 2: invokestatic #210 // InterfaceMethod scala/collection/immutable/StrictOptimizedSeqOps.sorted$:(Lscala/collection/immutable/StrictOptimizedSeqOps;Lscala/math/Ordering;)Ljava/lang/Object;
457
+ | 5: areturn
458
+ |}
459
+ """ .stripMargin
460
+
461
+ @ Test
462
+ def `select drop from List disassembly` : Unit =
463
+ assertEquals(
464
+ """ | public scala.collection.LinearSeq drop(int);
465
+ | Code:
466
+ | 0: aload_0
467
+ | 1: iload_1
468
+ | 2: invokestatic #223 // InterfaceMethod scala/collection/StrictOptimizedLinearSeqOps.drop$:(Lscala/collection/StrictOptimizedLinearSeqOps;I)Lscala/collection/LinearSeq;
469
+ | 5: areturn
470
+ | public java.lang.Object drop(int);
471
+ | Code:
472
+ | 0: aload_0
473
+ | 1: iload_1
474
+ | 2: invokevirtual #792 // Method drop:(I)Lscala/collection/LinearSeq;
475
+ | 5: areturn
476
+ |""" .stripMargin,
477
+ Javap .filterSelection(" List#drop" )(listC))
478
+
479
+ @ Test
480
+ def `select last method from disassembly` : Unit =
481
+ assertEquals(
482
+ """ | public java.lang.Object sorted(scala.math.Ordering);
483
+ | Code:
484
+ | 0: aload_0
485
+ | 1: aload_1
486
+ | 2: invokestatic #210 // InterfaceMethod scala/collection/immutable/StrictOptimizedSeqOps.sorted$:(Lscala/collection/immutable/StrictOptimizedSeqOps;Lscala/math/Ordering;)Ljava/lang/Object;
487
+ | 5: areturn
488
+ |""" .stripMargin,
489
+ Javap .filterSelection(" List#sorted" )(listC))
490
+ end JavapFilterSelectionTests
0 commit comments