masterview 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. data/CHANGELOG +31 -1
  2. data/README +70 -69
  3. data/RELEASE_NOTES +70 -64
  4. data/Rakefile +26 -27
  5. data/TODO +13 -29
  6. data/doc/about.html +246 -0
  7. data/doc/configuration.html +49 -36
  8. data/doc/developer.html +423 -41
  9. data/doc/directives.html +139 -51
  10. data/doc/guide.html +19 -9
  11. data/doc/index.html +90 -224
  12. data/doc/installation.html +36 -28
  13. data/doc/media_list.html +30 -20
  14. data/doc/simple_diagram.html +3 -5
  15. data/doc/stylesheets/masterview.css +16 -1
  16. data/examples/rails_app_config/masterview/settings.rb +2 -1
  17. data/init.rb +1 -1
  18. data/lib/#ChangeLog# +6 -0
  19. data/lib/masterview/analyzer.rb +48 -34
  20. data/lib/masterview/attr_string_parser.rb +5 -1
  21. data/lib/masterview/case_insensitive_hash.rb +69 -0
  22. data/lib/masterview/{pathname_extensions.rb → core_ext/pathname.rb} +0 -0
  23. data/lib/masterview/{string_extensions.rb → core_ext/string.rb} +0 -0
  24. data/lib/masterview/deprecated/directive_base.rb +362 -0
  25. data/lib/masterview/directive_base.rb +201 -179
  26. data/lib/masterview/directive_dsl.rb +457 -0
  27. data/lib/masterview/directive_helpers.rb +28 -141
  28. data/lib/masterview/directive_load_path.rb +388 -0
  29. data/lib/masterview/directive_metadata.rb +377 -0
  30. data/lib/masterview/directive_registry.rb +259 -69
  31. data/lib/masterview/directives/.metadata +16 -0
  32. data/lib/masterview/directives/attr.rb +9 -8
  33. data/lib/masterview/directives/block.rb +11 -14
  34. data/lib/masterview/directives/check_box.rb +13 -18
  35. data/lib/masterview/directives/collection_select.rb +15 -29
  36. data/lib/masterview/directives/content.rb +9 -3
  37. data/lib/masterview/directives/else.rb +15 -13
  38. data/lib/masterview/directives/elsif.rb +14 -13
  39. data/lib/masterview/directives/eval.rb +20 -0
  40. data/lib/masterview/directives/form.rb +56 -9
  41. data/lib/masterview/directives/form_remote.rb +26 -0
  42. data/lib/masterview/directives/global_inline_erb.rb +10 -14
  43. data/lib/masterview/directives/hidden_field.rb +11 -20
  44. data/lib/masterview/directives/if.rb +13 -12
  45. data/lib/masterview/directives/image_tag.rb +20 -28
  46. data/lib/masterview/directives/import.rb +5 -12
  47. data/lib/masterview/directives/import_render.rb +7 -19
  48. data/lib/masterview/directives/insert_generated_comment.rb +8 -11
  49. data/lib/masterview/directives/javascript_include.rb +21 -12
  50. data/lib/masterview/directives/link_to.rb +14 -8
  51. data/lib/masterview/directives/link_to_function.rb +22 -0
  52. data/lib/masterview/directives/link_to_if.rb +15 -13
  53. data/lib/masterview/directives/link_to_remote.rb +13 -8
  54. data/lib/masterview/directives/omit_tag.rb +32 -16
  55. data/lib/masterview/directives/password_field.rb +10 -22
  56. data/lib/masterview/directives/radio_button.rb +11 -22
  57. data/lib/masterview/directives/replace.rb +7 -8
  58. data/lib/masterview/directives/select.rb +11 -24
  59. data/lib/masterview/directives/stylesheet_link.rb +20 -12
  60. data/lib/masterview/directives/submit.rb +11 -5
  61. data/lib/masterview/directives/text_area.rb +10 -23
  62. data/lib/masterview/directives/text_field.rb +10 -22
  63. data/lib/masterview/exceptions.rb +21 -0
  64. data/lib/masterview/extras/app/controllers/masterview_controller.rb +102 -75
  65. data/lib/masterview/extras/app/views/layouts/masterview_admin.rhtml +24 -23
  66. data/lib/masterview/extras/app/views/layouts/masterview_admin_config.rhtml +81 -0
  67. data/lib/masterview/extras/app/views/masterview/admin/configuration.rhtml +5 -1
  68. data/lib/masterview/extras/app/views/masterview/admin/create.rhtml +2 -2
  69. data/lib/masterview/extras/app/views/masterview/admin/directives.rhtml +5 -0
  70. data/lib/masterview/extras/app/views/masterview/admin/features.rhtml +5 -79
  71. data/lib/masterview/extras/app/views/masterview/admin/interact.rhtml +5 -0
  72. data/lib/masterview/extras/app/views/masterview/admin/list.rhtml +3 -71
  73. data/lib/masterview/extras/init_mv_admin_pages.rb +42 -23
  74. data/lib/masterview/filter_helpers.rb +26 -0
  75. data/lib/masterview/initializer.rb +99 -53
  76. data/lib/masterview/io.rb +19 -15
  77. data/lib/masterview/keyword_expander.rb +7 -2
  78. data/lib/masterview/masterview_info.rb +229 -23
  79. data/lib/masterview/masterview_version.rb +2 -2
  80. data/lib/masterview/parser.rb +275 -105
  81. data/lib/masterview/parser_helpers.rb +54 -0
  82. data/lib/masterview/rails_ext/action_controller_erb_direct.rb +29 -0
  83. data/lib/masterview/rails_ext/action_controller_reparse_checking.rb +27 -0
  84. data/lib/masterview/{extras/init_rails_erb_mv_direct.rb → rails_ext/action_view_erb_direct.rb} +12 -59
  85. data/lib/masterview/template_spec.rb +3 -2
  86. data/lib/masterview.rb +21 -12
  87. data/lib/rexml/parsers/baseparser_with_doctype_fix.rb +473 -0
  88. data/lib/rexml/parsers/sax2parser_with_doctype_fix.rb +243 -0
  89. data/test/directive_test_helper.rb +135 -0
  90. data/test/fixtures/directives/id_check.rb +18 -0
  91. data/test/fixtures/directives/test_directive_events.rb +70 -0
  92. data/test/test_helper.rb +18 -5
  93. data/test/tmp/views/layouts/product.rhtml +10 -10
  94. data/test/tmp/views/product/_form.rhtml +4 -4
  95. data/test/tmp/views/product/_product.rhtml +3 -3
  96. data/test/tmp/views/product/destroy.rhtml +5 -5
  97. data/test/tmp/views/product/edit.rhtml +4 -4
  98. data/test/tmp/views/product/list.rhtml +3 -3
  99. data/test/tmp/views/product/new.rhtml +4 -4
  100. data/test/tmp/views/product/show.rhtml +2 -2
  101. data/test/unit/attr_string_parser_test.rb +105 -0
  102. data/test/unit/case_insensitive_hash_mod_test.rb +104 -0
  103. data/test/unit/config_settings_test.rb +13 -1
  104. data/test/unit/default_generate_mio_filter_test.rb +3 -3
  105. data/test/unit/deprecated_directive_base_test.rb +30 -0
  106. data/test/unit/directive_attr_test.rb +111 -35
  107. data/test/unit/directive_base_test.rb +520 -1
  108. data/test/unit/directive_block_test.rb +30 -22
  109. data/test/unit/directive_content_test.rb +24 -11
  110. data/test/unit/directive_else_test.rb +18 -15
  111. data/test/unit/directive_elsif_test.rb +17 -15
  112. data/test/unit/directive_form_remote_test.rb +59 -0
  113. data/test/unit/directive_form_test.rb +31 -39
  114. data/test/unit/directive_global_inline_erb_test.rb +28 -17
  115. data/test/unit/directive_grid_test_notready.rb +38 -0
  116. data/test/unit/directive_helpers_test.rb +39 -0
  117. data/test/unit/directive_hidden_field_test.rb +44 -29
  118. data/test/unit/directive_if_test.rb +10 -7
  119. data/test/unit/directive_image_tag_test.rb +69 -61
  120. data/test/unit/directive_import_render_test.rb +28 -38
  121. data/test/unit/directive_import_test.rb +16 -14
  122. data/test/unit/directive_insert_generated_comment_test.rb +32 -0
  123. data/test/unit/directive_javascript_include_test.rb +40 -43
  124. data/test/unit/directive_link_to_function_test.rb +40 -0
  125. data/test/unit/directive_link_to_if_test.rb +52 -12
  126. data/test/unit/directive_link_to_remote_test.rb +58 -0
  127. data/test/unit/directive_link_to_test.rb +46 -31
  128. data/test/unit/directive_load_path_test.rb +257 -0
  129. data/test/unit/directive_metadata_test.rb +313 -0
  130. data/test/unit/directive_omit_tag_test.rb +73 -21
  131. data/test/unit/directive_password_field_test.rb +44 -38
  132. data/test/unit/directive_registry_test.rb +44 -0
  133. data/test/unit/directive_replace_test.rb +28 -12
  134. data/test/unit/directive_stylesheet_link_test.rb +43 -36
  135. data/test/unit/directive_submit_test.rb +29 -30
  136. data/test/unit/directive_text_area_test.rb +40 -36
  137. data/test/unit/directive_text_field_test.rb +44 -38
  138. data/test/unit/example_directive_child_events_test.rb +41 -0
  139. data/test/unit/example_test.rb +31 -4
  140. data/test/unit/file_mio_test.rb +18 -13
  141. data/test/unit/filter_helpers_test.rb +10 -8
  142. data/test/unit/find_directive_parent_test.rb +174 -0
  143. data/test/unit/keyword_expander_test.rb +4 -2
  144. data/test/unit/mio_test.rb +18 -11
  145. data/test/unit/mtime_string_hash_mio_tree_test.rb +5 -1
  146. data/test/unit/parser_test.rb +41 -29
  147. data/test/unit/pathname_extensions_test.rb +1 -1
  148. data/test/unit/run_parser_test.rb +2 -2
  149. data/test/unit/simplified_directive_base_test.rb +256 -0
  150. data/test/unit/string_hash_mio_test.rb +5 -1
  151. data/test/unit/template_file_watcher_test.rb +2 -2
  152. data/test/unit/template_test.rb +221 -46
  153. metadata +86 -45
  154. data/lib/masterview/directives/testfilter.rb +0 -55
  155. data/lib/masterview/extras/init_rails_reparse_checking.rb +0 -62
