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; my $mw = MainWindow->new; my $lf = LoginForm->new($mw, -logincmd => \&AuthService::login )->pack; my $msg = $lf->Subwidget('Message'); ##################################### ## No Parameters Set ##################################### $lf->Login; 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 $userE = $lf->Subwidget('UserEntry'); my $passE = $lf->Subwidget('PassEntry'); my $button = $lf->Subwidget('LoginButton'); $lf->update; $userE->focusForce; setEntry($userE, $user); $userE->eventGenerate(''); setEntry($passE, $pass); $userE->eventGenerate(''); $button->eventGenerate(''); } sub clearLoginForm { my $lf = shift; $lf->Subwidget('Message')->configure(-text => ""); $lf->Subwidget('UserEntry')->delete(0, 'end'); $lf->Subwidget('PassEntry')->delete(0, 'end'); } sub setEntry { my ($entry, $text) = @_; foreach my $ch (split(//, $text)) { $entry->eventGenerate('', -keysym => $ch); } }