masterview 0.0.6 → 0.0.7

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 (66) hide show
  1. data/Rakefile +8 -5
  2. data/init.rb +43 -0
  3. data/lib/facets/AUTHORS +36 -0
  4. data/lib/facets/CHANGELOG +266 -0
  5. data/lib/facets/COPYING +403 -0
  6. data/lib/facets/ProjectInfo +74 -0
  7. data/lib/facets/README +252 -0
  8. data/lib/facets/core/string/blank.rb +36 -0
  9. data/lib/facets/core/string/indent.rb +68 -0
  10. data/lib/facets/core/string/starts_with.rb +24 -0
  11. data/lib/masterview/directive_base.rb +163 -0
  12. data/lib/masterview/directive_helpers.rb +176 -0
  13. data/lib/masterview/directives/block.rb +30 -0
  14. data/lib/masterview/directives/content.rb +10 -0
  15. data/lib/masterview/directives/else.rb +25 -0
  16. data/lib/masterview/directives/elsif.rb +26 -0
  17. data/lib/masterview/directives/form.rb +19 -0
  18. data/lib/masterview/directives/global_inline_erb.rb +39 -0
  19. data/lib/masterview/directives/hidden_field.rb +31 -0
  20. data/lib/masterview/directives/if.rb +24 -0
  21. data/lib/masterview/directives/insert_generated_comment.rb +30 -0
  22. data/lib/masterview/directives/javascript_include.rb +15 -0
  23. data/lib/masterview/directives/link_to.rb +17 -0
  24. data/lib/masterview/directives/link_to_if.rb +21 -0
  25. data/lib/masterview/directives/link_to_remote.rb +17 -0
  26. data/lib/masterview/directives/password_field.rb +33 -0
  27. data/lib/masterview/directives/preview.rb +10 -0
  28. data/lib/masterview/directives/replace.rb +18 -0
  29. data/lib/masterview/directives/stylesheet_link.rb +14 -0
  30. data/lib/masterview/directives/submit.rb +14 -0
  31. data/lib/masterview/directives/testfilter.rb +55 -0
  32. data/lib/masterview/directives/text_area.rb +34 -0
  33. data/lib/masterview/directives/text_field.rb +33 -0
  34. data/lib/masterview/extras/rails_init.rb +67 -0
  35. data/lib/masterview/extras/watcher.rb +30 -0
  36. data/lib/masterview/masterview_version.rb +9 -0
  37. data/lib/masterview/parser.rb +585 -0
  38. data/lib/masterview/plugin_load_tracking.rb +41 -0
  39. data/lib/masterview/runtime_helpers.rb +9 -0
  40. data/lib/masterview/string_extensions.rb +15 -0
  41. data/lib/masterview.rb +129 -0
  42. data/test/block_test.rb +47 -0
  43. data/test/content_test.rb +26 -0
  44. data/test/else_test.rb +31 -0
  45. data/test/elsif_test.rb +31 -0
  46. data/test/example_test.rb +11 -0
  47. data/test/filter_helpers_test.rb +142 -0
  48. data/test/form_test.rb +66 -0
  49. data/test/global_inline_erb_test.rb +30 -0
  50. data/test/hidden_field_test.rb +62 -0
  51. data/test/if_test.rb +23 -0
  52. data/test/javascript_include_test.rb +26 -0
  53. data/test/link_to_if_test.rb +27 -0
  54. data/test/link_to_test.rb +52 -0
  55. data/test/parser_test.rb +166 -0
  56. data/test/password_field_test.rb +89 -0
  57. data/test/replace_test.rb +27 -0
  58. data/test/run_parser_test.rb +27 -0
  59. data/test/stylesheet_link_test.rb +26 -0
  60. data/test/submit_test.rb +54 -0
  61. data/test/template_file_watcher_test.rb +50 -0
  62. data/test/template_test.rb +181 -0
  63. data/test/test_helper.rb +24 -0
  64. data/test/text_area_test.rb +81 -0
  65. data/test/text_field_test.rb +89 -0
  66. metadata +71 -11