@@ -3,29 +3,32 @@
3
3
  require 'test/unit'
4
4
  currentPath = File.dirname(__FILE__)
5
5
  require File.join( currentPath, '../../lib/masterview' )
6
- require File.join( currentPath, '../../lib/masterview/directives/else')
6
+ #require File.join( currentPath, '../../lib/masterview/directives/else')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('else')
7
9
 
8
10
  class TestElse < Test::Unit::TestCase
9
- include MasterView::Directives
11
+ include DirectiveTestHelpers
10
12
 
11
- def setup
12
- @directives = MasterView::DirectiveSet.new
13
- end
13
+ Else = MasterView::Directives::Else # test subject
14
+
15
+ ELEMENT_TAG = 'div'
14
16
 
15
17
  def test_else
16
- parent_tag = MasterView::Tag.new(@directives, 'div', {}, :normal, nil)
17
- parent_tag.content = ['<% if true %>hello world', '<% end %>']
18
18
 
19
- else_tag = MasterView::Tag.new(@directives, 'bar', {}, :normal, parent_tag)
20
- @directives.directives = []
19
+ # initial mv:if element gets wrapped by if/end erb conditions
20
+ tag_content = [ '<% if true -%>hello world', '<% end -%>' ]
21
+ if_tag = create_template_element ELEMENT_TAG, :content => tag_content
22
+
23
+ else_tag = create_template_element ELEMENT_TAG, :parent_tag => if_tag
21
24
  attr_value = 'not used'
