rizin/test/db/cmd/undoredo
Giovanni 2f97762b09
librz/core: Remove rizin command output (#5540)
* Remove RIZIN command output for the old projects

* Fix cmeta.c

* Fix ik command

* Revert back pc*

* fix formatting cmd_descs_generate.py

* Fix rz_cons_pal_list_as_css

* Fill all info about colors for ec commands.

* Fix all tests
2025-11-28 23:41:47 +08:00

305 lines
No EOL
4.8 KiB
Text

NAME=t/undoredo
FILE=malloc://1024
CMDS=<<EOF
echo No seeks.
sh ; %v $$
echo
echo But try undo/redo.
shu
shr
sh
shr
shr
shu
shu
shu
shr
sh
echo
echo First seeks.
s 0x10 ; sh ; %v $$
s 0x20 ; sh ; %v $$
s 0x30 ; sh ; %v $$
s 0x40 ; sh ; %v $$
echo
echo Undo all seeks (and some more).
shu ; sh ; %v $$ ; echo
shu ; sh ; %v $$ ; echo
shu ; sh ; %v $$ ; echo
shu ; sh ; %v $$ ; echo
# Test if more undos break something.
shu ; sh ; %v $$ ; echo
shu ; sh ; %v $$ ; echo
echo Then redo them (and some more).
shr ; sh ; %v $$ ; echo
shr ; sh ; %v $$ ; echo
shr ; sh ; %v $$ ; echo
shr ; sh ; %v $$ ; echo
# Test if more undos break something.
shr ; sh ; %v $$ ; echo
shr ; sh ; %v $$ ; echo
echo Undo some seeks and then seek somewhere else.
shu ; shu
sh ; %v $$ ; echo
s 0x50
sh ; %v $$ ; echo
# Redo now does nothing.
shr ; shr ; shr
sh ; %v $$ ; echo
echo Undo all seeks again and perform a single seek with undo/redo.
shu ; shu ; shu
sh ; %v $$ ; echo
s 0x100
sh ; %v $$ ; echo
shu ; shr
sh ; %v $$ ; echo
EOF
EXPECT=<<EOF
No seeks.
0x0 # current seek
0x0
But try undo/redo.
0x0 # current seek
0x0 # current seek
First seeks.
0x0
0x10 # current seek
0x10
0x0
0x10
0x20 # current seek
0x20
0x0
0x10
0x20
0x30 # current seek
0x30
0x0
0x10
0x20
0x30
0x40 # current seek
0x40
Undo all seeks (and some more).
0x0
0x10
0x20
0x30 # current seek
0x40 # redo
0x30
0x0
0x10
0x20 # current seek
0x30 # redo
0x40 # redo
0x20
0x0
0x10 # current seek
0x20 # redo
0x30 # redo
0x40 # redo
0x10
0x0 # current seek
0x10 # redo
0x20 # redo
0x30 # redo
0x40 # redo
0x0
0x0 # current seek
0x10 # redo
0x20 # redo
0x30 # redo
0x40 # redo
0x0
0x0 # current seek
0x10 # redo
0x20 # redo
0x30 # redo
0x40 # redo
0x0
Then redo them (and some more).
0x0
0x10 # current seek
0x20 # redo
0x30 # redo
0x40 # redo
0x10
0x0
0x10
0x20 # current seek
0x30 # redo
0x40 # redo
0x20
0x0
0x10
0x20
0x30 # current seek
0x40 # redo
0x30
0x0
0x10
0x20
0x30
0x40 # current seek
0x40
0x0
0x10
0x20
0x30
0x40 # current seek
0x40
0x0
0x10
0x20
0x30
0x40 # current seek
0x40
Undo some seeks and then seek somewhere else.
0x0
0x10
0x20 # current seek
0x30 # redo
0x40 # redo
0x20
0x0
0x10
0x20
0x50 # current seek
0x50
0x0
0x10
0x20
0x50 # current seek
0x50
Undo all seeks again and perform a single seek with undo/redo.
0x0 # current seek
0x10 # redo
0x20 # redo
0x50 # redo
0x0
0x0
0x100 # current seek
0x100
0x0
0x100 # current seek
0x100
EOF
RUN
NAME=basic json
FILE=malloc://1024
CMDS=<<EOF
shj
sd +10
shj
sd +10
shu
shj
shu
shj
echo undo at the start of list
shu
shj
echo redo to the end
shr; shr
shj
echo one more past the end
shr
shj
EOF
EXPECT=<<EOF
[{"offset":0,"cursor":0,"current":true}]
[{"offset":0,"cursor":0,"current":false},{"offset":10,"cursor":0,"current":true}]
[{"offset":0,"cursor":0,"current":false},{"offset":10,"cursor":0,"current":true},{"offset":20,"cursor":0,"current":false}]
[{"offset":0,"cursor":0,"current":true},{"offset":10,"cursor":0,"current":false},{"offset":20,"cursor":0,"current":false}]
undo at the start of list
[{"offset":0,"cursor":0,"current":true},{"offset":10,"cursor":0,"current":false},{"offset":20,"cursor":0,"current":false}]
redo to the end
[{"offset":0,"cursor":0,"current":false},{"offset":10,"cursor":0,"current":false},{"offset":20,"cursor":0,"current":true}]
one more past the end
[{"offset":0,"cursor":0,"current":false},{"offset":10,"cursor":0,"current":false},{"offset":20,"cursor":0,"current":true}]
EOF
RUN
NAME=uninitialized bug
FILE=malloc://1024
CMDS=<<EOF
sd +10
echo should produce two identical results
sd +1
shj
shu
sd +1
shj
echo 0 0, or 22 23 but not 0 22
sd +10
sd +1
shj
shu
sd +2
shj
EOF
EXPECT=<<EOF
should produce two identical results
[{"offset":0,"cursor":0,"current":false},{"offset":10,"cursor":0,"current":false},{"offset":11,"cursor":0,"current":true}]
[{"offset":0,"cursor":0,"current":false},{"offset":10,"cursor":0,"current":false},{"offset":11,"cursor":0,"current":true}]
0 0, or 22 23 but not 0 22
[{"offset":0,"cursor":0,"current":false},{"offset":10,"cursor":0,"current":false},{"offset":11,"cursor":0,"current":false},{"offset":21,"cursor":0,"current":false},{"offset":22,"cursor":0,"current":true}]
[{"offset":0,"cursor":0,"current":false},{"offset":10,"cursor":0,"current":false},{"offset":11,"cursor":0,"current":false},{"offset":21,"cursor":0,"current":false},{"offset":23,"cursor":0,"current":true}]
EOF
RUN
NAME=duplicate push
FILE=malloc://1024
CMDS=<<EOF
s 0x0
s 0x0
s 0x1
s 0x2
# shouldn't contain multiple 0 at the start
shj
# regression test for deduplication not working on buffer edge
60sd +1
s 0x0
s 0x0
s 0x01
s 0x02
sh~:-6..
EOF
EXPECT=<<EOF
[{"offset":0,"cursor":0,"current":false},{"offset":1,"cursor":0,"current":false},{"offset":2,"cursor":0,"current":true}]
0x3c
0x3d
0x3e
0x0
0x1
0x2 # current seek
EOF
RUN