From 322bb9cd2be9e51422cb2b82684692e825c2bfb7 Mon Sep 17 00:00:00 2001 From: brettp Date: Fri, 2 Oct 2009 18:40:04 +0000 Subject: Added simpletest and start of unit tests. git-svn-id: http://code.elgg.org/elgg/trunk@3503 36083f99-b078-4883-b0ff-0f9b5a30f544 --- vendors/simpletest/test/errors_test.php | 300 ++++++++++++++++++++++++++++++++ 1 file changed, 300 insertions(+) create mode 100755 vendors/simpletest/test/errors_test.php (limited to 'vendors/simpletest/test/errors_test.php') diff --git a/vendors/simpletest/test/errors_test.php b/vendors/simpletest/test/errors_test.php new file mode 100755 index 000000000..7db8769a2 --- /dev/null +++ b/vendors/simpletest/test/errors_test.php @@ -0,0 +1,300 @@ +get('SimpleErrorQueue'); + $queue->clear(); + } + + function tearDown() { + $context = &SimpleTest::getContext(); + $queue = &$context->get('SimpleErrorQueue'); + $queue->clear(); + } + + function testOrder() { + $context = &SimpleTest::getContext(); + $queue = &$context->get('SimpleErrorQueue'); + $queue->add(1024, 'Ouch', 'here.php', 100); + $queue->add(512, 'Yuk', 'there.php', 101); + $this->assertEqual( + $queue->extract(), + array(1024, 'Ouch', 'here.php', 100)); + $this->assertEqual( + $queue->extract(), + array(512, 'Yuk', 'there.php', 101)); + $this->assertFalse($queue->extract()); + } + + function testAssertNoErrorsGivesTrueWhenNoErrors() { + $test = &new MockSimpleTestCase(); + $test->expectOnce('assert', array( + new IdenticalExpectation(new TrueExpectation()), + true, + 'Should be no errors')); + $test->setReturnValue('assert', true); + $queue = &new SimpleErrorQueue(); + $queue->setTestCase($test); + $this->assertTrue($queue->assertNoErrors('%s')); + } + + function testAssertNoErrorsIssuesFailWhenErrors() { + $test = &new MockSimpleTestCase(); + $test->expectOnce('assert', array( + new IdenticalExpectation(new TrueExpectation()), + false, + 'Should be no errors')); + $test->setReturnValue('assert', false); + $queue = &new SimpleErrorQueue(); + $queue->setTestCase($test); + $queue->add(1024, 'Ouch', 'here.php', 100); + $this->assertFalse($queue->assertNoErrors('%s')); + } + + function testAssertErrorFailsWhenNoError() { + $test = &new MockSimpleTestCase(); + $test->expectOnce('fail', array('Expected error not found')); + $test->setReturnValue('assert', false); + $queue = &new SimpleErrorQueue(); + $queue->setTestCase($test); + $this->assertFalse($queue->assertError(false, '%s')); + } + + function testAssertErrorFailsWhenErrorDoesntMatchTheExpectation() { + $test = &new MockSimpleTestCase(); + $test->expectOnce('assert', array( + new IdenticalExpectation(new FailedExpectation()), + 'B', + 'Expected PHP error [B] severity [E_USER_NOTICE] in [b.php] line [100]')); + $test->setReturnValue('assert', false); + $queue = &new SimpleErrorQueue(); + $queue->setTestCase($test); + $queue->add(1024, 'B', 'b.php', 100); + $this->assertFalse($queue->assertError(new FailedExpectation(), '%s')); + } + + function testExpectationMatchCancelsIncomingError() { + $test = &new MockSimpleTestCase(); + $test->expectOnce('assert', array( + new IdenticalExpectation(new AnythingExpectation()), + 'B', + 'a message')); + $test->setReturnValue('assert', true); + $test->expectNever('error'); + $queue = &new SimpleErrorQueue(); + $queue->setTestCase($test); + $queue->expectError(new AnythingExpectation(), 'a message'); + $queue->add(1024, 'B', 'b.php', 100); + } +} + +class TestOfErrorTrap extends UnitTestCase { + var $_old; + + function setUp() { + $this->_old = error_reporting(E_ALL); + set_error_handler('SimpleTestErrorHandler'); + } + + function tearDown() { + restore_error_handler(); + error_reporting($this->_old); + } + + function testQueueStartsEmpty() { + $context = &SimpleTest::getContext(); + $queue = &$context->get('SimpleErrorQueue'); + $this->assertFalse($queue->extract()); + } + + function testTrappedErrorPlacedInQueue() { + trigger_error('Ouch!'); + $context = &SimpleTest::getContext(); + $queue = &$context->get('SimpleErrorQueue'); + list($severity, $message, $file, $line) = $queue->extract(); + $this->assertEqual($message, 'Ouch!'); + $this->assertEqual($file, __FILE__); + $this->assertFalse($queue->extract()); + } + + function testErrorsAreSwallowedByMatchingExpectation() { + $this->expectError('Ouch!'); + trigger_error('Ouch!'); + } + + function testErrorsAreSwallowedInOrder() { + $this->expectError('a'); + $this->expectError('b'); + trigger_error('a'); + trigger_error('b'); + } + + function testAnyErrorCanBeSwallowed() { + $this->expectError(); + trigger_error('Ouch!'); + } + + function testErrorCanBeSwallowedByPatternMatching() { + $this->expectError(new PatternExpectation('/ouch/i')); + trigger_error('Ouch!'); + } + + function testErrorWithPercentsPassesWithNoSprintfError() { + $this->expectError("%"); + trigger_error('%'); + } +} + +class TestOfErrors extends UnitTestCase { + var $_old; + + function setUp() { + $this->_old = error_reporting(E_ALL); + } + + function tearDown() { + error_reporting($this->_old); + } + + function testDefaultWhenAllReported() { + error_reporting(E_ALL); + trigger_error('Ouch!'); + $this->assertError('Ouch!'); + } + + function testNoticeWhenReported() { + error_reporting(E_ALL); + trigger_error('Ouch!', E_USER_NOTICE); + $this->assertError('Ouch!'); + } + + function testWarningWhenReported() { + error_reporting(E_ALL); + trigger_error('Ouch!', E_USER_WARNING); + $this->assertError('Ouch!'); + } + + function testErrorWhenReported() { + error_reporting(E_ALL); + trigger_error('Ouch!', E_USER_ERROR); + $this->assertError('Ouch!'); + } + + function testNoNoticeWhenNotReported() { + error_reporting(0); + trigger_error('Ouch!', E_USER_NOTICE); + } + + function testNoWarningWhenNotReported() { + error_reporting(0); + trigger_error('Ouch!', E_USER_WARNING); + } + + function testNoticeSuppressedWhenReported() { + error_reporting(E_ALL); + @trigger_error('Ouch!', E_USER_NOTICE); + } + + function testWarningSuppressedWhenReported() { + error_reporting(E_ALL); + @trigger_error('Ouch!', E_USER_WARNING); + } + + function testErrorWithPercentsReportedWithNoSprintfError() { + trigger_error('%'); + $this->assertError('%'); + } +} + +class TestOfPHP52RecoverableErrors extends UnitTestCase { + function skip() { + $this->skipIf( + version_compare(phpversion(), '5.2', '<'), + 'E_RECOVERABLE_ERROR not tested for PHP below 5.2'); + } + + function testError() { + eval(' + class RecoverableErrorTestingStub { + function ouch(RecoverableErrorTestingStub $obj) { + } + } + '); + + $stub = new RecoverableErrorTestingStub(); + $this->expectError(new PatternExpectation('/must be an instance of RecoverableErrorTestingStub/i')); + $stub->ouch(new stdClass()); + } +} + +class TestOfErrorsExcludingPHP52AndAbove extends UnitTestCase { + function skip() { + $this->skipIf( + version_compare(phpversion(), '5.2', '>='), + 'E_USER_ERROR not tested for PHP 5.2 and above'); + } + + function testNoErrorWhenNotReported() { + error_reporting(0); + trigger_error('Ouch!', E_USER_ERROR); + } + + function testErrorSuppressedWhenReported() { + error_reporting(E_ALL); + @trigger_error('Ouch!', E_USER_ERROR); + } +} + +SimpleTest::ignore('TestOfNotEnoughErrors'); +/** + * This test is ignored as it is used by {@link TestRunnerForLeftOverAndNotEnoughErrors} + * to verify that it fails as expected. + * + * @ignore + */ +class TestOfNotEnoughErrors extends UnitTestCase { + function testExpectTwoErrorsThrowOne() { + $this->expectError('Error 1'); + trigger_error('Error 1'); + $this->expectError('Error 2'); + } +} + +SimpleTest::ignore('TestOfLeftOverErrors'); +/** + * This test is ignored as it is used by {@link TestRunnerForLeftOverAndNotEnoughErrors} + * to verify that it fails as expected. + * + * @ignore + */ +class TestOfLeftOverErrors extends UnitTestCase { + function testExpectOneErrorGetTwo() { + $this->expectError('Error 1'); + trigger_error('Error 1'); + trigger_error('Error 2'); + } +} + +class TestRunnerForLeftOverAndNotEnoughErrors extends UnitTestCase { + function testRunLeftOverErrorsTestCase() { + $test = new TestOfLeftOverErrors(); + $this->assertFalse($test->run(new SimpleReporter())); + } + + function testRunNotEnoughErrors() { + $test = new TestOfNotEnoughErrors(); + $this->assertFalse($test->run(new SimpleReporter())); + } +} + +// TODO: Add stacked error handler test +?> \ No newline at end of file -- cgit v1.2.3