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,87 +3,95 @@
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/image_tag' )
6
+ #require File.join( currentPath, '../../lib/masterview/directives/image_tag' )
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('image_tag')
7
9
 
8
10
  class ImageTagTest < Test::Unit::TestCase
9
- include MasterView::Directives
11
+ include DirectiveTestHelpers
10
12
 
11
- def setup
12
- @directives = MasterView::DirectiveSet.new
13
+ ImageTag = MasterView::Directives::ImageTag # test subject
14
+
15
+ IMAGE_TAG = 'img'
16
+ IMAGE_REF = 'something.png'
17
+
18
+ def check_element_rendering(expected)
19
+
20
+ # nothing should be happening during stag processing
21
+ assert_equal '', render_element_event(:stag)
22
+
23
+ # all our work should be getting done at etag time
24
+ render_result = render_element_event(:etag)
25
+ assert_equal expected, render_result
26
+
27
+ end
28
+
29
+ def test_metadata
30
+ assert_equal MasterView::ConfigSettings.namespace_prefix, ImageTag.namespace_prefix
31
+ assert_equal 'image_tag', ImageTag.attribute_name
13
32
  end
14
33
 
34
+ # <img mv:image_tag="#{IMAGE_REF}" />
15
35
  def test_default
16
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
17
- @directives.directives = []
18
- attr_value = "hello world"
19
- @directives << Image_tag.new(attr_value)
20
- assert_equal nil, @directives.determine_dcs(:stag).render
21
- dcs = @directives.determine_dcs(:etag)
22
- dcs.context = tag.create_context
23
- assert_equal "<%= image_tag 'hello world' %>", dcs.render
36
+
37
+ create_template_element IMAGE_TAG #image element w/ no attrs
38
+ attr_value = IMAGE_REF # just the image ref
39
+ create_directive ImageTag, attr_value
40
+
41
+ check_element_rendering "<%= image_tag( '#{IMAGE_REF}' ) %>"
42
+
24
43
  end
25
44
 
45
+ # <img width="20" height="10" mv:image_tag="#{IMAGE_REF}" />
26
46
  def test_default_size
27
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
28
- @directives.directives = []
29
- attr_value = "hello world"
30
- @directives << Image_tag.new(attr_value)
31
- assert_equal nil, @directives.determine_dcs(:stag).render
32
- dcs = @directives.determine_dcs(:etag)
33
- dcs.context = tag.create_context
34
- dcs.context[:tag].attributes['width'] = '20'
35
- dcs.context[:tag].attributes['height'] = '10'
36
- assert_equal "<%= image_tag 'hello world', :size => '20x10' %>", dcs.render
47
+
48
+ create_template_element IMAGE_TAG, :attributes => { 'width' => '20', 'height' => '10' }
49
+ attr_value = IMAGE_REF # just the image ref
50
+ create_directive ImageTag, attr_value
51
+
52
+ check_element_rendering "<%= image_tag( '#{IMAGE_REF}', :height => 10, :width => 20 ) %>"
53
+
37
54
  end
38
55
 
56
+ # <img width="20" height="10" alt="img description" mv:image_tag="#{IMAGE_REF}" />
39
57
  def test_default_size_alt
40
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
41
- @directives.directives = []
42
- attr_value = "hello world"
43
- @directives << Image_tag.new(attr_value)
44
- assert_equal nil, @directives.determine_dcs(:stag).render
45
- dcs = @directives.determine_dcs(:etag)
46
- dcs.context = tag.create_context
47
- dcs.context[:tag].attributes['width'] = '20'
48
- dcs.context[:tag].attributes['height'] = '10'
49
- dcs.context[:tag].attributes['alt'] = 'foo'
50
- assert_equal "<%= image_tag 'hello world', :alt => 'foo', :size => '20x10' %>", dcs.render
58
+
59
+ create_template_element IMAGE_TAG, :attributes => { 'width' => '20', 'height' => '10', 'alt' => 'img description' }
60
+ attr_value = IMAGE_REF # just the image ref
61
+ create_directive ImageTag, attr_value
62
+
63
+ check_element_rendering "<%= image_tag( '#{IMAGE_REF}', :alt => \"img description\", :height => 10, :width => 20 ) %>"
64
+
51
65
  end
