PageRenderTime 47ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/anahkiasen/former/tests/GroupTest.php

https://gitlab.com/hatemdigify/digifyblog
PHP | 376 lines | 290 code | 74 blank | 12 comment | 7 complexity | 2539c400890594d3f237b0cdde7869e0 MD5 | raw file
  1. <?php
  2. namespace Former;
  3. use Former\Dummy\DummyButton;
  4. use Former\TestCases\FormerTests;
  5. use Illuminate\Support\Str;
  6. class GroupTest extends FormerTests
  7. {
  8. public function createButton($text)
  9. {
  10. return new DummyButton($text);
  11. }
  12. ////////////////////////////////////////////////////////////////////
  13. /////////////////////////// DATA PROVIDERS /////////////////////////
  14. ////////////////////////////////////////////////////////////////////
  15. public function provideStates()
  16. {
  17. return array(
  18. array('error'),
  19. array('info'),
  20. array('success'),
  21. array('warning'),
  22. array('foo'),
  23. );
  24. }
  25. ////////////////////////////////////////////////////////////////////
  26. ////////////////////////////// MATCHERS ////////////////////////////
  27. ////////////////////////////////////////////////////////////////////
  28. public function createMatcher($state = null, $inlineHelp = null, $blockHelp = null)
  29. {
  30. $state = ($state and $state != 'foo') ? ' '.$state : null;
  31. if ($inlineHelp) {
  32. $inlineHelp = '<span class="help-inline">'.ucfirst($inlineHelp).'</span>';
  33. }
  34. if ($blockHelp) {
  35. $blockHelp = '<p class="help-block">'.ucfirst($blockHelp).'</p>';
  36. }
  37. return
  38. '<div class="control-group'.$state.'">'.
  39. '<label for="foo" class="control-label">Foo</label>'.
  40. '<div class="controls">'.
  41. '<input id="foo" type="text" name="foo">'.
  42. $inlineHelp.
  43. $blockHelp.
  44. '</div>'.
  45. '</div>';
  46. }
  47. public function createPrependAppendMatcher($prepend = array(), $append = array())
  48. {
  49. foreach ($prepend as $k => $p) {
  50. if (!Str::startsWith($p, '<button')) {
  51. $prepend[$k] = '<span class="add-on">'.$p.'</span>';
  52. }
  53. }
  54. foreach ($append as $k => $a) {
  55. if (!Str::startsWith($a, '<button')) {
  56. $append[$k] = '<span class="add-on">'.$a.'</span>';
  57. }
  58. }
  59. $class = array();
  60. if ($prepend) {
  61. $class[] = "input-prepend";
  62. }
  63. if ($append) {
  64. $class[] = "input-append";
  65. }
  66. return
  67. '<div class="control-group">'.
  68. '<label for="foo" class="control-label">Foo</label>'.
  69. '<div class="controls">'.
  70. '<div class="'.implode(' ', $class).'">'.
  71. join(null, $prepend).
  72. '<input id="foo" type="text" name="foo">'.
  73. join(null, $append).
  74. '</div>'.
  75. '</div>'.
  76. '</div>';
  77. }
  78. ////////////////////////////////////////////////////////////////////
  79. //////////////////////////////// TESTS /////////////////////////////
  80. ////////////////////////////////////////////////////////////////////
  81. public function testOpen()
  82. {
  83. $control = $this->former->text('foo')->__toString();
  84. $matcher = $this->createMatcher();
  85. $this->assertEquals($matcher, $control);
  86. }
  87. public function testCanOpenGroupManually()
  88. {
  89. $group = $this->former->group('foo')->__toString();
  90. $matcher = '<div class="control-group"><label for="Foo" class="control-label">Foo</label>';
  91. $this->assertEquals($matcher, $group);
  92. }
  93. /**
  94. * @dataProvider provideStates
  95. */
  96. public function testChangeState($state)
  97. {
  98. $control = $this->former->text('foo')->state($state)->__toString();
  99. $matcher = $this->createMatcher($state);
  100. $this->assertEquals($matcher, $control);
  101. }
  102. public function testHelp()
  103. {
  104. $control = $this->former->text('foo')->help('foo')->__toString();
  105. $matcher = $this->createMatcher(null, 'foo');
  106. $this->assertEquals($matcher, $control);
  107. }
  108. public function testInlineHelp()
  109. {
  110. $control = $this->former->text('foo')->inlineHelp('foo')->__toString();
  111. $matcher = $this->createMatcher(null, 'foo');
  112. $this->assertEquals($matcher, $control);
  113. }
  114. public function testEmptyInlineHelp()
  115. {
  116. $control = $this->former->text('foo')->inlineHelp(null)->__toString();
  117. $matcher = $this->createMatcher();
  118. $this->assertEquals($matcher, $control);
  119. }
  120. public function testBlockHelp()
  121. {
  122. $control = $this->former->text('foo')->blockHelp('foo')->__toString();
  123. $matcher = $this->createMatcher(null, null, 'foo');
  124. $this->assertEquals($matcher, $control);
  125. }
  126. public function testEmptyBlockHelp()
  127. {
  128. $control = $this->former->text('foo')->blockHelp(null)->__toString();
  129. $matcher = $this->createMatcher();
  130. $this->assertEquals($matcher, $control);
  131. }
  132. public function testBothHelps()
  133. {
  134. $control = $this->former->text('foo')->inlineHelp('foo')->blockHelp('foo')->__toString();
  135. $matcher = $this->createMatcher(null, 'foo', 'foo');
  136. $this->assertEquals($matcher, $control);
  137. }
  138. public function testPrepend()
  139. {
  140. $control = $this->former->text('foo')->prepend('@')->__toString();
  141. $matcher = $this->createPrependAppendMatcher(array('@'));
  142. $this->assertEquals($matcher, $control);
  143. }
  144. public function testPrependMultiple()
  145. {
  146. $control = $this->former->text('foo')->prepend('@', '$')->__toString();
  147. $matcher = $this->createPrependAppendMatcher(array('@', '$'));
  148. $this->assertEquals($matcher, $control);
  149. }
  150. public function testAppend()
  151. {
  152. $control = $this->former->text('foo')->append('@')->__toString();
  153. $matcher = $this->createPrependAppendMatcher(array(), array('@'));
  154. $this->assertEquals($matcher, $control);
  155. }
  156. public function testPrependAppend()
  157. {
  158. $control = $this->former->text('foo')->prepend('@')->append('@')->__toString();
  159. $matcher = $this->createPrependAppendMatcher(array('@'), array('@'));
  160. $this->assertEquals($matcher, $control);
  161. }
  162. public function testPrependAppendMix()
  163. {
  164. $control = $this->former->text('foo')
  165. ->prepend('@', $this->createButton('foo'))
  166. ->append('@', $this->createButton('foo'))
  167. ->__toString();
  168. $matcher = $this->createPrependAppendMatcher(
  169. array('@', '<button type="button" class="btn">foo</button>'),
  170. array('@', '<button type="button" class="btn">foo</button>'));
  171. $this->assertEquals($matcher, $control);
  172. }
  173. public function testPrependButton()
  174. {
  175. $matcher = $this->createPrependAppendMatcher(array('<button type="button" class="btn">Submit</button>'));
  176. $control1 = $this->former->text('foo')->prepend($this->createButton('Submit'))->__toString();
  177. $this->assertEquals($matcher, $control1);
  178. $this->resetLabels();
  179. $control2 = $this->former->text('foo')->prepend('<button type="button" class="btn">Submit</button>')->__toString();
  180. $this->assertEquals($matcher, $control2);
  181. }
  182. public function testPrependRawIcon()
  183. {
  184. $control = $this->former->text('foo')->prepend('<i class="icon-enveloppe"></i>')->__toString();
  185. $matcher = $this->createPrependAppendMatcher(array('<i class="icon-enveloppe"></i>'));
  186. $this->assertEquals($matcher, $control);
  187. }
  188. public function testPrependIcon()
  189. {
  190. $control = $this->former->text('foo')->prependIcon('enveloppe')->__toString();
  191. $matcher = $this->createPrependAppendMatcher(array('<i class="icon-enveloppe"></i>'));
  192. $this->assertEquals($matcher, $control);
  193. }
  194. public function testAllTheThings()
  195. {
  196. $control = $this->former->text('foo')
  197. ->state('error')
  198. ->inlineHelp('foo')
  199. ->blockHelp('bar')
  200. ->prepend('@', '$', $this->createButton('foo'))
  201. ->append('@', '$', $this->createButton('foo'))
  202. ->__toString();
  203. $matcher =
  204. '<div class="control-group error">'.
  205. '<label for="foo" class="control-label">Foo</label>'.
  206. '<div class="controls">'.
  207. '<div class="input-prepend input-append">'.
  208. '<span class="add-on">@</span>'.
  209. '<span class="add-on">$</span>'.
  210. '<button type="button" class="btn">foo</button>'.
  211. '<input id="foo" type="text" name="foo">'.
  212. '<span class="add-on">@</span>'.
  213. '<span class="add-on">$</span>'.
  214. '<button type="button" class="btn">foo</button>'.
  215. '</div>'.
  216. '<span class="help-inline">Foo</span>'.
  217. '<p class="help-block">Bar</p>'.
  218. '</div>'.
  219. '</div>';
  220. $this->assertEquals($matcher, $control);
  221. }
  222. public function testCanInlineASingleField()
  223. {
  224. $input = $this->former->text('foo')->raw()->__toString();
  225. $matcher = $this->matchField();
  226. unset($matcher['id']);
  227. $this->assertHTML($matcher, $input);
  228. }
  229. public function testCanCreateRawGroups()
  230. {
  231. $group = $this->former->group()->contents('This be <b>HTML</b> content');
  232. $matcher = '<div class="control-group"><div class="controls">This be <b>HTML</b> content</div></div>';
  233. $this->assertEquals($matcher, $group);
  234. }
  235. public function testCanCreateRawLabelessGroups()
  236. {
  237. $group = $this->former->group('MyField')->contents('This be <b>HTML</b> content');
  238. $matcher = '<div class="control-group">'.
  239. '<label for="MyField" class="control-label">MyField</label>'.
  240. '<div class="controls">This be <b>HTML</b> content</div>'.
  241. '</div>';
  242. $this->assertEquals($matcher, $group);
  243. }
  244. public function testCanAddClassToGroup()
  245. {
  246. $control = $this->former->text('foo')->addGroupClass('foo')->__toString();
  247. $matcher = $this->createMatcher();
  248. $matcher = str_replace('group"', 'group foo"', $matcher);
  249. $this->assertEquals($matcher, $control);
  250. }
  251. public function testCanRecognizeGroupValidationErrors()
  252. {
  253. $this->mockSession(array('foo' => 'bar', 'bar' => 'baz'));
  254. $this->former->withErrors();
  255. $matcher = '<div class="control-group error"><label for="Foo" class="control-label">Foo</label>';
  256. $group = $this->former->group('foo', array('foo'))->__toString();
  257. $this->assertEquals($matcher, $group);
  258. $group = $this->former->group('foo', 'foo')->__toString();
  259. $this->assertEquals($matcher, $group);
  260. $group = $this->former->group('foo', array('foo', 'bar'))->__toString();
  261. $this->assertEquals($matcher, $group);
  262. }
  263. public function testUnderscoresInHelpTextAreKept()
  264. {
  265. $control = $this->former->text('foo')->help('/path_to_foo.jpg')->__toString();
  266. $matcher = $this->createMatcher(null, '/path_to_foo.jpg');
  267. $this->assertEquals($matcher, $control);
  268. }
  269. public function testCanIgnoreGroupValidationErrors()
  270. {
  271. $this->mockSession(array('foo' => 'bar', 'bar' => 'baz'));
  272. $this->former->withErrors();
  273. $matcher = '<div class="control-group"><label for="Foo" class="control-label">Foo</label>';
  274. $group = $this->former->group('foo', array())->__toString();
  275. $this->assertEquals($matcher, $group);
  276. $group = $this->former->group('foo', array('baz'))->__toString();
  277. $this->assertEquals($matcher, $group);
  278. }
  279. public function testFieldsInCustomGroupsAreRawByDefault()
  280. {
  281. $this->former->group('foobar');
  282. $test = $this->former->text('foobar')->__toString();
  283. $this->assertNotContains('control-group', $test);
  284. }
  285. public function testCanSetAttributesOnGroup()
  286. {
  287. $text = $this->former->text('foobar')->onGroupAddClass('foobar')->__toString();
  288. $this->assertContains('control-group foobar', $text);
  289. }
  290. public function testCloseUnopenedGroup()
  291. {
  292. $text = $this->former->closeGroup();
  293. $this->assertEmpty($text);
  294. }
  295. public function testCloseOpenedGroup()
  296. {
  297. $this->former->group('foo');
  298. $text = $this->former->closeGroup();
  299. $matcher = '</div>';
  300. $this->assertEquals($matcher, $text);
  301. }
  302. }