any_view 0.1.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.
- data/.document +5 -0
- data/.gitignore +21 -0
- data/LICENSE +47 -0
- data/README.rdoc +369 -0
- data/Rakefile +57 -0
- data/lib/any_view/asset_tag_helpers.rb +103 -0
- data/lib/any_view/core_ext/array.rb +7 -0
- data/lib/any_view/core_ext/hash.rb +41 -0
- data/lib/any_view/core_ext/string.rb +17 -0
- data/lib/any_view/form_builder/abstract_form_builder.rb +128 -0
- data/lib/any_view/form_builder/standard_form_builder.rb +37 -0
- data/lib/any_view/form_helpers.rb +217 -0
- data/lib/any_view/format_helpers.rb +49 -0
- data/lib/any_view/tag_helpers.rb +47 -0
- data/lib/any_view/tilt_base.rb +94 -0
- data/lib/any_view.rb +30 -0
- data/test/fixtures/basic_form_for.erb +3 -0
- data/test/fixtures/builder_type_form_for.erb +3 -0
- data/test/fixtures/capture_concat.erb +14 -0
- data/test/fixtures/capture_concat.haml +13 -0
- data/test/fixtures/content_for.erb +11 -0
- data/test/fixtures/content_for.haml +9 -0
- data/test/fixtures/content_tag.erb +11 -0
- data/test/fixtures/content_tag.haml +9 -0
- data/test/fixtures/delete_form_for.erb +3 -0
- data/test/fixtures/field_set_tag.erb +3 -0
- data/test/fixtures/fields_for.erb +8 -0
- data/test/fixtures/fields_for.haml +6 -0
- data/test/fixtures/fields_for_basic.erb +3 -0
- data/test/fixtures/fields_for_nil.erb +3 -0
- data/test/fixtures/form_for.erb +56 -0
- data/test/fixtures/form_for.haml +47 -0
- data/test/fixtures/form_for_nil.erb +3 -0
- data/test/fixtures/form_tag.erb +57 -0
- data/test/fixtures/form_tag.haml +45 -0
- data/test/fixtures/form_tag_methods.erb +19 -0
- data/test/fixtures/form_tag_methods.haml +15 -0
- data/test/fixtures/link_to.erb +5 -0
- data/test/fixtures/link_to.haml +4 -0
- data/test/fixtures/mail_to.erb +3 -0
- data/test/fixtures/mail_to.haml +3 -0
- data/test/fixtures/multipart.erb +12 -0
- data/test/fixtures/multipart_form_for.erb +3 -0
- data/test/fixtures/put_form_for.erb +3 -0
- data/test/fixtures/standard_form_builder.erb +3 -0
- data/test/helper.rb +121 -0
- data/test/test_asset_tag_helpers.rb +176 -0
- data/test/test_form_builder.rb +607 -0
- data/test/test_form_helpers.rb +453 -0
- data/test/test_format_helpers.rb +59 -0
- data/test/test_tag_helpers.rb +65 -0
- metadata +160 -0
@@ -0,0 +1,8 @@
|
|
1
|
+
<% @user = MarkupUser.new %>
|
2
|
+
<% form_for @user , '/demo1', :id => 'demo-fields-for' do |f| %>
|
3
|
+
<%= f.text_field :gender %>
|
4
|
+
<% fields_for @user.permission do |permission| %>
|
5
|
+
<%= permission.check_box :can_edit %>
|
6
|
+
<%= permission.check_box :can_delete %>
|
7
|
+
<% end %>
|
8
|
+
<% end %>
|
@@ -0,0 +1,56 @@
|
|
1
|
+
<% form_for MarkupUser.new, '/demo', :id => 'demo' do |f| %>
|
2
|
+
<%= f.error_messages(:header_message => "custom MarkupUser cannot be saved!") %>
|
3
|
+
<%= f.hidden_field :session_id %>
|
4
|
+
<p>
|
5
|
+
<%= f.label :username, :caption => "Login", :class => 'user-label' %>
|
6
|
+
<%= f.text_field :username, :class => 'user-text', :value => "John" %>
|
7
|
+
</p>
|
8
|
+
<p>
|
9
|
+
<%= f.label :email, :caption => "Email", :class => 'user-email' %>
|
10
|
+
<%= f.text_field :email %>
|
11
|
+
</p>
|
12
|
+
<p>
|
13
|
+
<%= f.label :password %>
|
14
|
+
<%= f.password_field :password, :class => 'user-password', :value => "secret" %>
|
15
|
+
</p>
|
16
|
+
<p>
|
17
|
+
<%= f.label :photo %>
|
18
|
+
<%= f.file_field :photo, :class => 'user-photo' %>
|
19
|
+
</p>
|
20
|
+
<p>
|
21
|
+
<%= f.label :about, :caption => "About Me" %>
|
22
|
+
<%= f.text_area :about, :class => 'user-about' %>
|
23
|
+
</p>
|
24
|
+
<p>
|
25
|
+
<%= f.label :gender, :caption => "Your gender:" %>
|
26
|
+
<%= f.radio_button :gender, :value => 'male' %>
|
27
|
+
<%= f.radio_button :gender, :value => 'female' %>
|
28
|
+
</p>
|
29
|
+
<p>
|
30
|
+
<%= f.label :country, :caption => "Your country" %>
|
31
|
+
<%= f.select :country, :options => ['USA', 'Canada', 'Mexico'], :selected => 'USA', :class => 'selector' %>
|
32
|
+
</p>
|
33
|
+
<p>
|
34
|
+
<%= f.label :remember_me %>
|
35
|
+
<%= f.check_box :remember_me, :value => '1' %>
|
36
|
+
</p>
|
37
|
+
<p><%= f.submit "Create", :class => 'success', :id => 'demo-button' %></p>
|
38
|
+
<p><%= f.image_submit "buttons/post.png", :class => 'success', :id => 'image-button' %></p>
|
39
|
+
<% end %>
|
40
|
+
|
41
|
+
<% form_for MarkupUser.new, '/another_demo', :id => 'demo2', :method => 'get' do |f| %>
|
42
|
+
<%= f.error_messages :header_message => "custom MarkupUser cannot be saved!" %>
|
43
|
+
<%= f.hidden_field :session_id %>
|
44
|
+
<%= f.text_field_block :username, { :class => 'input' }, { :caption => 'Nickname', :class => 'label' } %>
|
45
|
+
<%= f.password_field_block :code, { :class => 'input' } %>
|
46
|
+
<%= f.text_area_block :about, { :class => 'textarea' } %>
|
47
|
+
<%= f.file_field_block :photo, { :class => 'upload' } %>
|
48
|
+
<%= f.check_box_block :remember_me, { :class => 'checker' } %>
|
49
|
+
<%= f.select_block :state, :options => ['California', 'Texas'], :class => 'selector' %>
|
50
|
+
<%= f.submit_block "Create", { :class => 'button' } %>
|
51
|
+
<%= f.image_submit_block "buttons/ok.png", { :class => 'image' } %>
|
52
|
+
<% end %>
|
53
|
+
|
54
|
+
<% form_for :markup_user, '/third_demo', :id => 'demo3', :method => 'get' do |f| %>
|
55
|
+
<%= f.text_field_block :username %>
|
56
|
+
<% end %>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
- form_for MarkupUser.new, '/demo', :id => 'demo' do |f|
|
2
|
+
= f.error_messages(:header_message => "custom MarkupUser cannot be saved!")
|
3
|
+
= f.hidden_field :session_id
|
4
|
+
%p
|
5
|
+
= f.label :username, :caption => "Login", :class => 'user-label'
|
6
|
+
= f.text_field :username, :class => 'user-text', :value => "John"
|
7
|
+
%p
|
8
|
+
= f.label :email, :caption => "Email", :class => 'user-email'
|
9
|
+
= f.text_field :email
|
10
|
+
%p
|
11
|
+
= f.label :password
|
12
|
+
= f.password_field :password, :class => 'user-password', :value => "secret"
|
13
|
+
%p
|
14
|
+
= f.label :photo
|
15
|
+
= f.file_field :photo, :class => 'user-photo'
|
16
|
+
%p
|
17
|
+
= f.label :about, :caption => "About Me"
|
18
|
+
= f.text_area :about, :class => 'user-about'
|
19
|
+
%p
|
20
|
+
= f.label :gender, :caption => "Your gender"
|
21
|
+
= f.radio_button :gender, :value => 'male'
|
22
|
+
= f.radio_button :gender, :value => 'female'
|
23
|
+
%p
|
24
|
+
= f.label :country, :caption => "Your country"
|
25
|
+
= f.select :country, :options => ['USA', 'Canada', 'Mexico'], :selected => 'USA', :class => 'selector'
|
26
|
+
%p
|
27
|
+
= f.label :remember_me
|
28
|
+
= f.check_box :remember_me, :value => "1"
|
29
|
+
%p
|
30
|
+
= f.submit "Create", :class => 'success', :id => 'demo-button'
|
31
|
+
%p
|
32
|
+
= f.image_submit "buttons/post.png", :class => 'success', :id => 'image-button'
|
33
|
+
|
34
|
+
- form_for MarkupUser.new, '/another_demo', :id => 'demo2', :method => 'get' do |f|
|
35
|
+
= f.error_messages :header_message => "custom MarkupUser cannot be saved!"
|
36
|
+
= f.hidden_field :session_id
|
37
|
+
= f.text_field_block :username, { :class => 'input' }, { :caption => 'Nickname', :class => 'label' }
|
38
|
+
= f.password_field_block :code, { :class => 'input' }
|
39
|
+
= f.text_area_block :about, { :class => 'textarea' }
|
40
|
+
= f.file_field_block :photo, { :class => 'upload' }
|
41
|
+
= f.check_box_block :remember_me, { :class => 'checker' }
|
42
|
+
= f.select_block :state, :options => ['California', 'Texas'], :class => 'selector'
|
43
|
+
= f.submit_block "Create", { :class => 'button' }
|
44
|
+
= f.image_submit_block "buttons/ok.png", { :class => 'image' }
|
45
|
+
|
46
|
+
- form_for :markup_user, '/third_demo', :id => 'demo3', :method => 'get' do |f|
|
47
|
+
= f.text_field_block :username
|
@@ -0,0 +1,57 @@
|
|
1
|
+
<% form_tag '/simple', :class => 'simple-form' do %>
|
2
|
+
<%= error_messages_for(nil) %>
|
3
|
+
<%= hidden_field_tag :session_id, :value => "__secret__" %>
|
4
|
+
<% field_set_tag do %>
|
5
|
+
<%= label_tag :username %>
|
6
|
+
<%= text_field_tag :username %>
|
7
|
+
<%= label_tag :password %>
|
8
|
+
<%= password_field_tag :password %>
|
9
|
+
<%= check_box_tag :remember_me %>
|
10
|
+
<%= label_tag :gender %>
|
11
|
+
<%= label_tag :color %>
|
12
|
+
<%= select_tag :color, :options => ['green', 'orange', 'purple'] %>
|
13
|
+
<%= radio_button_tag :gender, :value => 'male' %>
|
14
|
+
<%= radio_button_tag :gender, :value => 'female' %>
|
15
|
+
<%= submit_tag %>
|
16
|
+
<% end %>
|
17
|
+
<% end %>
|
18
|
+
|
19
|
+
<% form_tag '/advanced', :id => 'advanced', :class => 'advanced-form', :method => :put do %>
|
20
|
+
<%= error_messages_for MarkupUser.new, :header_message => "There are problems with saving user!" %>
|
21
|
+
<%= hidden_field_tag :session_id, :value => "__secret__" %>
|
22
|
+
<% field_set_tag "Advanced", :class => 'advanced-field-set' do %>
|
23
|
+
<p>
|
24
|
+
<%= label_tag :username, :class => 'first', :caption => "Nickname" %>
|
25
|
+
<%= text_field_tag :username, :value => 'username', :id => 'the_username' %>
|
26
|
+
</p>
|
27
|
+
<p>
|
28
|
+
<%= label_tag :password, :class => 'first' %>
|
29
|
+
<%= password_field_tag :password, :value => 'password'%>
|
30
|
+
</p>
|
31
|
+
<p>
|
32
|
+
<%= label_tag :about, :class => 'about', :caption => "About Me" %>
|
33
|
+
<%= text_area_tag :about, :class => 'large' %>
|
34
|
+
</p>
|
35
|
+
<p>
|
36
|
+
<%= label_tag :photo, :class => 'photo' %>
|
37
|
+
<%= file_field_tag :photo, :class => 'upload' %>
|
38
|
+
</p>
|
39
|
+
<p>
|
40
|
+
<%= label_tag :gender, :class => 'gender' %>
|
41
|
+
<%= radio_button_tag :gender, :value => 'male', :checked => true %>
|
42
|
+
<%= radio_button_tag :remember_me, :value => 'female' %>
|
43
|
+
<p>
|
44
|
+
<p>
|
45
|
+
<%= label_tag :fav_color %>
|
46
|
+
<%= select_tag :fav_color, :options => [ ['green', '1'], ['orange', '2'], ['purple', '3'] ], :selected => '2' %>
|
47
|
+
</p>
|
48
|
+
<p>
|
49
|
+
<%= check_box_tag :remember_me, :value => '1', :checked => true %>
|
50
|
+
<p>
|
51
|
+
<% end %>
|
52
|
+
<% field_set_tag(:class => 'buttons') do %>
|
53
|
+
<%= submit_tag "Login" %>
|
54
|
+
<%= button_tag "Cancel" %>
|
55
|
+
<%= image_submit_tag "buttons/submit.png" %>
|
56
|
+
<% end %>
|
57
|
+
<% end %>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
- form_tag '/simple', :class => 'simple-form' do
|
2
|
+
= error_messages_for nil
|
3
|
+
- field_set_tag do
|
4
|
+
= hidden_field_tag :session_id, :value => "__secret__"
|
5
|
+
= label_tag :username
|
6
|
+
= text_field_tag :username
|
7
|
+
= label_tag :password
|
8
|
+
= password_field_tag :password
|
9
|
+
= label_tag :color
|
10
|
+
= select_tag :color, :options => ['green', 'orange', 'purple']
|
11
|
+
= label_tag :gender
|
12
|
+
= radio_button_tag :gender, :value => 'male'
|
13
|
+
= radio_button_tag :gender, :value => 'female'
|
14
|
+
= check_box_tag :remember_me
|
15
|
+
= submit_tag
|
16
|
+
|
17
|
+
- form_tag '/advanced', :id => 'advanced', :class => 'advanced-form', :method => 'get' do
|
18
|
+
= error_messages_for MarkupUser.new, :header_message => "There are problems with saving user!"
|
19
|
+
= hidden_field_tag :session_id, :value => "__secret__"
|
20
|
+
- field_set_tag "Advanced", :class => 'advanced-field-set' do
|
21
|
+
%p
|
22
|
+
= label_tag :username, :class => 'first', :caption => "Nickname"
|
23
|
+
= text_field_tag :username, :value => 'username', :id => 'the_username'
|
24
|
+
%p
|
25
|
+
= label_tag :password, :class => 'first'
|
26
|
+
= password_field_tag :password, :value => 'password'
|
27
|
+
%p
|
28
|
+
= label_tag :about, :class => 'about', :caption => "About Me"
|
29
|
+
= text_area_tag :about, :class => 'large'
|
30
|
+
%p
|
31
|
+
= label_tag :gender, :class => 'gender'
|
32
|
+
= radio_button_tag :gender, :value => 'male', :checked => true
|
33
|
+
= radio_button_tag :gender, :value => 'female'
|
34
|
+
%p
|
35
|
+
= label_tag :photo, :class => 'photo'
|
36
|
+
= file_field_tag :photo, :class => 'upload'
|
37
|
+
%p
|
38
|
+
= label_tag :fav_color
|
39
|
+
= select_tag :fav_color, :options => [ ['green', '1'], ['orange', '2'], ['purple', '3'] ], :selected => '2'
|
40
|
+
%p
|
41
|
+
= check_box_tag :remember_me, :value => "1", :checked => true
|
42
|
+
- field_set_tag(:class => 'buttons') do
|
43
|
+
= submit_tag "Login"
|
44
|
+
= button_tag "Cancel"
|
45
|
+
= image_submit_tag "buttons/submit.png"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<% form_tag "/default", :class => "method-default" do %>
|
2
|
+
<p>default</p>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% form_tag "/put", :class => "method-put", :method => :put do %>
|
6
|
+
<p>put</p>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<% form_tag "/delete", :class => "method-delete", :method => :delete do %>
|
10
|
+
<p>Delete</p>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<% form_tag "/post", :class => "method-post", :method => :post do %>
|
14
|
+
<p>post</p>
|
15
|
+
<% end %>
|
16
|
+
|
17
|
+
<% form_tag "/get", :class => "method-get", :method => :get do %>
|
18
|
+
<p>get</p>
|
19
|
+
<% end %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
- form_tag "/default", :class => "method-default" do
|
2
|
+
%p default
|
3
|
+
|
4
|
+
- form_tag "/put", :class => "method-put", :method => :put do
|
5
|
+
%p put
|
6
|
+
|
7
|
+
- form_tag "/delete", :class => "method-delete", :method => :delete do
|
8
|
+
%p Delete
|
9
|
+
|
10
|
+
- form_tag "/post", :class => "method-post", :method => :post do
|
11
|
+
%p post
|
12
|
+
|
13
|
+
- form_tag "/get", :class => "method-get", :method => :get do
|
14
|
+
%p get
|
15
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<% form_tag "/explicit", :multipart => true, :class => "explicit" do %>
|
2
|
+
<p>Here</p>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% form_tag "/implicit", :class => "implicit" do %>
|
6
|
+
<%= file_field_tag :foo %>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<% form_tag "/no_file", :class => "no_file" do %>
|
10
|
+
<p>No file to see here</p>
|
11
|
+
<% end %>
|
12
|
+
|
data/test/helper.rb
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'shoulda'
|
4
|
+
require 'webrat'
|
5
|
+
require 'mocha'
|
6
|
+
|
7
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
8
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
9
|
+
require File.dirname(__FILE__) + '/../lib/any_view'
|
10
|
+
|
11
|
+
class Renderer
|
12
|
+
class ViewContext
|
13
|
+
include AnyView::TiltBase
|
14
|
+
include AnyView
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.path
|
18
|
+
@path ||= File.expand_path(~'./fixtures')
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.template(name)
|
22
|
+
Tilt.new(File.join(path, name))
|
23
|
+
end
|
24
|
+
|
25
|
+
def template(name)
|
26
|
+
self.class.template(name)
|
27
|
+
end
|
28
|
+
|
29
|
+
def render(name, locals = {})
|
30
|
+
template(name).render(ViewContext.new, locals)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class Test::Unit::TestCase
|
35
|
+
|
36
|
+
def view_context
|
37
|
+
Renderer::ViewContext.new
|
38
|
+
end
|
39
|
+
|
40
|
+
def render(*args)
|
41
|
+
Renderer.new.render(*args)
|
42
|
+
end
|
43
|
+
|
44
|
+
def stop_time_for_test
|
45
|
+
time = Time.now
|
46
|
+
Time.stubs(:now).returns(time)
|
47
|
+
return time
|
48
|
+
end
|
49
|
+
|
50
|
+
# assert_has_tag(:h1, :content => "yellow") { "<h1>yellow</h1>" }
|
51
|
+
# In this case, block is the html to evaluate
|
52
|
+
def assert_has_tag(name, attributes = {}, &block)
|
53
|
+
html = block && block.call
|
54
|
+
matcher = Webrat::Matchers::HaveSelector.new(name, attributes)
|
55
|
+
raise "Please specify a block!" if html.blank?
|
56
|
+
assert matcher.matches?(html), matcher.failure_message
|
57
|
+
end
|
58
|
+
|
59
|
+
# assert_has_no_tag, tag(:h1, :content => "yellow") { "<h1>green</h1>" }
|
60
|
+
# In this case, block is the html to evaluate
|
61
|
+
def assert_has_no_tag(name, attributes = {}, &block)
|
62
|
+
html = block && block.call
|
63
|
+
attributes.merge!(:count => 0)
|
64
|
+
matcher = Webrat::Matchers::HaveSelector.new(name, attributes)
|
65
|
+
raise "Please specify a block!" if html.blank?
|
66
|
+
assert matcher.matches?(html), matcher.failure_message
|
67
|
+
end
|
68
|
+
|
69
|
+
def assert_has_selector(name, attributes = {}, &block)
|
70
|
+
html = block && block.call
|
71
|
+
matcher = Webrat::Matchers::HaveSelector.new(name, attributes)
|
72
|
+
raise "Please specify a block!" if html.blank?
|
73
|
+
assert matcher.matches?(html), matcher.failure_message
|
74
|
+
end
|
75
|
+
|
76
|
+
def assert_has_no_selector(name, attributes = {}, &block)
|
77
|
+
html = block && block.call
|
78
|
+
matcher = Webrat::Matchers::HaveSelector.new(name, attributes)
|
79
|
+
raise "Please specify a block!" if html.blank?
|
80
|
+
assert !matcher.matches?(html), matcher.negative_failure_message
|
81
|
+
end
|
82
|
+
|
83
|
+
# Silences the output by redirecting to stringIO
|
84
|
+
# silence_logger { ...commands... } => "...output..."
|
85
|
+
def silence_logger(&block)
|
86
|
+
orig_stdout = $stdout
|
87
|
+
$stdout = log_buffer = StringIO.new
|
88
|
+
block.call
|
89
|
+
$stdout = orig_stdout
|
90
|
+
log_buffer.rewind && log_buffer.read
|
91
|
+
end
|
92
|
+
|
93
|
+
# Asserts that a file matches the pattern
|
94
|
+
def assert_match_in_file(pattern, file)
|
95
|
+
assert File.exist?(file), "File '#{file}' does not exist!"
|
96
|
+
assert_match pattern, File.read(file)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
class MarkupUser
|
101
|
+
def errors; Errors.new; end
|
102
|
+
def session_id; 45; end
|
103
|
+
def gender; 'male'; end
|
104
|
+
def remember_me; '1'; end
|
105
|
+
def image; end
|
106
|
+
def permission; Permission.new; end
|
107
|
+
end
|
108
|
+
|
109
|
+
class Permission
|
110
|
+
def can_edit; true; end
|
111
|
+
def can_delete; false; end
|
112
|
+
end
|
113
|
+
|
114
|
+
class Errors < Array
|
115
|
+
def initialize; self << [:fake, :second, :third]; end
|
116
|
+
def full_messages
|
117
|
+
["This is a fake error", "This is a second fake error", "This is a third fake error"]
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
|
@@ -0,0 +1,176 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
2
|
+
|
3
|
+
class TestAssetTagHelpers < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context 'for #link_to method' do
|
6
|
+
should "display link element with no given attributes" do
|
7
|
+
assert_has_tag('a', :content => "Sign up", :href => '/register') { view_context.link_to('Sign up', '/register') }
|
8
|
+
end
|
9
|
+
|
10
|
+
should "display link element with given attributes" do
|
11
|
+
actual_html = view_context.link_to('Sign up', '/register', :class => 'first', :id => 'linky')
|
12
|
+
assert_has_tag('a#linky.first', :content => "Sign up", :href => '/register') { actual_html }
|
13
|
+
end
|
14
|
+
|
15
|
+
should "#link_tag display link content from a block in erb" do
|
16
|
+
actual_html = render("link_to.erb")
|
17
|
+
assert_has_tag('a#test2.test', :content => "Test 2 With Block", :href => '/test2') { actual_html }
|
18
|
+
end
|
19
|
+
|
20
|
+
should "#link_tag display link content from a string with no block in erb" do
|
21
|
+
actual_html = render("link_to.erb")
|
22
|
+
assert_has_tag('a#test1.test', :content => "Test 1 No Block", :href => "/test1"){actual_html}
|
23
|
+
end
|
24
|
+
|
25
|
+
should "#link_to should display the block in haml" do
|
26
|
+
actual_html = render("link_to.haml")
|
27
|
+
assert_has_tag('a#test2.test', :content => "Test 2 With Block", :href => "/test2"){ actual_html }
|
28
|
+
end
|
29
|
+
|
30
|
+
should "#link_tag display link content from a string with no block in haml" do
|
31
|
+
actual_html = render("link_to.haml")
|
32
|
+
assert_has_tag('a#test1.test', :content => "Test 1 No Block", :href => "/test1"){actual_html}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'for #mail_to method' do
|
37
|
+
should "display link element for mail to no caption" do
|
38
|
+
actual_html = view_context.mail_to('test@demo.com')
|
39
|
+
assert_has_tag(:a, :href => "mailto:test@demo.com", :content => 'test@demo.com') { actual_html }
|
40
|
+
end
|
41
|
+
|
42
|
+
should "display link element for mail to with caption" do
|
43
|
+
actual_html = view_context.mail_to('test@demo.com', "My Email", :class => 'demo')
|
44
|
+
assert_has_tag(:a, :href => "mailto:test@demo.com", :content => 'My Email', :class => 'demo') { actual_html }
|
45
|
+
end
|
46
|
+
|
47
|
+
should "display link element for mail to with caption and mail options" do
|
48
|
+
actual_html = view_context.mail_to('test@demo.com', "My Email", :subject => 'demo test', :class => 'demo', :cc => 'foo@test.com')
|
49
|
+
assert_has_tag(:a, :class => 'demo') { actual_html }
|
50
|
+
assert_match /mailto\:test\@demo.com\?/, actual_html
|
51
|
+
assert_match /cc=foo\@test\.com/, actual_html
|
52
|
+
assert_match /subject\=demo\%20test/, actual_html
|
53
|
+
end
|
54
|
+
|
55
|
+
should "display mail link element in haml" do
|
56
|
+
result = render("mail_to.haml")
|
57
|
+
assert_has_selector('p.simple a', :href => 'mailto:test@demo.com', :content => 'test@demo.com'){result}
|
58
|
+
assert_has_selector('p.captioned a', :href => 'mailto:test@demo.com', :content => 'Click my Email'){result}
|
59
|
+
end
|
60
|
+
|
61
|
+
should "display mail link element in erb" do
|
62
|
+
result = render("mail_to.erb")
|
63
|
+
assert_has_selector('p.simple a', :href => 'mailto:test@demo.com', :content => 'test@demo.com'){result}
|
64
|
+
assert_has_selector('p.captioned a', :href => 'mailto:test@demo.com', :content => 'Click my Email'){result}
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'for #image_tag method' do
|
69
|
+
should "display image tag absolute link with no options" do
|
70
|
+
assert_has_tag('img', :src => "/absolute/pic.gif") { view_context.image_tag('/absolute/pic.gif') }
|
71
|
+
end
|
72
|
+
|
73
|
+
should "display image tag absolute link with specified uri root" do
|
74
|
+
vc = view_context
|
75
|
+
vc.stubs(:uri_root).returns("/blog")
|
76
|
+
assert_has_tag('img', :src => "/blog/images/relative/pic.gif") { vc.image_tag('relative/pic.gif') }
|
77
|
+
end
|
78
|
+
|
79
|
+
should "display image tag relative link with options" do
|
80
|
+
assert_has_tag('img.photo', :src => "/images/relative/pic.gif") { view_context.image_tag('relative/pic.gif', :class => 'photo') }
|
81
|
+
end
|
82
|
+
|
83
|
+
should "display image tag uri link with options" do
|
84
|
+
assert_has_tag('img.photo', :src => "http://demo.org/pic.gif") { view_context.image_tag('http://demo.org/pic.gif', :class => 'photo') }
|
85
|
+
end
|
86
|
+
|
87
|
+
should "display image tag relative link with incorrect spacing" do
|
88
|
+
assert_has_tag('img.photo', :src => "/images/relative/pic.gif") { view_context.image_tag(' relative/ pic.gif ', :class => 'photo') }
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'for #stylesheet_link_tag method' do
|
93
|
+
should "display stylesheet link item" do
|
94
|
+
time = stop_time_for_test
|
95
|
+
expected_options = { :media => "screen", :rel => "stylesheet", :type => "text/css" }
|
96
|
+
assert_has_tag('link', expected_options.merge(:href => "/stylesheets/style.css?#{time.to_i}")) { view_context.stylesheet_link_tag('style') }
|
97
|
+
end
|
98
|
+
should "display stylesheet link item for long relative path" do
|
99
|
+
time = stop_time_for_test
|
100
|
+
expected_options = { :media => "screen", :rel => "stylesheet", :type => "text/css" }
|
101
|
+
actual_html = view_context.stylesheet_link_tag('example/demo/style')
|
102
|
+
assert_has_tag('link', expected_options.merge(:href => "/stylesheets/example/demo/style.css?#{time.to_i}")) { actual_html }
|
103
|
+
end
|
104
|
+
should "display stylesheet link item with absolute path" do
|
105
|
+
time = stop_time_for_test
|
106
|
+
expected_options = { :media => "screen", :rel => "stylesheet", :type => "text/css" }
|
107
|
+
actual_html = view_context.stylesheet_link_tag('/css/style')
|
108
|
+
assert_has_tag('link', expected_options.merge(:href => "/css/style.css?#{time.to_i}")) { actual_html }
|
109
|
+
end
|
110
|
+
should "display stylesheet link item with uri root" do
|
111
|
+
vc = view_context
|
112
|
+
vc.stubs(:uri_root).returns("/blog")
|
113
|
+
time = stop_time_for_test
|
114
|
+
expected_options = { :media => "screen", :rel => "stylesheet", :type => "text/css" }
|
115
|
+
actual_html = vc.stylesheet_link_tag('style')
|
116
|
+
assert_has_tag('link', expected_options.merge(:href => "/blog/stylesheets/style.css?#{time.to_i}")) { actual_html }
|
117
|
+
end
|
118
|
+
should "display stylesheet link items" do
|
119
|
+
time = stop_time_for_test
|
120
|
+
actual_html = view_context.stylesheet_link_tag('style', 'layout.css', 'http://google.com/style.css')
|
121
|
+
assert_has_tag('link', :media => "screen", :rel => "stylesheet", :type => "text/css", :count => 3) { actual_html }
|
122
|
+
assert_has_tag('link', :href => "/stylesheets/style.css?#{time.to_i}") { actual_html }
|
123
|
+
assert_has_tag('link', :href => "/stylesheets/layout.css?#{time.to_i}") { actual_html }
|
124
|
+
assert_has_tag('link', :href => "http://google.com/style.css") { actual_html }
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context 'for #javascript_include_tag method' do
|
129
|
+
should "display javascript item" do
|
130
|
+
time = stop_time_for_test
|
131
|
+
actual_html = view_context.javascript_include_tag('application')
|
132
|
+
assert_has_tag('script', :src => "/javascripts/application.js?#{time.to_i}", :type => "text/javascript") { actual_html }
|
133
|
+
end
|
134
|
+
|
135
|
+
should "display javascript item for long relative path" do
|
136
|
+
time = stop_time_for_test
|
137
|
+
actual_html = view_context.javascript_include_tag('example/demo/application')
|
138
|
+
assert_has_tag('script', :src => "/javascripts/example/demo/application.js?#{time.to_i}", :type => "text/javascript") { actual_html }
|
139
|
+
end
|
140
|
+
|
141
|
+
should "display javascript item for path containing js" do
|
142
|
+
time = stop_time_for_test
|
143
|
+
actual_html = view_context.javascript_include_tag 'test/jquery.json'
|
144
|
+
assert_has_tag('script', :src => "/javascripts/test/jquery.json?#{time.to_i}", :type => "text/javascript") { actual_html }
|
145
|
+
end
|
146
|
+
|
147
|
+
should "display javascript item for path containing period" do
|
148
|
+
time = stop_time_for_test
|
149
|
+
actual_html = view_context.javascript_include_tag 'test/jquery.min'
|
150
|
+
assert_has_tag('script', :src => "/javascripts/test/jquery.min.js?#{time.to_i}", :type => "text/javascript") { actual_html }
|
151
|
+
end
|
152
|
+
|
153
|
+
should "display javascript item with absolute path" do
|
154
|
+
time = stop_time_for_test
|
155
|
+
actual_html = view_context.javascript_include_tag('/js/application')
|
156
|
+
assert_has_tag('script', :src => "/js/application.js?#{time.to_i}", :type => "text/javascript") { actual_html }
|
157
|
+
end
|
158
|
+
|
159
|
+
should "display javascript item with uri root" do
|
160
|
+
vc = view_context
|
161
|
+
vc.stubs(:uri_root).returns("/blog")
|
162
|
+
time = stop_time_for_test
|
163
|
+
actual_html = vc.javascript_include_tag('application')
|
164
|
+
assert_has_tag('script', :src => "/blog/javascripts/application.js?#{time.to_i}", :type => "text/javascript") { actual_html }
|
165
|
+
end
|
166
|
+
|
167
|
+
should "display javascript items" do
|
168
|
+
time = stop_time_for_test
|
169
|
+
actual_html = view_context.javascript_include_tag('application', 'base.js', 'http://google.com/lib.js')
|
170
|
+
assert_has_tag('script', :type => "text/javascript", :count => 3) { actual_html }
|
171
|
+
assert_has_tag('script', :src => "/javascripts/application.js?#{time.to_i}") { actual_html }
|
172
|
+
assert_has_tag('script', :src => "/javascripts/base.js?#{time.to_i}") { actual_html }
|
173
|
+
assert_has_tag('script', :src => "http://google.com/lib.js") { actual_html }
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|