22
- @directives << Else.new(attr_value)
23
- dcs = @directives.determine_dcs(:stag)
24
- dcs.context = else_tag.create_context
25
+ create_directive Else, attr_value
26
+ assert_equal 1, element_directives.size, 'clean reset of directives for new element'
27
+
28
+ assert_equal "<% else -%>", render_element_event(:stag)
29
+ assert_equal "<% if true -%>hello world", if_tag.content.join, 'else directive modifies preceding tag by removing its end marker when it adds itself to the output'
30
+ assert_equal "<% end -%>", render_element_event(:etag)
25
31
 
26
- assert_equal "<% else %>", dcs.render.join
27
- assert_equal "<% if true %>hello world", parent_tag.content.join
28
- assert_equal "<% end %>", @directives.determine_dcs(:etag).render.join
29
32
  end
30
33
 
31
34
  end
@@ -3,29 +3,31 @@
3
3
  require 'test/unit'
4
4
  currentPath = File.dirname(__FILE__)
5
5
  require File.join( currentPath, '../../lib/masterview' )
6
- require File.join( currentPath, '../../lib/masterview/directives/elsif')
6
+ #require File.join( currentPath, '../../lib/masterview/directives/elsif')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('elsif')
7
9
 
8
10
  class TestElsif < Test::Unit::TestCase
