masterview 0.0.2
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.
- data/CHANGELOG +1 -0
- data/MIT-LICENSE +20 -0
- data/README +574 -0
- data/Rakefile +149 -0
- data/generators/masterview/USAGE +32 -0
- data/generators/masterview/masterview_generator.rb +277 -0
- data/generators/masterview/templates/controller.rb +50 -0
- data/generators/masterview/templates/fields_scaffold.rhtml +1 -0
- data/generators/masterview/templates/form_scaffold.rhtml +3 -0
- data/generators/masterview/templates/functional_test.rb +83 -0
- data/generators/masterview/templates/helper.rb +2 -0
- data/generators/masterview/templates/layout.rhtml +11 -0
- data/generators/masterview/templates/list_head_scaffold.rhtml +4 -0
- data/generators/masterview/templates/list_line_scaffold.rhtml +6 -0
- data/generators/masterview/templates/masterview.rhtml +182 -0
- data/generators/masterview/templates/mvpreview.js +31 -0
- data/generators/masterview/templates/semantic.cache +84 -0
- data/generators/masterview/templates/show_scaffold.rhtml +3 -0
- data/generators/masterview/templates/style.css +61 -0
- data/generators/masterview_gem_plugin/masterview_gem_plugin_generator.rb +21 -0
- data/generators/masterview_gem_plugin/templates/init.rb +43 -0
- data/init.rb +43 -0
- data/lib/masterview/directive_base.rb +163 -0
- data/lib/masterview/directive_helpers.rb +176 -0
- data/lib/masterview/directives/block.rb +30 -0
- data/lib/masterview/directives/content.rb +10 -0
- data/lib/masterview/directives/else.rb +25 -0
- data/lib/masterview/directives/elsif.rb +26 -0
- data/lib/masterview/directives/form.rb +19 -0
- data/lib/masterview/directives/global_inline_erb.rb +39 -0
- data/lib/masterview/directives/hidden_field.rb +31 -0
- data/lib/masterview/directives/if.rb +24 -0
- data/lib/masterview/directives/insert_generated_comment.rb +30 -0
- data/lib/masterview/directives/javascript_include.rb +15 -0
- data/lib/masterview/directives/link_to.rb +17 -0
- data/lib/masterview/directives/link_to_if.rb +21 -0
- data/lib/masterview/directives/link_to_remote.rb +17 -0
- data/lib/masterview/directives/password_field.rb +33 -0
- data/lib/masterview/directives/preview.rb +10 -0
- data/lib/masterview/directives/replace.rb +18 -0
- data/lib/masterview/directives/stylesheet_link.rb +14 -0
- data/lib/masterview/directives/submit.rb +14 -0
- data/lib/masterview/directives/testfilter.rb +55 -0
- data/lib/masterview/directives/text_area.rb +34 -0
- data/lib/masterview/directives/text_field.rb +33 -0
- data/lib/masterview/extras/rails_init.rb +67 -0
- data/lib/masterview/extras/watcher.rb +30 -0
- data/lib/masterview/masterview_version.rb +9 -0
- data/lib/masterview/parser.rb +585 -0
- data/lib/masterview/plugin_load_tracking.rb +41 -0
- data/lib/masterview/runtime_helpers.rb +9 -0
- data/lib/masterview/string_extensions.rb +15 -0
- data/lib/masterview.rb +130 -0
- data/test/block_test.rb +47 -0
- data/test/content_test.rb +26 -0
- data/test/else_test.rb +31 -0
- data/test/elsif_test.rb +31 -0
- data/test/example_test.rb +11 -0
- data/test/filter_helpers_test.rb +142 -0
- data/test/form_test.rb +66 -0
- data/test/global_inline_erb_test.rb +30 -0
- data/test/hidden_field_test.rb +62 -0
- data/test/if_test.rb +23 -0
- data/test/javascript_include_test.rb +26 -0
- data/test/link_to_if_test.rb +27 -0
- data/test/link_to_test.rb +52 -0
- data/test/parser_test.rb +166 -0
- data/test/password_field_test.rb +89 -0
- data/test/replace_test.rb +27 -0
- data/test/run_parser_test.rb +27 -0
- data/test/stylesheet_link_test.rb +26 -0
- data/test/submit_test.rb +54 -0
- data/test/template_file_watcher_test.rb +50 -0
- data/test/template_test.rb +181 -0
- data/test/test_helper.rb +24 -0
- data/test/text_area_test.rb +81 -0
- data/test/text_field_test.rb +89 -0
- metadata +136 -0
@@ -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
|
data/test/parser_test.rb
ADDED
@@ -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
|
data/test/submit_test.rb
ADDED
@@ -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
|