<?php

require_once('db/criteria.class.phps');

class 
TestCriteria extends UnitTestCase    {

    function 
testBaseCriteria()    {
        
$obj    =&    Criteria::isEqualTo("field""value");
        
$this->assertIsA($obj"criteria"); 
        
$this->assertTrue(method_exists($obj"generatesql") );
    }

    function 
testOrderByCriteria()    {
        
$obj    =&    Criteria::orderBy("field""DIRECTION");
        
$this->assertIsA($obj"orderbycriteria");
        
$this->assertTrue(method_exists($obj"generatesql") );
        
$this->assertEqual($obj->generateSql(), "`field` ASC");
        
        
$obj2    =&    Criteria::orderBy("field""desc");
        
$this->assertEqual($obj2->generateSql(), '`field` DESC');
    }

    function 
testSearchCriteria()    {
        
$data    =    array('this''is''my wonderful');
        
$obj    =&    Criteria::isLike("field"$data);
        
$this->assertIsA($obj"searchcriteria");
        
$this->assertTrue(method_exists($obj'generatesql') );
        
$this->assertEqual($obj->generateSql(), "(`field` LIKE '%this%' OR `field` LIKE '%is%' OR `field` LIKE '%my wonderful%')");
    }

    function 
testSetFieldsCriteria()    {
        
$obj    =&    Criteria::setFields(array("field1" => "value1""field2" => "field2 + 1") );
        
$this->assertIsA($obj"setfieldscriteria");
        
$this->assertTrue(method_exists($obj"generatesql") );
        
$this->assertEqual($obj->generateSql(), "`field1` = 'value1', `field2` = `field2` + 1");
    }

    function 
testBaseCriteriaArray()    {
        
$obj    =&    Criteria::isEqualTo("field", array("one""two") );
        
$this->assertEqual($obj->generateSql(), "(`field` = 'one' OR `field` = 'two')");
    }

    function 
testIsEqualTo()    {
        
$obj    =&    Criteria::isEqualTo("field""value");
        
$this->assertEqual($obj->generateSql(), "`field` = 'value'");
    }

    function 
testIsNotEqualTo()    {
        
$obj    =&    Criteria::isNotEqualTo("field""value");
        
$this->assertEqual($obj->generateSql(), "`field` != 'value'");
    }
    
    function 
testIsLessThan()    {
        
$obj    =&    Criteria::isLessThan("field""value");
        
$this->assertEqual($obj->generateSql(), "`field` < 'value'");
    }

    function 
testIsGreaterThan()    {
        
$obj    =&    Criteria::isGreaterThan("field""value");
        
$this->assertEqual($obj->generateSql(), "`field` > 'value'");
    }

}

?>