9
- include MasterView::Directives
11
+ include DirectiveTestHelpers
10
12
 
11
- def setup
12
- @directives = MasterView::DirectiveSet.new
13
- end
13
+ Elsif = MasterView::Directives::Elsif # test subject
14
+
15
+ ELEMENT_TAG = 'div'
14
16
 
15
17
  def test_elsif
16
- parent_tag = MasterView::Tag.new(@directives, 'div', {}, :normal, nil)
17
- parent_tag.content = ['<% if true %>hello world', '<% end %>']
18
18
 
19
- elsif_tag = MasterView::Tag.new(@directives, 'bar', {}, :normal, parent_tag)
20
- @directives.directives = []
19
+ # initial mv:if element gets wrapped by if/end erb conditions
20
+ tag_content = [ '<% if( true ) -%>hello world', '<% end -%>' ]
21
+ if_tag = create_template_element ELEMENT_TAG, :content => tag_content
22
+
23
+ elseif_tag = create_template_element ELEMENT_TAG, :parent_tag => if_tag
21
24
  attr_value = '@foobar'
22
- @directives << Elsif.new(attr_value)
23
- dcs = @directives.determine_dcs(:stag)
24
- dcs.context = elsif_tag.create_context
25
+ create_directive Elsif, attr_value
26
+ assert_equal 1, element_directives.size, 'clean reset of directives for new element'
25
27
 
26
- assert_equal "<% elsif #{attr_value} %>", dcs.render.join
27
- assert_equal "<% if true %>hello world", parent_tag.content.join
28
- assert_equal "<% end %>", @directives.determine_dcs(:etag).render.join
28
+ assert_equal "<% elsif( #{attr_value} ) -%>", render_element_event(:stag)
29
+ assert_equal "<% if( true ) -%>hello world", if_tag.content.join, 'elseif directive modifies preceding tag by removing its end marker when it adds itself to the output'
30
+ assert_equal "<% end -%>", render_element_event(:etag)
29
31
  end
30
32
 
31
33
  end
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ currentPath = File.dirname(__FILE__)
5
+ require File.join( currentPath, '../../lib/masterview' )
6
+ #require File.join( currentPath, '../../lib/masterview/directives/form_remote')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('form_remote')
9
+
10
+ class TestFormRemote < Test::Unit::TestCase
11
+ include DirectiveTestHelpers
12
+
13
+ FormRemote = MasterView::Directives::FormRemote # test subject
14
+
15
+ ELEMENT_TAG = 'form'
16
+
17
+ def test_metadata
18
+ assert_equal MasterView::ConfigSettings.namespace_prefix, FormRemote.namespace_prefix
19
+ assert_equal 'form_remote', FormRemote.attribute_name
20
+ end
21
+
22
+ def test_default
23
+ create_template_element ELEMENT_TAG
24
+ attr_value = ":action => 'create'"
25
+ create_directive FormRemote, attr_value
26
+ assert_equal "<%= form_remote_tag( :action => 'create' ) %>", render_element_event(:stag)
27
+ assert_equal "</form>", render_element_event(:etag)
28
+ end
29
+
30
+ def test_get
31
+ create_template_element ELEMENT_TAG, :attributes => { 'method' => 'get' }
32
+ attr_value = ":action => 'create'"
33
+ create_directive FormRemote, attr_value
34
+ assert_equal "<%= form_remote_tag( :action => 'create', :method => \"get\" ) %>", render_element_event(:stag)
35
+ end
36
+
37
+ def test_get_uppercase
38
+ create_template_element ELEMENT_TAG, :attributes => { 'method' => 'GET'}
39
+ attr_value = ":action => 'create'"
40
+ create_directive FormRemote, attr_value
41
+ assert_equal "<%= form_remote_tag( :action => 'create', :method => \"GET\" ) %>", render_element_event(:stag)
42
+ assert_equal "</form>", render_element_event(:etag)
43
+ end
44
+
45
+ def test_post
46
+ create_template_element ELEMENT_TAG, :attributes => { 'method' => 'post' }
47
+ attr_value = ":action => 'create'"
48
+ create_directive FormRemote, attr_value
49
+ assert_equal "<%= form_remote_tag( :action => 'create', :method => \"post\" ) %>", render_element_event(:stag)
50
+ end
51
+
52
+ def test_post_uppercase
53
+ create_template_element ELEMENT_TAG, :attributes => { 'method' => 'POST' }
54
+ attr_value = ":action => 'create'"
55
+ create_directive FormRemote, attr_value
56
+ assert_equal "<%= form_remote_tag( :action => 'create', :method => \"POST\" ) %>", render_element_event(:stag)
57
+ end
58
+
59
+ end
@@ -3,64 +3,56 @@
3
3
  require 'test/unit'
