<?php
/**
 * ActiveRatingListTestCase.php
 * 
 * @author Bradley Booms <Bradley.Booms@nsighttel.com>
 * @version Creation Date: Oct 22, 2008
 */

/**
 * ActiveRatingListTestCase.php class
 * 
 * 
 * 
 * Properties
 * -
 * 
 * @author Bradley Booms <Bradley.Booms@nsighttel.com>
 * @version Modified Date: Oct 22, 2008
 * 
 * Modifications:
 */
class ActiveRatingListTestCase extends SeleniumTestCase
{
	function testCheckBoxes()
	{
		// Verify we're on the right page.
		$this->open("active-controls/index.php?page=ActiveRatingListCheckBoxesTest");
		$this->verifyTextPresent("TActiveRatingList Check Boxes Test Case");
		$this->assertCheckBoxes("RatingList", array(2), 6);
		
		// Change the list and make sure the radio buttons get updated properly.
		$this->clickTD("RatingList_c4");
		$this->pause(800);
		$this->assertCheckBoxes("RatingList", array(4), 6);
		
		$this->clickTD("RatingList_c2");
		$this->pause(800);
		$this->assertCheckBoxes("RatingList", array(2), 6);
	}

	function testRating()
	{
		// Verify we're on the right page.
		$this->open("active-controls/index.php?page=ActiveRatingListRatingTest");
		$this->verifyTextPresent("TActiveRatingList Rating Test Case");
		
		// Check the list, make sure it starts out with 5 stars.
		$this->assertText("Status", "Rating: 5");
		
		// Click on 1 star and make sure the Rating property updates.
		$this->clickTD("RatingList_c0");
		$this->pause(800);
		$this->assertText("Status", "Rating: 1");
		
		// Then set Rating to three on the server side and make sure it's correct.
		$this->click("SetRating");
		$this->pause(800);
		$this->assertText("Status", "Rating: 3");
	}

	function testSelectedIndex()
	{
		// Verify we're on the right page.
		$this->open("active-controls/index.php?page=ActiveRatingListSelectedIndexTest");
		$this->verifyTextPresent("TActiveRatingList SelectedIndex Test Case");
		$this->assertText("Status", " SelectedIndex: 1");
		
		// Click on 5 stars and make sure the SelectedIndex property updates.
		$this->clickTD("RatingList_c4");
		$this->pause(800);
		$this->assertText("Status", " SelectedIndex: 4");
		
		// Then set SelectedIndex to 5 on the server side and make sure it's correct.
		$this->click("SetSelectedIndex");
		$this->pause(800);
		$this->assertText("Status", " SelectedIndex: 5");
	}

	function testAutoPostBack()
	{
		// Verify we're on the right page.
		$this->open("active-controls/index.php?page=ActiveRatingListAutoPostBackTest");
		$this->verifyTextPresent("TActiveRatingList AutoPostBack Test Case");
		$this->assertText("Status", "AutoPostback=false");
		
		// Make sure that it doesn't auto post when clicked.
		$this->clickTD("RatingList_c3");
		$this->pause(800);
		$this->assertText("Status", "AutoPostback=false");
		
		// Then submit with an active button and make sure it updates.
		$this->click("Submit");
		$this->pause(800);
		$this->assertText("Status", "4 : Good");
	}

	function testAllowInput()
	{
		// Verify we're on the right page.
		$this->open("active-controls/index.php?page=ActiveRatingListAllowInputTest");
		$this->verifyTextPresent("TActiveRatingList AllowInput Test Case");
		$this->assertText("Status", "AllowInput=false");
		$this->assertCheckBoxes("RatingList", array(3), 6);

		// Make sure that clicking doesn't change anything.
		$this->clickTD("RatingList_c5");
		$this->pause(800);
		$this->assertText("Status", "AllowInput=false");
		$this->assertCheckBoxes("RatingList", array(3), 6);
	}

	function testReadOnly()
	{
		// Verify we're on the right page.
		$this->open("active-controls/index.php?page=ActiveRatingListReadOnlyTest");
		$this->verifyTextPresent("TActiveRatingList ReadOnly Test Case");
		$this->assertText("Status", "ReadOnly=true");
		$this->assertCheckBoxes("RatingList", array(0), 6);

		$this->clickTD("RatingList_c4");
		$this->pause(800);
		$this->assertText("Status", "ReadOnly=true");
		$this->assertCheckBoxes("RatingList", array(0), 6);
		
		// Then set ReadOnly to false, and make sure it works.
		$this->click("Writable");
		$this->pause(800);
		$this->assertText("Status", "ReadOnly=false");
		$this->assertCheckBoxes("RatingList", array(0), 6);
		
		
		$this->clickTD("RatingList_c1");
		$this->pause(800);
		$this->assertText("Status", "2 : Fair");
		$this->assertCheckBoxes("RatingList", array(1), 6);
		
		// Then set ReadOnly to true, and make sure it doesn't work anymore.
		$this->click("ReadOnly");
		$this->pause(800);
		$this->assertText("Status", "ReadOnly=true");
		$this->assertCheckBoxes("RatingList", array(1), 6);
		
		
		$this->clickTD("RatingList_c2");
		$this->pause(800);
		$this->assertText("Status", "ReadOnly=true");
		$this->assertCheckBoxes("RatingList", array(1), 6);
	}

