blob: 5108e5b9333b7734e64f764a43ad4d5fa77a93ac [file] [log] [blame]
<?php
/**
* ezcConsoleOutputTest class.
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @package ConsoleTools
* @subpackage Tests
* @version //autogentag//
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
*/
/**
* Test suite for ezcConsoleStatusbar class.
*
* @package ConsoleTools
* @subpackage Tests
*/
class ezcConsoleStatusbarTest extends ezcTestCase
{
private $stati = array(
true,
false,
true,
true,
false,
true,
true,
true,
false,
false,
true,
true,
false,
true,
true,
false,
true,
false,
true,
true,
false,
false,
false,
true,
false,
);
private $errorCaught = false;
public static function suite()
{
return new PHPUnit_Framework_TestSuite( "ezcConsoleStatusbarTest" );
}
public function testStatusbar1()
{
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
ob_start();
foreach ( $this->stati as $statusVal )
{
$status->add($statusVal);
}
$res = ob_get_contents();
ob_end_clean();
$this->assertEquals(
file_get_contents( dirname( __FILE__ ) . '/data/' . ( ezcBaseFeatures::os() === "Windows" ? "windows/" : "posix/" ) . 'testStatusbar1.dat' ),
$res,
"Formated statusbar not generated correctly."
);
// To prepare test files use this:
// file_put_contents( dirname( __FILE__ ) . '/data/' . ( ezcBaseFeatures::os() === "Windows" ? "windows/" : "posix/" ) . 'testStatusbar1.dat', $res );
}
public function testStatusbar2()
{
$out = new ezcConsoleOutput();
$out->options->useFormats = false;
$status = new ezcConsoleStatusbar( $out );
ob_start();
foreach ( $this->stati as $statusVal )
{
$status->add($statusVal);
}
$res = ob_get_contents();
ob_end_clean();
$this->assertEquals(
file_get_contents( dirname( __FILE__ ) . '/data/' . ( ezcBaseFeatures::os() === "Windows" ? "windows/" : "posix/" ) . 'testStatusbar2.dat' ),
$res,
"Unformated statusbar not generated correctly."
);
// To prepare test files use this:
// file_put_contents( dirname( __FILE__ ) . '/data/' . ( ezcBaseFeatures::os() === "Windows" ? "windows/" : "posix/" ) . 'testStatusbar2.dat', $res );
}
public function testGetAccessSuccess()
{
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
$this->assertEquals( new ezcConsoleStatusbarOptions(), $status->options );
$this->assertEquals( "+", $status->successChar );
$this->assertEquals( "-", $status->failureChar );
}
public function testGetAccessFailure()
{
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
try
{
echo $status->foo;
}
catch ( ezcBasePropertyNotFoundException $e )
{
return;
}
$this->fail( "ezcBasePropertyNotFoundException not thrown on get access to invalid property ezcConsoleStatusbar->foo." );
}
public function testSetAccessSuccess()
{
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
$refOpt = new ezcConsoleStatusbarOptions();
$refOpt->successChar = "*";
$refOpt->failureChar = "#";
$status->successChar = "*";
$status->failureChar = "#";
$this->assertEquals( $refOpt, $status->options, "Options not set correctly through direct set access on ezcConsoleStatusbar." );
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
$status->options = $refOpt;
$this->assertSame( $refOpt, $status->options, "Property ezcConsoleStatusbar->options not set correctly." );
}
public function testSetAccessFailure()
{
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
$exceptionThrown = false;
try
{
$status->successChar = 23;
}
catch ( ezcBaseValueException $e )
{
$exceptionThrown = true;
}
$this->assertTrue( $exceptionThrown, "ezcBaseValueException not thrown on invalid value for property ezcConsoleStatusbar->successChar." );
$exceptionThrown = false;
try
{
$status->failureChar = 23;
}
catch ( ezcBaseValueException $e )
{
$exceptionThrown = true;
}
$this->assertTrue( $exceptionThrown, "ezcBaseValueException not thrown on invalid value for property ezcConsoleStatusbar->failureChar." );
$exceptionThrown = false;
try
{
$status->options = 23;
}
catch ( ezcBaseValueException $e )
{
$exceptionThrown = true;
}
$this->assertTrue( $exceptionThrown, "ezcBaseValueException not thrown on invalid value for property ezcConsoleStatusbar->options." );
$exceptionThrown = false;
try
{
$status->foo = 23;
}
catch ( ezcBasePropertyNotFoundException $e )
{
$exceptionThrown = true;
}
$this->assertTrue( $exceptionThrown, "ezcBasePropertyNotFoundException not thrown on set access of invalid property ezcConsoleStatusbar->foo." );
}
public function testIssetAccess()
{
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
$this->assertTrue( isset( $status->successChar ) );
$this->assertTrue( isset( $status->failureChar ) );
$this->assertTrue( isset( $status->options ) );
$this->assertFalse( isset( $status->foo ) );
}
public function testSetOptionsSuccess()
{
$refOpt = new ezcConsoleStatusbarOptions();
$refOpt->successChar = "*";
$refOpt->failureChar = "#";
$optArr = array(
"successChar" => "*",
"failureChar" => "#",
);
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
$status->setOptions( $optArr );
$this->assertEquals( $refOpt, $status->options, "Options not correctly set from array." );
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
$status->setOptions( $refOpt );
$this->assertSame( $refOpt, $status->options, "Options not correctly set from array." );
}
public function testSetOptionsFailure()
{
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
try
{
$status->setOptions( 23 );
}
catch ( ezcBaseValueException $e )
{
return;
}
$this->fail( "ezcBaseValueException not thrown on invalid parameter to ezcConsoleStatusbar->setOptions()." );
}
public function testGetOptions()
{
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
$this->assertEquals( new ezcConsoleStatusbarOptions(), $status->getOptions() );
}
public function testReset()
{
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
ob_start();
foreach ( $this->stati as $statusVal )
{
$status->add($statusVal);
}
ob_end_clean();
$counter = $this->readAttribute( $status, "counter" );
$this->assertEquals( 14, $counter[true], "Success values not counted correctly." );
$this->assertEquals( 11, $counter[false], "Failure values not counted correctly." );
$status->reset();
$counter = $this->readAttribute( $status, "counter" );
$this->assertEquals( 0, $counter[true], "Success values not reset correctly." );
$this->assertEquals( 0, $counter[false], "Failure values not reset correctly." );
}
public function testGetSuccessCount()
{
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
$this->assertEquals( 0, $status->getSuccessCount() );
ob_start();
foreach ( $this->stati as $statusVal )
{
$status->add($statusVal);
}
ob_end_clean();
$this->assertEquals( 14, $status->getSuccessCount() );
}
public function testGetFailureCount()
{
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
$this->assertEquals( 0, $status->getFailureCount() );
ob_start();
foreach ( $this->stati as $statusVal )
{
$status->add($statusVal);
}
ob_end_clean();
$this->assertEquals( 11, $status->getFailureCount() );
}
public function testAddIncorrectStatus()
{
$out = new ezcConsoleOutput();
$status = new ezcConsoleStatusbar( $out );
set_error_handler( array( $this, "catchWarning" ), E_USER_WARNING );
ob_start();
$status->add( "foo" );
ob_end_clean();
restore_error_handler();
$this->assertTrue( $this->errorCaught, "Warning not caught on invalid status 'foo'." );
}
public function catchWarning( $errno, $errstr, $errfile, $errline, $errcontext )
{
$this->assertEquals( "Unknown status 'foo'.", $errstr );
$this->assertEquals( realpath( dirname( __FILE__ ) . "/../src/statusbar.php" ), $errfile );
$this->errorCaught = true;
}
}
?>