4
4
  currentPath = File.dirname(__FILE__)
5
5
  require File.join( currentPath, '../../lib/masterview' )
6
- require File.join( currentPath, '../../lib/masterview/directives/form')
6
+ #require File.join( currentPath, '../../lib/masterview/directives/form')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('form')
7
9
 
8
10
  class TestForm < Test::Unit::TestCase
9
- include MasterView::Directives
11
+ include DirectiveTestHelpers
10
12
 
11
- def setup
12
- @directives = MasterView::DirectiveSet.new
13
+ Form = MasterView::Directives::Form # test subject
14
+
15
+ ELEMENT_TAG = 'form'
16
+
17
+ def test_metadata
18
+ assert_equal MasterView::ConfigSettings.namespace_prefix, Form.namespace_prefix
19
+ assert_equal 'form', Form.attribute_name
13
20
  end
14
21
 
15
22
  def test_default
16
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
17
- @directives.directives = []
23
+ create_template_element ELEMENT_TAG
18
24
  attr_value = ":action => 'create'"
19
- @directives << Form.new(attr_value)
20
- dcs = @directives.determine_dcs(:stag)
21
- dcs.context = tag.create_context
22
- assert_equal "<%= form_tag :action => 'create' %>", dcs.render
23
- assert_equal "<%= end_form_tag %>", @directives.determine_dcs(:etag).render
25
+ create_directive Form, attr_value
26
+ assert_equal "<%= form_tag( :action => 'create' ) %>", render_element_event(:stag)
27
+ assert_equal "</form>", render_element_event(:etag)
24
28
  end
25
29
 
26
- def test_get_uc
27
- tag = MasterView::Tag.new(@directives, 'foo', { 'method' => 'GET'}, :normal, nil)
28
- @directives.directives = []
30
+ def test_get
31
+ create_template_element ELEMENT_TAG, :attributes => { 'method' => 'get' }
29
32
  attr_value = ":action => 'create'"
30
- @directives << Form.new(attr_value)
31
- dcs = @directives.determine_dcs(:stag)
32
- dcs.context = tag.create_context
33
- assert_equal "<%= form_tag {:action => 'create'}, :method => \"get\" %>", dcs.render
33
+ create_directive Form, attr_value
34
+ assert_equal "<%= form_tag( { :action => 'create' }, :method => \"get\" ) %>", render_element_event(:stag)
34
35
  end
35
36
 
36
- def test_get
37
- tag = MasterView::Tag.new(@directives, 'foo', { 'method' => 'get' }, :normal, nil)
38
- @directives.directives = []
37
+ def test_get_uppercase
38
+ create_template_element ELEMENT_TAG, :attributes => { 'method' => 'GET'}
39
39
  attr_value = ":action => 'create'"
40
- @directives << Form.new(attr_value)
41
- dcs = @directives.determine_dcs(:stag)
42
- dcs.context = tag.create_context
43
- assert_equal "<%= form_tag {:action => 'create'}, :method => \"get\" %>", dcs.render
40
+ create_directive Form, attr_value
41
+ assert_equal "<%= form_tag( { :action => 'create' }, :method => \"GET\" ) %>", render_element_event(:stag)
44
42
  end
45
43
 
46
- def test_post_uc
47
- tag = MasterView::Tag.new(@directives, 'foo', { 'method' => 'POST' }, :normal, nil)
48
- @directives.directives = []
44
+ def test_post
45
+ create_template_element ELEMENT_TAG, :attributes => { 'method' => 'post' }
49
46
  attr_value = ":action => 'create'"
50
- @directives << Form.new(attr_value)
51
- dcs = @directives.determine_dcs(:stag)
52
- dcs.context = tag.create_context
53
- assert_equal "<%= form_tag :action => 'create' %>", dcs.render
47
+ create_directive Form, attr_value
48
+ assert_equal "<%= form_tag( { :action => 'create' }, :method => \"post\" ) %>", render_element_event(:stag)
54
49
  end
55
50
 
56
- def test_post
57
- tag = MasterView::Tag.new(@directives, 'foo', { 'method' => 'post' }, :normal, nil)
58
- @directives.directives = []
51
+ def test_post_uppercase
52
+ create_template_element ELEMENT_TAG, :attributes => { 'method' => 'POST' }
59
53
  attr_value = ":action => 'create'"
