mirror of
https://github.com/Llewellynvdm/fzf.git
synced 2024-11-22 21:05:09 +00:00
Add test cases for header and fix corner cases
This commit is contained in:
parent
f469c25730
commit
f71ea5f3ea
@ -784,6 +784,10 @@ func parseOptions(opts *Options, allArgs []string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if opts.HeaderLines < 0 {
|
||||||
|
errorExit("header lines must be a non-negative integer")
|
||||||
|
}
|
||||||
|
|
||||||
// Change default actions for CTRL-N / CTRL-P when --history is used
|
// Change default actions for CTRL-N / CTRL-P when --history is used
|
||||||
if opts.History != nil {
|
if opts.History != nil {
|
||||||
if _, prs := keymap[curses.CtrlP]; !prs {
|
if _, prs := keymap[curses.CtrlP]; !prs {
|
||||||
|
@ -377,10 +377,18 @@ func (t *Terminal) printHeader() {
|
|||||||
if len(t.header) == 0 {
|
if len(t.header) == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
max := C.MaxY()
|
||||||
for idx, lineStr := range t.header {
|
for idx, lineStr := range t.header {
|
||||||
if !t.reverse {
|
if !t.reverse {
|
||||||
idx = len(t.header) - idx - 1
|
idx = len(t.header) - idx - 1
|
||||||
}
|
}
|
||||||
|
line := idx + 2
|
||||||
|
if t.inlineInfo {
|
||||||
|
line -= 1
|
||||||
|
}
|
||||||
|
if line >= max {
|
||||||
|
break
|
||||||
|
}
|
||||||
trimmed, colors := extractColor(&lineStr)
|
trimmed, colors := extractColor(&lineStr)
|
||||||
item := &Item{
|
item := &Item{
|
||||||
text: trimmed,
|
text: trimmed,
|
||||||
@ -388,10 +396,6 @@ func (t *Terminal) printHeader() {
|
|||||||
colors: colors,
|
colors: colors,
|
||||||
rank: Rank{0, 0, 0}}
|
rank: Rank{0, 0, 0}}
|
||||||
|
|
||||||
line := idx + 2
|
|
||||||
if t.inlineInfo {
|
|
||||||
line -= 1
|
|
||||||
}
|
|
||||||
t.move(line, 2, true)
|
t.move(line, 2, true)
|
||||||
t.printHighlighted(item, false, C.ColHeader, 0, false)
|
t.printHighlighted(item, false, C.ColHeader, 0, false)
|
||||||
}
|
}
|
||||||
@ -993,6 +997,7 @@ func (t *Terminal) constrain() {
|
|||||||
t.offset = util.Max(0, count-height)
|
t.offset = util.Max(0, count-height)
|
||||||
t.cy = util.Constrain(t.offset+diffpos, 0, count-1)
|
t.cy = util.Constrain(t.offset+diffpos, 0, count-1)
|
||||||
}
|
}
|
||||||
|
t.offset = util.Max(0, t.offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Terminal) vmove(o int) {
|
func (t *Terminal) vmove(o int) {
|
||||||
@ -1021,8 +1026,9 @@ func (t *Terminal) vset(o int) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (t *Terminal) maxItems() int {
|
func (t *Terminal) maxItems() int {
|
||||||
|
max := C.MaxY() - 2 - len(t.header)
|
||||||
if t.inlineInfo {
|
if t.inlineInfo {
|
||||||
return C.MaxY() - 1 - len(t.header)
|
max += 1
|
||||||
}
|
}
|
||||||
return C.MaxY() - 2 - len(t.header)
|
return util.Max(max, 0)
|
||||||
}
|
}
|
||||||
|
@ -648,6 +648,61 @@ class TestGoFZF < TestBase
|
|||||||
tmux.until { |lines| lines[-10].start_with? '>' }
|
tmux.until { |lines| lines[-10].start_with? '>' }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_header_lines
|
||||||
|
tmux.send_keys "seq 100 | #{fzf '--header-lines=10 -q 5'}", :Enter
|
||||||
|
2.times do
|
||||||
|
tmux.until do |lines|
|
||||||
|
lines[-2].include?('/90') &&
|
||||||
|
lines[-3] == ' 1' &&
|
||||||
|
lines[-4] == ' 2' &&
|
||||||
|
lines[-13] == '> 15'
|
||||||
|
end
|
||||||
|
tmux.send_keys :Down
|
||||||
|
end
|
||||||
|
tmux.send_keys :Enter
|
||||||
|
assert_equal '15', readonce.chomp
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_header_lines_reverse
|
||||||
|
tmux.send_keys "seq 100 | #{fzf '--header-lines=10 -q 5 --reverse'}", :Enter
|
||||||
|
2.times do
|
||||||
|
tmux.until do |lines|
|
||||||
|
lines[1].include?('/90') &&
|
||||||
|
lines[2] == ' 1' &&
|
||||||
|
lines[3] == ' 2' &&
|
||||||
|
lines[12] == '> 15'
|
||||||
|
end
|
||||||
|
tmux.send_keys :Up
|
||||||
|
end
|
||||||
|
tmux.send_keys :Enter
|
||||||
|
assert_equal '15', readonce.chomp
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_header_lines_overflow
|
||||||
|
tmux.send_keys "seq 100 | #{fzf '--header-lines=200'}", :Enter
|
||||||
|
tmux.until { |lines| lines[-2].include?('0/0') }
|
||||||
|
tmux.send_keys :Enter
|
||||||
|
assert_equal '', readonce.chomp
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_header_file
|
||||||
|
tmux.send_keys "seq 100 | #{fzf "--header-file <(head -5 #{__FILE__})"}", :Enter
|
||||||
|
header = File.readlines(__FILE__).take(5).map(&:strip)
|
||||||
|
tmux.until do |lines|
|
||||||
|
lines[-2].include?('100/100') &&
|
||||||
|
lines[-7..-3].map(&:strip) == header
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_header_file_reverse
|
||||||
|
tmux.send_keys "seq 100 | #{fzf "--header-file <(head -5 #{__FILE__}) --reverse"}", :Enter
|
||||||
|
header = File.readlines(__FILE__).take(5).map(&:strip)
|
||||||
|
tmux.until do |lines|
|
||||||
|
lines[1].include?('100/100') &&
|
||||||
|
lines[2..6].map(&:strip) == header
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def writelines path, lines
|
def writelines path, lines
|
||||||
File.unlink path while File.exists? path
|
File.unlink path while File.exists? path
|
||||||
|
Loading…
Reference in New Issue
Block a user