Location: PHPKode > scripts > Net_Sieve > net_sieve/Net_Sieve-1.1.5/SieveTest.php
<?php

// +-----------------------------------------------------------------------+
// | Copyright (c) 2006, Anish Mistry                                      |
// | All rights reserved.                                                  |
// |                                                                       |
// | Redistribution and use in source and binary forms, with or without    |
// | modification, are permitted provided that the following conditions    |
// | are met:                                                              |
// |                                                                       |
// | o Redistributions of source code must retain the above copyright      |
// |   notice, this list of conditions and the following disclaimer.       |
// | o Redistributions in binary form must reproduce the above copyright   |
// |   notice, this list of conditions and the following disclaimer in the |
// |   documentation and/or other materials provided with the distribution.|
// |                                                                       |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
// |                                                                       |
// +-----------------------------------------------------------------------+
// | Author: Anish Mistry <hide@address.com>                     |
// +-----------------------------------------------------------------------+

require_once("password.inc.php");
require_once('./Sieve.php');
require_once('PHPUnit2/Framework/TestCase.php');

class SieveTest extends PHPUnit2_Framework_TestCase
{
	// contains the object handle of the string class
	protected $fixture;
	
	protected function setUp()
	{
		// create a new instance of Net_Sieve
		$this->fixture = new Net_Sieve();
		$this->scripts = array();
		$this->scripts['test script1'] = "require \"fileinto\";\n\rif header :contains \"From\" \"@cnba.uba.ar\" \n\r{fileinto \"INBOX.Test1\";}\r\nelse \r\n{fileinto \"INBOX\";}";
		$this->scripts['test script2'] = "require \"fileinto\";\n\rif header :contains \"From\" \"@cnba.uba.ar\" \n\r{fileinto \"INBOX.Test\";}\r\nelse \r\n{fileinto \"INBOX\";}";
		$this->scripts['test script3'] = "require \"vacation\";\nvacation\n:days 7\n:addresses [\"hide@address.com\"]\n:subject \"This is a test\"\n\"I'm on my holiday!\nsadfafs\";";
		$this->scripts['test script4'] = file_get_contents("largescript.siv");
		// clear all the scripts in the account
		$this->login();
		$scripts = $this->fixture->listScripts();
		foreach($scripts as $script)
		{
			$this->fixture->removeScript($script);
		}
		$this->logout();
	}
	
	protected function tearDown()
	{
		// delete your instance
		unset($this->fixture);
	}
	
	protected function login()
	{
		$result = $this->fixture->connect(HOST , PORT);
		$this->assertTrue($result,"Can not connect");
		$result = $this->fixture->login(USERNAME, PASSWORD  , null , '', false );
		$this->assertTrue($result,"Can not login");
	}

	protected function logout()
	{
		$result = $this->fixture->disconnect();
		$this->assertTrue(!PEAR::isError($result),"Error on disconnect");
	}

	public function testConnect()
	{
		$result = $this->fixture->connect(HOST , PORT);
		$this->assertTrue($result,"Can not connect");
	}
	
	public function testLogin()
	{
		$result = $this->fixture->connect(HOST , PORT);
		$this->assertTrue($result,"Can not connect");
		$result = $this->fixture->login(USERNAME, PASSWORD  , null , '', false );
		$this->assertTrue($result,"Can not login");
	}

	public function testDisconnect()
	{
		$result = $this->fixture->connect(HOST , PORT);
		$this->assertTrue(!PEAR::isError($result),"Can not connect");
		$result = $this->fixture->login(USERNAME, PASSWORD  , null , '', false );
		$this->assertTrue(!PEAR::isError($result),"Can not login");
		$result = $this->fixture->disconnect();
		$this->assertTrue(!PEAR::isError($result),"Error on disconnect");
	}

	public function testListScripts()
	{
		$this->login();
		$scripts = $this->fixture->listScripts();
		$this->logout();

		$this->assertTrue(!PEAR::isError($scripts),"Can not list scripts");
	}