60
- @directives << Form.new(attr_value)
61
- dcs = @directives.determine_dcs(:stag)
62
- dcs.context = tag.create_context
63
- assert_equal "<%= form_tag :action => 'create' %>", dcs.render
54
+ create_directive Form, attr_value
55
+ assert_equal "<%= form_tag( { :action => 'create' }, :method => \"POST\" ) %>", render_element_event(:stag)
64
56
  end
65
57
 
66
58
  end
@@ -3,28 +3,39 @@
3
3
  require 'test/unit'
4
4
  currentPath = File.dirname(__FILE__)
5
5
  require File.join( currentPath, '../../lib/masterview' )
6
- require File.join( currentPath, '../../lib/masterview/directives/global_inline_erb')
6
+ #require File.join( currentPath, '../../lib/masterview/directives/global_inline_erb')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('global_inline_erb')
7
9
 
8
10
  class TestGlobalInlineErb < Test::Unit::TestCase
9
- include MasterView::Directives
11
+ include DirectiveTestHelpers
10
12
 
11
- def setup
12
- @directives = MasterView::DirectiveSet.new
13
- end
13
+ Global_inline_erb = MasterView::Directives::GlobalInlineErb # test subject
14
+
15
+ ELEMENT_TAG = 'dummy'
16
+ TEMPLATE_HELLO_ATTR_VALUE = 'foo bar {{{=hello world}}}'
17
+ ERBIZED_HELLO_ATTR_VALUE = 'foo bar <%=hello world%>'
18
+ TEMPLATE_WORLD_ATTR_VALUE = '{{{fine}}}'
19
+ ERBIZED_WORLD_ATTR_VALUE = '<%fine%>'
20
+ TEMPLATE_ELEMENT_ATTRIBUTES = { 'hello' => TEMPLATE_HELLO_ATTR_VALUE, 'world' => TEMPLATE_WORLD_ATTR_VALUE }
14
21
 
15
22
  def test_hello
16
- @tag = MasterView::Tag.new(@directives, 'foo', {'hello' => 'foo bar {{{=hello world}}}', 'world' => '{{{fine}}}'}, :normal, nil)
17
- @directives.directives = []
18
- @directives << Global_inline_erb.new
19
- @directives << MasterView::SimpleRenderHandler.new
20
- dcs = @directives.determine_dcs(:stag)
21
- dcs.context = @tag.create_context
22
- assert_equal '<foo hello="foo bar <%=hello world%>" world="<%fine%>">', dcs.render.join
23
- #assert_equal "<%= #{attr_value} %>", dcs.context[:tag].content
24
-
25
- dcs = @directives.determine_dcs(:characters)
26
- dcs.context = @tag.create_context(:content_part => 'more text here {{{= foo(bar) }}} more then {{{exec {:hello => :world} }}} finally')
27
- assert_equal 'more text here <%= foo(bar) %> more then <%exec {:hello => :world} %> finally', dcs.render.join
23
+
24
+ test_tag = create_template_element ELEMENT_TAG, :attributes => TEMPLATE_ELEMENT_ATTRIBUTES
25
+ create_directive Global_inline_erb, ''
26
+ append_default_render_handler
27
+ assert_equal 2, element_directives.size, 'we want our directive processor and a rendering backstop'
28
+
29
+ render_result = render_element_event(:stag)
30
+ assert_equal "<#{ELEMENT_TAG} hello=\"#{ERBIZED_HELLO_ATTR_VALUE}\" world=\"#{ERBIZED_WORLD_ATTR_VALUE}\">", render_result
31
+ #assert_equal "<%= #{attr_value} %>", test_tag.content.join
32
+
33
+ template_content = 'more text here {{{= foo(bar) }}} more then {{{exec {:hello => :world} }}} finally'
34
+ erbized_content = 'more text here <%= foo(bar) %> more then <%exec {:hello => :world} %> finally'
35
+ context_values = { :content_part => template_content }
36
+ render_result = render_element_event( :characters, context_values )
37
+ assert_equal erbized_content, render_result
38
+
28
39
  end
29
40
 
