SupportMessageBagTest.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. <?php
  2. namespace Illuminate\Tests\Support;
  3. use Illuminate\Support\Collection;
  4. use Illuminate\Support\MessageBag;
  5. use PHPUnit\Framework\TestCase;
  6. class SupportMessageBagTest extends TestCase
  7. {
  8. public function testUniqueness()
  9. {
  10. $container = new MessageBag;
  11. $container->add('foo', 'bar');
  12. $container->add('foo', 'bar');
  13. $messages = $container->getMessages();
  14. $this->assertEquals(['bar'], $messages['foo']);
  15. }
  16. public function testMessagesAreAdded()
  17. {
  18. $container = new MessageBag;
  19. $container->setFormat(':message');
  20. $container->add('foo', 'bar');
  21. $container->add('foo', 'baz');
  22. $container->add('boom', 'bust');
  23. $messages = $container->getMessages();
  24. $this->assertEquals(['bar', 'baz'], $messages['foo']);
  25. $this->assertEquals(['bust'], $messages['boom']);
  26. }
  27. public function testKeys()
  28. {
  29. $container = new MessageBag;
  30. $container->setFormat(':message');
  31. $container->add('foo', 'bar');
  32. $container->add('foo', 'baz');
  33. $container->add('boom', 'bust');
  34. $this->assertEquals(['foo', 'boom'], $container->keys());
  35. }
  36. public function testMessagesMayBeMerged()
  37. {
  38. $container = new MessageBag(['username' => ['foo']]);
  39. $container->merge(['username' => ['bar']]);
  40. $this->assertEquals(['username' => ['foo', 'bar']], $container->getMessages());
  41. }
  42. public function testMessageBagsCanBeMerged()
  43. {
  44. $container = new MessageBag(['foo' => ['bar']]);
  45. $otherContainer = new MessageBag(['foo' => ['baz'], 'bar' => ['foo']]);
  46. $container->merge($otherContainer);
  47. $this->assertEquals(['foo' => ['bar', 'baz'], 'bar' => ['foo']], $container->getMessages());
  48. }
  49. public function testMessageBagsCanConvertToArrays()
  50. {
  51. $container = new MessageBag([
  52. Collection::make(['foo', 'bar']),
  53. Collection::make(['baz', 'qux']),
  54. ]);
  55. $this->assertSame([['foo', 'bar'], ['baz', 'qux']], $container->getMessages());
  56. }
  57. public function testGetReturnsArrayOfMessagesByKey()
  58. {
  59. $container = new MessageBag;
  60. $container->setFormat(':message');
  61. $container->add('foo', 'bar');
  62. $container->add('foo', 'baz');
  63. $this->assertEquals(['bar', 'baz'], $container->get('foo'));
  64. }
  65. public function testGetReturnsArrayOfMessagesByImplicitKey()
  66. {
  67. $container = new MessageBag;
  68. $container->setFormat(':message');
  69. $container->add('foo.1', 'bar');
  70. $container->add('foo.2', 'baz');
  71. $this->assertEquals(['foo.1' => ['bar'], 'foo.2' => ['baz']], $container->get('foo.*'));
  72. }
  73. public function testFirstReturnsSingleMessage()
  74. {
  75. $container = new MessageBag;
  76. $container->setFormat(':message');
  77. $container->add('foo', 'bar');
  78. $container->add('foo', 'baz');
  79. $this->assertSame('bar', $container->first('foo'));
  80. }
  81. public function testFirstReturnsEmptyStringIfNoMessagesFound()
  82. {
  83. $container = new MessageBag;
  84. $container->setFormat(':message');
  85. $this->assertSame('', $container->first('foo'));
  86. }
  87. public function testFirstReturnsSingleMessageFromDotKeys()
  88. {
  89. $container = new MessageBag;
  90. $container->setFormat(':message');
  91. $container->add('name.first', 'jon');
  92. $container->add('name.last', 'snow');
  93. $this->assertSame('jon', $container->first('name.*'));
  94. }
  95. public function testHasIndicatesExistence()
  96. {
  97. $container = new MessageBag;
  98. $container->setFormat(':message');
  99. $container->add('foo', 'bar');
  100. $this->assertTrue($container->has('foo'));
  101. $this->assertFalse($container->has('bar'));
  102. }
  103. public function testHasWithKeyNull()
  104. {
  105. $container = new MessageBag;
  106. $container->setFormat(':message');
  107. $container->add('foo', 'bar');
  108. $this->assertTrue($container->has(null));
  109. }
  110. public function testHasAnyIndicatesExistence()
  111. {
  112. $container = new MessageBag;
  113. $container->setFormat(':message');
  114. $this->assertFalse($container->hasAny());
  115. $container->add('foo', 'bar');
  116. $container->add('bar', 'foo');
  117. $container->add('boom', 'baz');
  118. $this->assertTrue($container->hasAny(['foo', 'bar']));
  119. $this->assertTrue($container->hasAny('foo', 'bar'));
  120. $this->assertTrue($container->hasAny(['boom', 'baz']));
  121. $this->assertTrue($container->hasAny('boom', 'baz'));
  122. $this->assertFalse($container->hasAny(['baz']));
  123. $this->assertFalse($container->hasAny('baz'));
  124. $this->assertFalse($container->hasAny('baz', 'biz'));
  125. }
  126. public function testHasIndicatesExistenceOfAllKeys()
  127. {
  128. $container = new MessageBag;
  129. $container->setFormat(':message');
  130. $container->add('foo', 'bar');
  131. $container->add('bar', 'foo');
  132. $container->add('boom', 'baz');
  133. $this->assertTrue($container->has(['foo', 'bar', 'boom']));
  134. $this->assertFalse($container->has(['foo', 'bar', 'boom', 'baz']));
  135. $this->assertFalse($container->has(['foo', 'baz']));
  136. }
  137. public function testHasIndicatesNoneExistence()
  138. {
  139. $container = new MessageBag;
  140. $container->setFormat(':message');
  141. $this->assertFalse($container->has('foo'));
  142. }
  143. public function testAllReturnsAllMessages()
  144. {
  145. $container = new MessageBag;
  146. $container->setFormat(':message');
  147. $container->add('foo', 'bar');
  148. $container->add('boom', 'baz');
  149. $this->assertEquals(['bar', 'baz'], $container->all());
  150. }
  151. public function testFormatIsRespected()
  152. {
  153. $container = new MessageBag;
  154. $container->setFormat('<p>:message</p>');
  155. $container->add('foo', 'bar');
  156. $container->add('boom', 'baz');
  157. $this->assertSame('<p>bar</p>', $container->first('foo'));
  158. $this->assertEquals(['<p>bar</p>'], $container->get('foo'));
  159. $this->assertEquals(['<p>bar</p>', '<p>baz</p>'], $container->all());
  160. $this->assertSame('bar', $container->first('foo', ':message'));
  161. $this->assertEquals(['bar'], $container->get('foo', ':message'));
  162. $this->assertEquals(['bar', 'baz'], $container->all(':message'));
  163. $container->setFormat(':key :message');
  164. $this->assertSame('foo bar', $container->first('foo'));
  165. }
  166. public function testUnique()
  167. {
  168. $container = new MessageBag;
  169. $container->setFormat(':message');
  170. $container->add('foo', 'bar');
  171. $container->add('foo2', 'bar');
  172. $container->add('boom', 'baz');
  173. $this->assertEquals([0 => 'bar', 2 => 'baz'], $container->unique());
  174. }
  175. public function testMessageBagReturnsCorrectArray()
  176. {
  177. $container = new MessageBag;
  178. $container->setFormat(':message');
  179. $container->add('foo', 'bar');
  180. $container->add('boom', 'baz');
  181. $this->assertEquals(['foo' => ['bar'], 'boom' => ['baz']], $container->toArray());
  182. }
  183. public function testMessageBagReturnsExpectedJson()
  184. {
  185. $container = new MessageBag;
  186. $container->setFormat(':message');
  187. $container->add('foo', 'bar');
  188. $container->add('boom', 'baz');
  189. $this->assertSame('{"foo":["bar"],"boom":["baz"]}', $container->toJson());
  190. }
  191. public function testCountReturnsCorrectValue()
  192. {
  193. $container = new MessageBag;
  194. $this->assertCount(0, $container);
  195. $container->add('foo', 'bar');
  196. $container->add('foo', 'baz');
  197. $container->add('boom', 'baz');
  198. $this->assertCount(3, $container);
  199. }
  200. public function testCountable()
  201. {
  202. $container = new MessageBag;
  203. $container->add('foo', 'bar');
  204. $container->add('boom', 'baz');
  205. $this->assertCount(2, $container);
  206. }
  207. public function testConstructor()
  208. {
  209. $messageBag = new MessageBag(['country' => 'Azerbaijan', 'capital' => 'Baku']);
  210. $this->assertEquals(['country' => ['Azerbaijan'], 'capital' => ['Baku']], $messageBag->getMessages());
  211. }
  212. public function testFirstFindsMessageForWildcardKey()
  213. {
  214. $container = new MessageBag;
  215. $container->setFormat(':message');
  216. $container->add('foo.bar', 'baz');
  217. $this->assertSame('baz', $container->first('foo.*'));
  218. }
  219. public function testIsEmptyTrue()
  220. {
  221. $container = new MessageBag;
  222. $this->assertTrue($container->isEmpty());
  223. }
  224. public function testIsEmptyFalse()
  225. {
  226. $container = new MessageBag;
  227. $container->add('foo.bar', 'baz');
  228. $this->assertFalse($container->isEmpty());
  229. }
  230. public function testIsNotEmptyTrue()
  231. {
  232. $container = new MessageBag;
  233. $container->add('foo.bar', 'baz');
  234. $this->assertTrue($container->isNotEmpty());
  235. }
  236. public function testIsNotEmptyFalse()
  237. {
  238. $container = new MessageBag;
  239. $this->assertFalse($container->isNotEmpty());
  240. }
  241. public function testToString()
  242. {
  243. $container = new MessageBag;
  244. $container->add('foo.bar', 'baz');
  245. $this->assertSame('{"foo.bar":["baz"]}', (string) $container);
  246. }
  247. public function testGetFormat()
  248. {
  249. $container = new MessageBag;
  250. $container->setFormat(':message');
  251. $this->assertSame(':message', $container->getFormat());
  252. }
  253. public function testConstructorUniquenessConsistency()
  254. {
  255. $messageBag = new MessageBag(['messages' => ['first', 'second', 'third', 'third']]);
  256. $messages = $messageBag->getMessages();
  257. $this->assertEquals(['first', 'second', 'third'], $messages['messages']);
  258. $messageBag = new MessageBag;
  259. $messageBag->add('messages', 'first');
  260. $messageBag->add('messages', 'second');
  261. $messageBag->add('messages', 'third');
  262. $messageBag->add('messages', 'third');
  263. $messages = $messageBag->getMessages();
  264. $this->assertEquals(['first', 'second', 'third'], $messages['messages']);
  265. }
  266. }