52
66
 
67
+ # <img src="../../public/images/foo.gif" mv:image_tag="" />
53
68
  def test_empty_infer_path
54
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
55
- @directives.directives = []
56
- attr_value = ""
57
- @directives << Image_tag.new(attr_value)
58
- assert_equal nil, @directives.determine_dcs(:stag).render
59
- dcs = @directives.determine_dcs(:etag)
60
- dcs.context = tag.create_context
61
- dcs.context[:tag].attributes['src'] = '../../public/images/foo.js'
62
- assert_equal "<%= image_tag 'foo.js' %>", dcs.render
69
+
70
+ create_template_element IMAGE_TAG, :attributes => { 'src' => '../../public/images/foo.gif' }
71
+ create_directive ImageTag, ''
72
+
73
+ check_element_rendering "<%= image_tag( 'foo.gif' ) %>"
74
+
63
75
  end
64
76
 
77
+ # <img src="../../public/images/foo/bar.gif" mv:image_tag="" />
65
78
  def test_empty_infer_path_sub
66
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
67
- @directives.directives = []
68
- attr_value = ""
69
- @directives << Image_tag.new(attr_value)
70
- assert_equal nil, @directives.determine_dcs(:stag).render
71
- dcs = @directives.determine_dcs(:etag)
72
- dcs.context = tag.create_context
73
- dcs.context[:tag].attributes['src'] = '../../public/images/bar/foo.js'
74
- assert_equal "<%= image_tag 'bar/foo.js' %>", dcs.render
79
+
80
+ create_template_element IMAGE_TAG, :attributes => { 'src' => '../../public/images/foo/bar.gif' }
81
+ create_directive ImageTag, ''
82
+
83
+ check_element_rendering "<%= image_tag( 'foo/bar.gif' ) %>"
84
+
75
85
  end
76
86
 
77
- def test_empty_use_src
78
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
79
- @directives.directives = []
80
- attr_value = ""
81
- @directives << Image_tag.new(attr_value)
82
- assert_equal nil, @directives.determine_dcs(:stag).render
83
- dcs = @directives.determine_dcs(:etag)
84
- dcs.context = tag.create_context
85
- dcs.context[:tag].attributes['src'] = '/myimages/foo.js'
86
- assert_equal "<%= image_tag '/myimages/foo.js' %>", dcs.render
87
+ # <img src="/stdimages/logo.gif" mv:image_tag="" />
88
+ def test_empty_use_src_no_path_inferred
89
+
90
+ create_template_element IMAGE_TAG, :attributes => { 'src' => '/stdimages/logo.gif' }
91
+ create_directive ImageTag, ''
92
+
93
+ check_element_rendering "<%= image_tag( '/stdimages/logo.gif' ) %>"
94
+
87
95
  end
88
96
 
89
97
  end
@@ -3,60 +3,50 @@
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/import_render')
6
+ #require File.join( currentPath, '../../lib/masterview/directives/import_render')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('import_render')
7
9
 
8
10
  class TestImportRender < Test::Unit::TestCase
9
- include MasterView::Directives
11
+ include DirectiveTestHelpers
12
+
10
13
  include MasterView::DirectiveHelpers
11
14
 
12
- def setup
13
- @mio_output_tree = MasterView::StringHashMIOTree.new
14
- @renderer = MasterView::Renderer.new(:output_mio_tree => @mio_output_tree) #this sets up Renderer.last_renderer for import_test
15
- @directives = MasterView::DirectiveSet.new
15
+ # shortcut references for internal parser implementation classes
16
+ ImportRender = MasterView::Directives::ImportRender # test subject
17
+
18
+ ELEMENT_TAG = 'div'
19
+
20
+ def test_metadata
21
+ assert_equal MasterView::ConfigSettings.namespace_prefix, ImportRender.namespace_prefix
22
+ assert_equal 'import_render', ImportRender.attribute_name
16
23
  end
17
24
 
18
25
  def test_import_render
19
- import_render_tag = MasterView::Tag.new(@directives, 'bar', {}, :normal, nil)
20
- @directives.directives = []
26
+ import_render_tag = create_template_element ELEMENT_TAG
21
27
  attr_value = ":partial => 'foo/bar'"
