| 
<?php
// undoTestCases.php
 require_once('class.undo.php');
 require_once('PEAR/PHPUnit.php');
 $undoTestId = -1;
 $undoDummyId = -1;
 
 class undoTestCases extends PHPUnit_TestCase
 {
 
 var $t_conf = 'jsrs-adr-php/config.inc.php';    // test conf : the db configuration file
 var $t_undo;    // test dbUndo object
 var $test_id = 0;    // a record created by the testcase
 var $pc_applied = false;
 // constructor of the test suite
 function undoTestCases($name, $fconf='config.inc.php') {
 $this->PHPUnit_TestCase($name);
 if (!empty($fconf) and file_exists($fconf))
 $this->t_conf = $fconf;    // a config.inc.php file
 //$this->peri_constructor();
 }
 
 function peri_constructor() {
 global $undoTestId;
 if ($this->pc_applied)
 return;
 $this->pc_applied = true;
 $this->t_undo = new dbUndo();
 $this->t_undo->verb = 1;
 $this->t_undo->init($this->t_conf);
 // connect to the database
 $this->t_undo->dbConnect();
 // create data ... in the undo_tbl
 $tbl = 'adresse';
 $col = 'rue';
 $data = 'blvd du mail poupoule';
 $new_dum_id = $this->t_undo->mark_dummy_record($tbl);
 $this->t_undo->update_col_dummy($tbl,$new_dum_id,$col,$data);
 $col = 'commune';
 $data = 'REVE sur Plage';
 $this->t_undo->update_col_dummy($tbl,$new_dum_id,$col,$data);
 // apply all these to a new 'real record' in $tbl
 $this->test_id = $this->t_undo->apply_all_recent_updates($tbl,$new_dum_id);
 $undoTestId = $this->test_id;
 }
 // called before the test functions will be executed
 // this function is defined in PHPUnit_TestCase and overwritten
 // here
 function setUp() {
 // create a new instance of dbUndo with the
 // conf t_conf
 
 $this->t_undo = new dbUndo();
 $this->t_undo->init($this->t_conf);
 // connect to the database
 $this->t_undo->dbConnect();
 $this->t_undo->verb = 1;
 
 }
 
 // called after the test functions are executed
 // this function is defined in PHPUnit_TestCase and overwritten
 // here
 function tearDown() {
 // delete the test instance
 unset($this->t_undo);
 }
 // test suite
 function testDbConnect()
 {
 // assume that config.inc.php or the provided fconf is well-defined
 $this->assertTrue($this->t_undo->dbConnect(),'invalid db connect info in ... '.$this->t_conf);
 }
 function testSetup(){
 $this->assertTrue($this->t_undo->setup(),'invalid db setup info ');
 }
 function test_peri_constructor(){
 global $undoTestId;
 $this->peri_constructor();    // check $this->test_id
 $this->assertTrue($undoTestId != 0 ,"test_peri_constructor could not create a real record ");
 }
 function test_check_record(){
 global $undoTestId;
 //-1    adresse
 $tbl = 'adresse';
 $id = $undoTestId;
 $check = $this->t_undo->check_record($tbl,$id, $tbl_keyname='id');
 $this->assertTrue($check ,"check_record detected invalid record table ".$tbl." id: ".$id." ");
 //-2    makes
 
 $tbl = 'makes';
 $id = $undoTestId;
 $check = $this->t_undo->check_record($tbl,$id, $tbl_keyname='id');
 $this->assertFalse($check ,"check_record detected invalid record table ".$tbl." id: ".$id." ");
 
 }
 function test_mark_record(){
 global $undoTestId;
 $tbl = 'adresse';
 $id = $undoTestId;
 $check = $this->t_undo->mark_record($tbl,$id, $tbl_keyname='id');
 $this->assertTrue($check ,"mark_record detected invalid record table ".$tbl." id: ".$id." or could not insert the mark in the undo table ");
 }
 function test_mark_dummy_record(){
 $tbl = 'adresse';
 $check = $this->t_undo->mark_dummy_record($tbl);
 $this->assertTrue($check ,"mark_dummy_record detected invalid record table ".$tbl." or could not insert the mark in the undo table ");
 }
 function test_mark_record_upd(){
 global $undoTestId;
 $col = 'rue';
 $this->t_undo->cur_tbl = 'adresse';
 $this->t_undo->cur_id = $undoTestId;
 $check = $this->t_undo->mark_record_upd($col);
 $this->assertTrue($check ,"mark_record_upd detected invalid record column ".$col." or could not insert the mark in the undo table ");
 }
 
 function test_update_col_0(){
 global $undoTestId;
 // test no change case: feed again the old data
 $col = 'rue';
 $this->t_undo->cur_tbl = 'adresse';
 $this->t_undo->cur_id = $undoTestId;
 $old_data = $this->t_undo->mark_record_upd($col);
 $data = $this->t_undo->update_col($col,$old_data);
 $this->assertTrue($data == $old_data ,"update_col(0) detected a change in record column ".$col." or could not insert the mark in the undo table ");
 }
 
 function test_update_col_1(){
 global $undoTestId;
 // test no change case: feed again the old data
 $col = 'rue';
 $this->t_undo->cur_tbl = 'adresse';
 $this->t_undo->cur_id = $undoTestId;
 $old_data = $this->t_undo->mark_record_upd($col);
 $new_data = str_shuffle($old_data);
 $data = $this->t_undo->update_col($col,$new_data);
 $this->assertTrue($data != $new_data && $old_data == $data,"update_col(1) detected no change in record column ".$col." or could not insert the mark in the undo table ");
 }
 function test_undo_all_recent_updates(){
 global $undoTestId;
 $tbl = 'adresse';
 $id = $undoTestId;
 $check = $this->t_undo->undo_all_recent_updates($tbl,$id);    // $check should be the nbr of rows involved in these recent updates
 $this->assertTrue($check ,"undo_all_recent_updates detected no change in record column ".$col." or could not insert the mark in the undo table ");
 }
 function test_update_col_dummy(){
 global $undoDummyId;
 $tbl = 'adresse';
 $undoDummyId = $this->t_undo->mark_dummy_record($tbl);    // create a dummy undo-record
 echo "mark_dummy_record ".$undoDummyId." created!<br />\n";
 $col = 'rue';
 $data = 'blvd du cours pilpoule';
 $check = $this->t_undo->update_col_dummy($tbl,$undoDummyId,$col,$data);
 $this->assertTrue($check==$data ,"update_col_dummy detected a change in record column ".$col." or could not insert the update in the undo table ");
 }
 function test_undo_all_recent_col_updates(){
 global $undoTestId;
 $tbl = 'adresse';
 $id = $undoTestId;
 $col = 'rue';
 $check = $this->t_undo->undo_all_recent_col_updates($tbl,$id,$col);
 $this->assertTrue($check>0 ,"undo_all_recent_col_updates did not or could not undo changes in record ".$id." (column ".$col.") or could not insert the update in the undo table ");
 }
 function test_apply_updates(){
 global $undoTestId;
 $field_values = array( 'rue' => 'blvd du mail poupoule',
 'commune' => 'REVE de cinglés'
 );
 $tbl = 'adresse';
 $id = $undoTestId;
 $check = $this->t_undo->apply_updates($tbl,$id, $field_values);
 $this->assertTrue($check ,"apply_updates did not or could not apply changes to the table: ".$tbl." record: ".$id);
 }
 function test_apply_all_recent_updates(){
 global $undoDummyId;
 $tbl = 'adresse';
 $id = $undoDummyId;    //created by test_update_col_dummy
 $check = $this->t_undo->apply_all_recent_updates($tbl,$id);
 $this->assertTrue($check ,"apply_all_recent_updates did not or could not find changes to the table: ".$tbl." record: ".$id);
 }
 function test_delete_recent_undo_data(){
 // delete all the undo data introduced by this test suite
 $n_test = 4; // tests generate inserts, 17 generate tags '--#tag#--'
 for($i=0;$i<$n_test;$i++){
 $check = $this->t_undo->delete_recent_undo_data();
 $this->assertTrue($check ,"delete_recent_undo_data:  could not find and remove undo records from the undo table ");
 }
 }
 /*
 function test_re_apply_updates(){
 $field_values = array( 'rue' => 'rue Riboutté',
 'commune' => 'Paris'
 );
 $tbl = 'adresse';
 $id = $this->test_id;
 $check = $this->t_undo->apply_updates($tbl,$id, $field_values);
 $this->assertTrue($check ,"apply_updates did not or could not apply changes to the table: ".$tbl." record: ".$id);
 }
 */
 
 
 }
 
 $suite  = new PHPUnit_TestSuite("undoTestCases");
 $result = PHPUnit::run($suite);
 
 echo $result -> toHTML();
 
 ?>
 |