30
41
  end
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ currentPath = File.dirname(__FILE__)
5
+ require File.join( currentPath, '../../lib/masterview' )
6
+ require File.join( currentPath, '../test_helper' )
7
+
8
+ class TestGridDirective < Test::Unit::TestCase
9
+ def setup
10
+ MasterView::IOMgr.erb = MasterView::StringHashMIOTree.new({}, '.rhtml', :logging => true)
11
+ end
12
+
13
+ def test_grid
14
+ template = <<-END
15
+ <div mv:generate='foo/bar'>
16
+ <table mv:grid="product, :cols => [:name, :description], :sort => [:column, :created_date]">
17
+ <tr><th>Name</th><th>Description</th></tr>
18
+ <tr><td>foo</td><td>bar</td></tr>
19
+ </table>
20
+ </div>
21
+ END
22
+ expected = {
23
+ 'foo/bar' => "<div>
24
+ <table>
25
+ <tr><th>Name</th><th>Description</th></tr>
26
+ <%= render :partial => 'store/product', :collection => @products %>
27
+ </table>
28
+ </div>",
29
+
30
+ 'store/_product.rhtml' => ""
31
+ }
32
+ assert_template_result expected, template
33
+ end
34
+
35
+
36
+
37
+
38
+ end
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ currentPath = File.dirname(__FILE__)
5
+ require File.join( currentPath, '../../lib/masterview' )
6
+
7
+ class TestDirectiveHelpers < Test::Unit::TestCase
8
+ include MasterView::DirectiveHelpers
9
+
10
+
11
+ def test_find_last_parent_strings
12
+ tag = OpenStruct.new
13
+ tag.parent = OpenStruct.new
14
+
15
+ foo = 'foo'
16
+ bar = 'bar'
17
+ baz = 'baz'
18
+ bar2 = 'bar'
19
+ hello = 'hello'
20
+ tag.parent.content = [foo, bar, baz, bar2, hello]
21
+ assert_equal bar2.object_id, find_last_in_parent(tag, 'bar').object_id
22
+ assert bar.object_id != find_last_in_parent(tag, 'bar').object_id
23
+ end
24
+
25
+ # test bug found by Sergey Shalatskly where it wasn't searching into arrays properly
26
+ def test_find_last_parent_strings_and_arrays
27
+ tag = OpenStruct.new
28
+ tag.parent = OpenStruct.new
29
+
30
+ foo = 'foo'
31
+ bar = 'bar'
32
+ baz = 'baz'
33
+ bar2 = 'bar'
34
+ hello = 'hello'
35
+ tag.parent.content = [foo, bar, [baz, bar2, hello], ['one', 'world'], 'three']
36
+ assert_equal bar2.object_id, find_last_in_parent(tag, 'bar').object_id
37
+ assert bar.object_id != find_last_in_parent(tag, 'bar').object_id
38
+ end
39
+ end
@@ -3,60 +3,75 @@
3
3
  require 'test/unit'
4
4
  currentPath = File.dirname(__FILE__)
5
5
  require File.join( currentPath, '../../lib/masterview' )
6
- require File.join( currentPath, '../../lib/masterview/directives/hidden_field')
6
+ #require File.join( currentPath, '../../lib/masterview/directives/hidden_field')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('hidden_field')
7
9
 
8
10
  class TestHiddenField < Test::Unit::TestCase
9
- include MasterView::Directives
11
+ include DirectiveTestHelpers
10
12
 
11
- def setup
12
- @directives = MasterView::DirectiveSet.new
13
+ HiddenField = MasterView::Directives::HiddenField # test subject
14
+
15
+ ELEMENT_TAG = 'input'
16
+
17
+ def test_metadata
18
+ assert_equal MasterView::ConfigSettings.namespace_prefix, HiddenField.namespace_prefix
19
+ assert_equal 'hidden_field', HiddenField.attribute_name
13
20
  end
14
21
 
15
- def hidden_field_exec(obj, method, other, options)
22
+ # set up the test case for an input element with mv:hidden directive
23
+ def create_element_with_hidden_field_directive(obj, method, other_attr_values=nil, attributes={})
24
+
16
25
  attr_value = "#{obj}, #{method}"
17
- attr_value << ', ' << other unless other.nil?
18
- tag = MasterView::Tag.new(@directives, 'input', options, :normal, nil)
19
- @directives.directives = []
20
- @directives << Hidden_field.new(attr_value)
21
- assert_equal nil, @directives.determine_dcs(:stag).render
22
- dcs = @directives.determine_dcs(:etag)
23
- dcs.context = tag.create_context
24
- dcs.context[:tag].content = "hello world"
25
- dcs.render
26
+ attr_value << ', ' << other_attr_values unless other_attr_values.nil?
27
+
28
+ input_tag = create_template_element ELEMENT_TAG,
29
+ :attributes => attributes,
30
+ :content => 'hello world'
31
+ create_directive HiddenField, attr_value
32
+ assert_equal '', render_element_event(:stag)
33
+
26
34
  end
