1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-26 20:34:47 +01:00
psalm/tests/BinaryOperationTest.php

138 lines
4.2 KiB
PHP
Raw Normal View History

2016-12-24 00:52:34 +01:00
<?php
namespace Psalm\Tests;
class BinaryOperationTest extends TestCase
2016-12-24 00:52:34 +01:00
{
use Traits\FileCheckerInvalidCodeParseTestTrait;
use Traits\FileCheckerValidCodeParseTestTrait;
2016-12-24 00:52:34 +01:00
/**
* @return array
2016-12-24 00:52:34 +01:00
*/
public function providerFileCheckerValidCodeParse()
2016-12-24 00:52:34 +01:00
{
return [
'regularAddition' => [
'<?php
2017-05-27 02:05:57 +02:00
$a = 5 + 4;',
],
'differingNumericTypesAdditionInWeakMode' => [
'<?php
2017-05-27 02:05:57 +02:00
$a = 5 + 4.1;',
],
'numericAddition' => [
'<?php
$a = "5";
if (is_numeric($a)) {
$b = $a + 4;
2017-05-27 02:05:57 +02:00
}',
],
'concatenation' => [
'<?php
2017-05-27 02:05:57 +02:00
$a = "Hey " . "Jude,";',
],
'concatenationWithNumberInWeakMode' => [
'<?php
2017-05-27 02:05:57 +02:00
$a = "hi" . 5;',
],
'possiblyInvalidAdditionOnBothSides' => [
'<?php
function foo(string $s) : int {
return strpos($s, "a") + strpos($s, "b");
}',
'assertions' => [],
'error_levels' => ['PossiblyFalseOperand'],
],
'bitwiseoperations' => [
'<?php
$a = 4 & 5;
$b = 2 | 3;
$c = 4 ^ 3;
$d = 1 << 2;
2018-04-17 00:19:18 +02:00
$e = 15 >> 2;
$f = "a" & "b";',
'assertions' => [
'$a' => 'int',
'$b' => 'int',
'$c' => 'int',
'$d' => 'int',
'$e' => 'int',
2018-04-17 00:19:18 +02:00
'$f' => 'string',
],
],
2018-05-05 18:59:30 +02:00
'gmpOperations' => [
'<?php
$a = gmp_init(2);
$b = gmp_init(4);
$c = $a + $b;
$d = $c + 3;',
'assertions' => [
'$a' => 'GMP',
'$b' => 'GMP',
'$c' => 'GMP',
'$d' => 'GMP',
],
],
];
2016-12-24 00:52:34 +01:00
}
2017-01-13 20:07:23 +01:00
/**
* @return array
2017-01-13 20:07:23 +01:00
*/
public function providerFileCheckerInvalidCodeParse()
2016-12-24 00:52:34 +01:00
{
return [
'badAddition' => [
'<?php
$a = "b" + 5;',
2017-05-27 02:05:57 +02:00
'error_message' => 'InvalidOperand',
],
'differingNumericTypesAdditionInStrictMode' => [
'<?php
$a = 5 + 4.1;',
'error_message' => 'InvalidOperand',
'error_levels' => [],
2017-05-27 02:05:57 +02:00
'strict_mode' => true,
],
'concatenationWithNumberInStrictMode' => [
'<?php
$a = "hi" . 5;',
'error_message' => 'InvalidOperand',
'error_levels' => [],
2017-05-27 02:05:57 +02:00
'strict_mode' => true,
],
'addArrayToNumber' => [
'<?php
$a = [1] + 1;',
'error_message' => 'InvalidOperand',
'error_levels' => [],
2017-05-27 02:05:57 +02:00
'strict_mode' => true,
],
'additionWithClassInWeakMode' => [
'<?php
$a = "hi" + (new stdClass);',
'error_message' => 'InvalidOperand',
],
'possiblyInvalidOperand' => [
'<?php
$b = rand(0, 1) ? [] : 4;
echo $b + 5;',
'error_message' => 'PossiblyInvalidOperand',
],
'possiblyInvalidConcat' => [
'<?php
$b = rand(0, 1) ? [] : "hello";
echo $b . "goodbye";',
'error_message' => 'PossiblyInvalidOperand',
],
2018-05-05 18:59:30 +02:00
'invalidGMPOperation' => [
'<?php
$a = gmp_init(2);
$b = "a" + $a;',
'error_message' => 'InvalidOperand - src/somefile.php:3 - Cannot add GMP to non-numeric type',
],
];
2016-12-24 00:52:34 +01:00
}
}