_a = $a; } } class TestOfUnitTestCaseOutput extends UnitTestCase { function testOfResults() { $this->pass('Pass'); $this->fail('Fail'); // Fail. } function testTrue() { $this->assertTrue(true); $this->assertTrue(false); // Fail. } function testFalse() { $this->assertFalse(true); // Fail. $this->assertFalse(false); } function testExpectation() { $expectation = &new EqualExpectation(25, 'My expectation message: %s'); $this->assert($expectation, 25, 'My assert message : %s'); $this->assert($expectation, 24, 'My assert message : %s'); // Fail. } function testNull() { $this->assertNull(null, "%s -> Pass"); $this->assertNull(false, "%s -> Fail"); // Fail. $this->assertNotNull(null, "%s -> Fail"); // Fail. $this->assertNotNull(false, "%s -> Pass"); } function testType() { $this->assertIsA("hello", "string", "%s -> Pass"); $this->assertIsA(14, "string", "%s -> Fail"); // Fail. $this->assertIsA($this, "TestOfUnitTestCaseOutput", "%s -> Pass"); $this->assertIsA($this, "UnitTestCase", "%s -> Pass"); $this->assertIsA(14, "TestOfUnitTestCaseOutput", "%s -> Fail"); // Fail. $this->assertIsA($this, "TestReporter", "%s -> Fail"); // Fail. } function testTypeEquality() { $this->assertEqual("0", 0, "%s -> Pass"); $this->assertNotEqual("0", 0, "%s -> Fail"); // Fail. } function testNullEquality() { $this->assertEqual(null, 1, "%s -> Fail"); // Fail. $this->assertNotEqual(null, 1, "%s -> Pass"); $this->assertEqual(1, null, "%s -> Fail"); // Fail. $this->assertNotEqual(1, null, "%s -> Pass"); } function testIntegerEquality() { $this->assertEqual(1, 2, "%s -> Fail"); // Fail. $this->assertNotEqual(1, 2, "%s -> Pass"); } function testStringEquality() { $this->assertEqual("a", "a", "%s -> Pass"); $this->assertNotEqual("a", "a", "%s -> Fail"); // Fail. $this->assertEqual("aa", "ab", "%s -> Fail"); // Fail. $this->assertNotEqual("aa", "ab", "%s -> Pass"); } function testHashEquality() { $this->assertEqual(array("a" => "A", "b" => "B"), array("b" => "B", "a" => "A"), "%s -> Pass"); $this->assertEqual(array("a" => "A", "b" => "B"), array("b" => "B", "a" => "Z"), "%s -> Pass"); } function testWithin() { $this->assertWithinMargin(5, 5.4, 0.5, "%s -> Pass"); $this->assertWithinMargin(5, 5.6, 0.5, "%s -> Fail"); // Fail. } function testOutside() { $this->assertOutsideMargin(5, 5.4, 0.5, "%s -> Fail"); // Fail. $this->assertOutsideMargin(5, 5.6, 0.5, "%s -> Pass"); } function testStringIdentity() { $a = "fred"; $b = $a; $this->assertIdentical($a, $b, "%s -> Pass"); $this->assertNotIdentical($a, $b, "%s -> Fail"); // Fail. } function testTypeIdentity() { $a = "0"; $b = 0; $this->assertIdentical($a, $b, "%s -> Fail"); // Fail. $this->assertNotIdentical($a, $b, "%s -> Pass"); } function testNullIdentity() { $this->assertIdentical(null, 1, "%s -> Fail"); // Fail. $this->assertNotIdentical(null, 1, "%s -> Pass"); $this->assertIdentical(1, null, "%s -> Fail"); // Fail. $this->assertNotIdentical(1, null, "%s -> Pass"); } function testHashIdentity() { $this->assertIdentical(array("a" => "A", "b" => "B"), array("b" => "B", "a" => "A"), "%s -> fail"); // Fail. } function testObjectEquality() { $this->assertEqual(new TestDisplayClass(4), new TestDisplayClass(4), "%s -> Pass"); $this->assertNotEqual(new TestDisplayClass(4), new TestDisplayClass(4), "%s -> Fail"); // Fail. $this->assertEqual(new TestDisplayClass(4), new TestDisplayClass(5), "%s -> Fail"); // Fail. $this->assertNotEqual(new TestDisplayClass(4), new TestDisplayClass(5), "%s -> Pass"); } function testObjectIndentity() { $this->assertIdentical(new TestDisplayClass(false), new TestDisplayClass(false), "%s -> Pass"); $this->assertNotIdentical(new TestDisplayClass(false), new TestDisplayClass(false), "%s -> Fail"); // Fail. $this->assertIdentical(new TestDisplayClass(false), new TestDisplayClass(0), "%s -> Fail"); // Fail. $this->assertNotIdentical(new TestDisplayClass(false), new TestDisplayClass(0), "%s -> Pass"); } function testReference() { $a = "fred"; $b = &$a; $this->assertReference($a, $b, "%s -> Pass"); $this->assertCopy($a, $b, "%s -> Fail"); // Fail. $c = "Hello"; $this->assertReference($a, $c, "%s -> Fail"); // Fail. $this->assertCopy($a, $c, "%s -> Pass"); } function testPatterns() { $this->assertPattern('/hello/i', "Hello there", "%s -> Pass"); $this->assertNoPattern('/hello/', "Hello there", "%s -> Pass"); $this->assertPattern('/hello/', "Hello there", "%s -> Fail"); // Fail. $this->assertNoPattern('/hello/i', "Hello there", "%s -> Fail"); // Fail. } function testLongStrings() { $text = ""; for ($i = 0; $i < 10; $i++) { $text .= "0123456789"; } $this->assertEqual($text, $text); $this->assertEqual($text . $text, $text . "a" . $text); // Fail. } function testErrorDisplay() { trigger_error('Default'); // Exception. trigger_error('Error', E_USER_ERROR); // Exception. trigger_error('Warning', E_USER_WARNING); // Exception. trigger_error('Notice', E_USER_NOTICE); // Exception. } function testErrorTrap() { $this->assertNoErrors("%s -> Pass"); $this->assertError(); // Fail. trigger_error('Error 1'); $this->assertNoErrors("%s -> Fail"); // Fail. $this->assertError(); $this->assertNoErrors("%s -> Pass at end"); } function testErrorText() { trigger_error('Error 2'); $this->assertError('Error 2', "%s -> Pass"); trigger_error('Error 3'); $this->assertError('Error 2', "%s -> Fail"); // Fail. } function testErrorPatterns() { trigger_error('Error 2'); $this->assertErrorPattern('/Error 2/', "%s -> Pass"); trigger_error('Error 3'); $this->assertErrorPattern('/Error 2/', "%s -> Fail"); // Fail. } function testDumping() { $this->dump(array("Hello"), "Displaying a variable"); } function testSignal() { $fred = "signal as a string"; $this->signal("Signal", $fred); // Signal. } } class Dummy { function Dummy() { } function a() { } } Mock::generate('Dummy'); class TestOfMockObjectsOutput extends UnitTestCase { function testCallCounts() { $dummy = &new MockDummy(); $dummy->expectCallCount('a', 1, 'My message: %s'); $dummy->a(); $dummy->a(); } function testMinimumCallCounts() { $dummy = &new MockDummy(); $dummy->expectMinimumCallCount('a', 2, 'My message: %s'); $dummy->a(); $dummy->a(); } function testEmptyMatching() { $dummy = &new MockDummy(); $dummy->expectArguments('a', array()); $dummy->a(); $dummy->a(null); // Fail. } function testEmptyMatchingWithCustomMessage() { $dummy = &new MockDummy(); $dummy->expectArguments('a', array(), 'My expectation message: %s'); $dummy->a(); $dummy->a(null); // Fail. } function testNullMatching() { $dummy = &new MockDummy(); $dummy->expectArguments('a', array(null)); $dummy->a(null); $dummy->a(); // Fail. } function testBooleanMatching() { $dummy = &new MockDummy(); $dummy->expectArguments('a', array(true, false)); $dummy->a(true, false); $dummy->a(true, true); // Fail. } function testIntegerMatching() { $dummy = &new MockDummy(); $dummy->expectArguments('a', array(32, 33)); $dummy->a(32, 33); $dummy->a(32, 34); // Fail. } function testFloatMatching() { $dummy = &new MockDummy(); $dummy->expectArguments('a', array(3.2, 3.3)); $dummy->a(3.2, 3.3); $dummy->a(3.2, 3.4); // Fail. } function testStringMatching() { $dummy = &new MockDummy(); $dummy->expectArguments('a', array('32', '33')); $dummy->a('32', '33'); $dummy->a('32', '34'); // Fail. } function testEmptyMatchingWithCustomExpectationMessage() { $dummy = &new MockDummy(); $dummy->expectArguments( 'a', array(new EqualExpectation('A', 'My part expectation message: %s')), 'My expectation message: %s'); $dummy->a('A'); $dummy->a('B'); // Fail. } function testArrayMatching() { $dummy = &new MockDummy(); $dummy->expectArguments('a', array(array(32), array(33))); $dummy->a(array(32), array(33)); $dummy->a(array(32), array('33')); // Fail. } function testObjectMatching() { $a = new Dummy(); $a->a = 'a'; $b = new Dummy(); $b->b = 'b'; $dummy = &new MockDummy(); $dummy->expectArguments('a', array($a, $b)); $dummy->a($a, $b); $dummy->a($a, $a); // Fail. } function testBigList() { $dummy = &new MockDummy(); $dummy->expectArguments('a', array(false, 0, 1, 1.0)); $dummy->a(false, 0, 1, 1.0); $dummy->a(true, false, 2, 2.0); // Fail. } } class TestOfPastBugs extends UnitTestCase { function testMixedTypes() { $this->assertEqual(array(), null, "%s -> Pass"); $this->assertIdentical(array(), null, "%s -> Fail"); // Fail. } function testMockWildcards() { $dummy = &new MockDummy(); $dummy->expectArguments('a', array('*', array(33))); $dummy->a(array(32), array(33)); $dummy->a(array(32), array('33')); // Fail. } } class TestOfVisualShell extends ShellTestCase { function testDump() { $this->execute('ls'); $this->dumpOutput(); $this->execute('dir'); $this->dumpOutput(); } function testDumpOfList() { $this->execute('ls'); $this->dump($this->getOutputAsList()); } } class AllOutputReporter extends HtmlReporter { function _getCss() { return parent::_getCss() . ' .pass { color: darkgreen; }'; } function paintPass($message) { parent::paintPass($message); print "Pass: "; $breadcrumb = $this->getTestList(); array_shift($breadcrumb); print implode(" -> ", $breadcrumb); print " -> " . htmlentities($message) . "
\n"; } function paintSignal($type, &$payload) { print "$type: "; $breadcrumb = $this->getTestList(); array_shift($breadcrumb); print implode(" -> ", $breadcrumb); print " -> " . htmlentities(serialize($payload)) . "
\n"; } } $test = &new GroupTest("Visual test with 51 passes, 51 fails and 4 exceptions"); $test->addTestCase(new TestOfUnitTestCaseOutput()); $test->addTestCase(new TestOfMockObjectsOutput()); $test->addTestCase(new TestOfPastBugs()); $test->addTestCase(new TestOfVisualShell()); if (isset($_GET['xml']) || in_array('xml', (isset($argv) ? $argv : array()))) { $reporter = &new XmlReporter(); } elseif(SimpleReporter::inCli()) { $reporter = &new TextReporter(); } else { $reporter = &new AllOutputReporter(); } if (isset($_GET['dry']) || in_array('dry', (isset($argv) ? $argv : array()))) { $reporter->makeDry(); } exit ($test->run($reporter) ? 0 : 1); ?>