public function testProgressMonitor4()
 {
     $out = new ezcConsoleOutput();
     $out->formats->tag->color = 'red';
     $out->formats->percent->color = 'blue';
     $out->formats->percent->style = array('bold');
     $out->formats->data->color = 'green';
     $status = new ezcConsoleProgressMonitor($out, 7, array('formatString' => $out->formatText('%2$10s', 'tag') . ' ' . $out->formatText('%1$6.2f%%', 'percent') . ' ' . $out->formatText('%3$s', 'data')));
     ob_start();
     for ($i = 0; $i < 7; $i++) {
         $status->addEntry($this->stati[$i][0], $this->stati[$i][1]);
     }
     $res = ob_get_contents();
     ob_end_clean();
     // To prepare test files use this:
     // file_put_contents( dirname( __FILE__ ) . '/data/' . ( ezcBaseFeatures::os() === "Windows" ? "windows/" : "posix/" ) . 'testProgressMonitor4.dat', $res );
     $this->assertEquals(file_get_contents(dirname(__FILE__) . '/data/' . (ezcBaseFeatures::os() === "Windows" ? "windows/" : "posix/") . 'testProgressMonitor4.dat'), $res, "Formated statusbar not generated correctly.");
 }
     // fetch html & text content of parsed outputxml from senmdobject
     // data of outputformate
     $outputStringArray = $outputFormatStringArray[$outputFormatId]['body'];
     $emailSubject = $outputFormatStringArray[$outputFormatId]['subject'];
     $outputStringArrayNew = array('html' => '', 'text' => '');
     foreach ($outputStringArray as $index => $string) {
         $outputStringArrayNew[$index] = CjwNewsletterUtils::replaceNewsletterMarkers($string, $sendObject, $newsletterUserObject);
     }
     // set x-cjwnl header
     $cjwMail->resetExtraMailHeaders();
     $cjwMail->setExtraMailHeadersByNewsletterSendItem($sendItem);
     $resultArray = $cjwMail->sendEmail($emailSender, $emailSenderName, $emailReceiver, $emailReceiverName, $emailSubject, $outputStringArrayNew);
     $sendResult = $resultArray['send_result'];
     if ($sendResult === true) {
         // emal was send
         $progressMonitor->addEntry("[SEND] {$itemCounter}/{$itemsNotSend}", "Newsletter send item {$id} processed. ");
         // wenn ok als versendet markieren
         $sendItem->setAttribute('status', CjwNewsletterEditionSendItem::STATUS_SEND);
         $sendItem->store();
     } else {
         // error execption
         $exception = $resultArray['send_result'];
         $progressMonitor->addEntry("[FAILED] {$itemCounter}/{$itemsNotSend}", "Newsletter send item {$id} failed. ");
     }
     // parse output_xml with user_content, normal or personalizied?
     // create email
     // send email
     $itemCounter++;
     // wait for 2/10 seconds
     usleep(200000);
 }
/**
 * Autoload ezc classes 
 * 
 * @param string $className 
 */
function __autoload($className)
{
    ezcBase::autoload($className);
}
$out = new ezcConsoleOutput();
// Create a progress monitor
$status = new ezcConsoleProgressMonitor($out, 7);
// Perform actions
$i = 0;
while ($i++ < 7) {
    // Do whatever you want to indicate progress for
    usleep(mt_rand(20000, 2000000));
    // Advance the statusbar by one step
    $status->addEntry('ACTION', "Performed action #{$i}.");
}
$out->outputLine();
/*
OUTPUT:
    14.3% ACTION Performed action #1.
    28.6% ACTION Performed action #2.
    42.9% ACTION Performed action #3.
    57.1% ACTION Performed action #4.
    71.4% ACTION Performed action #5.
    85.7% ACTION Performed action #6.
   100.0% ACTION Performed action #7.
*/
 }
 $outputStringArrayNew = array('html' => '', 'text' => '');
 foreach ($outputStringArray as $index => $string) {
     $outputStringArrayNew[$index] = str_replace($searchArray, $replaceArray, $string);
 }
 // START, replace in subject
 $emailSubject = str_replace($searchArray, $replaceArray, $emailSubject);
 // END
 // set x-cjwnl header
 $cjwMail->resetExtraMailHeaders();
 $cjwMail->setExtraMailHeadersByNewsletterSendItem($sendItem);
 $resultArray = $cjwMail->sendEmail($emailSender, $emailSenderName, $emailReceiver, $emailReceiverName, $emailSubject, $outputStringArrayNew, false, 'utf-8', $emailReplyTo, $emailReturnPath);
 $sendResult = $resultArray['send_result'];
 if ($sendResult === true) {
     // emal was send
     $progressMonitor->addEntry("[SEND] {$itemCounter}/{$itemsNotSend}", "Newsletter send item {$id} processed. ");
     // wenn ok als versendet markieren
     $sendItem->setAttribute('status', CjwNewsletterEditionSendItem::STATUS_SEND);
     $sendItem->store();
 } else {
     // error execption
     $exception = $resultArray['send_result'];
     $progressMonitor->addEntry("[FAILED] {$itemCounter}/{$itemsNotSend}", "Newsletter send item {$id} failed, abort and bounce newsletter user.");
     // abort item if mail returns directly e.g. mailbox not found
     $sendItem->setAttribute('status', CjwNewsletterEditionSendItem::STATUS_ABORT);
     $sendItem->store();
     // bounce send Item
     $sendItem->setBounced();
     // bounc nl user
     $newsletterUser = $sendItem->attribute('newsletter_user_object');
     if (is_object($newsletterUser)) {