27
35
 
28
36
  def test_normal
29
37
  obj = ':product'
30
- method = ':price'
31
- ret = hidden_field_exec(obj, method, nil, { 'type' => 'hidden', 'value' => 'fake text' } )
32
- assert_equal "<%= hidden_field #{obj}, #{method} %>", ret
38
+ method = 'price'
39
+ create_element_with_hidden_field_directive(obj, method, nil, { 'type' => 'hidden', 'value' => 'fake text' } )
40
+ assert_equal "<%= hidden_field( #{obj}, '#{method}' ) %>", render_element_event(:etag)
33
41
  end
34
42
 
35
43
  def test_extra
36
44
  obj = ':product'
37
- method = ':price'
38
- ret = hidden_field_exec(obj, method, "'more', 'stuff'", { 'type' => 'hidden', 'value' => 'fake text' } )
39
- assert_equal "<%= hidden_field #{obj}, #{method} %>", ret
45
+ method = "'price'"
46
+ create_element_with_hidden_field_directive(obj, method, "\"'more', 'stuff'\"", { 'type' => 'hidden', 'value' => 'fake text' } )
47
+ assert_equal "<%= hidden_field( #{obj}, #{method}, \"'more', 'stuff'\" ) %>", render_element_event(:etag)
48
+ end
49
+
50
+ def test_extra2
51
+ obj = ':product'
52
+ method = "'price'"
53
+ create_element_with_hidden_field_directive(obj, method, "'more'", { 'type' => 'hidden', 'value' => 'fake text' } )
54
+ assert_equal "<%= hidden_field( #{obj}, #{method}, 'more' ) %>", render_element_event(:etag)
40
55
  end
41
56
 
42
57
  def test_all
43
58
  obj = ':product'
44
59
  method = ':price'
45
- ret = hidden_field_exec(obj, method, nil,
46
- {
47
- 'type' => 'hidden', 'value' => 'fake text'
60
+ create_element_with_hidden_field_directive(obj, method, nil,
61
+ {
62
+ 'type' => 'hidden', 'value' => 'fake text'
48
63
  } )
49
- assert_equal "<%= hidden_field #{obj}, #{method} %>", ret
64
+ assert_equal "<%= hidden_field( #{obj}, #{method} ) %>", render_element_event(:etag)
50
65
  end
51
66
 
52
- def test_all_uc
67
+ def test_all_uppercase
53
68
  obj = ':product'
54
69
  method = ':price'
55
- ret = hidden_field_exec(obj, method, nil,
56
- {
57
- 'TYPE' => 'HIDDEN', 'value' => 'fake text'
70
+ create_element_with_hidden_field_directive(obj, method, nil,
71
+ {
72
+ 'TYPE' => 'HIDDEN', 'value' => 'fake text'
58
73
  } )
59
- assert_equal "<%= hidden_field #{obj}, #{method} %>", ret
74
+ assert_equal "<%= hidden_field( #{obj}, #{method} ) %>", render_element_event(:etag)
60
75
  end
61
76
 
62
77
  end
@@ -3,21 +3,24 @@
3
3
  require 'test/unit'
4
4
  currentPath = File.dirname(__FILE__)
5
5
  require File.join( currentPath, '../../lib/masterview' )
6
- require File.join( currentPath, '../../lib/masterview/directives/if')
6
+ #require File.join( currentPath, '../../lib/masterview/directives/if')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('if')
7
9
 
8
10
  class TestIf < Test::Unit::TestCase
9
- include MasterView::Directives
11
+ include DirectiveTestHelpers
12
+
13
+ If = MasterView::Directives::If # test subject
10
14
 
11
15
  def setup
12
- @directives = MasterView::DirectiveSet.new
16
+ create_template_element
13
17
  end
14
18
 
15
19
  def test_if
16
- @directives.directives = []
17
20
  attr_value = 'true'
18
- @directives << If.new(attr_value)
19
- assert_equal "<% if #{attr_value} %>", @directives.determine_dcs(:stag).render.join
20
- assert_equal "<% end %>", @directives.determine_dcs(:etag).render.join
21
+ create_directive If, attr_value
22
+ assert_equal "<% if( #{attr_value} ) -%>", render_element_event(:stag)
23
+ assert_equal "<% end -%>", render_element_event(:etag)
21
24
  end
22
25
 
23
26
  end