22
- @directives << Import_render.new(attr_value)
23
- dcs = @directives.determine_dcs(:stag)
24
- dcs.context = import_render_tag.create_context
25
- assert_equal nil, dcs.render
26
-
27
- dcs = @directives.determine_dcs(:etag)
28
- dcs.context = import_render_tag.create_context
29
- assert_equal ERB_EVAL+'render( '+attr_value+' )'+ERB_END, dcs.render.join
28
+ create_directive ImportRender, attr_value
29
+ assert_equal '', render_element_event(:stag), 'nothing happens at :stag time'
30
+ assert_equal ERB_CONTENT_START+'render( '+attr_value+' )'+ERB_CONTENT_END, render_element_event(:etag)
30
31
  end
31
32
 
32
33
  def test_import_render_keyword_expansion
33
- @renderer.keyword_expander.set_template_pathname('foo/bar.html', '.rhtml')
34
- import_render_tag = MasterView::Tag.new(@directives, 'bar', {}, :normal, nil)
35
- @directives.directives = []
34
+ import_render_tag = create_template_element ELEMENT_TAG
35
+ TestHelperRenderer.keyword_expander.set_template_pathname('foo/bar.html', '.rhtml') # set path after render is created
36
36
  attr_value = %q[:partial => '{template_dir_path}/{template_basename}']
