* @copyright 2008-2010 Phergie Development Team (http://phergie.org) * @license http://phergie.org/license New BSD License * @link http://pear.phergie.org/package/Phergie */ require_once dirname(__FILE__) . '/TestCase.php'; /** * Unit test suite for Pherge_Plugin_SpellCheck. * * @category Phergie * @package Phergie_Tests * @author Phergie Development Team * @license http://phergie.org/license New BSD License * @link http://pear.phergie.org/package/Phergie */ class Phergie_Plugin_SpellCheckTest extends Phergie_Plugin_TestCase { /** * Current SpellCheck plugin instance * * @var Phergie_Plugin_SpellCheck */ protected $spell; /** * Sets up the fixture, for example, opens a network connection. * This method is called before a test is executed. * * @return void */ protected function setUp() { $this->config = array('spellcheck.lang' => 'en'); $this->spell = new Phergie_Plugin_SpellCheck(); $this->setPlugin(new Phergie_Plugin_Command()); $config = $this->plugin->getConfig(); $handler = new Phergie_Plugin_Handler($config, $this->handler); $this->plugin->setPluginHandler($handler); $handler->addPlugin($this->plugin); $handler->addPlugin($this->spell); $this->spell->setEventHandler($this->handler); $this->spell->setConnection($this->connection); } /** * @event Phergie_Event_Request::privmsg * @eventArg #zftalk * @eventArg spell */ public function testSpell() { $this->spell->onLoad(); $this->copyEvent(); $this->plugin->onPrivMsg(); $this->assertDoesNotHaveEvent(Phergie_Event_Command::TYPE_PRIVMSG); } /** * @event Phergie_Event_Request::privmsg * @eventArg #phergie * @eventArg spell test */ public function testSpellTest() { $this->spell->onLoad(); $this->copyEvent(); $this->plugin->onPrivMsg(); $events = $this->getResponseEvents(Phergie_Event_Command::TYPE_PRIVMSG); $this->assertEquals(1, count($events)); foreach ($events as $event) { $args = $event->getArguments(); $this->assertEquals('#phergie', $args[0]); $this->assertContains('CheckSpellUser:', $args[1]); $this->assertContains('test', $args[1]); $this->assertContains('correct', $args[1]); } } /** * @event Phergie_Event_Request::privmsg * @eventArg #phergie * @eventArg spell testz */ public function testSpellTestz() { $this->spell->onLoad(); $this->copyEvent(); $this->plugin->onPrivMsg(); $events = $this->getResponseEvents(Phergie_Event_Command::TYPE_PRIVMSG); $this->assertEquals(1, count($events)); foreach ($events as $event) { $args = $event->getArguments(); $this->assertEquals('#phergie', $args[0]); $this->assertContains('CheckSpellUser:', $args[1]); $this->assertRegExp('/([a-z]+, ){4}/', $args[1]); $this->assertContains('testz', $args[1]); $this->assertContains('test,', $args[1]); } } /** * @event Phergie_Event_Request::privmsg * @eventArg #phergie * @eventArg spell testz */ public function testSpellMoreSuggestions() { $config = $this->spell->getConfig(); $this->copyEvent(); $config['spellcheck.limit'] = 6; $this->spell->onLoad(); $this->plugin->onPrivMsg(); $events = $this->getResponseEvents(Phergie_Event_Command::TYPE_PRIVMSG); $this->assertEquals(1, count($events)); foreach ($events as $event) { $args = $event->getArguments(); $this->assertEquals('#phergie', $args[0]); $this->assertContains('CheckSpellUser:', $args[1]); $this->assertRegExp('/([a-z]+, ){5}/', $args[1]); $this->assertContains('testz', $args[1]); $this->assertContains('test,', $args[1]); } } /** * @event Phergie_Event_Request::privmsg * @eventArg #phergie * @eventArg spell qwertyuiopasdfghjklzxcvbnm */ public function testSpellNoSuggestions() { $this->spell->onLoad(); $this->copyEvent(); $this->plugin->onPrivMsg(); $events = $this->getResponseEvents(Phergie_Event_Command::TYPE_PRIVMSG); $this->assertEquals(1, count($events)); foreach ($events as $event) { $args = $event->getArguments(); $this->assertEquals('#phergie', $args[0]); $this->assertContains('CheckSpellUser:', $args[1]); $this->assertContains('find any suggestions', $args[1]); } } /** * Copy event from command to spell plugin * * @return void */ protected function copyEvent() { $hostmask = Phergie_Hostmask::fromString('CheckSpellUser!test@testing.org'); $event = $this->plugin->getEvent(); $event->setHostmask($hostmask); $this->spell->setEvent($event); } }