069ccd322929ea5a486f189c6c1ef9fb6dad436b
[yaffs-website] / vendor / symfony / validator / Tests / Mapping / Loader / StaticMethodLoaderTest.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\Validator\Tests\Mapping\Loader;
13
14 use PHPUnit\Framework\TestCase;
15 use Symfony\Component\Validator\Mapping\ClassMetadata;
16 use Symfony\Component\Validator\Mapping\Loader\StaticMethodLoader;
17 use Symfony\Component\Validator\Tests\Fixtures\ConstraintA;
18
19 class StaticMethodLoaderTest extends TestCase
20 {
21     private $errorLevel;
22
23     protected function setUp()
24     {
25         $this->errorLevel = error_reporting();
26     }
27
28     protected function tearDown()
29     {
30         error_reporting($this->errorLevel);
31     }
32
33     public function testLoadClassMetadataReturnsTrueIfSuccessful()
34     {
35         $loader = new StaticMethodLoader('loadMetadata');
36         $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderEntity');
37
38         $this->assertTrue($loader->loadClassMetadata($metadata));
39     }
40
41     public function testLoadClassMetadataReturnsFalseIfNotSuccessful()
42     {
43         $loader = new StaticMethodLoader('loadMetadata');
44         $metadata = new ClassMetadata('\stdClass');
45
46         $this->assertFalse($loader->loadClassMetadata($metadata));
47     }
48
49     public function testLoadClassMetadata()
50     {
51         $loader = new StaticMethodLoader('loadMetadata');
52         $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderEntity');
53
54         $loader->loadClassMetadata($metadata);
55
56         $this->assertEquals(StaticLoaderEntity::$invokedWith, $metadata);
57     }
58
59     public function testLoadClassMetadataDoesNotRepeatLoadWithParentClasses()
60     {
61         $loader = new StaticMethodLoader('loadMetadata');
62         $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderDocument');
63         $loader->loadClassMetadata($metadata);
64         $this->assertCount(0, $metadata->getConstraints());
65
66         $loader = new StaticMethodLoader('loadMetadata');
67         $metadata = new ClassMetadata(__NAMESPACE__.'\BaseStaticLoaderDocument');
68         $loader->loadClassMetadata($metadata);
69         $this->assertCount(1, $metadata->getConstraints());
70     }
71
72     public function testLoadClassMetadataIgnoresInterfaces()
73     {
74         $loader = new StaticMethodLoader('loadMetadata');
75         $metadata = new ClassMetadata(__NAMESPACE__.'\StaticLoaderInterface');
76
77         $loader->loadClassMetadata($metadata);
78
79         $this->assertCount(0, $metadata->getConstraints());
80     }
81
82     public function testLoadClassMetadataInAbstractClasses()
83     {
84         $loader = new StaticMethodLoader('loadMetadata');
85         $metadata = new ClassMetadata(__NAMESPACE__.'\AbstractStaticLoader');
86
87         $loader->loadClassMetadata($metadata);
88
89         $this->assertCount(1, $metadata->getConstraints());
90     }
91
92     public function testLoadClassMetadataIgnoresAbstractMethods()
93     {
94         // Disable error reporting, as AbstractStaticMethodLoader produces a
95         // strict standards error
96         error_reporting(0);
97
98         $metadata = new ClassMetadata(__NAMESPACE__.'\AbstractStaticMethodLoader');
99
100         $loader = new StaticMethodLoader('loadMetadata');
101         $loader->loadClassMetadata($metadata);
102
103         $this->assertCount(0, $metadata->getConstraints());
104     }
105 }
106
107 interface StaticLoaderInterface
108 {
109     public static function loadMetadata(ClassMetadata $metadata);
110 }
111
112 abstract class AbstractStaticLoader
113 {
114     public static function loadMetadata(ClassMetadata $metadata)
115     {
116         $metadata->addConstraint(new ConstraintA());
117     }
118 }
119
120 class StaticLoaderEntity
121 {
122     public static $invokedWith = null;
123
124     public static function loadMetadata(ClassMetadata $metadata)
125     {
126         self::$invokedWith = $metadata;
127     }
128 }
129
130 class StaticLoaderDocument extends BaseStaticLoaderDocument
131 {
132 }
133
134 class BaseStaticLoaderDocument
135 {
136     public static function loadMetadata(ClassMetadata $metadata)
137     {
138         $metadata->addConstraint(new ConstraintA());
139     }
140 }