37
- @directives << Import_render.new(attr_value)
38
- dcs = @directives.determine_dcs(:stag)
39
- dcs.context = import_render_tag.create_context
40
- assert_equal nil, dcs.render
41
-
42
- dcs = @directives.determine_dcs(:etag)
43
- dcs.context = import_render_tag.create_context
44
- assert_equal ERB_EVAL+ %q[render( :partial => 'foo/bar' )]+ERB_END, dcs.render.join
37
+ create_directive ImportRender, attr_value
38
+ assert_equal '', render_element_event(:stag), 'nothing happens at :stag time'
39
+ assert_equal ERB_CONTENT_START+ %q[render( :partial => 'foo/bar']+' )'+ERB_CONTENT_END, render_element_event(:etag)
45
40
  end
46
41
 
47
42
  def test_import_render_keyword_expansion_subdir
48
- @renderer.keyword_expander.set_template_pathname('one/foo/bar.html', '.rhtml')
49
- import_render_tag = MasterView::Tag.new(@directives, 'bar', {}, :normal, nil)
50
- @directives.directives = []
43
+ import_render_tag = create_template_element ELEMENT_TAG
44
+ TestHelperRenderer.keyword_expander.set_template_pathname('one/foo/bar.html', '.rhtml') # set path after render is created
51
45
  attr_value = %q[:partial => '{template_dir_path}/{template_basename}']
52
- @directives << Import_render.new(attr_value)
53
- dcs = @directives.determine_dcs(:stag)
54
- dcs.context = import_render_tag.create_context
55
- assert_equal nil, dcs.render
56
-
57
- dcs = @directives.determine_dcs(:etag)
58
- dcs.context = import_render_tag.create_context
59
- assert_equal ERB_EVAL+ %q[render( :partial => 'one/foo/bar' )]+ERB_END, dcs.render.join
46
+ create_directive ImportRender, attr_value
47
+
48
+ assert_equal '', render_element_event(:stag), 'nothing happens at :stag time'
49
+ assert_equal ERB_CONTENT_START+ %q[render( :partial => 'one/foo/bar']+' )'+ERB_CONTENT_END, render_element_event(:etag)
60
50
  end
61
51
 
62
52
  end
@@ -3,27 +3,29 @@
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/import')
6
+ #require File.join( currentPath, '../../lib/masterview/directives/import')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('import')
9
+
7
10
 
8
11
  class TestImport < Test::Unit::TestCase
9
- include MasterView::Directives
12
+ include DirectiveTestHelpers
13
+
14
+ Import = MasterView::Directives::Import # test subject
15
+
16
+ ELEMENT_TAG = 'div'
10
17
 
11
- def setup
12
- @directives = MasterView::DirectiveSet.new
18
+ def test_metadata
19
+ assert_equal MasterView::ConfigSettings.namespace_prefix, Import.namespace_prefix
20
+ assert_equal 'import', Import.attribute_name
13
21
  end
14
22
 
15
23
  def test_import
16
- import_tag = MasterView::Tag.new(@directives, 'bar', {}, :normal, nil)
17
- @directives.directives = []
24
+ import_tag = create_template_element ELEMENT_TAG
18
25
  attr_value = 'foo/bar'
19
- @directives << Import.new(attr_value)
20
- dcs = @directives.determine_dcs(:stag)
21
- dcs.context = import_tag.create_context
22
- assert_equal nil, dcs.render
23
-
24
- dcs = @directives.determine_dcs(:etag)
25
- dcs.context = import_tag.create_context
26
- assert_equal nil, dcs.render
26
+ create_directive Import, attr_value
27
+ assert_equal '', render_element_event(:stag), 'nothing happens at :stag time'
28
+ assert_equal '', render_element_event(:stag), 'this is strictly a design-time feature, so no effect on rendering output'
27
29
  end
28
30
 
29
31
  end
@@ -0,0 +1,32 @@
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/insert_generated_comment')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('insert_generated_comment')
9
+
10
+ class TestInsertGeneratedComment < Test::Unit::TestCase
11
+ include DirectiveTestHelpers
12
+
13
+ InsertGeneratedComment = MasterView::Directives::InsertGeneratedComment # test subject
14
+
15
+ ELEMENT_TAG = 'div'
16
+
17
+ def setup
18
+ create_template_element ELEMENT_TAG
19
+ end
20
+
21
+ def test_metadata
22
+ assert_equal MasterView::ConfigSettings.namespace_prefix, InsertGeneratedComment.namespace_prefix
23
+ assert_equal 'insert_generated_comment', InsertGeneratedComment.attribute_name
24
+ end
25
+
26
+ def test_insert_generated_comment
27
+ attr_value = ''
28
+ create_directive InsertGeneratedComment, attr_value
29
+ assert_equal "\n<%\n# WARNING - This is a generated file created by MasterView. \n# Do not edit - changes will be lost when this file is re-generated.\n# \n# To make changes, edit the MasterView source file located at: \n# \n-%>", render_element_event(:stag)
30
+ end
31
+
32
+ end
@@ -3,71 +3,68 @@
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/javascript_include' )
6
+ #require File.join( currentPath, '../../lib/masterview/directives/javascript_include' )
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('javascript_include')
7
9
 
8
10
  class JavascriptIncludeTest < Test::Unit::TestCase
9
- include MasterView::Directives
11
+ include DirectiveTestHelpers
10
12
 
11
- def setup
12
- @directives = MasterView::DirectiveSet.new
13
+ JavascriptInclude = MasterView::Directives::JavascriptInclude # test subject
14
+
15
+ ELEMENT_TAG = 'script'
16
+
17
+ def test_metadata
18
+ assert_equal MasterView::ConfigSettings.namespace_prefix, JavascriptInclude.namespace_prefix
19
+ assert_equal 'javascript_include', JavascriptInclude.attribute_name
13
20
  end
14
21
 
15
22
  def test_default
16
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
17
- @directives.directives = []
18
- attr_value = "hello world"
19
- @directives << Javascript_include.new(attr_value)
20
- assert_equal nil, @directives.determine_dcs(:stag).render
21
- dcs = @directives.determine_dcs(:etag)
22
- dcs.context = tag.create_context
23
- assert_equal "<%= javascript_include_tag 'hello world' %>", dcs.render
23
+ create_template_element ELEMENT_TAG
24
+ attr_value = "helloworld"
25
+ create_directive JavascriptInclude, attr_value
26
+ assert_equal '', render_element_event(:stag)
27
+ assert_equal "<%= javascript_include_tag( 'helloworld' ) %>", render_element_event(:etag)
24
28
  end
25
29
 
26
30
  def test_symbol
27
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
28
- @directives.directives = []
31
+ create_template_element ELEMENT_TAG
29
32
  attr_value = ":defaults"
30
- @directives << Javascript_include.new(attr_value)
31
- assert_equal nil, @directives.determine_dcs(:stag).render
32
- dcs = @directives.determine_dcs(:etag)
33
- dcs.context = tag.create_context
34
- assert_equal "<%= javascript_include_tag :defaults %>", dcs.render
33
+ create_directive JavascriptInclude, attr_value
34
+ assert_equal '', render_element_event(:stag)
35
+ assert_equal "<%= javascript_include_tag( :defaults ) %>", render_element_event(:etag)
35
36
  end
36
37
 
37
38
  def test_empty_infer_path
38
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
39
- @directives.directives = []
39
+ create_template_element ELEMENT_TAG, :attributes => { 'src' => '../../public/javascripts/foo.js' }
40
40
  attr_value = ""
41
- @directives << Javascript_include.new(attr_value)
42
- assert_equal nil, @directives.determine_dcs(:stag).render
43
- dcs = @directives.determine_dcs(:etag)
44
- dcs.context = tag.create_context
45
- dcs.context[:tag].attributes['src'] = '../../public/javascripts/foo.js'
46
- assert_equal "<%= javascript_include_tag 'foo.js' %>", dcs.render
41
+ create_directive JavascriptInclude, attr_value
42
+ assert_equal '', render_element_event(:stag)
43
+ assert_equal "<%= javascript_include_tag( 'foo.js' ) %>", render_element_event(:etag)
47
44
  end
48
45
 
49
46
  def test_empty_infer_path_sub
50
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
51
- @directives.directives = []
47
+ create_template_element ELEMENT_TAG, :attributes => { 'src' => '../../public/javascripts/bar/foo.js' }
52
48
  attr_value = ""
53
- @directives << Javascript_include.new(attr_value)
54
- assert_equal nil, @directives.determine_dcs(:stag).render
55
- dcs = @directives.determine_dcs(:etag)
56
- dcs.context = tag.create_context
57
- dcs.context[:tag].attributes['src'] = '../../public/javascripts/bar/foo.js'
58
- assert_equal "<%= javascript_include_tag 'bar/foo.js' %>", dcs.render
49
+ create_directive JavascriptInclude, attr_value
50
+ assert_equal '', render_element_event(:stag)
51
+ assert_equal "<%= javascript_include_tag( 'bar/foo.js' ) %>", render_element_event(:etag)
59
52
  end
60
53
 
61
54
  def test_empty_use_src
62
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
63
- @directives.directives = []
55
+ create_template_element ELEMENT_TAG, :attributes => { 'src' => '/myjavascripts/foo.js'}
64
56
  attr_value = ""
65
- @directives << Javascript_include.new(attr_value)
66
- assert_equal nil, @directives.determine_dcs(:stag).render
67
- dcs = @directives.determine_dcs(:etag)
68
- dcs.context = tag.create_context
69
- dcs.context[:tag].attributes['src'] = '/myjavascripts/foo.js'
70
- assert_equal "<%= javascript_include_tag '/myjavascripts/foo.js' %>", dcs.render
57
+ create_directive JavascriptInclude, attr_value
58
+ assert_equal '', render_element_event(:stag)
59
+ assert_equal "<%= javascript_include_tag( '/myjavascripts/foo.js' ) %>", render_element_event(:etag)
60
+ end
61
+
62
+ def test_multiple
63
+ create_template_element ELEMENT_TAG
64
+ attr_value = "hello/world, foo/bar, :defaults, :baz, cat/dog"
65
+ create_directive JavascriptInclude, attr_value
66
+ assert_equal '', render_element_event(:stag)
67
+ assert_equal "<%= javascript_include_tag( 'hello/world', 'foo/bar', :defaults, :baz, 'cat/dog' ) %>", render_element_event(:etag)
71
68
  end
72
69
 
73
70
  end
@@ -0,0 +1,40 @@
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/link_to_function')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('link_to_function')
9
+
10
+ class TestLinkToFunction < Test::Unit::TestCase
11
+ include DirectiveTestHelpers
12
+
13
+ LinkToFunction = MasterView::Directives::LinkToFunction # test subject
14
+
15
+ ELEMENT_TAG = 'a'
16
+
17
+ def test_metadata
18
+ assert_equal MasterView::ConfigSettings.namespace_prefix, LinkToFunction.namespace_prefix
19
+ assert_equal 'link_to_function', LinkToFunction.attribute_name
20
+ end
21
+
22
+ def test_default
23
+ link_tag = create_template_element ELEMENT_TAG, :content => 'function_name'
24
+ attr_value = "alert('Hello world!')"
25
+ create_directive LinkToFunction, attr_value
26
+ assert_equal '', render_element_event(:stag)
27
+ expected_content = "<%= link_to_function( 'function_name', \"alert('Hello world!')\" ) %>"
28
+ assert_equal expected_content, render_element_event(:etag)
29
+ end
30
+
31
+ def test_default_quoted
32
+ link_tag = create_template_element ELEMENT_TAG, :content => 'function_name'
33
+ attr_value = "'dosomething()', :id => 'hw'"
34
+ create_directive LinkToFunction, attr_value
35
+ assert_equal '', render_element_event(:stag)
36
+ expected_content = "<%= link_to_function( 'function_name', 'dosomething()', :id => 'hw' ) %>"
37
+ assert_equal expected_content, render_element_event(:etag)
38
+ end
39
+
40
+ end
@@ -3,25 +3,65 @@
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/link_to_if')
6
+ #require File.join( currentPath, '../../lib/masterview/directives/link_to_if')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('link_to_if')
7
9
 
8
10
  class TestLinkToIf < Test::Unit::TestCase
9
- include MasterView::Directives
11
+ include DirectiveTestHelpers
10
12
 
11
- def setup
12
- @directives = MasterView::DirectiveSet.new
13
+ LinkToIf = MasterView::Directives::LinkToIf # test subject
14
+
15
+ ELEMENT_TAG = 'a'
16
+
17
+ def test_metadata
18
+ assert_equal MasterView::ConfigSettings.namespace_prefix, LinkToIf.namespace_prefix
19
+ assert_equal 'link_to_if', LinkToIf.attribute_name
13
20
  end
14
21
 
15
22
  def test_previous
16
- tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
17
- @directives.directives = []
23
+ link_tag = create_template_element ELEMENT_TAG, :content => 'Previous page'
18
24
  attr_value = "@product_pages.current.previous, {:page => @product_pages.current.previous }"
19
- @directives << Link_to_if.new(attr_value)
20
- assert_equal nil, @directives.determine_dcs(:stag).render
21
- dcs = @directives.determine_dcs(:etag)
22
- dcs.context = tag.create_context
23
- dcs.context[:tag].content = "Previous page"
24
- assert_equal "<%= link_to_if @product_pages.current.previous, 'Previous page', {:page => @product_pages.current.previous } %>", dcs.render
25
+ create_directive LinkToIf, attr_value
26
+ assert_equal '', render_element_event(:stag)
27
+ expected_content = "<%= link_to_if( @product_pages.current.previous, 'Previous page', {:page => @product_pages.current.previous } ) %>"
28
+ assert_equal expected_content, render_element_event(:etag)
29
+ end
30
+
31
+ def test_dummy_name
32
+ link_tag = create_template_element ELEMENT_TAG, :content => 'Previous page'
33
+ attr_value = "@product_pages.current.previous, 'bar', {:page => @product_pages.current.previous }"
34
+ create_directive LinkToIf, attr_value
35
+ assert_equal '', render_element_event(:stag)
36
+ expected_content = "<%= link_to_if( @product_pages.current.previous, 'Previous page', {:page => @product_pages.current.previous } ) %>"
37
+ assert_equal expected_content, render_element_event(:etag)
38
+ end
39
+
40
+ def test_html
41
+ link_tag = create_template_element ELEMENT_TAG, :content => 'Previous page'
42
+ attr_value = "@product_pages.current.previous, {:page => @product_pages.current.previous }, :class => 'red'"
43
+ create_directive LinkToIf, attr_value
44
+ assert_equal '', render_element_event(:stag)
45
+ expected_content = "<%= link_to_if( @product_pages.current.previous, 'Previous page', {:page => @product_pages.current.previous }, :class => 'red' ) %>"
46
+ assert_equal expected_content, render_element_event(:etag)
47
+ end
48
+
49
+ def test_params
50
+ link_tag = create_template_element ELEMENT_TAG, :content => 'Previous page'
51
+ attr_value = "@product_pages.current.previous, {:page => @product_pages.current.previous }, {:class => 'red'}, 'foo', 1, 2, 3"
52
+ create_directive LinkToIf, attr_value
53
+ assert_equal '', render_element_event(:stag)
54
+ expected_content = "<%= link_to_if( @product_pages.current.previous, 'Previous page', {:page => @product_pages.current.previous }, {:class => 'red'}, 'foo', 1, 2, 3 ) %>"
55
+ assert_equal expected_content, render_element_event(:etag)
56
+ end
57
+
58
+ def test_block
59
+ link_tag = create_template_element ELEMENT_TAG, :content => 'Previous page'
60
+ attr_value = "@product_pages.current.previous, {:page => @product_pages.current.previous }, {:class => 'red'}, 'foo', 1, 2, 3 { hello }"
61
+ create_directive LinkToIf, attr_value
62
+ assert_equal '', render_element_event(:stag)
63
+ expected_content = "<%= link_to_if( @product_pages.current.previous, 'Previous page', {:page => @product_pages.current.previous }, {:class => 'red'}, 'foo', 1, 2, 3 { hello } ) %>"
64
+ assert_equal expected_content, render_element_event(:etag)
25
65
  end
26
66
 
27
67
  end
@@ -0,0 +1,58 @@
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/link_to_remote')
7
+ require File.join( currentPath, '../directive_test_helper' )
8
+ DirectiveTestHelpers.load_masterview_directive('link_to_remote')
9
+
10
+ class TestLinkToRemote < Test::Unit::TestCase
11
+ include DirectiveTestHelpers
12
+
13
+ LinkToRemote = MasterView::Directives::LinkToRemote # test subject
14
+
15
+ ELEMENT_TAG = 'a'
16
+
17
+ def test_metadata
18
+ assert_equal MasterView::ConfigSettings.namespace_prefix, LinkToRemote.namespace_prefix
19
+ assert_equal 'link_to_remote', LinkToRemote.attribute_name
20
+ end
21
+
22
+ def test_default
23
+ link_tag = create_template_element ELEMENT_TAG, :content => 'Do It'
24
+ attr_value = ":action => 'show', :id => @product"
25
+ create_directive LinkToRemote, attr_value
26
+ assert_equal '', render_element_event(:stag)
27
+ expected_content = "<%= link_to_remote( 'Do It', :action => 'show', :id => @product ) %>"
28
+ assert_equal expected_content, render_element_event(:etag)
29
+ end
30
+
31
+ def test_junk_name
32
+ link_tag = create_template_element ELEMENT_TAG, :content => 'Do It'
33
+ attr_value = "'do not use (ignored)', :action => 'show', :id => @product"
34
+ create_directive LinkToRemote, attr_value
35
+ assert_equal '', render_element_event(:stag)
36
+ expected_content = "<%= link_to_remote( 'Do It', :action => 'show', :id => @product ) %>"
37
+ assert_equal expected_content, render_element_event(:etag)
38
+ end
39
+
40
+ def test_junk_plus
41
+ link_tag = create_template_element ELEMENT_TAG, :content => 'Do It'
42
+ attr_value = "'do not use (ignored)', :action => 'show', :id => @product"
43
+ create_directive LinkToRemote, attr_value
44
+ assert_equal '', render_element_event(:stag)
45
+ expected_content = "<%= link_to_remote( 'Do It', :action => 'show', :id => @product ) %>"
46
+ assert_equal expected_content, render_element_event(:etag)
47
+ end
48
+
49
+ def test_html
50
+ link_tag = create_template_element ELEMENT_TAG, :content => 'Do It'
51
+ attr_value = ":action => 'show', {:id => @product}, :class => 'red'"
52
+ create_directive LinkToRemote, attr_value
53
+ assert_equal '', render_element_event(:stag)
54
+ expected_content = "<%= link_to_remote( 'Do It', :action => 'show', {:id => @product}, :class => 'red' ) %>"
55
+ assert_equal expected_content, render_element_event(:etag)
56
+ end
57
+
58
+ end