NAME=Java class parsing errors
FILE=bins/java/TryWithResources.class
CMDS=?e nop
EXPECT=<<EOF
nop
EOF
RUN

NAME=detect kotlin in java classes
FILE=bins/java/HiKt.class
CMDS=i~lang[1]
EXPECT=<<EOF
kotlin
EOF
RUN

NAME=java disasm crash
FILE=bins/java/ExCaseTableSwitch.class
CMDS=pd 10 >/dev/null
EXPECT=<<EOF
EOF
RUN

NAME=java switch crash
FILE=bins/fuzzed/zin7a5.class
CMDS=<<EOF
e scr.null=true
pd 100
EOF
EXPECT=<<EOF
EOF
RUN

# merged: java classes summary
NAME=java classes
FILE=bins/java/DemoTest.class
CMDS=<<EOF
ic
?e --
java summary
EOF
EXPECT=<<EOF
0x00000000 [0x00000190 - 0x0000021a]    138 java class 0 DemoTest :: java/lang/Object
0x00000190 java   method   0 p    fun
0x000001b9 java   method   1 pC   <init>
0x000001e8 java   method   2 p    res
0x00000211 java   method   3 ps   main
--
Summary for bins/java/DemoTest.class:
  Size 0x0:
  Constants  size: 0x166 count: 34:
  Methods    size: 0xb6 count: 4:
  Fields     size: 0x2 count: 0:
  Attributes size: 0xa count: 1:
  Interfaces size: 0x2 count: 0:
EOF
RUN

NAME=java old format support
FILE=bins/java/invisible.class
CMDS=pi 3
EXPECT=<<EOF
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc "See if you can decompile/disassemble me!"
invokevirtual java/io/PrintStream/println(Ljava/lang/String;)V
EOF
RUN

NAME=java StackMapTable outside a live Code attribute
FILE=malloc://269
CMDS=<<EOF
wx cafebabe000000340008010003466f6f0700010100106a6176612f6c616e672f4f626a656374070003010004436f646501000d537461636b4d61705461626c65010014536f757263654465627567457874656e73696f6e002100020004000000000001000200070000009800050000000d0001000100000001b1000000000005ffffff005050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050414141414141000000060000000400010000
oba 0
iI~bintype,arch,binsz
EOF
EXPECT=<<EOF
arch     java
binsz    269
bintype  class
EOF
RUN

NAME=java MethodHandle with an out of range reference kind
FILE=hex://cafebabe00000034000701000141070001010011416e6e6f746174696f6e44656661756c740fff00010100016d010003282956002100020000000000000001000100050006000100030000000849000400000000000000
CMDS=<<EOF
java resolve_cp k 4
EOF
EXPECT=<<EOF
4.0x0025.MethodHandle.Unknown.1
EOF
RUN

NAME=java constant pool lookups are constant time with 20000 chained Methodrefs
FILE=bins/java/methodref-chain-20000.class
TIMEOUT=10
CMDS=<<EOF
ii~?
EOF
EXPECT=<<EOF
20002
EOF
RUN

NAME=java deeply nested Code attributes
FILE=malloc://1024
CMDS=<<EOF
wx cafebabe000000340007010003466f6f0700010100106a6176612f6c616e672f4f626a656374070003010004436f646501000350616400210002000400000000000000020006000000d80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000d20001000100000000000000010005000000c00001000100000000000000010005000000ae00010001000000000000000100050000009c00010001000000000000000100050000008a00010001000000000000000100050000007800010001000000000000000100050000006600010001000000000000000100050000005400010001000000000000000100050000004200010001000000000000000100050000003000010001000000000000000100050000001e00010001000000000000000100050000000c000100010000000000000000
oba 0
iI~bintype
java summary~Attributes
EOF
EXPECT=<<EOF
bintype  class
  Attributes size: 0x1b8 count: 2:
EOF
EXPECT_ERR=<<EOF
WARN: Attribute Code nested too deep
ERROR: Unable to parse code attribute: 0
EOF
RUN

NAME=java bootstrap methods attribute with true counts
FILE=malloc://1024
CMDS=<<EOF
e scr.color=0
wx cafebabe00000034000401000141070001010010426f6f7473747261704d6574686f64730021000200000000000000000002000300000006000100010000000300000006000100010000 @ 0
oba 0
i~format
ic
EOF
EXPECT=<<EOF
format   java
0x00000000 [0x00000000 - 0x00000000]      0 java class 0 A
EOF
RUN

NAME=java bootstrap methods rejected entry is not retried
FILE=malloc://1024
CMDS=<<EOF
e scr.color=0
wx cafebabe00000034000401000141070001010010426f6f7473747261704d6574686f64730021000200000000000000000002000300000006ffff0001ffff000300000006ffff0001ffff @ 0
oba 0
i~format
ic
EOF
EXPECT=<<EOF
format   java
0x00000000 [0x00000000 - 0x00000000]      0 java class 0 A
EOF
EXPECT_ERR=<<EOF
ERROR: Invalid bootstrap arguments count: 65535
ERROR: Invalid bootstrap arguments count: 65535
EOF
RUN

NAME=java utf8 class names keep valid utf-8 and escape control characters
FILE=malloc://1024
CMDS=<<EOF
e scr.color=0
wx cafebabe000000340004010002c381070001010010426f6f7473747261704d6574686f64730021000200000000000000000002000300000006000100010000000300000006000100010000 @ 0
oba 0
ic
wx cafebabe0000003400040100031b5b41070001010010426f6f7473747261704d6574686f64730021000200000000000000000002000300000006000100010000000300000006000100010000 @ 0
oba 0
ic
EOF
EXPECT=<<EOF
0x00000000 [0x00000000 - 0x00000000]      0 java class 0 Á
0x00000000 [0x00000000 - 0x00000000]      0 java class 0 \x1b[A
EOF
RUN

NAME=java interface entries do not duplicate the class methods
FILE=hex://cafebabe00000034000b010003466f6f0700010100106a6176612f6c616e672f4f626a6563740700030100016d0100032829560100054966616365070002070002070002002100020004000300080009000a00000002000900050006000000090005000600000000
ARGS=-e log.quiet=true
CMDS=<<EOF
ic~?
ic~method~?
ic~class~?
EOF
EXPECT=<<EOF
6
2
4
EOF
RUN
