Doxygen and normalize code.

New: add more PHPUnit
This commit is contained in:
Laurent Destailleur 2012-11-15 14:52:19 +01:00
parent 28b4a03432
commit 7c78e1c0f6
9 changed files with 411 additions and 85 deletions

View File

@ -33,8 +33,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
/**
* \class Adherent
* \brief Class to manage members of a foundation
* Class to manage members of a foundation
*/
class Adherent extends CommonObject
{

View File

@ -28,8 +28,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
/**
* \class AdherentType
* \brief Class to manage members type
* Class to manage members type
*/
class AdherentType extends CommonObject
{

View File

@ -28,8 +28,7 @@ include_once DOL_DOCUMENT_ROOT . '/adherents/class/cotisation.class.php';
/**
* \class AdherentStats
* \brief Classe permettant la gestion des stats des adherents
* Class to manage statistics of members
*/
class AdherentStats extends Stats
{

View File

@ -26,8 +26,7 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
/**
* \class Cotisation
* \brief Class to manage subscriptions of foundation members
* Class to manage subscriptions of foundation members
*/
class Cotisation extends CommonObject
{

View File

@ -23,8 +23,7 @@
/**
* \class Bookmark
* \brief Class to manage bookmarks
* Class to manage bookmarks
*/
class Bookmark
{

View File

@ -29,8 +29,7 @@ require_once DOL_DOCUMENT_ROOT .'/core/class/commonobject.class.php';
/**
* \class Contact
* \brief Classe permettant la gestion des contacts
* Class to manage contact/addresses
*/
class Contact extends CommonObject
{

View File

@ -89,6 +89,12 @@ class Holiday extends CommonObject
global $conf, $langs;
$error=0;
$now=dol_now();
// Check parameters
if (empty($this->fk_user) || ! is_numeric($this->fk_user) || $this->fk_user < 0) { $this->error="ErrorBadParameter"; return -1; }
if (empty($this->fk_validator) || ! is_numeric($this->fk_validator) || $this->fk_validator < 0) { $this->error="ErrorBadParameter"; return -1; }
// Insert request
$sql = "INSERT INTO ".MAIN_DB_PREFIX."holiday(";
@ -103,22 +109,13 @@ class Holiday extends CommonObject
$sql.= ") VALUES (";
// User
if(!empty($this->fk_user)) {
$sql.= "'".$this->fk_user."',";
} else {
$error++;
}
$sql.= " NOW(),";
$sql.= "'".$this->fk_user."',";
$sql.= " '".$this->db->idate($now)."',";
$sql.= " '".addslashes($this->description)."',";
$sql.= " '".$this->db->idate($this->date_debut)."',";
$sql.= " '".$this->db->idate($this->date_fin)."',";
$sql.= " '1',";
if(is_numeric($this->fk_validator)) {
$sql.= " '".$this->fk_validator."'";
}
else {
$error++;
}
$sql.= " '".$this->fk_validator."'";
$sql.= ")";
@ -183,7 +180,6 @@ class Holiday extends CommonObject
$sql.= " cp.fk_user_cancel,";
$sql.= " cp.detail_refuse";
$sql.= " FROM ".MAIN_DB_PREFIX."holiday as cp";
$sql.= " WHERE cp.rowid = ".$id;
@ -226,12 +222,12 @@ class Holiday extends CommonObject
}
/**
* Liste les congés payés pour un utilisateur
* List holidays for a particular user
*
* @param int $user_id ID de l'utilisateur à lister
* @param string $order Filtrage par ordre
* @param string $filter Filtre de séléction
* @return int -1 si erreur, 1 si OK et 2 si pas de résultat
* @param int $user_id ID of user to list
* @param string $order Sort order
* @param string $filter SQL Filter
* @return int -1 if KO, 1 if OK, 2 if no result
*/
function fetchByUser($user_id,$order='',$filter='')
{
@ -321,11 +317,11 @@ class Holiday extends CommonObject
}
/**
* Liste les congés payés de tout les utilisateurs
* List all holidays of all users
*
* @param string $order Filtrage par ordre
* @param string $filter Filtre de séléction
* @return int -1 si erreur, 1 si OK et 2 si pas de résultat
* @param string $order Sort order
* @param string $filter SQL Filter
* @return int -1 if KO, 1 if OK, 2 if no result
*/
function fetchAll($order,$filter)
{
@ -1595,5 +1591,27 @@ class Holiday extends CommonObject
}
}
/**
* Initialise an instance with random values.
* Used to build previews or test instances.
* id must be 0 if object instance is a specimen.
*
* @return void
*/
function initAsSpecimen()
{
global $user,$langs;
// Initialise parameters
$this->id=0;
$this->specimen=1;
$this->fk_user=1;
$this->description='SPECIMEN description';
$this->date_debut=dol_now();
$this->date_fin=dol_now()+(24*3600);
$this->fk_validator=1;
}
}
?>

View File

@ -574,6 +574,9 @@ if ($action == 'confirm_cancel' && $_GET['confirm'] == 'yes')
* View
****************************************************/
$form = new Form($db);
llxHeader(array(),$langs->trans('CPTitreMenu'));
if (empty($id) || $action == 'add' || $action == 'request')
@ -621,7 +624,6 @@ if (empty($id) || $action == 'add' || $action == 'request')
dol_htmloutput_mesg('',$errors,'error');
}
$html = new Form($db);
$cp = new Holiday($db);
$delayForRequest = $cp->getConfCP('delayForRequest');
@ -678,10 +680,10 @@ if (empty($id) || $action == 'add' || $action == 'request')
print '<td>';
// Si la demande ne vient pas de l'agenda
if(!isset($_GET['datep'])) {
$html->select_date(-1,'date_debut_');
$form->select_date(-1,'date_debut_');
} else {
$tmpdate = dol_mktime(0, 0, 0, GETPOST('datepmonth'), GETPOST('datepday'), GETPOST('datepyear'));
$html->select_date($tmpdate,'date_debut_');
$form->select_date($tmpdate,'date_debut_');
}
print '</td>';
print '</tr>';
@ -690,10 +692,10 @@ if (empty($id) || $action == 'add' || $action == 'request')
print '<td>';
// Si la demande ne vient pas de l'agenda
if(!isset($_GET['datep'])) {
$html->select_date(-1,'date_fin_');
$form->select_date(-1,'date_fin_');
} else {
$tmpdate = dol_mktime(0, 0, 0, GETPOST('datefmonth'), GETPOST('datefday'), GETPOST('datefyear'));
$html->select_date($tmpdate,'date_fin_');
$form->select_date($tmpdate,'date_fin_');
}
print '</td>';
print '</tr>';
@ -706,7 +708,7 @@ if (empty($id) || $action == 'add' || $action == 'request')
$valideurarray = $validator->listUsersForGroup();
print '<td>';
print $html->select_dolusers($validator->id, "valideur", 1, "", 0, $valideurarray);
print $form->select_dolusers($validator->id, "valideur", 1, "", 0, $valideurarray);
print '</td>';
print '</tr>';
print '<tr>';
@ -798,44 +800,39 @@ else
{
if ($action == 'delete' && $cp->statut == 1) {
if($user->rights->holiday->delete) {
$html = new Form($db);
$ret=$html->form_confirm("fiche.php?id=".$_GET['id'],$langs->trans("TitleDeleteCP"),$langs->trans("ConfirmDeleteCP"),"confirm_delete", '', 0, 1);
if($user->rights->holiday->delete)
{
$ret=$form->form_confirm("fiche.php?id=".$_GET['id'],$langs->trans("TitleDeleteCP"),$langs->trans("ConfirmDeleteCP"),"confirm_delete", '', 0, 1);
if ($ret == 'html') print '<br />';
}
}
// Si envoi en validation
if ($action == 'sendToValidate' && $cp->statut == 1 && $userID == $cp->fk_user) {
$html = new Form($db);
$ret=$html->form_confirm("fiche.php?id=".$_GET['id'],$langs->trans("TitleToValidCP"),$langs->trans("ConfirmToValidCP"),"confirm_send", '', 0, 1);
if ($action == 'sendToValidate' && $cp->statut == 1 && $userID == $cp->fk_user)
{
$ret=$form->form_confirm("fiche.php?id=".$_GET['id'],$langs->trans("TitleToValidCP"),$langs->trans("ConfirmToValidCP"),"confirm_send", '', 0, 1);
if ($ret == 'html') print '<br />';
}
// Si validation de la demande
if ($action == 'valid' && $cp->statut == 2 && $userID == $cp->fk_validator) {
$html = new Form($db);
$ret=$html->form_confirm("fiche.php?id=".$_GET['id'],$langs->trans("TitleValidCP"),$langs->trans("ConfirmValidCP"),"confirm_valid", '', 0, 1);
if ($action == 'valid' && $cp->statut == 2 && $userID == $cp->fk_validator)
{
$ret=$form->form_confirm("fiche.php?id=".$_GET['id'],$langs->trans("TitleValidCP"),$langs->trans("ConfirmValidCP"),"confirm_valid", '', 0, 1);
if ($ret == 'html') print '<br />';
}
// Si refus de la demande
if ($action == 'refuse' && $cp->statut == 2 && $userID == $cp->fk_validator) {
$html = new Form($db);
if ($action == 'refuse' && $cp->statut == 2 && $userID == $cp->fk_validator)
{
$array_input = array(array('type'=>"text",'label'=>"Entrez ci-dessous un motif de refus :",'name'=>"detail_refuse",'size'=>"50",'value'=>""));
$ret=$html->form_confirm("fiche.php?id=".$_GET['id']."&action=confirm_refuse",$langs->trans("TitleRefuseCP"),"","confirm_refuse",$array_input,"",0);
$ret=$form->form_confirm("fiche.php?id=".$_GET['id']."&action=confirm_refuse",$langs->trans("TitleRefuseCP"),"","confirm_refuse",$array_input,"",0);
if ($ret == 'html') print '<br />';
}
// Si annulation de la demande
if ($action == 'cancel' && $cp->statut == 2 && $userID == $cp->fk_validator) {
$html = new Form($db);
$ret=$html->form_confirm("fiche.php?id=".$_GET['id'],$langs->trans("TitleCancelCP"),$langs->trans("ConfirmCancelCP"),"confirm_cancel", '', 0, 1);
if ($action == 'cancel' && $cp->statut == 2 && $userID == $cp->fk_validator)
{
$ret=$form->form_confirm("fiche.php?id=".$_GET['id'],$langs->trans("TitleCancelCP"),$langs->trans("ConfirmCancelCP"),"confirm_cancel", '', 0, 1);
if ($ret == 'html') print '<br />';
}
@ -849,8 +846,6 @@ else
print '<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$_GET['id'].'">'."\n";
print '<input type="hidden" name="action" value="update"/>'."\n";
print '<input type="hidden" name="holiday_id" value="'.$_GET['id'].'" />'."\n";
$html = new Form($db);
}
print '<table class="border" width="100%">';
@ -873,7 +868,7 @@ else
print '<tr>';
print '<td>'.$langs->trans('DateDebCP').'</td>';
print '<td>';
$html->select_date($cp->date_debut,'date_debut_');
$form->select_date($cp->date_debut,'date_debut_');
print '</td>';
print '</tr>';
}
@ -887,7 +882,7 @@ else
print '<tr>';
print '<td>'.$langs->trans('DateFinCP').'</td>';
print '<td>';
$html->select_date($cp->date_fin,'date_fin_');
$form->select_date($cp->date_fin,'date_fin_');
print '</td>';
print '</tr>';
}
@ -952,7 +947,7 @@ else
$valideur = $validator->listUsersForGroup();
print '<td>';
$html->select_users($cp->fk_validator,"valideur",1,"",0,$valideur,'');
$form->select_users($cp->fk_validator,"valideur",1,"",0,$valideur,'');
print '</td>';
print '</tr>';
}
@ -982,44 +977,44 @@ else
print '</tbody>';
print '</table>';
dol_fiche_end();
print '<div style="clear: both;"></div>'."\n";
if ($edit)
if ($edit && $user->id == $cp->fk_user && $cp->statut == 1)
{
print '<center>';
print '<br><div align="center">';
if($user->rights->holiday->write && $_GET['action'] == 'edit' && $cp->statut == 1)
{
print '<input type="submit" value="'.$langs->trans("UpdateButtonCP").'" class="button">';
}
print '</center>';
print '</div>';
print '</form>';
}
dol_fiche_end();
if (! $edit)
{
print '<br />';
print '<div style="float: right;">'."\n";
print '<div class="tabsAction">';
// Boutons d'actions
if($user->rights->holiday->write && $_GET['action'] != 'edit' && $cp->statut == 1) {
print '<a href="fiche.php?id='.$_GET['id'].'&action=edit" class="butAction" style="float: left;">'.$langs->trans("EditCP").'</a>';
if($user->rights->holiday->write && $_GET['action'] != 'edit' && $cp->statut == 1)
{
print '<a href="fiche.php?id='.$_GET['id'].'&action=edit" class="butAction">'.$langs->trans("EditCP").'</a>';
}
if($user->rights->holiday->delete && $cp->statut == 1) {
print '<a href="fiche.php?id='.$_GET['id'].'&action=delete" class="butAction" style="float: left;">'.$langs->trans("DeleteCP").'</a>';
if($user->rights->holiday->delete && $cp->statut == 1)
{
print '<a href="fiche.php?id='.$_GET['id'].'&action=delete" class="butAction">'.$langs->trans("DeleteCP").'</a>';
}
if($user->id == $cp->fk_user && $cp->statut == 1) {
print '<a href="fiche.php?id='.$_GET['id'].'&action=sendToValidate" class="butAction" style="float: left;">'.$langs->trans("SendToValidationCP").'</a>';
if($user->id == $cp->fk_user && $cp->statut == 1)
{
print '<a href="fiche.php?id='.$_GET['id'].'&action=sendToValidate" class="butAction">'.$langs->trans("SendToValidationCP").'</a>';
}
// Si le statut est en attente de validation et que le valideur est connecté
if($userID == $cp->fk_validator && $cp->statut == 2) {
print '<a href="fiche.php?id='.$_GET['id'].'&action=valid" class="butAction" style="float: left;">'.$langs->trans("ActionValidCP").'</a>';
print '<a href="fiche.php?id='.$_GET['id'].'&action=refuse" class="butAction" style="float: left;">'.$langs->trans("ActionRefuseCP").'</a>';
print '<a href="fiche.php?id='.$_GET['id'].'&action=cancel" class="butAction" style="float: left;">'.$langs->trans("ActionCancelCP").'</a>';
if($userID == $cp->fk_validator && $cp->statut == 2)
{
print '<a href="fiche.php?id='.$_GET['id'].'&action=valid" class="butAction">'.$langs->trans("ActionValidCP").'</a>';
print '<a href="fiche.php?id='.$_GET['id'].'&action=refuse" class="butAction">'.$langs->trans("ActionRefuseCP").'</a>';
print '<a href="fiche.php?id='.$_GET['id'].'&action=cancel" class="butAction">'.$langs->trans("ActionCancelCP").'</a>';
}
print '</div>';

View File

@ -0,0 +1,319 @@
<?php
/* Copyright (C) 2012 Laurent Destailleur <eldy@users.sourceforge.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* or see http://www.gnu.org/
*/
/**
* \file test/phpunit/HolidayTest.php
* \ingroup test
* \brief PHPUnit test
* \remarks To run this script as CLI: phpunit filename.php
*/
global $conf,$user,$langs,$db;
//define('TEST_DB_FORCE_TYPE','mysql'); // This is to force using mysql driver
require_once 'PHPUnit/Autoload.php';
require_once dirname(__FILE__).'/../../htdocs/master.inc.php';
require_once dirname(__FILE__).'/../../htdocs/holiday/class/holiday.class.php';
$langs->load("dict");
if (empty($user->id))
{
print "Load permissions for admin user nb 1\n";
$user->fetch(1);
$user->getrights();
}
$conf->global->MAIN_DISABLE_ALL_MAILS=1;
/**
* Class for PHPUnit tests
*
* @backupGlobals disabled
* @backupStaticAttributes enabled
* @remarks backupGlobals must be disabled to have db,conf,user and lang not erased.
*/
class HolidayTest extends PHPUnit_Framework_TestCase
{
protected $savconf;
protected $savuser;
protected $savlangs;
protected $savdb;
/**
* Constructor
* We save global variables into local variables
*
* @return HolidayTest
*/
function __construct()
{
//$this->sharedFixture
global $conf,$user,$langs,$db;
$this->savconf=$conf;
$this->savuser=$user;
$this->savlangs=$langs;
$this->savdb=$db;
print __METHOD__." db->type=".$db->type." user->id=".$user->id;
//print " - db ".$db->db;
print "\n";
}
// Static methods
public static function setUpBeforeClass()
{
global $conf,$user,$langs,$db;
$db->begin(); // This is to have all actions inside a transaction even if test launched without suite.
print __METHOD__."\n";
}
public static function tearDownAfterClass()
{
global $conf,$user,$langs,$db;
$db->rollback();
print __METHOD__."\n";
}
/**
* Init phpunit tests
*
* @return void
*/
protected function setUp()
{
global $conf,$user,$langs,$db;
$conf=$this->savconf;
$user=$this->savuser;
$langs=$this->savlangs;
$db=$this->savdb;
print __METHOD__."\n";
}
/**
* End phpunit tests
*
* @return void
*/
protected function tearDown()
{
print __METHOD__."\n";
}
/**
* testHolidayCreate
*
* @return int
*/
public function testHolidayCreate()
{
global $conf,$user,$langs,$db;
$conf=$this->savconf;
$user=$this->savuser;
$langs=$this->savlangs;
$db=$this->savdb;
$localobject=new Holiday($this->savdb);
$localobject->initAsSpecimen();
$result=$localobject->create($user);
print __METHOD__." result=".$result."\n";
$this->assertLessThan($result, 0);
return $result;
}
/**
* testHolidayFetch
*
* @param int $id Id of Holiday
* @return int
* @depends testHolidayCreate
* The depends says test is run only if previous is ok
*/
public function testHolidayFetch($id)
{
global $conf,$user,$langs,$db;
$conf=$this->savconf;
$user=$this->savuser;
$langs=$this->savlangs;
$db=$this->savdb;
$localobject=new Holiday($this->savdb);
$result=$localobject->fetch($id);
print __METHOD__." id=".$id." result=".$result."\n";
$this->assertLessThan($result, 0);
return $localobject;
}
/**
* testHolidayUpdate
*
* @param Holiday $localobject Holiday
* @return int
*
* @depends testHolidayFetch
* The depends says test is run only if previous is ok
*/
public function testHolidayUpdate($localobject)
{
global $conf,$user,$langs,$db;
$conf=$this->savconf;
$user=$this->savuser;
$langs=$this->savlangs;
$db=$this->savdb;
$localobject->oldcopy=dol_clone($localobject);
$localobject->note='New note after update';
//$localobject->note_public='New note public after update';
$localobject->lastname='New name';
$localobject->firstname='New firstname';
$localobject->address='New address';
$localobject->zip='New zip';
$localobject->town='New town';
$localobject->country_id=2;
//$localobject->status=0;
$localobject->phone_pro='New tel pro';
$localobject->phone_perso='New tel perso';
$localobject->phone_mobile='New tel mobile';
$localobject->fax='New fax';
$localobject->email='newemail@newemail.com';
$localobject->jabberid='New im id';
$localobject->default_lang='es_ES';
$result=$localobject->update($localobject->id,$user);
print __METHOD__." id=".$localobject->id." result=".$result."\n";
$this->assertLessThan($result, 0, 'Holiday::update error');
$result=$localobject->update_note($localobject->note);
print __METHOD__." id=".$localobject->id." result=".$result."\n";
$this->assertLessThan($result, 0, 'Holiday::update_note error');
//$result=$localobject->update_note_public($localobject->note_public);
//print __METHOD__." id=".$localobject->id." result=".$result."\n";
//$this->assertLessThan($result, 0);
$newobject=new Holiday($this->savdb);
$result=$newobject->fetch($localobject->id);
print __METHOD__." id=".$localobject->id." result=".$result."\n";
$this->assertLessThan($result, 0, 'Holiday::fetch error');
print __METHOD__." old=".$localobject->note." new=".$newobject->note."\n";
$this->assertEquals($localobject->note, $newobject->note);
//print __METHOD__." old=".$localobject->note_public." new=".$newobject->note_public."\n";
//$this->assertEquals($localobject->note_public, $newobject->note_public);
print __METHOD__." old=".$localobject->lastname." new=".$newobject->lastname."\n";
$this->assertEquals($localobject->lastname, $newobject->lastname);
print __METHOD__." old=".$localobject->firstname." new=".$newobject->firstname."\n";
$this->assertEquals($localobject->firstname, $newobject->firstname);
print __METHOD__." old=".$localobject->address." new=".$newobject->address."\n";
$this->assertEquals($localobject->address, $newobject->address);
print __METHOD__." old=".$localobject->zip." new=".$newobject->zip."\n";
$this->assertEquals($localobject->zip, $newobject->zip);
print __METHOD__." old=".$localobject->town." new=".$newobject->town."\n";
$this->assertEquals($localobject->town, $newobject->town);
print __METHOD__." old=".$localobject->country_id." new=".$newobject->country_id."\n";
$this->assertEquals($localobject->country_id, $newobject->country_id);
print __METHOD__." old=BE new=".$newobject->country_code."\n";
$this->assertEquals('BE', $newobject->country_code);
//print __METHOD__." old=".$localobject->status." new=".$newobject->status."\n";
//$this->assertEquals($localobject->status, $newobject->status);
print __METHOD__." old=".$localobject->phone_pro." new=".$newobject->phone_pro."\n";
$this->assertEquals($localobject->phone_pro, $newobject->phone_pro);
print __METHOD__." old=".$localobject->phone_pro." new=".$newobject->phone_pro."\n";
$this->assertEquals($localobject->phone_perso, $newobject->phone_perso);
print __METHOD__." old=".$localobject->phone_mobile." new=".$newobject->phone_mobile."\n";
$this->assertEquals($localobject->phone_mobile, $newobject->phone_mobile);
print __METHOD__." old=".$localobject->fax." new=".$newobject->fax."\n";
$this->assertEquals($localobject->fax, $newobject->fax);
print __METHOD__." old=".$localobject->email." new=".$newobject->email."\n";
$this->assertEquals($localobject->email, $newobject->email);
print __METHOD__." old=".$localobject->jabberid." new=".$newobject->jabberid."\n";
$this->assertEquals($localobject->jabberid, $newobject->jabberid);
print __METHOD__." old=".$localobject->default_lang." new=".$newobject->default_lang."\n";
$this->assertEquals($localobject->default_lang, $newobject->default_lang);
return $localobject;
}
/**
* testHolidayOther
*
* @param Holiday $localobject Holiday
* @return void
*
* @depends testHolidayUpdate
* The depends says test is run only if previous is ok
*/
public function testHolidayOther($localobject)
{
global $conf,$user,$langs,$db;
$conf=$this->savconf;
$user=$this->savuser;
$langs=$this->savlangs;
$db=$this->savdb;
//$localobject->fetch($localobject->id);
/*
$result=$localobject->getNomUrl(1);
print __METHOD__." id=".$localobject->id." result=".$result."\n";
$this->assertNotEquals($result, '');
$result=$localobject->getFullAddress(1);
print __METHOD__." id=".$localobject->id." result=".$result."\n";
$this->assertContains("New address\nNew zip New town\nBelgium", $result);
$localobject->info($localobject->id);
print __METHOD__." localobject->date_creation=".$localobject->date_creation."\n";
$this->assertNotEquals($localobject->date_creation, '');
*/
return $localobject->id;
}
/**
* testHolidayDelete
*
* @param int $id Id of Holiday
* @return void
*
* @depends testHolidayOther
* The depends says test is run only if previous is ok
*/
public function testHolidayDelete($id)
{
global $conf,$user,$langs,$db;
$conf=$this->savconf;
$user=$this->savuser;
$langs=$this->savlangs;
$db=$this->savdb;
$localobject=new Holiday($this->savdb);
$result=$localobject->fetch($id);
$result=$localobject->delete(0);
print __METHOD__." id=".$id." result=".$result."\n";
$this->assertLessThan($result, 0);
return $result;
}
}
?>