	public function testInstallScript()
	{
		$this->login();
		// first script
		$scriptname = "test script1";
		$before_scripts = $this->fixture->listScripts();
		$result = $this->fixture->installScript( $scriptname, $this->scripts[$scriptname]);
		$this->assertTrue(!PEAR::isError($result),"Can not install script ".$scriptname);
		$after_scripts = $this->fixture->listScripts();
		$diff_scripts = array_values(array_diff($after_scripts,$before_scripts));
		$this->assertTrue(count($diff_scripts) > 0,"Script not installed");
		$this->assertEquals($scriptname,$diff_scripts[0],0,"Added script has a different name");
		// second script (install and activate)
		$scriptname = "test script2";
		$before_scripts = $this->fixture->listScripts();
		$result = $this->fixture->installScript( $scriptname, $this->scripts[$scriptname], true);
		$this->assertTrue(!PEAR::isError($result),"Can not install script ".$scriptname);
		$after_scripts = $this->fixture->listScripts();
		$diff_scripts = array_values(array_diff($after_scripts,$before_scripts));
		$this->assertTrue(count($diff_scripts) > 0,"Script not installed");
		$this->assertEquals($scriptname,$diff_scripts[0],0,"Added script has a different name");
		$active_script = $this->fixture->getActive();
		$this->assertEquals($scriptname,$active_script,0,"Added script has a different name");
		$this->logout();
	}

	public function testInstallScriptLarge()
	/*
	There is a good chance that this test will fail since most servers have a 32KB limit
	on uploaded scripts.
	*/
	{
		$this->login();
		// first script
		$scriptname = "test script4";
		$before_scripts = $this->fixture->listScripts();
		$result = $this->fixture->installScript( $scriptname, $this->scripts[$scriptname]);
		$this->assertTrue(!PEAR::isError($result),"Unable to upload large script");
		$after_scripts = $this->fixture->listScripts();
		$diff_scripts = array_diff($before_scripts,$after_scripts);
		$this->assertEquals($scriptname,$diff_scripts[0],0,"Added script has a different name");
		$this->logout();
	}

	public function testGetScript()
	{
		$this->login();
		// first script
		$scriptname = "test script1";
		$before_scripts = $this->fixture->listScripts();
		$result = $this->fixture->installScript( $scriptname, $this->scripts[$scriptname]);
		$this->assertTrue(!PEAR::isError($result),"Can not install script ".$scriptname);
		$after_scripts = $this->fixture->listScripts();
		$diff_scripts = array_values(array_diff($after_scripts,$before_scripts));
		$this->assertTrue(count($diff_scripts) > 0);
		$this->assertEquals($scriptname,$diff_scripts[0],0,"Added script has a different name");
		$script = $this->fixture->getScript($scriptname);
		$this->assertEquals(trim($this->scripts[$scriptname]),trim($script),0,"Script installed it not the same script retrieved");
		$this->logout();
	}

	public function testGetActive()
	{
		$this->login();
		$active_script = $this->fixture->getActive();
		$this->assertTrue(!PEAR::isError($active_script),"Error getting the active script");
		$this->logout();
	}

	public function testSetActive()
	{
		$scriptname = "test script1";
		$this->login();
		$result = $this->fixture->installScript( $scriptname, $this->scripts[$scriptname]);
		$result = $this->fixture->setActive($scriptname);
		$this->assertTrue(!PEAR::isError($result),"Can not set active script");
		$active_script = $this->fixture->getActive();
		$this->assertEquals($scriptname,$active_script,0,"Active script does not match");

		// test for non-existant script
		$result = $this->fixture->setActive("non existant script");
		$this->assertTrue(PEAR::isError($result));
		$this->logout();
	}

	public function testRemoveScript()
	{
		$scriptname = "test script1";
		$this->login();
		$result = $this->fixture->installScript( $scriptname, $this->scripts[$scriptname]);
		$result = $this->fixture->removeScript($scriptname);
		$this->assertTrue(!PEAR::isError($result),"Error removing active script");
		$this->logout();
	}
}
?>
Return current item: Net_Sieve