	function testEnabled()
	{
		// Verify we're on the right page.
		$this->open("active-controls/index.php?page=ActiveRatingListEnabledTest");
		$this->verifyTextPresent("TActiveRatingList Enabled Test Case");
		$this->assertText("Status", "Enabled=false");
		$this->assertCheckBoxes("RatingList", array(5), 6);

		$this->clickTD("RatingList_c4");
		$this->pause(800);
		$this->assertText("Status", "Enabled=false");
		$this->assertCheckBoxes("RatingList", array(5), 6);
		
		// Then set Enable to true, and make sure it works.
		$this->click("Enable");
		$this->pause(800);
		$this->assertText("Status", "Enabled=true");
		$this->assertCheckBoxes("RatingList", array(5), 6);
		
		
		$this->clickTD("RatingList_c3");
		$this->pause(800);
		$this->assertText("Status", "4 : Good");
		$this->assertCheckBoxes("RatingList", array(3), 6);
		
		// Then set Enable to false, and make sure it doesn't work anymore.
		$this->click("Disable");
		$this->pause(800);
		$this->assertText("Status", "Enabled=false");
		$this->assertCheckBoxes("RatingList", array(3), 6);
		
		
		$this->clickTD("RatingList_c5");
		$this->pause(800);
		$this->assertText("Status", "Enabled=false");
		$this->assertCheckBoxes("RatingList", array(3), 6);
	}
		
	function testHoverCaption()
	{
		// Verify we're on the right page.
		$this->open("active-controls/index.php?page=ActiveRatingListHoverCaptionTest");
		$this->verifyTextPresent("TActiveRatingList Hover Caption Test Case");
		$this->assertText("Status", "CaptionID='Status'");
		$this->assertElementPresent("//input[@id='RatingList_c0']/../..[contains(@class, 'rating_selected')]");
		$this->assertElementPresent("//input[@id='RatingList_c1']/../..[contains(@class, 'rating_selected')]");
		$this->assertElementPresent("//input[@id='RatingList_c2']/../..[contains(@class, 'rating_selected')]");
		$this->assertElementPresent("//input[@id='RatingList_c3']/../..[contains(@class, 'rating_half')]");
		$this->assertElementPresent("//input[@id='RatingList_c3']/../..[contains(@class, 'rating')]");
		$this->assertElementPresent("//input[@id='RatingList_c4']/../..[contains(@class, 'rating')]");
		$this->assertElementPresent("//input[@id='RatingList_c5']/../..[contains(@class, 'rating')]");
		
		$this->mouseOver("//input[@id='RatingList_c4']/../../");
		$this->assertText("Status", "Excellent");
		$this->assertElementPresent("//input[@id='RatingList_c0']/../..[contains(@class, 'rating_hover')]");
		$this->assertElementPresent("//input[@id='RatingList_c1']/../..[contains(@class, 'rating_hover')]");
		$this->assertElementPresent("//input[@id='RatingList_c2']/../..[contains(@class, 'rating_hover')]");
		$this->assertElementPresent("//input[@id='RatingList_c3']/../..[contains(@class, 'rating_hover')]");
		$this->assertElementPresent("//input[@id='RatingList_c4']/../..[contains(@class, 'rating_hover')]");
		$this->assertElementNotPresent("//input[@id='RatingList_c5']/../..[contains(@class, 'rating_hover')]");
		$this->assertElementPresent("//input[@id='RatingList_c5']/../..[contains(@class, 'rating')]");
		
		$this->mouseOut("//input[@id='RatingList_c4']/../../");
		$this->assertText("Status", "CaptionID='Status'");
		$this->assertElementPresent("//input[@id='RatingList_c0']/../..[contains(@class, 'rating_selected')]");
		$this->assertElementPresent("//input[@id='RatingList_c1']/../..[contains(@class, 'rating_selected')]");
		$this->assertElementPresent("//input[@id='RatingList_c2']/../..[contains(@class, 'rating_selected')]");
		$this->assertElementNotPresent("//input[@id='RatingList_c3']/../..[contains(@class, 'rating_selected')]");
		$this->assertElementPresent("//input[@id='RatingList_c3']/../..[contains(@class, 'rating')]");
		$this->assertElementPresent("//input[@id='RatingList_c4']/../..[contains(@class, 'rating')]");
		$this->assertElementPresent("//input[@id='RatingList_c5']/../..[contains(@class, 'rating')]");
		
		
		$this->mouseOver("//input[@id='RatingList_c1']/../../");
		$this->assertText("Status", "Fair");
		
		$this->click("//input[@id='RatingList_c1']/../../");
		$this->pause(800);
		$this->assertText("Status", "2 : Fair");
		$this->assertElementPresent("//input[@id='RatingList_c0']/../..[contains(@class, 'rating_selected')]");
		$this->assertElementPresent("//input[@id='RatingList_c1']/../..[contains(@class, 'rating_selected')]");
		$this->assertElementNotPresent("//input[@id='RatingList_c2']/../..[contains(@class, 'rating_selected')]");
		$this->assertElementPresent("//input[@id='RatingList_c2']/../..[contains(@class, 'rating')]");
		$this->assertElementPresent("//input[@id='RatingList_c3']/../..[contains(@class, 'rating')]");
		$this->assertElementPresent("//input[@id='RatingList_c4']/../..[contains(@class, 'rating')]");
		$this->assertElementPresent("//input[@id='RatingList_c5']/../..[contains(@class, 'rating')]");
	}
	
	function clickTD($clientID){
		$this->click("//input[@id='{$clientID}']/../..");
	}

	function assertCheckBoxes($clientID, $checks, $total = 5)
	{
		for($i = 0; $i < $total; $i++)
		{
			if(in_array($i, $checks))
				$this->assertChecked("{$clientID}_c{$i}");
			else
				$this->assertNotChecked("{$clientID}_c{$i}");
		}
	}
}
?>