package AuthService; sub login { my ($user, $password) = @_; return (defined($user) && defined($password) && $user eq "eric" && $password eq "swordfish"); } 1; package main; use strict; use LoginForm; use Test::More tests => 4; use Tk; use Win32::GuiTest qw(SendKeys SetForegroundWindow); my $mw = MainWindow->new; my $lf = LoginForm->new($mw, -logincmd => \&AuthService::login )->pack; my $msg = $lf->Subwidget('Message'); $mw->update; SetForegroundWindow(oct($mw->id)); ##################################### ## No Parameters Set ##################################### simulateLogin($lf, "", ""); is($msg->cget(-text), "Login Failed!", "No user or password set"); ##################################### ## Good credentials ##################################### simulateLogin($lf, "eric", "swordfish"); is($msg->cget(-text), "Login Successful", "Valid credentials set"); ##################################### ## No username set, good password ##################################### simulateLogin($lf, "", "swordfish"); is($msg->cget(-text), "Login Failed!", "User not set, Password set"); ##################################### ## Correct User set, no password ##################################### simulateLogin($lf, "eric", ""); is($msg->cget(-text), "Login Failed!", "User set, no password"); sub simulateLogin { my ($lf, $user, $pass) = @_; clearLoginForm($lf); my $userH = oct($lf->Subwidget('UserEntry')->id); my $passH = oct($lf->Subwidget('PassEntry')->id); my $butH = oct($lf->Subwidget('LoginButton')->id); SendKeys("{TAB}"); SendKeys($user) if $user ne ""; SendKeys("{TAB}"); SendKeys($pass) if $user ne ""; SendKeys("{TAB}"); SendKeys("{ENTER}"); $lf->update; } sub clearLoginForm { my $lf = shift; $lf->Subwidget('Message')->configure(-text => ""); $lf->Subwidget('UserEntry')->delete(0, 'end'); $lf->Subwidget('PassEntry')->delete(0, 'end'); }