Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

172 lines (142 sloc) 4.685 kb
#!/usr/bin/env perl
# Must be run in a 80x24 terminal unless a fixed POE is released.
use strict;
use warnings;
use lib '../testing/blib/lib';
use Test::Irssi;
# Mode constants: C(ommand), I(nsert).
sub C () { 0 }
sub I () { 1 }
sub statusbar_mode {
my ($test, $mode) = @_;
$test->add_pattern_match(qr/^ \[\d{2}:\d{2}\] \[\] \[1\] \[$mode\]\s+$/,
'window_sbar', "[$mode] in vim-mode statusbar");
}
sub cursor_position {
my ($test, $position) = @_;
$test->test_cursor_position($position, 24, "Checking cursor position");
}
sub check {
my ($test, $input, $mode, $position, $delay) = @_;
if (defined $input) {
$test->add_input_sequence($input);
if (not defined $delay) {
$delay = 0.1;
$delay += 0.4 if $input =~ /\e/; # esc needs a longer delay
}
$test->add_delay($delay);
}
cursor_position($test, $position);
if ($mode == C) {
statusbar_mode($test, 'Command');
} elsif ($mode == I) {
statusbar_mode($test, 'Insert');
} else {
die "Wrong mode: $mode";
}
}
my $tester = Test::Irssi->new
(irssi_binary => "irssi",
irssi_homedir => "./irssi/");
$tester->run_headless(1);
$tester->generate_tap(1);
my $test = $tester->new_test('insert-command-mode');
$test->description("switching between insert and command mode");
# Make sure irssi is finished - not entirely sure why this is necessary.
$test->add_delay(2);
# We start in insert mode.
check $test, undef, I, 12 + 0;
check $test, "\e", C, 12 + 0;
check $test, 'i', I, 12 + 0;
# Quit irssi, necessary to terminate the test.
#$test->add_input_sequence("\n/quit\n");
# FIXME: multiple tests don't work
#$test = $tester->new_test('basic-movement');
#$test->description('basic movement');
#$test->add_delay(2);
my $test_string =
'Test $tring. with a 4711, words , w.r#s42 etc. and more123! ..';
check $test, $test_string, I, 12 + length $test_string;
check $test, "\e", C, 12 + 64;
# h l
check $test, "0", C, 12 + 0;
check $test, "l", C, 12 + 1;
check $test, "l", C, 12 + 2;
check $test, "l", C, 12 + 3;
check $test, "l", C, 12 + 4;
check $test, "l", C, 12 + 5;
check $test, "l", C, 12 + 6;
check $test, "l", C, 12 + 7;
check $test, "h", C, 12 + 6;
check $test, "h", C, 12 + 5;
check $test, "h", C, 12 + 4;
check $test, "h", C, 12 + 3;
check $test, "h", C, 12 + 2;
check $test, "10l", C, 12 + 12;
check $test, "7l", C, 12 + 19;
check $test, "3l", C, 12 + 22;
check $test, "3h", C, 12 + 19;
check $test, "50l", C, 12 + 64;
check $test, "10l", C, 12 + 64;
check $test, "24h", C, 12 + 40;
check $test, "100h", C, 12 + 0;
# 0 ^ $
check $test, "I \e", C, 12 + 4; # insert test string for ^
check $test, "0", C, 12 + 0;
check $test, "^", C, 12 + 5;
check $test, "3^", C, 12 + 5;
check $test, "12^", C, 12 + 5;
check $test, "\$", C, 12 + 46;
check $test, "05x", C, 12 + 0; # remove test string for ^
# <Space> <BS>
check $test, "0", C, 12 + 0;
check $test, " ", C, 12 + 1;
check $test, " ", C, 12 + 2;
check $test, " ", C, 12 + 3;
check $test, " ", C, 12 + 4;
check $test, " ", C, 12 + 5;
check $test, " ", C, 12 + 6;
check $test, " ", C, 12 + 7;
check $test, " ", C, 12 + 8;
check $test, "5 ", C, 12 + 13;
check $test, "2 ", C, 12 + 15;
check $test, "10 ", C, 12 + 25;
check $test, "30 ", C, 12 + 55;
check $test, "20 ", C, 12 + 64;
check $test, "10 ", C, 12 + 64;
check $test, " ", C, 12 + 64;
check $test, "\x7f", C, 12 + 63;
check $test, "\x7f", C, 12 + 62;
check $test, "\x7f", C, 12 + 61;
check $test, "\x7f", C, 12 + 60;
check $test, "1\x7f", C, 12 + 59;
check $test, "3\x7f", C, 12 + 56;
check $test, "5\x7f", C, 12 + 51;
check $test, "10\x7f", C, 12 + 41;
check $test, "50\x7f", C, 12 + 0;
check $test, "\x7f", C, 12 + 0;
check $test, "5\x7f", C, 12 + 0;
# f t
check $test, "0", C, 12 + 0;
check $test, "fe", C, 12 + 1;
check $test, "fs", C, 12 + 2;
check $test, "ft", C, 12 + 3;
check $test, "f ", C, 12 + 4;
check $test, "2f ", C, 12 + 17;
check $test, "5f,", C, 12 + 17;
check $test, "2f,", C, 12 + 32;
check $test, "tw", C, 12 + 33;
check $test, "t ", C, 12 + 40;
check $test, "t ", C, 12 + 40;
check $test, "t ", C, 12 + 40;
check $test, "2t ", C, 12 + 41;
check $test, "2t ", C, 12 + 46;
check $test, "3t ", C, 12 + 48;
check $test, "t!", C, 12 + 60;
check $test, "t ", C, 12 + 61;
check $test, "t.", C, 12 + 62;
check $test, "t.", C, 12 + 62;
check $test, "5t.", C, 12 + 62;
check $test, "\$", C, 12 + 64;
$test->add_input_sequence("\n/quit\n");
$tester->run;
Jump to Line
Something went wrong with that request. Please try again.