D7: editor multi-cursor support
Add secondary_cursors field to Editor with insert_char_multi, delete_back_multi, delete_forward_multi methods. Right-to-left processing ensures position shifts don't corrupt earlier insertions. 7 new tests: add/clear, all_positions, insert, delete_back, delete_forward, unicode, duplicate-add.
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
#!/bin/sh
|
||||
# This would malfunction in diff-3.4
|
||||
|
||||
. "${srcdir=.}/init.sh"; path_prepend_ ../src
|
||||
|
||||
# Some systems lack seq.
|
||||
# A limited replacement for seq: handle 1 or 2 args; increment must be 1
|
||||
seq()
|
||||
{
|
||||
case $# in
|
||||
1) start=1 final=$1;;
|
||||
2) start=$1 final=$2;;
|
||||
*) echo you lose 1>&2; exit 1;;
|
||||
esac
|
||||
awk 'BEGIN{for(i='$start';i<='$final';i++) print i}' < /dev/null
|
||||
}
|
||||
|
||||
echo a > a || framework_failure_
|
||||
echo b > b || framework_failure_
|
||||
echo c > c || framework_failure_
|
||||
cat <<'EOF' > exp || framework_failure_
|
||||
====
|
||||
1:1c
|
||||
a
|
||||
2:1c
|
||||
b
|
||||
3:1c
|
||||
c
|
||||
EOF
|
||||
|
||||
fail=0
|
||||
|
||||
diff3 a b c > out 2> err || fail=1
|
||||
compare exp out || fail=1
|
||||
compare /dev/null err || fail=1
|
||||
|
||||
# Repeat, but with all three files the same:
|
||||
diff3 a a a > out 2> err || fail=1
|
||||
compare /dev/null out || fail=1
|
||||
compare /dev/null err || fail=1
|
||||
|
||||
# This would have provoked a nontrivial leak prior to diffutils-3.5,
|
||||
# due to the nontrivial list of diff_block structs.
|
||||
seq 10 40|sed 's/1$/x/' > d || framework_failure_
|
||||
seq 10 40|sed 's/5$/y/' > e || framework_failure_
|
||||
seq 10 40|sed 's/8$/z/' > f || framework_failure_
|
||||
cat <<'EOF' > exp40 || framework_failure_
|
||||
====1
|
||||
1:2c
|
||||
1x
|
||||
2:2c
|
||||
3:2c
|
||||
11
|
||||
====2
|
||||
1:6c
|
||||
3:6c
|
||||
15
|
||||
2:6c
|
||||
1y
|
||||
====3
|
||||
1:9c
|
||||
2:9c
|
||||
18
|
||||
3:9c
|
||||
1z
|
||||
====1
|
||||
1:12c
|
||||
2x
|
||||
2:12c
|
||||
3:12c
|
||||
21
|
||||
====2
|
||||
1:16c
|
||||
3:16c
|
||||
25
|
||||
2:16c
|
||||
2y
|
||||
====3
|
||||
1:19c
|
||||
2:19c
|
||||
28
|
||||
3:19c
|
||||
2z
|
||||
====1
|
||||
1:22c
|
||||
3x
|
||||
2:22c
|
||||
3:22c
|
||||
31
|
||||
====2
|
||||
1:26c
|
||||
3:26c
|
||||
35
|
||||
2:26c
|
||||
3y
|
||||
====3
|
||||
1:29c
|
||||
2:29c
|
||||
38
|
||||
3:29c
|
||||
3z
|
||||
EOF
|
||||
|
||||
diff3 d e f > out 2> err
|
||||
compare exp40 out || fail=1
|
||||
compare /dev/null err || fail=1
|
||||
|
||||
Exit $fail
|
||||
Reference in New Issue
Block a user