ClassManifestTest.php
4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
/**
* Tests for the {@link SS_ClassManifest} class.
*
* @package framework
* @subpackage tests
*/
class ClassManifestTest extends SapphireTest {
protected $base;
protected $manifest;
protected $manifestTests;
public function setUp() {
parent::setUp();
$this->base = dirname(__FILE__) . '/fixtures/classmanifest';
$this->manifest = new SS_ClassManifest($this->base, false, true, false);
$this->manifestTests = new SS_ClassManifest($this->base, true, true, false);
}
public function testGetItemPath() {
$expect = array(
'CLASSA' => 'module/classes/ClassA.php',
'ClassA' => 'module/classes/ClassA.php',
'classa' => 'module/classes/ClassA.php',
'INTERFACEA' => 'module/interfaces/InterfaceA.php',
'InterfaceA' => 'module/interfaces/InterfaceA.php',
'interfacea' => 'module/interfaces/InterfaceA.php'
);
foreach ($expect as $name => $path) {
$this->assertEquals("{$this->base}/$path", $this->manifest->getItemPath($name));
}
}
public function testGetClasses() {
$expect = array(
'classb' => "{$this->base}/module/classes/ClassB.php",
'classa' => "{$this->base}/module/classes/ClassA.php",
'classb' => "{$this->base}/module/classes/ClassB.php",
'classc' => "{$this->base}/module/classes/ClassC.php",
'classd' => "{$this->base}/module/classes/ClassD.php",
'sstemplateparser' => FRAMEWORK_PATH."/view/SSTemplateParser.php",
'sstemplateparseexception' => FRAMEWORK_PATH."/view/SSTemplateParser.php"
);
$this->assertEquals($expect, $this->manifest->getClasses());
}
public function testGetClassNames() {
$this->assertEquals(
array('sstemplateparser', 'sstemplateparseexception', 'classa', 'classb', 'classc', 'classd'),
$this->manifest->getClassNames());
}
public function testGetDescendants() {
$expect = array(
'classa' => array('ClassC', 'ClassD'),
'classc' => array('ClassD')
);
$this->assertEquals($expect, $this->manifest->getDescendants());
}
public function testGetDescendantsOf() {
$expect = array(
'CLASSA' => array('ClassC', 'ClassD'),
'classa' => array('ClassC', 'ClassD'),
'CLASSC' => array('ClassD'),
'classc' => array('ClassD')
);
foreach ($expect as $class => $desc) {
$this->assertEquals($desc, $this->manifest->getDescendantsOf($class));
}
}
public function testGetInterfaces() {
$expect = array(
'interfacea' => "{$this->base}/module/interfaces/InterfaceA.php",
'interfaceb' => "{$this->base}/module/interfaces/InterfaceB.php"
);
$this->assertEquals($expect, $this->manifest->getInterfaces());
}
public function testGetImplementors() {
$expect = array(
'interfacea' => array('ClassB'),
'interfaceb' => array('ClassC')
);
$this->assertEquals($expect, $this->manifest->getImplementors());
}
public function testGetImplementorsOf() {
$expect = array(
'INTERFACEA' => array('ClassB'),
'interfacea' => array('ClassB'),
'INTERFACEB' => array('ClassC'),
'interfaceb' => array('ClassC')
);
foreach ($expect as $interface => $impl) {
$this->assertEquals($impl, $this->manifest->getImplementorsOf($interface));
}
}
public function testGetConfigs() {
$expect = array("{$this->base}/module/_config.php");
$this->assertEquals($expect, $this->manifest->getConfigs());
$this->assertEquals($expect, $this->manifestTests->getConfigs());
}
public function testGetModules() {
$expect = array(
"module" => "{$this->base}/module",
"moduleb" => "{$this->base}/moduleb"
);
$this->assertEquals($expect, $this->manifest->getModules());
$this->assertEquals($expect, $this->manifestTests->getModules());
}
public function testTestManifestIncludesTestClasses() {
$this->assertNotContains('testclassa', array_keys($this->manifest->getClasses()));
$this->assertContains('testclassa', array_keys($this->manifestTests->getClasses()));
}
public function testManifestExcludeFilesPrefixedWithUnderscore() {
$this->assertNotContains('ignore', array_keys($this->manifest->getClasses()));
}
/**
* Assert that ClassManifest throws an exception when it encounters two files
* which contain classes with the same name
* @expectedException Exception
*/
public function testManifestWarnsAboutDuplicateClasses() {
$dummy = new SS_ClassManifest(dirname(__FILE__) . '/fixtures/classmanifest_duplicates', false, true, false);
}
}