1
0
mirror of https://github.com/danog/psalm.git synced 2025-01-22 05:41:20 +01:00
psalm/tests/IncludeTest.php

145 lines
4.5 KiB
PHP
Raw Normal View History

2017-01-07 19:07:58 -05:00
<?php
namespace Psalm\Tests;
use Psalm\Checker\FileChecker;
class IncludeTest extends TestCase
2017-01-07 19:07:58 -05:00
{
2017-01-13 14:07:23 -05:00
/**
* @dataProvider providerTestValidIncludes
2017-05-26 20:16:18 -04:00
*
* @param array $files_to_check
* @param array $files
* @param array<string,string> $includes
2017-05-26 20:16:18 -04:00
*
2017-01-13 14:07:23 -05:00
* @return void
*/
public function testBasicRequire(array $files, array $files_to_check)
2017-01-07 19:33:33 -05:00
{
foreach ($files as $filename => $contents) {
$this->project_checker->registerFile($filename, $contents);
}
2017-01-07 19:33:33 -05:00
foreach ($files_to_check as $filename) {
$contents = $files[$filename];
2017-01-07 19:33:33 -05:00
$file_checker = new FileChecker(
$filename,
$this->project_checker,
self::$parser->parse($contents)
);
$file_checker->visitAndAnalyzeMethods();
}
2017-01-07 19:33:33 -05:00
}
2017-01-13 14:07:23 -05:00
/**
* @return array
2017-01-13 14:07:23 -05:00
*/
public function providerTestValidIncludes()
{
return [
'basicRequire' => [
'files' => [
getcwd() . DIRECTORY_SEPARATOR . 'file2.php' => '<?php
require("file1.php");
class B {
public function foo() : void {
(new A);
}
2017-05-26 20:05:57 -04:00
}',
getcwd() . DIRECTORY_SEPARATOR . 'file1.php' => '<?php
class A{}',
],
'files_to_check' => [
getcwd() . DIRECTORY_SEPARATOR . 'file2.php'
2017-05-26 20:05:57 -04:00
],
],
'nestedRequire' => [
'files' => [
getcwd() . DIRECTORY_SEPARATOR . 'file1.php' => '<?php
class A{
public function fooFoo() : void {
}
}',
getcwd() . DIRECTORY_SEPARATOR . 'file2.php' => '<?php
require("file1.php");
class B extends A{
2017-05-26 20:05:57 -04:00
}',
getcwd() . DIRECTORY_SEPARATOR . 'file3.php' => '<?php
require("file2.php");
class C extends B {
public function doFoo() : void {
$this->fooFoo();
}
}',
],
'files_to_check' => [
getcwd() . DIRECTORY_SEPARATOR . 'file3.php'
2017-05-26 20:05:57 -04:00
],
],
'requireNamespace' => [
'files' => [
getcwd() . DIRECTORY_SEPARATOR . 'file1.php' => '<?php
namespace Foo;
class A{
2017-05-26 20:05:57 -04:00
}',
getcwd() . DIRECTORY_SEPARATOR . 'file2.php' => '<?php
require("file1.php");
class B {
public function foo() : void {
(new Foo\A);
}
}',
],
'files_to_check' => [
getcwd() . DIRECTORY_SEPARATOR . 'file2.php'
2017-05-26 20:05:57 -04:00
],
],
'requireFunction' => [
'files' => [
getcwd() . DIRECTORY_SEPARATOR . 'file1.php' => '<?php
function fooFoo() : void {
2017-05-26 20:05:57 -04:00
}',
getcwd() . DIRECTORY_SEPARATOR . 'file2.php' => '<?php
require("file1.php");
fooFoo();',
],
'files_to_check' => [
getcwd() . DIRECTORY_SEPARATOR . 'file2.php'
2017-05-26 20:05:57 -04:00
],
],
'requireNamespacedWithUse' => [
'files' => [
getcwd() . DIRECTORY_SEPARATOR . 'file1.php' => '<?php
namespace Foo;
class A{
2017-05-26 20:05:57 -04:00
}',
getcwd() . DIRECTORY_SEPARATOR . 'file2.php' => '<?php
require("file1.php");
use Foo\A;
class B {
public function foo() : void {
(new A);
}
}',
],
'files_to_check' => [
getcwd() . DIRECTORY_SEPARATOR . 'file2.php'
2017-05-26 20:05:57 -04:00
],
],
];
}
2017-01-07 19:07:58 -05:00
}