NAME=snapshot-value-graph-android
FILE=bins/android/mafia/libapp.so
CMDS=<<EOF
L ../src/r2/core_flutter.dylib
L ../src/r2/core_flutter.so
r2flutter -q -j -O ref:158145~{snapshot.kind}
r2flutter -q -j -O ref:158145~{snapshot.cid}
r2flutter -q -j -O ref:158145~{snapshot.complete}
r2flutter -q -j -O ref:158145~{snapshot.fields[2].value.kind}
r2flutter -q -j -O ref:158145~{snapshot.fields[2].value.length}
r2flutter -q -j -O ref:158145~{snapshot.fields[2].value.elements[0].value.value}
r2flutter -q -j -O ref:158145~{snapshot.fields[2].value.elements[1].value.kind}
r2flutter -q -j -O ref:158145~{snapshot.fields[2].value.elements[1].value.name}
r2flutter -q -j -O ref:158145~{snapshot.fields[2].value.elements[1].value.fields[0].value}
r2flutter -q -j -O ref:158145~{snapshot.fields[2].value.elements[1].value.fields[1].value}
r2flutter -q -j -O ref:158145~{snapshot.fields[2].value.elements[1].value.fields[2].value.value}
r2flutter -q -j -O ref:160785~{snapshot.kind}
r2flutter -q -j -O ref:160785~{snapshot.cid}
r2flutter -q -j -O ref:160785~{snapshot.complete}
r2flutter -q -j -O ref:160785~{snapshot.fields[2].value.kind}
EOF
EXPECT=<<EOF
map
87
true
array
48
129
instance
SemanticsAction
1
0
tap
set
89
true
array
EOF
RUN

NAME=snapshot-value-graph-ios-rodata
FILE=bins/ios/AuthPass.app/Frameworks/App.framework/App
CMDS=<<EOF
L ../src/r2/core_flutter.dylib
L ../src/r2/core_flutter.so
r2flutter -q -j -O ref:209553~{=}~snapshot.kind,snapshot.cid,snapshot.complete,cancel,Cancel
r2flutter -q -j -O ref:211161~{=}~snapshot.kind,snapshot.cid,snapshot.complete,"array"
EOF
EXPECT=<<EOF
json.snapshot.kind = "map";
json.snapshot.complete = true;
json.snapshot.cid = 86;
json.snapshot.fields[2].value.elements[0].value.value = "cancel";
json.snapshot.fields[2].value.elements[1].value.value = "Cancel";
json.snapshot.kind = "set";
json.snapshot.complete = true;
json.snapshot.cid = 88;
json.snapshot.fields[2].value.kind = "array";
EOF
RUN

NAME=snapshot-value-graph-bounds-and-truncation
FILE=malloc://0x6b
CMDS=<<EOF
L ../src/r2/core_flutter.dylib
L ../src/r2/core_flutter.so
wx 50414421f5f5dcdc63000000000000000200000000000000303435313930376332656161383436376538343863303036376266653865643470726f647563742061726d3634206e6f2d636f6d707265737365642d706f696e746572730082818180800060d5818080808080
r2flutter -q -j -O ref:3~{=}snapshot.kind,snapshot.complete,.name,.value.kind
o malloc://0x6a
wx 50414421f5f5dcdc62000000000000000200000000000000303435313930376332656161383436376538343863303036376266653865643470726f647563742061726d3634206e6f2d636f6d707265737365642d706f696e746572730082818180800040d68181818083
r2flutter -q -j -O ref:3~{snapshot.kind}
r2flutter -q -j -O ref:3~{snapshot.complete}
r2flutter -q -j -O ref:3~{snapshot.length}
r2flutter -q -j -O ref:3~{snapshot.elements[0].value.kind}
r2flutter -q -j -O ref:3~{snapshot.elements[0].value.cycle}
o malloc://0x6a
wx 50414421f5f5dcdc62000000000000000200000000000000303435313930376332656161383436376538343863303036376266653865643470726f647563742061726d3634206e6f2d636f6d707265737365642d706f696e746572730082818180800060d58180808080
r2flutter -q -j -O ref:3~{snapshot.kind}
r2flutter -q -j -O ref:3~{snapshot.complete}
o malloc://0x6b
wx 50414421f5f5dcdc63000000000000000200000000000000303435313930376332656161383436376538343863303036376266653865643470726f647563742061726d3634206e6f2d636f6d707265737365642d706f696e746572730082818180800060d5818080808080
r2flutter -q -j -O ref:99~{snapshot.kind}
r2flutter -q -j -O ref:99~{snapshot.complete}
EOF
EXPECT=<<EOF
json.value.kind = "snapshot_ref";
json.snapshot.kind = "map";
json.snapshot.complete = true;
json.snapshot.fields[0].name = "type_arguments";
json.snapshot.fields[0].value.kind = "null";
json.snapshot.fields[1].name = "hash_mask";
json.snapshot.fields[1].value.kind = "null";
json.snapshot.fields[2].name = "data";
json.snapshot.fields[2].value.kind = "null";
json.snapshot.fields[3].name = "used_data";
json.snapshot.fields[3].value.kind = "null";
json.snapshot.fields[4].name = "deleted_keys";
json.snapshot.fields[4].value.kind = "null";
array
true
1
array
true
map
false
out_of_range
false
EOF
RUN
