/vendor/plugins/multiple_select/test/multiple_select_test.rb

https://github.com/wangmh/webistrano · Ruby · 686 lines · 584 code · 100 blank · 2 comment · 0 complexity · 272625e4450fe0e75271b60ca66c26e4 MD5 · raw file

  1. require File.dirname(__FILE__) + '/test_helper'
  2. class MultipleSelectTest < Test::Unit::TestCase #:nodoc:
  3. include FightTheMelons::Helpers::FormMultipleSelectHelper
  4. fixtures :nodes, :fathers, :sons
  5. # Have to fake the default static variables because they jump from one test to
  6. # another. Yes, this is bad bad bad coding.
  7. def setup
  8. FightTheMelons::Helpers::FormMultipleSelectHelperConfiguration.outer_class = nil
  9. FightTheMelons::Helpers::FormMultipleSelectHelperConfiguration.inner_class = nil
  10. FightTheMelons::Helpers::FormMultipleSelectHelperConfiguration.level_class = nil
  11. FightTheMelons::Helpers::FormMultipleSelectHelperConfiguration.alternate_class = 'alt'
  12. FightTheMelons::Helpers::FormMultipleSelectHelperConfiguration.alternate = false
  13. FightTheMelons::Helpers::FormMultipleSelectHelperConfiguration.position = :right
  14. end
  15. def test_cfms_empty
  16. assert_equal "", checkboxes_for_multiple_select('name', [])
  17. end
  18. def test_cfms_one_item
  19. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test'])
  20. <li><input id="nametest" name="name[]" type="checkbox" value="test" /><label for="nametest">test</label></li>
  21. END
  22. end
  23. def test_cfms_two_items
  24. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test1', 'test2'])
  25. <li><input id="nametest1" name="name[]" type="checkbox" value="test1" /><label for="nametest1">test1</label></li>
  26. <li><input id="nametest2" name="name[]" type="checkbox" value="test2" /><label for="nametest2">test2</label></li>
  27. END
  28. end
  29. def test_cfms_array_not_strings
  30. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', [1, 2])
  31. <li><input id="name1" name="name[]" type="checkbox" value="1" /><label for="name1">1</label></li>
  32. <li><input id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">2</label></li>
  33. END
  34. end
  35. def test_cfms_text_value_array
  36. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', [['first test', 1], ['second test', 2]])
  37. <li><input id="name1" name="name[]" type="checkbox" value="1" /><label for="name1">first test</label></li>
  38. <li><input id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">second test</label></li>
  39. END
  40. end
  41. def test_cfms_hash
  42. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', {'first test' => 1, 'second test' => 2})
  43. <li><input id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">second test</label></li>
  44. <li><input id="name1" name="name[]" type="checkbox" value="1" /><label for="name1">first test</label></li>
  45. END
  46. end
  47. def test_cfms_array_with_selected
  48. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', [1, 2], [1])
  49. <li><input checked="checked" id="name1" name="name[]" type="checkbox" value="1" /><label for="name1">1</label></li>
  50. <li><input id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">2</label></li>
  51. END
  52. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', [1, 2], [2])
  53. <li><input id="name1" name="name[]" type="checkbox" value="1" /><label for="name1">1</label></li>
  54. <li><input checked="checked" id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">2</label></li>
  55. END
  56. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', [1, 2], [1,2])
  57. <li><input checked="checked" id="name1" name="name[]" type="checkbox" value="1" /><label for="name1">1</label></li>
  58. <li><input checked="checked" id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">2</label></li>
  59. END
  60. end
  61. def test_cfms_text_value_array_with_selected
  62. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', [['first test', 1], ['second test', 2]], [1])
  63. <li><input checked="checked" id="name1" name="name[]" type="checkbox" value="1" /><label for="name1">first test</label></li>
  64. <li><input id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">second test</label></li>
  65. END
  66. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', [['first test', 1], ['second test', 2]], [2])
  67. <li><input id="name1" name="name[]" type="checkbox" value="1" /><label for="name1">first test</label></li>
  68. <li><input checked="checked" id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">second test</label></li>
  69. END
  70. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', [['first test', 1], ['second test', 2]], [1,2])
  71. <li><input checked="checked" id="name1" name="name[]" type="checkbox" value="1" /><label for="name1">first test</label></li>
  72. <li><input checked="checked" id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">second test</label></li>
  73. END
  74. end
  75. def test_cfms_hash_with_selected
  76. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', { 'Spain' => 'esp', 'England' => 'eng' }, ['esp'])
  77. <li><input checked="checked" id="nameesp" name="name[]" type="checkbox" value="esp" /><label for="nameesp">Spain</label></li>
  78. <li><input id="nameeng" name="name[]" type="checkbox" value="eng" /><label for="nameeng">England</label></li>
  79. END
  80. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', { 'Spain' => 'esp', 'England' => 'eng' }, ['eng'])
  81. <li><input id="nameesp" name="name[]" type="checkbox" value="esp" /><label for="nameesp">Spain</label></li>
  82. <li><input checked="checked" id="nameeng" name="name[]" type="checkbox" value="eng" /><label for="nameeng">England</label></li>
  83. END
  84. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', { 'Spain' => 'esp', 'England' => 'eng' }, ['esp', 'eng'])
  85. <li><input checked="checked" id="nameesp" name="name[]" type="checkbox" value="esp" /><label for="nameesp">Spain</label></li>
  86. <li><input checked="checked" id="nameeng" name="name[]" type="checkbox" value="eng" /><label for="nameeng">England</label></li>
  87. END
  88. end
  89. def test_cfms_position
  90. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test'], [], :position => :right)
  91. <li><input id="nametest" name="name[]" type="checkbox" value="test" /><label for="nametest">test</label></li>
  92. END
  93. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test'], [], :position => :left)
  94. <li><label for="nametest">test</label><input id="nametest" name="name[]" type="checkbox" value="test" /></li>
  95. END
  96. end
  97. def test_cfms_position_variable
  98. FightTheMelons::Helpers::FormMultipleSelectHelperConfiguration.position = :right
  99. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test'], [])
  100. <li><input id="nametest" name="name[]" type="checkbox" value="test" /><label for="nametest">test</label></li>
  101. END
  102. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test'], [], :position => :left)
  103. <li><label for="nametest">test</label><input id="nametest" name="name[]" type="checkbox" value="test" /></li>
  104. END
  105. end
  106. def test_cfms_inner_class
  107. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test'], [], :inner_class => 'testclass')
  108. <li class="testclass"><input id="nametest" name="name[]" type="checkbox" value="test" /><label for="nametest">test</label></li>
  109. END
  110. end
  111. def test_cfms_inner_class_variable
  112. FightTheMelons::Helpers::FormMultipleSelectHelperConfiguration.inner_class = 'classtest'
  113. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test'], [])
  114. <li class="classtest"><input id="nametest" name="name[]" type="checkbox" value="test" /><label for="nametest">test</label></li>
  115. END
  116. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test'], [], :inner_class => 'testclass')
  117. <li class="testclass"><input id="nametest" name="name[]" type="checkbox" value="test" /><label for="nametest">test</label></li>
  118. END
  119. end
  120. def test_cfms_alternate
  121. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test1', 'test2'], [], :alternate => true)
  122. <li><input id="nametest1" name="name[]" type="checkbox" value="test1" /><label for="nametest1">test1</label></li>
  123. <li class="alt"><input id="nametest2" name="name[]" type="checkbox" value="test2" /><label for="nametest2">test2</label></li>
  124. END
  125. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test1', 'test2'], [], :alternate => true, :inner_class => 'testclass')
  126. <li class="testclass"><input id="nametest1" name="name[]" type="checkbox" value="test1" /><label for="nametest1">test1</label></li>
  127. <li class="testclass alt"><input id="nametest2" name="name[]" type="checkbox" value="test2" /><label for="nametest2">test2</label></li>
  128. END
  129. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test1', 'test2'], [], :alternate => true, :alternate_class => 'alternative')
  130. <li><input id="nametest1" name="name[]" type="checkbox" value="test1" /><label for="nametest1">test1</label></li>
  131. <li class="alternative"><input id="nametest2" name="name[]" type="checkbox" value="test2" /><label for="nametest2">test2</label></li>
  132. END
  133. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test1', 'test2'], [], :alternate => true, :initial_alternate => false)
  134. <li><input id="nametest1" name="name[]" type="checkbox" value="test1" /><label for="nametest1">test1</label></li>
  135. <li class="alt"><input id="nametest2" name="name[]" type="checkbox" value="test2" /><label for="nametest2">test2</label></li>
  136. END
  137. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test1', 'test2'], [], :alternate => true, :initial_alternate => true)
  138. <li class="alt"><input id="nametest1" name="name[]" type="checkbox" value="test1" /><label for="nametest1">test1</label></li>
  139. <li><input id="nametest2" name="name[]" type="checkbox" value="test2" /><label for="nametest2">test2</label></li>
  140. END
  141. end
  142. def test_cfms_alternate_variable
  143. FightTheMelons::Helpers::FormMultipleSelectHelperConfiguration.alternate = true
  144. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test1', 'test2'], [])
  145. <li><input id="nametest1" name="name[]" type="checkbox" value="test1" /><label for="nametest1">test1</label></li>
  146. <li class="alt"><input id="nametest2" name="name[]" type="checkbox" value="test2" /><label for="nametest2">test2</label></li>
  147. END
  148. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test1', 'test2'], [], :alternate => false)
  149. <li><input id="nametest1" name="name[]" type="checkbox" value="test1" /><label for="nametest1">test1</label></li>
  150. <li><input id="nametest2" name="name[]" type="checkbox" value="test2" /><label for="nametest2">test2</label></li>
  151. END
  152. end
  153. def test_cfms_alternate_class_variable
  154. FightTheMelons::Helpers::FormMultipleSelectHelperConfiguration.alternate_class = 'other'
  155. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test1', 'test2'], [], :alternate => true)
  156. <li><input id="nametest1" name="name[]" type="checkbox" value="test1" /><label for="nametest1">test1</label></li>
  157. <li class="other"><input id="nametest2" name="name[]" type="checkbox" value="test2" /><label for="nametest2">test2</label></li>
  158. END
  159. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', ['test1', 'test2'], [], :alternate => true, :alternate_class => 'alternative')
  160. <li><input id="nametest1" name="name[]" type="checkbox" value="test1" /><label for="nametest1">test1</label></li>
  161. <li class="alternative"><input id="nametest2" name="name[]" type="checkbox" value="test2" /><label for="nametest2">test2</label></li>
  162. END
  163. end
  164. def test_cfms_disabled
  165. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', [1, 2], [], :disabled => false)
  166. <li><input id="name1" name="name[]" type="checkbox" value="1" /><label for="name1">1</label></li>
  167. <li><input id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">2</label></li>
  168. END
  169. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', [1, 2], [], :disabled => true)
  170. <li><input disabled="disabled" id="name1" name="name[]" type="checkbox" value="1" /><label for="name1">1</label></li>
  171. <li><input disabled="disabled" id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">2</label></li>
  172. END
  173. assert_dom_equal <<END.strip, checkboxes_for_multiple_select('name', [1, 2], [], :disabled => [1])
  174. <li><input disabled="disabled" id="name1" name="name[]" type="checkbox" value="1" /><label for="name1">1</label></li>
  175. <li><input id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">2</label></li>
  176. END
  177. end
  178. def test_cfcfms
  179. assert_dom_equal <<END.strip, checkboxes_from_collection_for_multiple_select('name', Node.find_all_by_parent_id(1), :id, :name)
  180. <li><input id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">Node 1</label></li>
  181. <li><input id="name3" name="name[]" type="checkbox" value="3" /><label for="name3">Node 2</label></li>
  182. <li><input id="name4" name="name[]" type="checkbox" value="4" /><label for="name4">Node 3</label></li>
  183. END
  184. assert_dom_equal "",
  185. checkboxes_from_collection_for_multiple_select('name', Node.find_all_by_parent_id(33), :id, :name) # id 33 doesn't exist nor have children
  186. end
  187. def test_cfcms_with_selected
  188. assert_dom_equal <<END.strip, checkboxes_from_collection_for_multiple_select('name', Node.find_all_by_parent_id(1), :id, :name, [2, 4])
  189. <li><input checked="checked" id="name2" name="name[]" type="checkbox" value="2" /><label for="name2">Node 1</label></li>
  190. <li><input id="name3" name="name[]" type="checkbox" value="3" /><label for="name3">Node 2</label></li>
  191. <li><input checked="checked" id="name4" name="name[]" type="checkbox" value="4" /><label for="name4">Node 3</label></li>
  192. END
  193. end
  194. def test_ms
  195. @f = Father.new
  196. assert_dom_equal <<END.strip, multiple_select('f', 'method_for_test', ['test'])
  197. <ul><li><input id="f_method_for_test_test" name="f[method_for_test][]" type="checkbox" value="test" /><label for="f_method_for_test_test">test</label></li></ul>
  198. <input name="f[method_for_test][]" type="hidden" value="" />
  199. END
  200. end
  201. def test_ms_with_outer_class
  202. @f = Father.new
  203. assert_dom_equal <<END.strip, multiple_select('f', 'method_for_test', ['test'], :outer_class => 'test_class')
  204. <ul class="test_class"><li><input id="f_method_for_test_test" name="f[method_for_test][]" type="checkbox" value="test" /><label for="f_method_for_test_test">test</label></li></ul>
  205. <input name="f[method_for_test][]" type="hidden" value="" />
  206. END
  207. end
  208. def test_ms_selected
  209. @f = Father.new
  210. assert_dom_equal <<END.strip, multiple_select('f', 'method_for_test_selected', ['test'])
  211. <ul><li><input checked="checked" id="f_method_for_test_selected_test" name="f[method_for_test_selected][]" type="checkbox" value="test" /><label for="f_method_for_test_selected_test">test</label></li></ul>
  212. <input name="f[method_for_test_selected][]" type="hidden" value="" />
  213. END
  214. end
  215. def test_ms_empty
  216. @f = Father.new
  217. assert_dom_equal <<END.strip, multiple_select('f', 'method_for_test', [])
  218. <ul></ul>
  219. <input name="f[method_for_test][]" type="hidden" value="" />
  220. END
  221. end
  222. def test_mst
  223. assert_dom_equal <<END.strip, multiple_select_tag('f', ['test'])
  224. <ul><li><input id="ftest" name="f[]" type="checkbox" value="test" /><label for="ftest">test</label></li></ul>
  225. <input name="f[]" type="hidden" value="" />
  226. END
  227. end
  228. def test_mst_with_outer_class
  229. assert_dom_equal <<END.strip, multiple_select_tag('f', ['test'], :outer_class => 'test_class')
  230. <ul class="test_class"><li><input id="ftest" name="f[]" type="checkbox" value="test" /><label for="ftest">test</label></li></ul>
  231. <input name="f[]" type="hidden" value="" />
  232. END
  233. end
  234. def test_mst_with_selected_items
  235. assert_dom_equal <<END.strip, multiple_select_tag('f', ['test'], :selected_items => ['test'])
  236. <ul><li><input checked="checked" id="ftest" name="f[]" type="checkbox" value="test" /><label for="ftest">test</label></li></ul>
  237. <input name="f[]" type="hidden" value="" />
  238. END
  239. end
  240. def test_mst_empty
  241. assert_dom_equal <<END.strip, multiple_select_tag('f', [])
  242. <ul></ul>
  243. <input name="f[]" type="hidden" value="" />
  244. END
  245. end
  246. def test_ms_selected_items
  247. @n = Node.new
  248. assert_dom_equal <<END.strip, multiple_select('n', 'selected_some', [1, 2], :selected_items => [2] )
  249. <ul><li><input id="n_selected_some_1" name="n[selected_some][]" type="checkbox" value="1" /><label for="n_selected_some_1">1</label></li>
  250. <li><input id="n_selected_some_2" name="n[selected_some][]" type="checkbox" value="2" checked="checked" /><label for="n_selected_some_2">2</label></li></ul>
  251. <input name="n[selected_some][]" type="hidden" value="" />
  252. END
  253. end
  254. def test_ms_selected_items_nil
  255. @n = Node.new
  256. assert_dom_equal <<END.strip, multiple_select('n', 'selected_some', [1, 2], :selected_items => nil )
  257. <ul><li><input id="n_selected_some_1" name="n[selected_some][]" type="checkbox" value="1" /><label for="n_selected_some_1">1</label></li>
  258. <li><input id="n_selected_some_2" name="n[selected_some][]" type="checkbox" value="2" /><label for="n_selected_some_2">2</label></li></ul>
  259. <input name="n[selected_some][]" type="hidden" value="" />
  260. END
  261. end
  262. def test_ms_outer_class_variable
  263. @f = Father.new
  264. FightTheMelons::Helpers::FormMultipleSelectHelperConfiguration.outer_class = 'classtest'
  265. assert_dom_equal <<END.strip, multiple_select('f', 'method_for_test', ['test'])
  266. <ul class="classtest"><li><input id="f_method_for_test_test" name="f[method_for_test][]" type="checkbox" value="test" /><label for="f_method_for_test_test">test</label></li></ul>
  267. <input name="f[method_for_test][]" type="hidden" value="" />
  268. END
  269. assert_dom_equal <<END.strip, multiple_select('f', 'method_for_test', ['test'], :outer_class => 'testclass')
  270. <ul class="testclass"><li><input id="f_method_for_test_test" name="f[method_for_test][]" type="checkbox" value="test" /><label for="f_method_for_test_test">test</label></li></ul>
  271. <input name="f[method_for_test][]" type="hidden" value="" />
  272. END
  273. end
  274. def test_ms_nil_value
  275. @n = Node.new
  276. assert_dom_equal <<END.strip, multiple_select('n', 'selected_nil', {'item1' => 'value1', 'item2' => 'value2'} )
  277. <ul><li><input id="n_selected_nil_value1" name="n[selected_nil][]" type="checkbox" value="value1" /><label for="n_selected_nil_value1">item1</label></li>
  278. <li><input id="n_selected_nil_value2" name="n[selected_nil][]" type="checkbox" value="value2" /><label for="n_selected_nil_value2">item2</label></li></ul>
  279. <input name="n[selected_nil][]" type="hidden" value="" />
  280. END
  281. end
  282. def test_cms
  283. Father.class_eval 'has_many :sons'
  284. Son.class_eval 'belongs_to :father'
  285. @f = Father.new
  286. @f.son_ids = []
  287. assert_dom_equal <<END.strip, collection_multiple_select('f', 'son_ids', Son.find(:all), :id, :name)
  288. <ul><li><input id="f_son_ids_1" name="f[son_ids][]" type="checkbox" value="1" /><label for="f_son_ids_1">Son 1</label></li>
  289. <li><input id="f_son_ids_2" name="f[son_ids][]" type="checkbox" value="2" /><label for="f_son_ids_2">Son 2</label></li>
  290. <li><input id="f_son_ids_3" name="f[son_ids][]" type="checkbox" value="3" /><label for="f_son_ids_3">Son 3</label></li>
  291. <li><input id="f_son_ids_4" name="f[son_ids][]" type="checkbox" value="4" /><label for="f_son_ids_4">Son 4</label></li>
  292. <li><input id="f_son_ids_5" name="f[son_ids][]" type="checkbox" value="5" /><label for="f_son_ids_5">Son 5</label></li>
  293. <li><input id="f_son_ids_6" name="f[son_ids][]" type="checkbox" value="6" /><label for="f_son_ids_6">Son 6</label></li>
  294. <li><input id="f_son_ids_7" name="f[son_ids][]" type="checkbox" value="7" /><label for="f_son_ids_7">Son 7</label></li></ul>
  295. <input name="f[son_ids][]" type="hidden" value="" />
  296. END
  297. end
  298. def test_cms_with_outer_class
  299. Father.class_eval 'has_many :sons'
  300. Son.class_eval 'belongs_to :father'
  301. @f = Father.new
  302. @f.son_ids = []
  303. assert_dom_equal <<END.strip, collection_multiple_select('f', 'son_ids', Son.find(:all), :id, :name, :outer_class => 'test_class')
  304. <ul class="test_class"><li><input id="f_son_ids_1" name="f[son_ids][]" type="checkbox" value="1" /><label for="f_son_ids_1">Son 1</label></li>
  305. <li><input id="f_son_ids_2" name="f[son_ids][]" type="checkbox" value="2" /><label for="f_son_ids_2">Son 2</label></li>
  306. <li><input id="f_son_ids_3" name="f[son_ids][]" type="checkbox" value="3" /><label for="f_son_ids_3">Son 3</label></li>
  307. <li><input id="f_son_ids_4" name="f[son_ids][]" type="checkbox" value="4" /><label for="f_son_ids_4">Son 4</label></li>
  308. <li><input id="f_son_ids_5" name="f[son_ids][]" type="checkbox" value="5" /><label for="f_son_ids_5">Son 5</label></li>
  309. <li><input id="f_son_ids_6" name="f[son_ids][]" type="checkbox" value="6" /><label for="f_son_ids_6">Son 6</label></li>
  310. <li><input id="f_son_ids_7" name="f[son_ids][]" type="checkbox" value="7" /><label for="f_son_ids_7">Son 7</label></li></ul>
  311. <input name="f[son_ids][]" type="hidden" value="" />
  312. END
  313. end
  314. def test_cms_with_value
  315. Father.class_eval 'has_many :sons'
  316. Son.class_eval 'belongs_to :father'
  317. @f = Father.new
  318. @f.son_ids = [4, 5, 6]
  319. assert_dom_equal <<END.strip, collection_multiple_select('f', 'son_ids', Son.find(:all), :id, :name)
  320. <ul><li><input id="f_son_ids_1" name="f[son_ids][]" type="checkbox" value="1" /><label for="f_son_ids_1">Son 1</label></li>
  321. <li><input id="f_son_ids_2" name="f[son_ids][]" type="checkbox" value="2" /><label for="f_son_ids_2">Son 2</label></li>
  322. <li><input id="f_son_ids_3" name="f[son_ids][]" type="checkbox" value="3" /><label for="f_son_ids_3">Son 3</label></li>
  323. <li><input checked="checked" id="f_son_ids_4" name="f[son_ids][]" type="checkbox" value="4" /><label for="f_son_ids_4">Son 4</label></li>
  324. <li><input checked="checked" id="f_son_ids_5" name="f[son_ids][]" type="checkbox" value="5" /><label for="f_son_ids_5">Son 5</label></li>
  325. <li><input checked="checked" id="f_son_ids_6" name="f[son_ids][]" type="checkbox" value="6" /><label for="f_son_ids_6">Son 6</label></li>
  326. <li><input id="f_son_ids_7" name="f[son_ids][]" type="checkbox" value="7" /><label for="f_son_ids_7">Son 7</label></li></ul>
  327. <input name="f[son_ids][]" type="hidden" value="" />
  328. END
  329. end
  330. def test_cms_without_items
  331. Father.class_eval 'has_many :sons'
  332. Son.class_eval 'belongs_to :father'
  333. @f = Father.new
  334. @f.son_ids = []
  335. assert_dom_equal <<END.strip, collection_multiple_select('f', 'son_ids', [], :id, :name)
  336. <ul></ul>
  337. <input name="f[son_ids][]" type="hidden" value="" />
  338. END
  339. end
  340. def test_cmst
  341. assert_dom_equal <<END.strip, collection_multiple_select_tag('sons', Son.find(:all), :id, :name)
  342. <ul><li><input id="sons1" name="sons[]" type="checkbox" value="1" /><label for="sons1">Son 1</label></li>
  343. <li><input id="sons2" name="sons[]" type="checkbox" value="2" /><label for="sons2">Son 2</label></li>
  344. <li><input id="sons3" name="sons[]" type="checkbox" value="3" /><label for="sons3">Son 3</label></li>
  345. <li><input id="sons4" name="sons[]" type="checkbox" value="4" /><label for="sons4">Son 4</label></li>
  346. <li><input id="sons5" name="sons[]" type="checkbox" value="5" /><label for="sons5">Son 5</label></li>
  347. <li><input id="sons6" name="sons[]" type="checkbox" value="6" /><label for="sons6">Son 6</label></li>
  348. <li><input id="sons7" name="sons[]" type="checkbox" value="7" /><label for="sons7">Son 7</label></li></ul>
  349. <input name="sons[]" type="hidden" value="" />
  350. END
  351. end
  352. def test_cmst_with_outer_class
  353. assert_dom_equal <<END.strip, collection_multiple_select_tag('sons', Son.find(:all), :id, :name, :outer_class => 'test_class')
  354. <ul class="test_class"><li><input id="sons1" name="sons[]" type="checkbox" value="1" /><label for="sons1">Son 1</label></li>
  355. <li><input id="sons2" name="sons[]" type="checkbox" value="2" /><label for="sons2">Son 2</label></li>
  356. <li><input id="sons3" name="sons[]" type="checkbox" value="3" /><label for="sons3">Son 3</label></li>
  357. <li><input id="sons4" name="sons[]" type="checkbox" value="4" /><label for="sons4">Son 4</label></li>
  358. <li><input id="sons5" name="sons[]" type="checkbox" value="5" /><label for="sons5">Son 5</label></li>
  359. <li><input id="sons6" name="sons[]" type="checkbox" value="6" /><label for="sons6">Son 6</label></li>
  360. <li><input id="sons7" name="sons[]" type="checkbox" value="7" /><label for="sons7">Son 7</label></li></ul>
  361. <input name="sons[]" type="hidden" value="" />
  362. END
  363. end
  364. def test_cmst_with_selected_items
  365. assert_dom_equal <<END.strip, collection_multiple_select_tag('sons', Son.find(:all), :id, :name, :selected_items => [4, 5, 6])
  366. <ul><li><input id="sons1" name="sons[]" type="checkbox" value="1" /><label for="sons1">Son 1</label></li>
  367. <li><input id="sons2" name="sons[]" type="checkbox" value="2" /><label for="sons2">Son 2</label></li>
  368. <li><input id="sons3" name="sons[]" type="checkbox" value="3" /><label for="sons3">Son 3</label></li>
  369. <li><input checked="checked" id="sons4" name="sons[]" type="checkbox" value="4" /><label for="sons4">Son 4</label></li>
  370. <li><input checked="checked" id="sons5" name="sons[]" type="checkbox" value="5" /><label for="sons5">Son 5</label></li>
  371. <li><input checked="checked" id="sons6" name="sons[]" type="checkbox" value="6" /><label for="sons6">Son 6</label></li>
  372. <li><input id="sons7" name="sons[]" type="checkbox" value="7" /><label for="sons7">Son 7</label></li></ul>
  373. <input name="sons[]" type="hidden" value="" />
  374. END
  375. end
  376. def test_cmst_without_items
  377. assert_dom_equal <<END.strip, collection_multiple_select_tag('sons', [], :id, :name)
  378. <ul></ul>
  379. <input name="sons[]" type="hidden" value="" />
  380. END
  381. end
  382. def test_cms_selected_items
  383. Father.class_eval 'has_many :sons'
  384. Son.class_eval 'belongs_to :father'
  385. @f = Father.new
  386. @f.son_ids = []
  387. assert_dom_equal <<END.strip, collection_multiple_select('f', 'son_ids', Son.find(:all), :id, :name, :selected_items => [1, 2, 3])
  388. <ul><li><input id="f_son_ids_1" name="f[son_ids][]" type="checkbox" value="1" checked="checked" /><label for="f_son_ids_1">Son 1</label></li>
  389. <li><input id="f_son_ids_2" name="f[son_ids][]" type="checkbox" value="2" checked="checked" /><label for="f_son_ids_2">Son 2</label></li>
  390. <li><input id="f_son_ids_3" name="f[son_ids][]" type="checkbox" value="3" checked="checked" /><label for="f_son_ids_3">Son 3</label></li>
  391. <li><input id="f_son_ids_4" name="f[son_ids][]" type="checkbox" value="4" /><label for="f_son_ids_4">Son 4</label></li>
  392. <li><input id="f_son_ids_5" name="f[son_ids][]" type="checkbox" value="5" /><label for="f_son_ids_5">Son 5</label></li>
  393. <li><input id="f_son_ids_6" name="f[son_ids][]" type="checkbox" value="6" /><label for="f_son_ids_6">Son 6</label></li>
  394. <li><input id="f_son_ids_7" name="f[son_ids][]" type="checkbox" value="7" /><label for="f_son_ids_7">Son 7</label></li></ul>
  395. <input name="f[son_ids][]" type="hidden" value="" />
  396. END
  397. end
  398. def test_cms_selected_items_nil
  399. Father.class_eval 'has_many :sons'
  400. Son.class_eval 'belongs_to :father'
  401. @f = Father.new
  402. @f.son_ids = []
  403. assert_dom_equal <<END.strip, collection_multiple_select('f', 'son_ids', Son.find(:all), :id, :name, :selected_items => nil)
  404. <ul><li><input id="f_son_ids_1" name="f[son_ids][]" type="checkbox" value="1" /><label for="f_son_ids_1">Son 1</label></li>
  405. <li><input id="f_son_ids_2" name="f[son_ids][]" type="checkbox" value="2" /><label for="f_son_ids_2">Son 2</label></li>
  406. <li><input id="f_son_ids_3" name="f[son_ids][]" type="checkbox" value="3" /><label for="f_son_ids_3">Son 3</label></li>
  407. <li><input id="f_son_ids_4" name="f[son_ids][]" type="checkbox" value="4" /><label for="f_son_ids_4">Son 4</label></li>
  408. <li><input id="f_son_ids_5" name="f[son_ids][]" type="checkbox" value="5" /><label for="f_son_ids_5">Son 5</label></li>
  409. <li><input id="f_son_ids_6" name="f[son_ids][]" type="checkbox" value="6" /><label for="f_son_ids_6">Son 6</label></li>
  410. <li><input id="f_son_ids_7" name="f[son_ids][]" type="checkbox" value="7" /><label for="f_son_ids_7">Son 7</label></li></ul>
  411. <input name="f[son_ids][]" type="hidden" value="" />
  412. END
  413. end
  414. def test_tms_selected_none
  415. @n = Node.new
  416. assert_dom_equal <<END.strip, tree_multiple_select('n', 'selected_none', nodes(:n32).children, :id, :name)
  417. <ul><li><input id="n_selected_none_11" name="n[selected_none][]" type="checkbox" value="11" /><label for="n_selected_none_11">Node 3.2.1</label></li>
  418. <li><input id="n_selected_none_12" name="n[selected_none][]" type="checkbox" value="12" /><label for="n_selected_none_12">Node 3.2.2</label></li></ul>
  419. <input name="n[selected_none][]" type="hidden" value="" />
  420. END
  421. end
  422. def test_tms_with_outer_class
  423. @n = Node.new
  424. assert_dom_equal <<END.strip, tree_multiple_select('n', 'selected_none', nodes(:n32).children, :id, :name, :outer_class => 'test_class')
  425. <ul class="test_class"><li><input id="n_selected_none_11" name="n[selected_none][]" type="checkbox" value="11" /><label for="n_selected_none_11">Node 3.2.1</label></li>
  426. <li><input id="n_selected_none_12" name="n[selected_none][]" type="checkbox" value="12" /><label for="n_selected_none_12">Node 3.2.2</label></li></ul>
  427. <input name="n[selected_none][]" type="hidden" value="" />
  428. END
  429. end
  430. def test_tms_selected_some
  431. @n = Node.new
  432. assert_dom_equal <<END.strip, tree_multiple_select('n', 'selected_some', nodes(:n32).children, :id, :name)
  433. <ul><li><input id="n_selected_some_11" name="n[selected_some][]" type="checkbox" value="11" /><label for="n_selected_some_11">Node 3.2.1</label></li>
  434. <li><input checked="checked" id="n_selected_some_12" name="n[selected_some][]" type="checkbox" value="12" /><label for="n_selected_some_12">Node 3.2.2</label></li></ul>
  435. <input name="n[selected_some][]" type="hidden" value="" />
  436. END
  437. end
  438. def test_tms_without_items
  439. @n = Node.new
  440. assert_dom_equal <<END.strip, tree_multiple_select('n', 'selected_some', nodes(:n33).children, :id, :name)
  441. <ul></ul>
  442. <input name="n[selected_some][]" type="hidden" value="" />
  443. END
  444. end
  445. def test_tmst
  446. assert_dom_equal <<END.strip, tree_multiple_select_tag('n', nodes(:n32).children, :id, :name)
  447. <ul><li><input id="n11" name="n[]" type="checkbox" value="11" /><label for="n11">Node 3.2.1</label></li>
  448. <li><input id="n12" name="n[]" type="checkbox" value="12" /><label for="n12">Node 3.2.2</label></li></ul>
  449. <input name="n[]" type="hidden" value="" />
  450. END
  451. end
  452. def test_tmst_with_outer_class
  453. assert_dom_equal <<END.strip, tree_multiple_select_tag('n', nodes(:n32).children, :id, :name, :outer_class => 'test_class')
  454. <ul class="test_class"><li><input id="n11" name="n[]" type="checkbox" value="11" /><label for="n11">Node 3.2.1</label></li>
  455. <li><input id="n12" name="n[]" type="checkbox" value="12" /><label for="n12">Node 3.2.2</label></li></ul>
  456. <input name="n[]" type="hidden" value="" />
  457. END
  458. end
  459. def test_tmst_with_selected_items
  460. assert_dom_equal <<END.strip, tree_multiple_select_tag('n', nodes(:n32).children, :id, :name, :selected_items => [12])
  461. <ul><li><input id="n11" name="n[]" type="checkbox" value="11" /><label for="n11">Node 3.2.1</label></li>
  462. <li><input checked="checked" id="n12" name="n[]" type="checkbox" value="12" /><label for="n12">Node 3.2.2</label></li></ul>
  463. <input name="n[]" type="hidden" value="" />
  464. END
  465. end
  466. def test_tmst_without_items
  467. assert_dom_equal <<END.strip, tree_multiple_select_tag('n', nodes(:n33).children, :id, :name)
  468. <ul></ul>
  469. <input name="n[]" type="hidden" value="" />
  470. END
  471. end
  472. def test_tms_selected_items
  473. @n = Node.new
  474. assert_dom_equal <<END.strip, tree_multiple_select('n', 'selected_none', nodes(:n32).children, :id, :name, :selected_items => [11])
  475. <ul><li><input id="n_selected_none_11" name="n[selected_none][]" type="checkbox" value="11" checked="checked" /><label for="n_selected_none_11">Node 3.2.1</label></li>
  476. <li><input id="n_selected_none_12" name="n[selected_none][]" type="checkbox" value="12" /><label for="n_selected_none_12">Node 3.2.2</label></li></ul>
  477. <input name="n[selected_none][]" type="hidden" value="" />
  478. END
  479. end
  480. def test_tms_selected_items_nil
  481. @n = Node.new
  482. assert_dom_equal <<END.strip, tree_multiple_select('n', 'selected_none', nodes(:n32).children, :id, :name, :selected_items => nil)
  483. <ul><li><input id="n_selected_none_11" name="n[selected_none][]" type="checkbox" value="11" /><label for="n_selected_none_11">Node 3.2.1</label></li>
  484. <li><input id="n_selected_none_12" name="n[selected_none][]" type="checkbox" value="12" /><label for="n_selected_none_12">Node 3.2.2</label></li></ul>
  485. <input name="n[selected_none][]" type="hidden" value="" />
  486. END
  487. end
  488. def test_cftfms
  489. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name)
  490. <li><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  491. <li><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  492. <li><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  493. <li><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  494. END
  495. end
  496. def test_cftfms_depth
  497. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, [], :depth => 1), "Depth 1"
  498. <li><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  499. <li><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  500. <li><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  501. <li><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  502. END
  503. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, [], :depth => 2), "Depth 2"
  504. <li><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  505. <li><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  506. <li><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  507. <li><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  508. END
  509. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, [], :depth => 0), "Depth 0"
  510. <li><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  511. <li><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label></li>
  512. <li><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  513. END
  514. end
  515. def test_cftfms_inner_class
  516. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, [], :inner_class => 'testclass')
  517. <li class="testclass"><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  518. <li class="testclass"><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li class="testclass"><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  519. <li class="testclass"><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  520. <li class="testclass"><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  521. END
  522. end
  523. def test_cftfms_level_class
  524. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, [], :level_class => 'level'), "With level class"
  525. <li class="level0"><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  526. <li class="level0"><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li class="level1"><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  527. <li class="level1"><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  528. <li class="level0"><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  529. END
  530. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, [], :level_class => 'level', :inner_class => 'testclass'), "With level and inner class"
  531. <li class="testclass level0"><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  532. <li class="testclass level0"><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li class="testclass level1"><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  533. <li class="testclass level1"><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  534. <li class="testclass level0"><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  535. END
  536. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, [], :level_class => 'level', :initial_level => 2), "With level class and initial level"
  537. <li class="level2"><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  538. <li class="level2"><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li class="level3"><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  539. <li class="level3"><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  540. <li class="level2"><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  541. END
  542. end
  543. def test_cftfms_level_class_variable
  544. FightTheMelons::Helpers::FormMultipleSelectHelperConfiguration.level_class = 'lvl'
  545. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, []), "Without explicit level class"
  546. <li class="lvl0"><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  547. <li class="lvl0"><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li class="lvl1"><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  548. <li class="lvl1"><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  549. <li class="lvl0"><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  550. END
  551. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, [], :level_class => 'level'), "With explicit level class"
  552. <li class="level0"><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  553. <li class="level0"><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li class="level1"><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  554. <li class="level1"><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  555. <li class="level0"><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  556. END
  557. end
  558. def test_cftfms_child_method
  559. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, [], :child_method => :alt_children)
  560. <li><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  561. <li><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  562. <li><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  563. <li><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  564. END
  565. end
  566. def test_cftfms_alternate
  567. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, [], :alternate => true), "With alternate = true"
  568. <li><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  569. <li class="alt"><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  570. <li class="alt"><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  571. <li><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  572. END
  573. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, [], :alternate => true, :initial_alternate => false), "With alternate = true and initial alternate = false"
  574. <li><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  575. <li class="alt"><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  576. <li class="alt"><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  577. <li><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  578. END
  579. assert_dom_equal <<END.strip, checkboxes_from_tree_for_multiple_select('name', nodes(:n3).children, :id, :name, [], :alternate => true, :initial_alternate => true), "With alternate = true and initial alternate = true"
  580. <li class="alt"><input id="name8" name="name[]" type="checkbox" value="8" /><label for="name8">Node 3.1</label></li>
  581. <li><input id="name9" name="name[]" type="checkbox" value="9" /><label for="name9">Node 3.2</label>\n<ul><li class="alt"><input id="name11" name="name[]" type="checkbox" value="11" /><label for="name11">Node 3.2.1</label></li>
  582. <li><input id="name12" name="name[]" type="checkbox" value="12" /><label for="name12">Node 3.2.2</label></li></ul></li>
  583. <li class="alt"><input id="name10" name="name[]" type="checkbox" value="10" /><label for="name10">Node 3.3</label></li>
  584. END
  585. end
  586. end