3 namespace frostbane\DocBlockReader\test;
5 use function frostbane\DocBlockReader\test\model\someMethod;
6 use PHPUnit\Framework\TestCase;
7 use frostbane\DocBlockReader\Reader;
8 use frostbane\DocBlockReader\test\model\SomeClass;
10 class ReaderTest extends TestCase
12 public function testInstance()
14 $someClass = new SomeClass();
16 $thisReader = new Reader($this);
17 $classReader = new Reader(SomeClass::class);
18 $instanceReader = new Reader($someClass);
20 $this->assertInstanceOf(Reader::class, $thisReader);
21 $this->assertInstanceOf(Reader::class, $classReader);
22 $this->assertInstanceOf(Reader::class, $instanceReader);
25 public function testPropertyParsing()
27 $reader = new Reader(SomeClass::class, 'myVar', Reader::TYPE_PROPERTY);
28 $this->commonTest($reader);
31 public function testPropertyParsing2()
33 $reader = new Reader(SomeClass::class, 'myVar2', Reader::TYPE_PROPERTY);
34 $x = $reader->getParameter("x");
35 $y = $reader->getParameter("y");
36 $this->assertSame(1, $x);
37 $this->assertSame("yes!", $y);
42 * @see https://github.com/jan-swiecki/php-simple-annotations/issues/2
43 * Thanks to @KrekkieD (https://github.com/KrekkieD) for
44 * reporting this issue!
46 public function testIssue2Problem()
48 $reader = new Reader(SomeClass::class, 'issue2', Reader::TYPE_PROPERTY);
49 $Lalala = $reader->getParameters()["Lalala"];
51 $this->assertSame(array("somejsonarray", "2", "anotherjsonarray", "3"), $Lalala);
54 public function testParserMethodImplicit()
56 $reader = new Reader(SomeClass::class, 'parserFixture');
57 $this->commonTest($reader);
60 public function testParserMethodExplicit()
62 $reader = new Reader(SomeClass::class, 'parserFixture', Reader::TYPE_METHOD);
63 $this->commonTest($reader);
66 public function testParserCallable()
68 $someClass = new SomeClass();
69 $reader1 = new Reader(array(SomeClass::class, "parserFixture"));
70 $reader2 = new Reader(array($someClass, "parserFixture"));
72 $this->commonTest($reader1);
73 $this->commonTest($reader2);
76 public function testParserStaticCallable()
78 $someClass = new SomeClass();
79 $reader1 = new Reader(array(SomeClass::class, "staticFixture"));
80 $reader2 = new Reader(array($someClass, "staticFixture"));
82 $this->commonTest($reader1);
83 $this->commonTest($reader2);
87 * @param Reader $reader
89 private function commonTest($reader)
91 $parameters = $reader->getParameters();
93 $this->assertNotEmpty($parameters);
95 $this->assertArrayHasKey('number', $parameters);
96 $this->assertArrayHasKey('string', $parameters);
97 $this->assertArrayHasKey('string2', $parameters);
98 $this->assertArrayHasKey('string3', $parameters);
99 $this->assertArrayHasKey('string4', $parameters);
100 $this->assertArrayHasKey('string5', $parameters);
101 $this->assertArrayHasKey('string6', $parameters);
102 $this->assertArrayHasKey('string7', $parameters);
103 $this->assertArrayHasKey('array', $parameters);
104 $this->assertArrayHasKey('object', $parameters);
105 $this->assertArrayHasKey('nested', $parameters);
106 $this->assertArrayHasKey('nestedArray', $parameters);
107 $this->assertArrayHasKey('trueVar', $parameters);
108 $this->assertArrayHasKey('null-var', $parameters);
109 $this->assertArrayHasKey('booleanTrue', $parameters);
110 $this->assertArrayHasKey('booleanFalse', $parameters);
111 $this->assertArrayHasKey('booleanNull', $parameters);
112 $this->assertArrayNotHasKey('non_existent_key', $parameters);
114 $this->assertSame(1, $parameters['number']);
115 $this->assertSame("123", $parameters['string']);
116 $this->assertSame("abc", $parameters['string2']);
117 $this->assertSame(array("a", "b"), $parameters['array']);
118 $this->assertSame(array("x" => "y"), $parameters['object']);
119 $this->assertSame(array("x" => array("y" => "z")), $parameters['nested']);
120 $this->assertSame(array("x" => array("y" => array("z", "p"))), $parameters['nestedArray']);
121 $this->assertSame(true, $parameters['trueVar']);
122 $this->assertSame(null, $parameters['null-var']);
124 $this->assertSame(true, $parameters['booleanTrue']);
125 $this->assertSame("tRuE", $parameters['string3']);
126 $this->assertSame("true", $parameters['string5']);
127 $this->assertSame("false", $parameters['string6']);
128 $this->assertSame(false, $parameters['booleanFalse']);
129 $this->assertSame(null, $parameters['booleanNull']);
130 $this->assertSame("null", $parameters['string4']);
131 $this->assertSame("akane kitamoto", $parameters['string7']);
132 $this->assertNull($reader->getParameter("non_existent_key"));
135 public function testParserOneFromClass()
137 $reader = new Reader(SomeClass::class);
138 $parameters = $reader->getParameters();
140 $this->assertNotEmpty($parameters);
142 $this->assertArrayHasKey('number', $parameters);
143 $this->assertArrayHasKey('string', $parameters);
144 $this->assertArrayHasKey('array', $parameters);
145 $this->assertArrayHasKey('object', $parameters);
146 $this->assertArrayHasKey('nested', $parameters);
147 $this->assertArrayHasKey('nestedArray', $parameters);
148 $this->assertArrayHasKey('trueVar', $parameters);
149 $this->assertArrayHasKey('null-var', $parameters);
150 $this->assertArrayHasKey('booleanTrue', $parameters);
151 $this->assertArrayHasKey('booleanFalse', $parameters);
152 $this->assertArrayHasKey('booleanNull', $parameters);
153 $this->assertArrayNotHasKey('non_existent_key', $parameters);
155 $this->assertSame(1, $parameters['number']);
156 $this->assertSame("123", $parameters['string']);
157 $this->assertSame("abc", $parameters['string2']);
158 $this->assertSame(array("a", "b"), $parameters['array']);
159 $this->assertSame(array("x" => "y"), $parameters['object']);
160 $this->assertSame(array("x" => array("y" => "z")), $parameters['nested']);
161 $this->assertSame(array("x" => array("y" => array("z", "p"))), $parameters['nestedArray']);
162 $this->assertSame(true, $parameters['trueVar']);
163 $this->assertSame(null, $parameters['null-var']);
165 $this->assertSame(true, $parameters['booleanTrue']);
166 $this->assertSame("tRuE", $parameters['string3']);
167 $this->assertSame(false, $parameters['booleanFalse']);
168 $this->assertSame(null, $parameters['booleanNull']);
171 public function testParserTwo()
173 $reader = new Reader(SomeClass::class, 'parserFixture');
175 $this->assertSame(1, $reader->getParameter('number'));
176 $this->assertSame("123", $reader->getParameter('string'));
177 $this->assertSame(array("x" => array("y" => array("z", "p"))),
178 $reader->getParameter('nestedArray'));
180 $this->assertSame(null, $reader->getParameter('nullVar'));
181 $this->assertSame(null, $reader->getParameter('null-var'));
182 $this->assertSame(null, $reader->getParameter('non-existent'));
185 public function testParserEmpty()
187 $reader = new Reader(SomeClass::class, 'parserEmptyFixture');
188 $parameters = $reader->getParameters();
189 $this->assertSame(array(), $parameters);
192 public function testParserMulti()
194 $reader = new Reader(SomeClass::class, 'parserMultiFixture');
195 $parameters = $reader->getParameters();
197 $this->assertNotEmpty($parameters);
198 $this->assertArrayHasKey('param', $parameters);
199 $this->assertArrayHasKey('var', $parameters);
201 $this->assertSame("x", $parameters["var"]);
202 $this->assertSame(1024, $parameters["var2"]);
205 array("string x", "integer y", "array z"),
206 $parameters["param"]);
210 public function testParserThree()
212 $reader = new Reader(SomeClass::class, 'fixtureThree');
213 // $allowedRequest = $reader->getParameter("allowedRequest");
215 $postParam = $reader->getParameter("postParam");
217 $this->assertNotEmpty($postParam);
220 public function testParserFour()
222 $reader = new Reader(SomeClass::class, 'fixtureFour');
224 $this->assertSame(true, $reader->getParameter('get'));
225 $this->assertSame(true, $reader->getParameter('post'));
226 $this->assertSame(true, $reader->getParameter('ajax'));
227 $this->assertSame(array("x", "y", "z"), $reader->getParameter('postParam'));
230 public function testParserFourBis()
232 $reader = new Reader(SomeClass::class, 'fixtureFour');
234 $parameters = $reader->getParameters();
236 $this->assertArrayHasKey('get', $parameters);
237 $this->assertArrayHasKey('post', $parameters);
238 $this->assertArrayHasKey('ajax', $parameters);
239 $this->assertArrayHasKey('postParam', $parameters);
241 $this->assertSame(true, $parameters['get']);
242 $this->assertSame(true, $parameters['post']);
243 $this->assertSame(true, $parameters['ajax']);
244 $this->assertSame(array("x", "y", "z"), $parameters['postParam']);
248 public function testParseFunctionImplicit()
250 include_once __DIR__ . "/model/SomeMethod.php";
252 $method = "\\frostbane\\DocBlockReader\\test\\model\\someMethod";
254 $this->assertTrue(function_exists($method));
256 $reader = new Reader($method);
258 $this->commonTest($reader);
261 public function testParseFunctionExplict()
263 include_once __DIR__ . "/model/SomeMethod.php";
265 $method = "\\frostbane\\DocBlockReader\\test\\model\\someMethod";
267 $this->assertTrue(function_exists($method));
269 $reader = new Reader($method, Reader::TYPE_FUNCTION);
271 $this->commonTest($reader);
274 public function testFive()
276 $reader1 = new Reader(SomeClass::class, 'fixtureFive');
277 $reader2 = new Reader(SomeClass::class, 'fixtureFive');
279 $parameters1 = $reader1->getParameters();
281 $trueVar1 = $parameters1['trueVar1'];
283 $this->assertSame(true, $trueVar1);
284 $this->assertSame(true, $reader2->getParameter("trueVar2"));
288 public function testVariableDeclarations()
290 $reader = new Reader(SomeClass::class, 'fixtureVariableDeclarations');
291 $declarations = $reader->getVariableDeclarations("param");
292 $this->assertNotEmpty($declarations);
294 $this->assertSame(array(
295 array("type" => "string", "name" => "var1"),
296 array("type" => "integer", "name" => "var2"),
301 * @dataProvider badVariableDataProvider
303 public function testBadVariableDeclarations($methodName)
305 $this->expectException(\InvalidArgumentException::class);
307 $reader = new Reader(SomeClass::class, $methodName);
309 $reader->getVariableDeclarations("param");
312 public function badVariableDataProvider()
315 array('fixtureBadVariableDeclarationsOne'),
316 array('fixtureBadVariableDeclarationsTwo'),
320 public function testConstantParser()
322 $reader = new Reader(SomeClass::class, "MY_CONST", Reader::TYPE_CONSTANT);
324 $parameters = $reader->getParameters();
326 $this->assertSame("some value", $parameters["get"]);
329 public function testConstantParserCommon()
331 $reader = new Reader(SomeClass::class, "MY_OTHER_CONST", Reader::TYPE_CONSTANT);
333 $this->commonTest($reader);