forked from laravel/framework
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSupportSerializableClosureTest.php
More file actions
executable file
·51 lines (40 loc) · 1.1 KB
/
SupportSerializableClosureTest.php
File metadata and controls
executable file
·51 lines (40 loc) · 1.1 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
<?php
use Illuminate\Support\SerializableClosure as S;
class SupportSerializableClosureTest extends PHPUnit_Framework_TestCase {
public function testClosureCanBeSerializedAndRebuilt()
{
$f = new S(function() { return 'hello'; });
$serialized = serialize($f);
$unserialized = unserialize($serialized);
/** @var \Closure $unserialized */
$this->assertEquals('hello', $unserialized());
}
public function testClosureCanBeSerializedAndRebuiltAndInheritState()
{
$a = 1;
$b = 1;
$f = new S(function($i) use ($a, $b)
{
return $a + $b + $i;
});
$serialized = serialize($f);
$unserialized = unserialize($serialized);
/** @var \Closure $unserialized */
$this->assertEquals(3, $unserialized(1));
}
public function testCanGetCodeAndVariablesFromObject()
{
$a = 1;
$b = 2;
$f = new S(function($i) use ($a, $b)
{
return $a + $b + $i;
});
$expectedVars = array('a' => 1, 'b' => 2);
$expectedCode = 'function ($i) use($a, $b) {
return $a + $b + $i;
};';
$this->assertEquals($expectedVars, $f->getVariables());
$this->assertEquals($expectedCode, $f->getCode());
}
}