mirror of
https://github.com/danog/psalm.git
synced 2024-12-02 09:37:59 +01:00
Fix tests to all have property types
This commit is contained in:
parent
b78e83c4c0
commit
5cc5bd4ed4
@ -101,6 +101,13 @@ class AssignmentChecker
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($assign_value instanceof PhpParser\Node\Expr\Array_
|
||||||
|
&& isset($assign_value->items[$offset]->value->inferredType)
|
||||||
|
) {
|
||||||
|
self::check($statements_checker, $var, $assign_value->items[$offset]->value, $context, $doc_comment);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$list_var_id = ExpressionChecker::getVarId(
|
$list_var_id = ExpressionChecker::getVarId(
|
||||||
$var,
|
$var,
|
||||||
$statements_checker->getAbsoluteClass(),
|
$statements_checker->getAbsoluteClass(),
|
||||||
@ -108,19 +115,14 @@ class AssignmentChecker
|
|||||||
$statements_checker->getAliasedClasses()
|
$statements_checker->getAliasedClasses()
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($assign_value instanceof PhpParser\Node\Expr\Array_
|
|
||||||
&& isset($assign_value->items[$offset]->value->inferredType)
|
|
||||||
) {
|
|
||||||
$array_type = $assign_value->items[$offset]->value->inferredType;
|
|
||||||
}
|
|
||||||
elseif (isset($return_type->types['array']) && $return_type->types['array'] instanceof Type\Generic) {
|
|
||||||
$array_type = $return_type->types['array']->type_params[1];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$array_type = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($list_var_id) {
|
if ($list_var_id) {
|
||||||
|
if (isset($return_type->types['array']) && $return_type->types['array'] instanceof Type\Generic) {
|
||||||
|
$array_type = $return_type->types['array']->type_params[1];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$array_type = null;
|
||||||
|
}
|
||||||
|
|
||||||
$context->vars_in_scope[$list_var_id] = $array_type ? clone $array_type : Type::getMixed();
|
$context->vars_in_scope[$list_var_id] = $array_type ? clone $array_type : Type::getMixed();
|
||||||
$context->vars_possibly_in_scope[$list_var_id] = true;
|
$context->vars_possibly_in_scope[$list_var_id] = true;
|
||||||
$statements_checker->registerVariable($list_var_id, $var->getLine());
|
$statements_checker->registerVariable($list_var_id, $var->getLine());
|
||||||
|
@ -9,7 +9,7 @@ use Psalm\Context;
|
|||||||
use Psalm\Checker\TypeChecker;
|
use Psalm\Checker\TypeChecker;
|
||||||
use Psalm\Type;
|
use Psalm\Type;
|
||||||
|
|
||||||
class InterfaceTest extends PHPUnit_Framework_TestCase
|
class ListTest extends PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
protected static $_parser;
|
protected static $_parser;
|
||||||
|
|
||||||
@ -71,7 +71,38 @@ class InterfaceTest extends PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
$stmts = self::$_parser->parse('<?php
|
$stmts = self::$_parser->parse('<?php
|
||||||
class A {
|
class A {
|
||||||
|
/** @var string */
|
||||||
public $a;
|
public $a;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
public $b;
|
||||||
|
|
||||||
|
public function foo() : string
|
||||||
|
{
|
||||||
|
list($this->a, $this->b) = ["a", "b"];
|
||||||
|
|
||||||
|
return $this->a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
');
|
||||||
|
|
||||||
|
$file_checker = new \Psalm\Checker\FileChecker('somefile.php', $stmts);
|
||||||
|
$context = new Context('somefile.php');
|
||||||
|
$file_checker->check(true, true, $context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException Psalm\Exception\CodeException
|
||||||
|
* @expectedExceptionMessage InvalidPropertyAssignment - somefile.php:11
|
||||||
|
*/
|
||||||
|
public function testThisVarWithBadType()
|
||||||
|
{
|
||||||
|
$stmts = self::$_parser->parse('<?php
|
||||||
|
class A {
|
||||||
|
/** @var int */
|
||||||
|
public $a;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
public $b;
|
public $b;
|
||||||
|
|
||||||
public function foo() : string
|
public function foo() : string
|
||||||
|
@ -125,12 +125,9 @@ class Php70Test extends PHPUnit_Framework_TestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
class Application {
|
class Application {
|
||||||
|
/** @var Logger|null */
|
||||||
private $logger;
|
private $logger;
|
||||||
|
|
||||||
public function getLogger(): Logger {
|
|
||||||
return $this->logger;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setLogger(Logger $logger) {
|
public function setLogger(Logger $logger) {
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
}
|
}
|
||||||
|
@ -162,6 +162,7 @@ class TypeTest extends PHPUnit_Framework_TestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
class B {
|
class B {
|
||||||
|
/** @var A|null */
|
||||||
public $a;
|
public $a;
|
||||||
|
|
||||||
public function bar(A $a = null) {
|
public function bar(A $a = null) {
|
||||||
@ -182,6 +183,7 @@ class TypeTest extends PHPUnit_Framework_TestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
class B {
|
class B {
|
||||||
|
/** @var A|null */
|
||||||
public $a;
|
public $a;
|
||||||
|
|
||||||
public function bar(A $a = null) {
|
public function bar(A $a = null) {
|
||||||
@ -202,6 +204,7 @@ class TypeTest extends PHPUnit_Framework_TestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
class B {
|
class B {
|
||||||
|
/** @var A|null */
|
||||||
public $a;
|
public $a;
|
||||||
|
|
||||||
public function bar(A $a = null) {
|
public function bar(A $a = null) {
|
||||||
@ -268,6 +271,7 @@ class TypeTest extends PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
$stmts = self::$_parser->parse('<?php
|
$stmts = self::$_parser->parse('<?php
|
||||||
class One {
|
class One {
|
||||||
|
/** @var int|null */
|
||||||
public $two;
|
public $two;
|
||||||
|
|
||||||
public function foo() {}
|
public function foo() {}
|
||||||
@ -390,6 +394,7 @@ class TypeTest extends PHPUnit_Framework_TestCase
|
|||||||
{
|
{
|
||||||
$stmts = self::$_parser->parse('<?php
|
$stmts = self::$_parser->parse('<?php
|
||||||
class One {
|
class One {
|
||||||
|
/** @var string */
|
||||||
public $a;
|
public $a;
|
||||||
|
|
||||||
public function foo() {}
|
public function foo() {}
|
||||||
@ -945,6 +950,7 @@ class TypeTest extends PHPUnit_Framework_TestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
class B {
|
class B {
|
||||||
|
/** @var One|null */
|
||||||
public $one;
|
public $one;
|
||||||
|
|
||||||
public function bar(One $one = null) {
|
public function bar(One $one = null) {
|
||||||
|
Loading…
Reference in New Issue
Block a user