<?php
require_once(dirname(__FILE__).'/BaseTest.php');

/**
 * @package System.DataAccess.SQLMap
 */
class ResultClassTest extends BaseTest
{
	function __construct()
	{
		parent::__construct();
		$this->initSqlMap();
	}

	/**
	 * Test a boolean resultClass
	 */
	function testBoolean() 
	{
		$bit = $this->sqlmap->queryForObject("GetBoolean", 1);

		$this->assertEquals(true, $bit);
	}

	/**
	 * Test a boolean implicit resultClass
	 */
	function testBooleanWithoutResultClass() 
	{
		$bit = (boolean)$this->sqlmap->queryForObject("GetBooleanWithoutResultClass", 1);

		$this->assertEquals(true, $bit);
	}

	/**
	 * Test a byte resultClass
	 */
	function testByte() 
	{
		$letter = $this->sqlmap->queryForObject("GetByte", 1);

		$this->assertEquals(155, (int)$letter);
	}

	/**
	 * Test a byte implicit resultClass
	 */
	function testByteWithoutResultClass() 
	{
		$letter = $this->sqlmap->queryForObject("GetByteWithoutResultClass", 1);

		$this->assertEquals(155, (int)$letter);
	}

	/**
	 * Test a char resultClass
	 */
	function testChar() 
	{
		$letter = $this->sqlmap->queryForObject("GetChar", 1);

		$this->assertEquals('a', trim($letter));
	}

	/**
	 * Test a char implicit resultClass
	 */
	function testCharWithoutResultClass() 
	{
		$letter = $this->sqlmap->queryForObject("GetCharWithoutResultClass", 1);

		$this->assertEquals('a', trim($letter));
	}

	/**
	 * Test a DateTime resultClass
	 */
	function testDateTime() 
	{
		$orderDate = $this->sqlmap->queryForObject("GetDate", 1);

		$date = @mktime(8, 15, 00, 2, 15, 2003);

		$this->assertEquals($date, $orderDate->getTimeStamp());
	}

	/**
	 * Test a DateTime implicit resultClass
	 */
	function testDateTimeWithoutResultClass() 
	{
		$date = $this->sqlmap->queryForObject("GetDateWithoutResultClass", 1);
		$orderDate = new TDateTime;
		$orderDate->setDateTime($date);
		$date = @mktime(8, 15, 00, 2, 15, 2003);

		$this->assertEquals($date, $orderDate->getTimeStamp());
	}

	/**
	 * Test a decimal resultClass
	 */
	function testDecimal() 
	{
		$price = $this->sqlmap->queryForObject("GetDecimal", 1);

		$this->assertEquals(1.56, $price);
	}

	/**
	 * Test a decimal implicit resultClass
	 */
	function testDecimalWithoutResultClass() 
	{
		$price = $this->sqlmap->queryForObject("GetDecimalWithoutResultClass", 1);

		$this->assertEquals(1.56, (float)$price);
	}

	/**
	 * Test a double resultClass
	 */
	function testDouble() 
	{
		$price = $this->sqlmap->queryForObject("GetDouble", 1);

		$this->assertEquals(99.5, $price);
	}

	/**
	 * Test a double implicit resultClass
	 */
	 
	function testDoubleWithoutResultClass() 
	{
		$price = $this->sqlmap->queryForObject("GetDoubleWithoutResultClass", 1);

		$this->assertEquals(99.5, (float)$price);
	}

	/**
	 * IBATISNET-25 Error applying ResultMap when using 'Guid' in resultClass
	 */
/*	function testGuid() 
	{
		Guid newGuid = new Guid("CD5ABF17-4BBC-4C86-92F1-257735414CF4");

		Guid guid = (Guid) $this->sqlmap->queryForObject("GetGuid", 1);

		$this->assertEquals(newGuid, guid);
	}
*/

	/**
	 * Test a Guid implicit resultClass
	 */ 
/*	function testGuidWithoutResultClass()
	{
		Guid newGuid = new Guid("CD5ABF17-4BBC-4C86-92F1-257735414CF4");

		string guidString = Convert.ToString($this->sqlmap->queryForObject("GetGuidWithoutResultClass", 1));

		Guid guid = new Guid(guidString);

		$this->assertEquals(newGuid, guid);
	}
*/
	/**
	 * Test a int16 resultClass (integer in PHP)
	 */
	 
	function testInt16() 
	{
		$integer = $this->sqlmap->queryForObject("GetInt16", 1);

		$this->assertEquals(32111, $integer);
	}

	/**
	 * Test a int16 implicit resultClass (integer in PHP)
	 */
	 
	function testInt16WithoutResultClass() 
	{
		$integer = $this->sqlmap->queryForObject("GetInt16WithoutResultClass", 1);

		$this->assertEquals(32111, (int)$integer);
	}

	/**
	 * Test a int 32 resultClass (integer in PHP)
	 */
	 

	function testInt32() 
	{
		$integer = $this->sqlmap->queryForObject("GetInt32", 1);

		$this->assertEquals(999999, $integer);
	}

	/**
	 * Test a int 32 implicit resultClass (integer in PHP)
	 */
	 

	function testInt32WithoutResultClass() 
	{
		$integer = $this->sqlmap->queryForObject("GetInt32WithoutResultClass", 1);

		$this->assertEquals(999999, (int)$integer);
	}

	/**
	 * Test a int64 resultClass (float in PHP)
	 */
	 
	function testInt64() 
	{
		$bigInt = $this->sqlmap->queryForObject("GetInt64", 1);

		$this->assertEquals(9223372036854775800, $bigInt);
	}

	/**
	 * Test a int64 implicit resultClass (float in PHP)
	 */
	 
	function testInt64WithoutResultClass() 
	{
		$bigInt = $this->sqlmap->queryForObject("GetInt64WithoutResultClass", 1);

		$this->assertEquals(9223372036854775800, (double)$bigInt);
	}

	/**
	 * Test a single/float resultClass
	 */
	 
	function testSingle() 
	{
		$price = (float)$this->sqlmap->queryForObject("GetSingle", 1);

		$this->assertEquals(92233.5, $price);
	}

	/**
	 * Test a single/float implicit resultClass
	 */
	 
	function testSingleWithoutResultClass() 
	{
		$price = $this->sqlmap->queryForObject("GetSingleWithoutResultClass", 1);

		$this->assertEquals(92233.5, (float)$price);
	}

	/**
	 * Test a string resultClass
	 */
	 
	function testString() 
	{
		$cardType = $this->sqlmap->queryForObject("GetString", 1);

		$this->assertEquals("VISA", $cardType);
	}

	/**
	 * Test a string implicit resultClass
	 */
	 
	function testStringWithoutResultClass() 
	{
		$cardType = $this->sqlmap->queryForObject("GetStringWithoutResultClass", 1);

		$this->assertEquals("VISA", $cardType);
	}
/**/
}

?>