NAME=rafind2 -s 1234 -X -b 0x100
FILE=--
CMDS=!rafind2 -s 1234 -X -b 0x100 bins/other/search.bin
EXPECT=<<EOF
0xfe
[35m- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
[0m[32m0x000000fe[0m  [35m31[0m[35m32[0m [35m33[0m[35m34[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m  [35m1[0m[35m2[0m[35m3[0m[35m4[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m
[32m0x0000010e[0m  [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m  [32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m
[32m0x0000011e[0m  [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m  [32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m
[32m0x0000012e[0m  [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m [32m00[0m[32m00[0m  [32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m
EOF
RUN

NAME=rafind2 -s 1234 -X -b 0x100
FILE=--
CMDS=!rafind2 -c -s 1234 -X -b 8 bins/other/search.bin
EXPECT=<<EOF
0xfe
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x000000fe  3132 3334 0000 0000                      1234....
EOF
RUN

NAME=rafind2 -s 1234 -X -b 0x100
FILE=--
CMDS=!rafind2 -c -s 1234 -X -b 0x100 bins/other/search.bin
EXPECT=<<EOF
0xfe
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x000000fe  3132 3334 0000 0000 0000 0000 0000 0000  1234............
0x0000010e  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x0000011e  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x0000012e  0000 0000 0000 0000 0000 0000 0000 0000  ................
EOF
RUN

NAME=rafind2 -s 1234 -X
FILE=--
CMDS=!rafind2 -cq -s 1234 -X bins/other/search.bin
EXPECT=<<EOF
0xfe
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x000000fe  3132 3334 0000 0000 0000 0000 0000 0000  1234............
0x0000010e  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x0000011e  0000 0000 0000 0000 0000 0000 0000 0000  ................
0x0000012e  0000 0000 0000 0000 0000 0000 0000 0000  ................
EOF
RUN

NAME=rafind2 -X -s
FILE=-
CMDS=!rafind2 -cX -s 250382 bins/elf/ioli/crackme0x00
EXPECT=<<EOF
0x58f
- offset -   0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x0000058f  3235 3033 3832 0049 6e76 616c 6964 2050  250382.Invalid P
0x0000059f  6173 7377 6f72 6421 0a00 5061 7373 776f  assword!..Passwo
0x000005af  7264 204f 4b20 3a29 0a00 0000 0000 0000  rd OK :)........
0x000005bf  0000 0000 0000 0000 0000 0000 0000 0000  ................
EOF
RUN

NAME=rafind2 -r -X -s
FILE=-
CMDS=!rafind2 -r -X -s 250382 bins/elf/ioli/crackme0x00
EXPECT=<<EOF
f hit0_0 = 0x0000058f # bins/elf/ioli/crackme0x00
EOF
RUN

NAME=rafind2 -f 0x00000000 -t 0x00000590 -r -X -s
FILE=-
CMDS=!rafind2 -f 0x00000000 -t 0x00001000 -r -X -s 250382 bins/elf/ioli/crackme0x00
EXPECT=<<EOF
f hit0_0 = 0x0000058f # bins/elf/ioli/crackme0x00
EOF
RUN

NAME=rafind2 -f 0x00010000 -t 0x00020000 -X -s
FILE=-
CMDS=!rafind2 -f 0x00010000 -t 0x00020000 -r -X -s 250382 bins/elf/ioli/crackme0x00
EXPECT=<<EOF
EOF
RUN

NAME=rafind2 -r -X -x
FILE=-
CMDS=!rafind2 -r -X -x 323530333832 bins/elf/ioli/crackme0x00
EXPECT=<<EOF
f hit0_0 = 0x0000058f # bins/elf/ioli/crackme0x00
EOF
RUN

NAME=rafind2 -r -X -x with nibbles masked
FILE=-
CMDS=!rafind2 -r -X -x caf.bab. bins/java/Hello.class
EXPECT=<<EOF
f hit0_0 = 0x00000000 # bins/java/Hello.class
EOF
RUN

NAME=rafind2 -r -X -x with bin mask
FILE=-
CMDS=!rafind2 -r -X -x caf3bab3 -M fff0fff0 bins/java/Hello.class
EXPECT=<<EOF
f hit0_0 = 0x00000000 # bins/java/Hello.class
EOF
RUN

NAME=rafind2 -h
FILE=-
CMDS=!rafind2 -h | grep -c Usage
EXPECT=<<EOF
1
EOF
RUN

NAME=rafind2 -v
FILE=-
CMDS=!rafind2 -v | grep -c birth
EXPECT=<<EOF
1
EOF
RUN

NAME=rafind2 can't open
FILE=-
CMDS=!rafind2 -n  -f 0x00010000 -t 0x00020000 -r -X -s 250382 incorrect_file | grep incorrect_file
EXPECT_ERR=<<EOF
ERROR: Cannot open file 'incorrect_file'
EOF
RUN

NAME=rafind2 -a
FILE=-
CMDS=!rafind2 -a -X -s 250382 bins/elf/ioli/crackme0x00
EXPECT=<<EOF
0x58f
EOF
RUN

NAME=rafind2 -i
FILE=-
CMDS=!!rafind2 -i bins/elf/ioli/crackme0x00
EXPECT=<<EOF
0x00000000 0 ELF 32-bit LSB executable, Intel 80386, version 1
EOF
RUN

NAME=rafind2 -m
FILE=-
CMDS=!!rafind2 -m bins/elf/ioli/crackme0x00
EXPECT=<<EOF
0x00000000 0 hit0_0 ELF 32-bit LSB executable, Intel 80386, version 1
EOF
RUN

NAME=rafind2 -e
FILE=-
CMDS=!!rafind2 -e "/2503[0-9]2/i" bins/elf/ioli/crackme0x00
EXPECT=<<EOF
0x58f
EOF
RUN

NAME=rafind2 -E
FILE=-
BROKEN=1
CMDS=!rafind2 -E "134513440,eip,4,esp,-=,esp,=[],eip,=" bins/elf/ioli/crackme0x00
EXPECT=<<EOF
1
EOF
RUN

NAME=rafind2 -b 0xa
FILE=-
CMDS=!rafind2  -a -X -s  250382 -b 0xa bins/elf/ioli/crackme0x00
EXPECT=<<EOF
0x58f
EOF
RUN

NAME=rafind2 -a -b 0x3
FILE=-
CMDS=!rafind2 -X -s 250382 -b 0x3 bins/elf/ioli/crackme0x00
EXPECT=<<EOF
EOF
RUN

NAME=rafind2 -q
FILE=-
CMDS=!rafind2 -q -s 250382 bins/elf/ioli/crackme0x00
EXPECT=<<EOF
0x58f
EOF
RUN

NAME=rafind2 -z 250382
FILE=-
CMDS=!rafind2 -z -s 250382 bins/elf/ioli/crackme0x00
EXPECT=<<EOF
0x58f
EOF
RUN

NAME=rafind2 -S ascii
FILE=-
CMDS=!rafind2 -S wide bins/pe/testapp-msvc64.exe
EXPECT=<<EOF
0x1481a
0x14842
EOF
RUN

NAME=rafind2 -S U+00ff < utf8 < U+10000
FILE=-
CMDS=!rafind2 -S واسع bins/pe/testapp-msvc64.exe
EXPECT=<<EOF
0x14864
EOF
RUN

NAME=rafind2 -S utf8 >= U+10000
FILE=-
CMDS=!rafind2 -S 𐍈 bins/elf/strenc
EXPECT=<<EOF
0x22ac
EOF
RUN

NAME=rafind2 -Z
FILE=-
CMDS=!rafind2 -Z -s 250382 bins/elf/ioli/crackme0x00
EXPECT=<<EOF
0x58f 250382
EOF
RUN

NAME=rafind2 multiple files
FILE=-
CMDS=!rafind2 -s README bins/arm/README bins/arm/README
EXPECT=<<EOF
bins/arm/README: 0x0
bins/arm/README: 0x0
EOF
RUN

NAME=rafind2 recursive
FILE=-
CMDS=!rafind2 -q -s README bins/arm
EXPECT=<<EOF
0x0
EOF
RUN

NAME=rafind2 json
FILE=-
CMDS=!rafind2 -j -s README bins/arm/README
EXPECT=<<EOF
[{"file":"bins/arm/README","offset":0,"type":"string","data":"README"}]
EOF
RUN

NAME=rafind2 regexp
FILE=-
CMDS=!rafind2 -e /R.A..E/ bins/arm/README
EXPECT=<<EOF
0x0
EOF
RUN

NAME=rafind2 regexp json
FILE=-
CMDS=!rafind2 -j -e /R.A..E/ bins/arm/README
EXPECT=<<EOF
[{"file":"bins/arm/README","offset":0,"type":"string","data":"README"}]
EOF
RUN

NAME=rafind2 multiple strings
FILE=-
CMDS=!rafind2 -s README -s This bins/arm/README
EXPECT=<<EOF
0x0
0xf
EOF
RUN

NAME=rafind2 multiple strings json
FILE=-
CMDS=!rafind2 -j -s README -s This bins/arm/README
EXPECT=<<EOF
[{"file":"bins/arm/README","offset":0,"type":"string","data":"README"},{"file":"bins/arm/README","offset":15,"type":"string","data":"This directory contains binaries for tests on the arm architecture. So far the"}]
EOF
RUN

NAME=rafind2 multiple regexps
FILE=-
CMDS=!rafind2 -e /R....E/ -e /Th.s/ bins/arm/README
EXPECT=<<EOF
0x0
0xf
EOF
RUN

NAME=rafind2 multiple regexps json
FILE=-
CMDS=!rafind2 -j -e /R....E/ -e /Th.s/ bins/arm/README
EXPECT=<<EOF
[{"file":"bins/arm/README","offset":0,"type":"string","data":"README"},{"file":"bins/arm/README","offset":15,"type":"string","data":"This directory contains binaries for tests on the arm architecture. So far the"}]
EOF
RUN

NAME=rafind2 ""
FILE=-
CMDS=!rafind2 ""
EXPECT_ERR=<<EOF
ERROR: Cannot open empty path
EOF
RUN

NAME=rafind2 -F
FILE=-
CMDS=!rafind2 -F bins/src/keyword bins/mach0/FileDP
EXPECT=<<EOF
0x4e9
0x6f5
0x6f9
0x706
0x729
0x72d
0x73b
0x75d
0x761
0x76d
0x3473
0x348f
0x34ab
EOF
RUN
