source: trunk/server/www/vendors/simpletest/test/interfaces_test.php @ 6

Last change on this file since 6 was 6, checked in by sander, 12 years ago

Added SimpleTest? test framework

File size: 3.9 KB
Line 
1<?php
2// $Id: interfaces_test.php 1699 2008-03-24 16:01:29Z lastcraft $
3require_once(dirname(__FILE__) . '/../autorun.php');
4if (function_exists('spl_classes')) {
5    include(dirname(__FILE__) . '/support/spl_examples.php');
6}
7
8interface DummyInterface {
9    function aMethod();
10    function anotherMethod($a);
11    function &referenceMethod(&$a);
12}
13
14Mock::generate('DummyInterface');
15Mock::generatePartial('DummyInterface', 'PartialDummyInterface', array());
16
17class TestOfMockInterfaces extends UnitTestCase {
18
19    function testCanMockAnInterface() {
20        $mock = new MockDummyInterface();
21        $this->assertIsA($mock, 'SimpleMock');
22        $this->assertIsA($mock, 'MockDummyInterface');
23        $this->assertTrue(method_exists($mock, 'aMethod'));
24        $this->assertTrue(method_exists($mock, 'anotherMethod'));
25        $this->assertNull($mock->aMethod());
26    }
27
28    function testMockedInterfaceExpectsParameters() {
29        $mock = new MockDummyInterface();
30        $mock->anotherMethod();
31        $this->assertError();
32    }
33
34    function testCannotPartiallyMockAnInterface() {
35        $this->assertFalse(class_exists('PartialDummyInterface'));
36    }
37}
38
39class TestOfSpl extends UnitTestCase {
40   
41    function skip() {
42        $this->skipUnless(function_exists('spl_classes'), 'No SPL module loaded');
43    }
44
45    function testCanMockAllSplClasses() {
46        if (! function_exists('spl_classes')) {
47            return;
48        }
49        foreach(spl_classes() as $class) {
50            if ($class == 'SplHeap') {
51                continue;
52            }
53            $mock_class = "Mock$class";
54            Mock::generate($class);
55            $this->assertIsA(new $mock_class(), $mock_class);
56        }
57    }
58
59    function testExtensionOfCommonSplClasses() {
60        Mock::generate('IteratorImplementation');
61        $this->assertIsA(
62                new IteratorImplementation(),
63                'IteratorImplementation');
64        Mock::generate('IteratorAggregateImplementation');
65        $this->assertIsA(
66                new IteratorAggregateImplementation(),
67                'IteratorAggregateImplementation');
68   }
69}
70
71class WithHint {
72    function hinted(DummyInterface $object) { }
73}
74
75class ImplementsDummy implements DummyInterface {
76    function aMethod() { }
77    function anotherMethod($a) { }
78    function &referenceMethod(&$a) { }
79    function extraMethod($a = false) { }
80}
81Mock::generate('ImplementsDummy');
82
83class TestOfImplementations extends UnitTestCase {
84
85    function testMockedInterfaceCanPassThroughTypeHint() {
86        $mock = new MockDummyInterface();
87        $hinter = new WithHint();
88        $hinter->hinted($mock);
89    }
90
91    function testImplementedInterfacesAreCarried() {
92        $mock = new MockImplementsDummy();
93        $hinter = new WithHint();
94        $hinter->hinted($mock);
95    }
96   
97    function testNoSpuriousWarningsWhenSkippingDefaultedParameter() {
98        $mock = new MockImplementsDummy();
99        $mock->extraMethod();
100    }
101}
102
103interface SampleClassWithConstruct {
104    function __construct($something);
105}
106
107class TestOfInterfaceMocksWithConstruct extends UnitTestCase {
108    function testBasicConstructOfAnInterface() {
109        Mock::generate('SampleClassWithConstruct');
110        $this->assertNoErrors();
111    }
112}
113
114interface SampleInterfaceWithHintInSignature {
115    function method(array $hinted);
116}
117
118class TestOfInterfaceMocksWithHintInSignature extends UnitTestCase {
119    function testBasicConstructOfAnInterfaceWithHintInSignature() {
120        Mock::generate('SampleInterfaceWithHintInSignature');
121        $this->assertNoErrors();
122        $mock = new MockSampleInterfaceWithHintInSignature();
123        $this->assertIsA($mock, 'SampleInterfaceWithHintInSignature');
124    }
125}
126
127interface SampleInterfaceWithClone {
128    function __clone();
129}
130
131class TestOfSampleInterfaceWithClone extends UnitTestCase {
132    function testCanMockWithoutErrors() {
133        Mock::generate('SampleInterfaceWithClone');
134        $this->assertNoErrors();
135    }
136}
137?>
Note: See TracBrowser for help on using the repository browser.