@@ -0,0 +1,52 @@
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')
7
+
8
+ class TestLinkTo < Test::Unit::TestCase
9
+ include MasterView::Directives
10
+
11
+ def setup
12
+ @directives = MasterView::DirectiveSet.new
13
+ end
14
+
15
+ def test_default
16
+ tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
17
+ @directives.directives = []
18
+ attr_value = ":action => 'show', :id => @product"
19
+ @directives << Link_to.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 = "bar"
24
+ assert_equal "<%= link_to 'bar', :action => 'show', :id => @product %>", dcs.render
25
+ end
26
+
27
+ def test_junk_name
28
+ tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
29
+ @directives.directives = []
30
+ attr_value = "'dont use', :action => 'show', :id => @product"
31
+ @directives << Link_to.new(attr_value)
32
+ assert_equal nil, @directives.determine_dcs(:stag).render
33
+ dcs = @directives.determine_dcs(:etag)
34
+ dcs.context = tag.create_context
35
+ dcs.context[:tag].content = "bar"
36
+ assert_equal "<%= link_to 'bar', :action => 'show', :id => @product %>", dcs.render
37
+ end
38
+
39
+ def test_junk_plus
40
+ tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
41
+ @directives.directives = []
42
+ attr_value = "'dont use', 'nor this', :action => 'show', :id => @product"
43
+ @directives << Link_to.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].content = "bar"
48
+ assert_equal "<%= link_to 'bar', :action => 'show', :id => @product %>", dcs.render
49
+ end
50
+
51
+
52
+ end
@@ -0,0 +1,166 @@
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 TestParser < Test::Unit::TestCase
8
+ include MasterView::Directives
9
+
10
+ def test_render_level
11
+ rl = MasterView::RenderLevel.new
12
+ assert_equal [], rl.render_modes
13
+
14
+ a = MasterView::RenderMode.new
15
+ b = MasterView::RenderMode.new
16
+ rl = MasterView::RenderLevel.new [a,b]
17
+ assert_equal [a,b], rl.render_modes
18
+
19
+ c = MasterView::RenderMode.new
20
+ rl.push c
21
+ assert_equal [a,b,c], rl.render_modes
22
+ end
23
+
24
+ def test_render_mode
25
+ rm = MasterView::RenderMode.new
26
+ assert_equal nil, rm.output
27
+ assert_equal :normal, rm.mode_type
28
+ assert_equal [], rm.tags
29
+
30
+ a = '/foo/bar'
31
+ rm = MasterView::RenderMode.new(a)
32
+ assert_equal a, rm.output
33
+ assert_equal :normal, rm.mode_type
34
+ assert_equal [], rm.tags
35
+
36
+ rm = MasterView::RenderMode.new(a, :wide)
37
+ assert_equal a, rm.output
38
+ assert_equal :wide, rm.mode_type
39
+ assert_equal [], rm.tags
40
+
41
+ t1 = nil
42
+ directives = [:f1, :f2]
43
+ tag_name = 'foo'
44
+ attributes = { 'bar' => 'baz', 'can' => 'dog' }
45
+ mode_type = :wide
46
+ parent = :parent
47
+ t2 = MasterView::Tag.new(directives, tag_name, attributes, mode_type, parent)
48
+ rm.tags << t1 << t2
49
+ assert_equal [t1,t2], rm.tags
50
+ assert_equal t2, rm.tag
51
+ assert_equal directives, rm.directives
52
+
53
+ assert_equal "foo_bar_baz", rm.determine_method('foo', 'bar', 'baz')
54
+ end
55
+
56
+ def test_render_mode_render_directives
57
+ #todo
58
+ end
59
+
60
+ def test_dcs
61
+ dcs = MasterView::DirectiveCallStack.new
62
+ dcs << :a
63
+ dcs << :b
64
+ dcs << [:c,:d]
65
+ assert_equal [:a,:b,:c,:d], dcs.directives_to_call
66
+ dcs2 = MasterView::DirectiveCallStack.new
67
+ dcs2 << :e
68
+ dcs2 << :f
69
+ assert_equal [:e,:f], dcs2.directives_to_call
70
+ dcs << dcs2
71
+ assert_equal [:a,:b,:c,:d,:e,:f], dcs.directives_to_call
72
+
73
+ assert_equal [], MasterView::DirectiveCallStack.new.render
74
+
75
+ proc1 = lambda { |f| "1" }
76
+ proc2 = lambda { |f| "2" }
77
+ dcs3 = MasterView::DirectiveCallStack.new
78
+ dcs3 << proc1
79
+ dcs3 << proc2
80
+ assert_equal '1', dcs3.render
81
+ end
82
+
83
+ def test_directives
84
+ fs = MasterView::DirectiveSet.new
85
+ fs << :a
86
+ fs << :b
87
+ fs << [:c, :d]
88
+ assert_equal [:a,:b,:c,:d], fs.directives
89
+ end
90
+
91
+ def test_directives_determine_dcs
92
+ #todo
93
+ end
94
+
95
+ def test_create_call_proc
96
+ #todo
97
+ end
98
+
99
+ def test_simple_render_handler
100
+ s = MasterView::SimpleRenderHandler.new
101
+ dcs = MasterView::DirectiveCallStack.new
102
+ directives = [:f1, :f2]
103
+ tag_name = 'foo'
104
+ attributes = { 'bar' => 'baz', 'can' => 'dog' }
105
+ mode_type = :wide
106
+ parent = :parent
107
+ t2 = MasterView::Tag.new(directives, tag_name, attributes, mode_type, parent)
108
+ dcs.context = { :tag => t2 }
109
+ ret = s.stag(dcs)
110
+ assert_equal "<foo", ret[0]
111
+ assert_equal '>', ret[3]
112
+ assert ret.include?(" bar=\"baz\"" )
113
+ assert ret.include?(" can=\"dog\"" )
114
+
115
+ dcs.context[:content_part] = 'hello'
116
+ assert_equal ['hello'], s.characters(dcs)
117
+
118
+ assert_equal ['<!-- ', 'hello', ' -->'], s.comment(dcs)
119
+
120
+ assert_equal ['<![CDATA[', 'hello', ']]>'], s.cdata(dcs)
121
+
122
+ assert_equal ['</', 'foo>'], s.etag(dcs)
123
+ end
124
+
125
+ def test_tag
126
+ directives = [:f1, :f2]
127
+ tag_name = 'foo'
128
+ attributes = { 'bar' => 'baz', 'can' => 'dog' }
129
+ mode_type = :wide
130
+ parent = :parent
131
+ t = MasterView::Tag.new(directives, tag_name, attributes, mode_type, parent)
132
+ assert_equal [:f1, :f2], t.directives
133
+ assert_equal tag_name, t.tag_name
134
+ assert_equal attributes, t.attributes
135
+ assert_equal mode_type, t.mode_type
136
+ t.stag << :a << :b
137
+ assert_equal [:a,:b], t.stag
138
+ t.content << :c << :d
139
+ assert_equal [:c,:d], t.content
140
+ t.etag << :e << :f
141
+ assert_equal [:e, :f], t.etag
142
+ assert_equal :parent, t.parent
143
+
144
+ con = t.create_context
145
+ assert_equal t, con[:tag]
146
+ assert_equal :wide, con[:mode_type]
147
+
148
+ con = t.create_context( :g => :h, :i => :j, :mode_type => :long )
149
+ assert_equal t, con[:tag]
150
+ assert_equal :long, con[:mode_type]
151
+ assert_equal :h, con[:g]
152
+ assert_equal :j, con[:i]
153
+
154
+ assert_equal [[:a,:b], [:c,:d], [:e,:f]], t.data
155
+ end
156
+
157
+ def test_renderer
158
+ #todo
159
+ end
160
+
161
+ def test_parser
162
+ #todo
163
+ end
164
+
165
+
166
+ end
@@ -0,0 +1,89 @@
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/password_field')
7
+
8
+ class TestPasswordField < Test::Unit::TestCase
9
+ include MasterView::Directives
10
+
11
+ def setup
12
+ @directives = MasterView::DirectiveSet.new
13
+ end
14
+
15
+ def password_field_exec(obj, method, other, options)
16
+ 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 << Password_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
+ end
27
+
28
+ def test_normal
29
+ obj = ':product'
30
+ method = ':price'
31
+ ret = password_field_exec(obj, method, nil, { 'type' => 'text', 'value' => 'fake text' } )
32
+ assert_equal "<%= password_field #{obj}, #{method} %>", ret
33
+ end
34
+
35
+ def test_extra
36
+ obj = ':product'
37
+ method = ':price'
38
+ ret = password_field_exec(obj, method, "'more', 'stuff'", { 'type' => 'text', 'value' => 'fake text' } )
39
+ assert_equal "<%= password_field #{obj}, #{method} %>", ret
40
+ end
41
+
42
+ def test_disabled
43
+ obj = ':product'
44
+ method = ':price'
45
+ ret = password_field_exec(obj, method, nil, { 'type' => 'text', 'value' => 'fake text', 'disabled' => 'disabled'} )
46
+ assert_equal "<%= password_field #{obj}, #{method}, :disabled => true %>", ret
47
+ end
48
+
49
+ def test_size
50
+ obj = ':product'
51
+ method = ':price'
52
+ ret = password_field_exec(obj, method, nil, { 'type' => 'text', 'value' => 'fake text', 'size' => '10' } )
53
+ assert_equal "<%= password_field #{obj}, #{method}, :size => 10 %>", ret
54
+ end
55
+
56
+ def test_maxlength
57
+ obj = ':product'
58
+ method = ':price'
59
+ ret = password_field_exec(obj, method, nil, { 'type' => 'text', 'value' => 'fake text', 'maxlength' => '21' } )
60
+ assert_equal "<%= password_field #{obj}, #{method}, :maxlength => 21 %>", ret
61
+ end
62
+
63
+ def test_all
64
+ obj = ':product'
65
+ method = ':price'
66
+ ret = password_field_exec(obj, method, nil,
67
+ {
68
+ 'type' => 'text', 'value' => 'fake text', 'disabled' => 'disabled',
69
+ 'size' => '10', 'maxlength' => '21',
70
+ 'readonly' => 'readonly', 'class' => 'classfoo', 'style' => 'stylebar',
71
+ 'tabindex' => 'tab1', 'accesskey' => 'ak2'
72
+ } )
73
+ assert_equal "<%= password_field #{obj}, #{method}, :accesskey => \"ak2\", :class => \"classfoo\", :disabled => true, :maxlength => 21, :readonly => true, :size => 10, :style => \"stylebar\", :tabindex => \"tab1\" %>", ret
74
+ end
75
+
76
+ def test_all_uc
77
+ obj = ':product'
78
+ method = ':price'
79
+ ret = password_field_exec(obj, method, nil,
80
+ {
81
+ 'TYPE' => 'PASSWORD', 'value' => 'fake text', 'DISABLED' => 'DISABLED',
82
+ 'SIZE' => '10', 'MAXLENGTH' => '21',
83
+ 'READONLY' => 'readonly', 'CLASS' => 'classfoo', 'STYLE' => 'stylebar',
84
+ 'TABINDEX' => 'tab1', 'ACCESSKEY' => 'ak2'
85
+ } )
86
+ assert_equal "<%= password_field #{obj}, #{method}, :accesskey => \"ak2\", :class => \"classfoo\", :disabled => true, :maxlength => 21, :readonly => true, :size => 10, :style => \"stylebar\", :tabindex => \"tab1\" %>", ret
87
+ end
88
+
89
+ end
@@ -0,0 +1,27 @@
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/replace')
7
+
8
+ class TestReplace < Test::Unit::TestCase
9
+ include MasterView::Directives
10
+
11
+ def setup
12
+ @directives = MasterView::DirectiveSet.new
13
+ end
14
+
15
+ def test_replace
16
+ tag = MasterView::Tag.new(@directives, 'foo', { 'id' => 'foobar', 'style' => 'test'}, :normal, nil)
17
+ @directives.directives = []
18
+ attr_value = "h @product[name]"
19
+ @directives << Replace.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 = "hello world"
24
+ assert_equal "<%= h @product[name] %>", dcs.render
25
+ end
26
+
27
+ end
@@ -0,0 +1,27 @@
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 TestParser < Test::Unit::TestCase
8
+ CurrentPath = File.dirname(__FILE__)
9
+ MasterViewHTMLFile = File.join(CurrentPath, '../examples/product.html')
10
+ TmpOutputDir = File.join(CurrentPath, '../tmp/views')
11
+
12
+ def setup
13
+ FileUtils.remove_dir(TmpOutputDir, true)
14
+ end
15
+
16
+ def test_parser_run
17
+ MasterView::Parser.parse_file( MasterViewHTMLFile, TmpOutputDir )
18
+ assert File.exist?(TmpOutputDir+'/layouts/product.rhtml')
19
+ assert File.exist?(TmpOutputDir+'/product/_form.rhtml')
20
+ assert File.exist?(TmpOutputDir+'/product/edit.rhtml')
21
+ assert File.exist?(TmpOutputDir+'/product/list.rhtml')
22
+ assert File.exist?(TmpOutputDir+'/product/new.rhtml')
23
+ assert File.exist?(TmpOutputDir+'/product/show.rhtml')
24
+ end
25
+ end
26
+
27
+
@@ -0,0 +1,26 @@
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/stylesheet_link' )
7
+
8
+ class StylesheetLinkTest < Test::Unit::TestCase
9
+ include MasterView::Directives
10
+
11
+ def setup
12
+ @directives = MasterView::DirectiveSet.new
13
+ end
14
+
15
+ def test_default
16
+ tag = MasterView::Tag.new(@directives, 'foo', {}, :normal, nil)
17
+ @directives.directives = []
18
+ attr_value = "hello world"
19
+ @directives << Stylesheet_link.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 "<%= stylesheet_link_tag 'hello world' %>", dcs.render
24
+ end
25
+
26
+ end
@@ -0,0 +1,54 @@
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/submit')
7
+
8
+ class TestSubmitTag < Test::Unit::TestCase
9
+ include MasterView::Directives
10
+
11
+ def setup
12
+ @directives = MasterView::DirectiveSet.new
13
+ end
14
+
15
+ def test_submit
16
+ submit_text = 'foobar'
17
+ tag = MasterView::Tag.new(@directives, 'input', { 'type' => 'submit', 'value' => submit_text }, :normal, nil)
18
+ @directives.directives = []
19
+ attr_value = "baz"
20
+ @directives << Submit.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
+ assert_equal "<%= submit_tag '#{submit_text}' %>", dcs.render
26
+ end
27
+
28
+ def test_submit_with_hash
29
+ submit_text = 'foobar'
30
+ tag = MasterView::Tag.new(@directives, 'input', { 'type' => 'submit', 'value' => submit_text }, :normal, nil)
31
+ @directives.directives = []
32
+ attr_value = "{:foo => 'bar' }"
33
+ @directives << Submit.new(attr_value)
34
+ assert_equal nil, @directives.determine_dcs(:stag).render
35
+ dcs = @directives.determine_dcs(:etag)
36
+ dcs.context = tag.create_context
37
+ dcs.context[:tag].content = "hello world"
38
+ assert_equal "<%= submit_tag '#{submit_text}', #{attr_value} %>", dcs.render
39
+ end
40
+
41
+ def test_submit_with_hash_no_brack
42
+ submit_text = 'foobar'
43
+ tag = MasterView::Tag.new(@directives, 'input', { 'type' => 'submit', 'value' => submit_text }, :normal, nil)
44
+ @directives.directives = []
45
+ attr_value = ":foo => 'bar'"
46
+ @directives << Submit.new(attr_value)
47
+ assert_equal nil, @directives.determine_dcs(:stag).render
48
+ dcs = @directives.determine_dcs(:etag)
49
+ dcs.context = tag.create_context
50
+ dcs.context[:tag].content = "hello world"
51
+ assert_equal "<%= submit_tag '#{submit_text}', #{attr_value} %>", dcs.render
52
+ end
53
+
54
+ end
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ currentPath = File.dirname(__FILE__)
5
+ require File.join( currentPath, '../lib/masterview' )
6
+ require 'masterview/extras/watcher.rb'
7
+
8
+ class TestTemplateFileWatcher < Test::Unit::TestCase
9
+ CurrentPath = File.dirname(__FILE__)
10
+ MVTemplateDir = File.join(CurrentPath, '../examples')
11
+ MVFilenamePattern = '*.html'
12
+ TmpOutputDir = File.join(CurrentPath, '../tmp/views')
13
+
14
+ MVProductFile = File.join(CurrentPath, '../examples/product.html')
15
+
16
+ def setup
17
+ FileUtils.remove_dir(TmpOutputDir, true)
18
+ end
19
+
20
+ def test_a_run
21
+ files_run = MasterView::TemplateFileWatcher.check(MVTemplateDir, MVFilenamePattern, true) do |f|
22
+ MasterView::Parser.parse_file( f, TmpOutputDir )
23
+ end
24
+ assert_equal [MVProductFile], files_run
25
+ assert File.exist?(TmpOutputDir+'/layouts/product.rhtml')
26
+ assert File.exist?(TmpOutputDir+'/product/_form.rhtml')
27
+ assert File.exist?(TmpOutputDir+'/product/edit.rhtml')
28
+ assert File.exist?(TmpOutputDir+'/product/list.rhtml')
29
+ assert File.exist?(TmpOutputDir+'/product/new.rhtml')
30
+ assert File.exist?(TmpOutputDir+'/product/show.rhtml')
31
+ end
32
+
33
+ def test_b_no_change
34
+ files_run = MasterView::TemplateFileWatcher.check(MVTemplateDir, MVFilenamePattern, true) do |f|
35
+ MasterView::Parser.parse_file( f, TmpOutputDir )
36
+ end
37
+ assert_equal [], files_run
38
+ end
39
+
40
+ def test_c_file_changed_run
41
+ FileUtils.touch MVProductFile
42
+ files_run = MasterView::TemplateFileWatcher.check(MVTemplateDir, MVFilenamePattern, true) do |f|
43
+ MasterView::Parser.parse_file( f, TmpOutputDir )
44
+ end
45
+ assert_equal [MVProductFile], files_run
46
+ end
47
+
48
+ end
49
+
50
+
@@ -0,0 +1,181 @@
1
+ require 'test/unit'
2
+ currentPath = File.dirname(__FILE__)
3
+ require File.join( currentPath, '../lib/masterview' )
4
+ require File.join( currentPath, 'test_helper' )
5
+ include MasterView::Directives
6
+
7
+ class TestTemplate < Test::Unit::TestCase
8
+
9
+ def test_multi
10
+ template = <<-END
11
+ <div mv:generate='foo/bar'>
12
+ <span mv:replace="h product[:price]">foo bar</span>
13
+ <div mv:generate='baz/caz'>
14
+ <span mv:content="h product[:name]">hello world</span>
15
+ </div>
16
+ </div>
17
+ END
18
+ expected = {
19
+ 'foo/bar' => "<div><%= h product[:price] %></div>",
20
+ 'baz/caz' => "<div><span><%= h product[:name] %></span></div>"
21
+ }
22
+ assert_template_result expected, template
23
+ end
24
+
25
+ def test_multi_spec_dir
26
+ template = <<-END
27
+ <div mv:generate='foo/bar'>
28
+ <span mv:replace="h product[:price]">foo bar</span>
29
+ <div mv:generate='baz/caz'>
30
+ <span mv:content="h product[:name]">hello world</span>
31
+ </div>
32
+ </div>
33
+ END
34
+ expected = {
35
+ '/a/b/foo/bar' => "<div><%= h product[:price] %></div>",
36
+ '/a/b/baz/caz' => "<div><span><%= h product[:name] %></span></div>"
37
+ }
38
+ assert_template_result expected, template, :output_dir => '/a/b'
39
+ end
40
+
41
+ def test_replace
42
+ template = <<-END
43
+ <div mv:generate='foo/bar'>
44
+ <span mv:replace="h product[:price]">foo bar</span>
45
+ </div>
46
+ END
47
+ expected = {
48
+ 'foo/bar' => "<div><%= h product[:price] %></div>"
49
+ }
50
+ assert_template_result expected, template
51
+ end
52
+
53
+ def test_block_and_content
54
+ template = <<-END
55
+ <div mv:generate='foo/bar'>
56
+ <table>
57
+ <tr mv:block="@products.each do |product|">
58
+ <td>Name:</td><td mv:content="product.name">hello world</td>
59
+ </tr>
60
+ </table>
61
+ </div>
62
+ END
63
+ expected = {
64
+ 'foo/bar' => "<div><table><% @products.each do |product| %><tr><td>Name:</td><td><%= product.name %></td></tr><% end %></table></div>"
65
+ }
66
+ assert_template_result expected, template
67
+ end
68
+
69
+ def test_form
70
+ template = <<-END
71
+ <div mv:generate='foo/bar'>
72
+ <form action="foo" method="get" mv:form=":action => 'create'">
73
+ hello world
74
+ </form>
75
+ </div>
76
+ END
77
+ expected = {
78
+ 'foo/bar' => "<div><%= form_tag {:action => 'create'}, :method => \"get\" %>hello world <%= end_form_tag %></div>"
79
+ }
80
+ assert_template_result expected, template
81
+ end
82
+
83
+ def test_link_to
84
+ template = <<-END
85
+ <div mv:generate='foo/bar'>
86
+ <a href="#" mv:link_to=":action => 'show', :id => @product">Hello World</a>
87
+ </div>
88
+ END
89
+ expected = {
90
+ 'foo/bar' => "<div><%= link_to 'Hello World', :action => 'show', :id => @product %></div>"
91
+ }
92
+ assert_template_result expected, template
93
+ end
94
+
95
+ def test_link_to_if
96
+ template = <<-END
97
+ <div mv:generate='foo/bar'>
98
+ <a href="#" mv:link_to_if="@product_pages.current.previous, {:page => @product_pages.current.previous } ">Previous page</a>
99
+ </div>
100
+ END
101
+ expected = {
102
+ 'foo/bar' => "<div><%= link_to_if @product_pages.current.previous, 'Previous page', {:page => @product_pages.current.previous } %></div>"
103
+ }
104
+ assert_template_result expected, template
105
+ end
106
+
107
+ def test_submit
108
+ template = <<-END
109
+ <div mv:generate='foo/bar'>
110
+ <input type="submit" value="Hello World" mv:submit=":foo => 'bar'"/>
111
+ </div>
112
+ END
113
+ expected = {
114
+ 'foo/bar' => "<div><%= submit_tag 'Hello World', :foo => 'bar' %></div>"
115
+ }
116
+ assert_template_result expected, template
117
+ end
118
+
119
+ def test_text_field
120
+ template = <<-END
121
+ <div mv:generate='foo/bar'>
122
+ <input type="textfield" value="dummy text" mv:text_field="product, price" size="10" maxlength="21"/>
123
+ </div>
124
+ END
125
+ expected = {
126
+ 'foo/bar' => "<div><%= text_field 'product', 'price', :maxlength => 21, :size => 10 %></div>"
127
+ }
128
+ assert_template_result expected, template
129
+ end
130
+
131
+ def test_hidden_field
132
+ template = <<-END
133
+ <div mv:generate='foo/bar'>
134
+ <input type="hiddenfield" value="dummy text" mv:hidden_field="product, price"/>
135
+ </div>
136
+ END
137
+ expected = {
138
+ 'foo/bar' => "<div><%= hidden_field 'product', 'price' %></div>"
139
+ }
140
+ assert_template_result expected, template
141
+ end
142
+
143
+ def test_password_field
144
+ template = <<-END
145
+ <div mv:generate='foo/bar'>
146
+ <input type="passwordfield" value="dummy text" mv:password_field="product, price" size="10" maxlength="21"/>
147
+ </div>
148
+ END
149
+ expected = {
150
+ 'foo/bar' => "<div><%= password_field 'product', 'price', :maxlength => 21, :size => 10 %></div>"
151
+ }
152
+ assert_template_result expected, template
153
+ end
154
+
155
+ def test_text_area
156
+ template = <<-END
157
+ <div mv:generate='foo/bar'>
158
+ <textarea rows="10" cols="21" class="foo" style="bar" disabled="disabled" readonly="readonly" mv:text_area="product, desc">
159
+ not used
160
+ </textarea>
161
+ </div>
162
+ END
163
+ expected = {
164
+ 'foo/bar' => "<div><%= text_area 'product', 'desc', :class => \"foo\", :cols => 21, :disabled => true, :readonly => true, :rows => 10, :style => \"bar\" %></div>"
165
+ }
166
+ assert_template_result expected, template
167
+ end
168
+
169
+ def test_example
170
+ template = <<-END
171
+ <div mv:generate='foo/bar'>
172
+ <span mv:replace="h product[:price]">foo bar</span>
173
+ </div>
174
+ END
175
+ expected = {
176
+ 'foo/bar' => "<div><%= h product[:price] %></div>"
177
+ }
178
+ assert_template_result expected, template
179
+ end
180
+
181
+ end