aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorJoshua Peek <josh@joshpeek.com>2008-04-19 13:06:57 -0500
committerJoshua Peek <josh@joshpeek.com>2008-04-19 13:08:24 -0500
commit17d4164a16e5fe7b252375211424a2999a331291 (patch)
tree772695335b861e70caa15d92cd77ca568406cb7f /actionpack
parentef4c65088fb907fc819e6b5d83d284c38cdaabfc (diff)
downloadrails-17d4164a16e5fe7b252375211424a2999a331291.tar.gz
rails-17d4164a16e5fe7b252375211424a2999a331291.tar.bz2
rails-17d4164a16e5fe7b252375211424a2999a331291.zip
Introduce ActionView::TestCase for testing view helpers.
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_view.rb6
-rw-r--r--actionpack/lib/action_view/base.rb10
-rw-r--r--actionpack/lib/action_view/test_case.rb64
-rw-r--r--actionpack/test/abstract_unit.rb1
-rw-r--r--actionpack/test/template/active_record_helper_test.rb9
-rw-r--r--actionpack/test/template/asset_tag_helper_test.rb12
-rw-r--r--actionpack/test/template/benchmark_helper_test.rb4
-rwxr-xr-xactionpack/test/template/date_helper_test.rb5
-rw-r--r--actionpack/test/template/form_helper_test.rb11
-rw-r--r--actionpack/test/template/form_options_helper_test.rb5
-rw-r--r--actionpack/test/template/form_tag_helper_test.rb8
-rw-r--r--actionpack/test/template/javascript_helper_test.rb10
-rw-r--r--actionpack/test/template/number_helper_test.rb4
-rw-r--r--actionpack/test/template/prototype_helper_test.rb56
-rw-r--r--actionpack/test/template/record_tag_helper_test.rb11
-rw-r--r--actionpack/test/template/sanitize_helper_test.rb5
-rw-r--r--actionpack/test/template/scriptaculous_helper_test.rb14
-rw-r--r--actionpack/test/template/tag_helper_test.rb7
-rw-r--r--actionpack/test/template/test_test.rb56
-rw-r--r--actionpack/test/template/text_helper_test.rb5
-rw-r--r--actionpack/test/template/url_helper_test.rb18
21 files changed, 190 insertions, 131 deletions
diff --git a/actionpack/lib/action_view.rb b/actionpack/lib/action_view.rb
index f9de5c1307..609334d52d 100644
--- a/actionpack/lib/action_view.rb
+++ b/actionpack/lib/action_view.rb
@@ -38,6 +38,8 @@ require 'action_view/template_error'
ActionView::Base.class_eval do
include ActionView::Partials
-end
-ActionView::Base.load_helpers
+ ActionView::Base.helper_modules.each do |helper_module|
+ include helper_module
+ end
+end
diff --git a/actionpack/lib/action_view/base.rb b/actionpack/lib/action_view/base.rb
index e57c447682..12dd7d2bc9 100644
--- a/actionpack/lib/action_view/base.rb
+++ b/actionpack/lib/action_view/base.rb
@@ -205,15 +205,17 @@ module ActionView #:nodoc:
class ObjectWrapper < Struct.new(:value) #:nodoc:
end
- def self.load_helpers #:nodoc:
- Dir.entries("#{File.dirname(__FILE__)}/helpers").sort.each do |file|
+ def self.helper_modules #:nodoc:
+ helpers = []
+ Dir.entries(File.expand_path("#{File.dirname(__FILE__)}/helpers")).sort.each do |file|
next unless file =~ /^([a-z][a-z_]*_helper).rb$/
require "action_view/helpers/#{$1}"
helper_module_name = $1.camelize
if Helpers.const_defined?(helper_module_name)
- include Helpers.const_get(helper_module_name)
+ helpers << Helpers.const_get(helper_module_name)
end
end
+ return helpers
end
def initialize(view_paths = [], assigns_for_first_render = {}, controller = nil)#:nodoc:
@@ -323,7 +325,7 @@ If you are rendering a subtemplate, you must now use controller-like partial syn
end
end
- private
+ private
def wrap_content_for_layout(content)
original_content_for_layout = @content_for_layout
@content_for_layout = content
diff --git a/actionpack/lib/action_view/test_case.rb b/actionpack/lib/action_view/test_case.rb
new file mode 100644
index 0000000000..b2e6589d81
--- /dev/null
+++ b/actionpack/lib/action_view/test_case.rb
@@ -0,0 +1,64 @@
+require 'active_support/test_case'
+
+module ActionView
+ class NonInferrableHelperError < ActionViewError
+ def initialize(name)
+ super "Unable to determine the helper to test from #{name}. " +
+ "You'll need to specify it using tests YourHelper in your " +
+ "test case definition"
+ end
+ end
+
+ class TestCase < ActiveSupport::TestCase
+ class_inheritable_accessor :helper_class
+ @@helper_class = nil
+
+ class << self
+ def tests(helper_class)
+ self.helper_class = helper_class
+ end
+
+ def helper_class
+ if current_helper_class = read_inheritable_attribute(:helper_class)
+ current_helper_class
+ else
+ self.helper_class = determine_default_helper_class(name)
+ end
+ end
+
+ def determine_default_helper_class(name)
+ name.sub(/Test$/, '').constantize
+ rescue NameError
+ raise NonInferrableHelperError.new(name)
+ end
+ end
+
+ ActionView::Base.helper_modules.each do |helper_module|
+ include helper_module
+ end
+ include ActionController::PolymorphicRoutes
+ include ActionController::RecordIdentifier
+
+ setup :setup_with_helper_class
+
+ def setup_with_helper_class
+ self.class.send(:include, helper_class)
+ end
+
+ class TestController < ActionController::Base
+ attr_accessor :request, :response
+
+ def initialize
+ @request = ActionController::TestRequest.new
+ @response = ActionController::TestResponse.new
+ end
+ end
+
+ private
+ def method_missing(selector, *args)
+ controller = TestController.new
+ return controller.send!(selector, *args) if ActionController::Routing::Routes.named_routes.helpers.include?(selector)
+ super
+ end
+ end
+end
diff --git a/actionpack/test/abstract_unit.rb b/actionpack/test/abstract_unit.rb
index 700bc1f5e3..d90f299b8a 100644
--- a/actionpack/test/abstract_unit.rb
+++ b/actionpack/test/abstract_unit.rb
@@ -8,6 +8,7 @@ require 'test/unit'
require 'action_controller'
require 'action_controller/cgi_ext'
require 'action_controller/test_process'
+require 'action_view/test_case'
begin
require 'ruby-debug'
diff --git a/actionpack/test/template/active_record_helper_test.rb b/actionpack/test/template/active_record_helper_test.rb
index 31fe7bbc29..dfc30e651a 100644
--- a/actionpack/test/template/active_record_helper_test.rb
+++ b/actionpack/test/template/active_record_helper_test.rb
@@ -1,12 +1,7 @@
require 'abstract_unit'
-class ActiveRecordHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::FormHelper
- include ActionView::Helpers::ActiveRecordHelper
- include ActionView::Helpers::TextHelper
- include ActionView::Helpers::TagHelper
- include ActionView::Helpers::UrlHelper
- include ActionView::Helpers::FormTagHelper
+class ActiveRecordHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::ActiveRecordHelper
silence_warnings do
Post = Struct.new("Post", :title, :author_name, :body, :secret, :written_on)
diff --git a/actionpack/test/template/asset_tag_helper_test.rb b/actionpack/test/template/asset_tag_helper_test.rb
index ffb8856a59..4a8117a88a 100644
--- a/actionpack/test/template/asset_tag_helper_test.rb
+++ b/actionpack/test/template/asset_tag_helper_test.rb
@@ -1,9 +1,7 @@
require 'abstract_unit'
-class AssetTagHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::TagHelper
- include ActionView::Helpers::UrlHelper
- include ActionView::Helpers::AssetTagHelper
+class AssetTagHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::AssetTagHelper
def setup
silence_warnings do
@@ -445,10 +443,8 @@ class AssetTagHelperTest < Test::Unit::TestCase
end
end
-class AssetTagHelperNonVhostTest < Test::Unit::TestCase
- include ActionView::Helpers::TagHelper
- include ActionView::Helpers::UrlHelper
- include ActionView::Helpers::AssetTagHelper
+class AssetTagHelperNonVhostTest < ActionView::TestCase
+ tests ActionView::Helpers::AssetTagHelper
def setup
@controller = Class.new do
diff --git a/actionpack/test/template/benchmark_helper_test.rb b/actionpack/test/template/benchmark_helper_test.rb
index 76c0780482..d95a3dee26 100644
--- a/actionpack/test/template/benchmark_helper_test.rb
+++ b/actionpack/test/template/benchmark_helper_test.rb
@@ -1,8 +1,8 @@
require 'abstract_unit'
require 'action_view/helpers/benchmark_helper'
-class BenchmarkHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::BenchmarkHelper
+class BenchmarkHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::BenchmarkHelper
class MockLogger
attr_reader :logged
diff --git a/actionpack/test/template/date_helper_test.rb b/actionpack/test/template/date_helper_test.rb
index 25b1f9f002..9bd433e76b 100755
--- a/actionpack/test/template/date_helper_test.rb
+++ b/actionpack/test/template/date_helper_test.rb
@@ -1,8 +1,7 @@
require 'abstract_unit'
-class DateHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::DateHelper
- include ActionView::Helpers::FormHelper
+class DateHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::DateHelper
silence_warnings do
Post = Struct.new("Post", :id, :written_on, :updated_at)
diff --git a/actionpack/test/template/form_helper_test.rb b/actionpack/test/template/form_helper_test.rb
index 766e88375b..c48d5dfd2d 100644
--- a/actionpack/test/template/form_helper_test.rb
+++ b/actionpack/test/template/form_helper_test.rb
@@ -30,15 +30,8 @@ end
class Comment::Nested < Comment; end
-class FormHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::FormHelper
- include ActionView::Helpers::FormTagHelper
- include ActionView::Helpers::UrlHelper
- include ActionView::Helpers::TagHelper
- include ActionView::Helpers::TextHelper
- include ActionView::Helpers::ActiveRecordHelper
- include ActionView::Helpers::RecordIdentificationHelper
- include ActionController::PolymorphicRoutes
+class FormHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::FormHelper
def setup
@post = Post.new
diff --git a/actionpack/test/template/form_options_helper_test.rb b/actionpack/test/template/form_options_helper_test.rb
index f3ecc18233..48a26deea9 100644
--- a/actionpack/test/template/form_options_helper_test.rb
+++ b/actionpack/test/template/form_options_helper_test.rb
@@ -22,9 +22,8 @@ end
ActionView::Helpers::FormOptionsHelper::TimeZone = MockTimeZone
-class FormOptionsHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::FormHelper
- include ActionView::Helpers::FormOptionsHelper
+class FormOptionsHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::FormOptionsHelper
silence_warnings do
Post = Struct.new('Post', :title, :author_name, :body, :secret, :written_on, :category, :origin)
diff --git a/actionpack/test/template/form_tag_helper_test.rb b/actionpack/test/template/form_tag_helper_test.rb
index 7caa85802a..73a8bd4d87 100644
--- a/actionpack/test/template/form_tag_helper_test.rb
+++ b/actionpack/test/template/form_tag_helper_test.rb
@@ -1,11 +1,7 @@
require 'abstract_unit'
-class FormTagHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::UrlHelper
- include ActionView::Helpers::TagHelper
- include ActionView::Helpers::FormTagHelper
- include ActionView::Helpers::TextHelper
- include ActionView::Helpers::CaptureHelper
+class FormTagHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::FormTagHelper
def setup
@controller = Class.new do
diff --git a/actionpack/test/template/javascript_helper_test.rb b/actionpack/test/template/javascript_helper_test.rb
index 581ca58f89..f18adb990c 100644
--- a/actionpack/test/template/javascript_helper_test.rb
+++ b/actionpack/test/template/javascript_helper_test.rb
@@ -1,13 +1,7 @@
require 'abstract_unit'
-class JavaScriptHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::JavaScriptHelper
-
- include ActionView::Helpers::UrlHelper
- include ActionView::Helpers::TagHelper
- include ActionView::Helpers::TextHelper
- include ActionView::Helpers::FormHelper
- include ActionView::Helpers::CaptureHelper
+class JavaScriptHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::JavaScriptHelper
def test_define_javascript_functions
# check if prototype.js is included first
diff --git a/actionpack/test/template/number_helper_test.rb b/actionpack/test/template/number_helper_test.rb
index 7065ca7a84..4a8d09b544 100644
--- a/actionpack/test/template/number_helper_test.rb
+++ b/actionpack/test/template/number_helper_test.rb
@@ -1,7 +1,7 @@
require 'abstract_unit'
-class NumberHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::NumberHelper
+class NumberHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::NumberHelper
def test_number_to_phone
assert_equal("800-555-1212", number_to_phone(8005551212))
diff --git a/actionpack/test/template/prototype_helper_test.rb b/actionpack/test/template/prototype_helper_test.rb
index 28e58b0a08..a84d4e72af 100644
--- a/actionpack/test/template/prototype_helper_test.rb
+++ b/actionpack/test/template/prototype_helper_test.rb
@@ -24,24 +24,11 @@ end
class Author::Nested < Author; end
-module BaseTest
- def self.included(base)
- base.send :attr_accessor, :template_format
- end
+class PrototypeHelperBaseTest < ActionView::TestCase
+ tests ActionView::Helpers::PrototypeHelper
+
+ attr_accessor :template_format
- include ActionView::Helpers::JavaScriptHelper
- include ActionView::Helpers::PrototypeHelper
- include ActionView::Helpers::ScriptaculousHelper
-
- include ActionView::Helpers::UrlHelper
- include ActionView::Helpers::TagHelper
- include ActionView::Helpers::TextHelper
- include ActionView::Helpers::FormTagHelper
- include ActionView::Helpers::FormHelper
- include ActionView::Helpers::CaptureHelper
- include ActionView::Helpers::RecordIdentificationHelper
- include ActionController::PolymorphicRoutes
-
def setup
@template = nil
@controller = Class.new do
@@ -59,25 +46,22 @@ module BaseTest
end.new
end
-protected
-
- def request_forgery_protection_token
- nil
- end
-
- def protect_against_forgery?
- false
- end
-
- def create_generator
- block = Proc.new { |*args| yield *args if block_given? }
- JavaScriptGenerator.new self, &block
- end
+ protected
+ def request_forgery_protection_token
+ nil
+ end
+
+ def protect_against_forgery?
+ false
+ end
+
+ def create_generator
+ block = Proc.new { |*args| yield *args if block_given? }
+ JavaScriptGenerator.new self, &block
+ end
end
-class PrototypeHelperTest < Test::Unit::TestCase
- include BaseTest
-
+class PrototypeHelperTest < PrototypeHelperBaseTest
def setup
@record = @author = Author.new
@article = Article.new
@@ -294,9 +278,7 @@ class PrototypeHelperTest < Test::Unit::TestCase
end
end
-class JavaScriptGeneratorTest < Test::Unit::TestCase
- include BaseTest
-
+class JavaScriptGeneratorTest < PrototypeHelperBaseTest
def setup
super
@generator = create_generator
diff --git a/actionpack/test/template/record_tag_helper_test.rb b/actionpack/test/template/record_tag_helper_test.rb
index bb5440be20..0afbb54f57 100644
--- a/actionpack/test/template/record_tag_helper_test.rb
+++ b/actionpack/test/template/record_tag_helper_test.rb
@@ -9,14 +9,9 @@ class Post
end
end
-class RecordTagHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::RecordTagHelper
- include ActionView::Helpers::CaptureHelper
- include ActionView::Helpers::RecordIdentificationHelper
- include ActionView::Helpers::TagHelper
- include ActionView::Helpers::TextHelper
- include ActionView::Helpers::UrlHelper
-
+class RecordTagHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::RecordTagHelper
+
def setup
@post = Post.new
end
diff --git a/actionpack/test/template/sanitize_helper_test.rb b/actionpack/test/template/sanitize_helper_test.rb
index a840c8b4cb..e5427d9dc1 100644
--- a/actionpack/test/template/sanitize_helper_test.rb
+++ b/actionpack/test/template/sanitize_helper_test.rb
@@ -3,9 +3,8 @@ require 'testing_sandbox'
# The exhaustive tests are in test/controller/html/sanitizer_test.rb.
# This tests the that the helpers hook up correctly to the sanitizer classes.
-class SanitizeHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::SanitizeHelper
- include ActionView::Helpers::TagHelper
+class SanitizeHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::SanitizeHelper
include TestingSandbox
def test_strip_links
diff --git a/actionpack/test/template/scriptaculous_helper_test.rb b/actionpack/test/template/scriptaculous_helper_test.rb
index 91856ff980..690a7751b5 100644
--- a/actionpack/test/template/scriptaculous_helper_test.rb
+++ b/actionpack/test/template/scriptaculous_helper_test.rb
@@ -1,16 +1,8 @@
require 'abstract_unit'
-class ScriptaculousHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::JavaScriptHelper
- include ActionView::Helpers::PrototypeHelper
- include ActionView::Helpers::ScriptaculousHelper
-
- include ActionView::Helpers::UrlHelper
- include ActionView::Helpers::TagHelper
- include ActionView::Helpers::TextHelper
- include ActionView::Helpers::FormHelper
- include ActionView::Helpers::CaptureHelper
-
+class ScriptaculousHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::ScriptaculousHelper
+
def setup
@controller = Class.new do
def url_for(options)
diff --git a/actionpack/test/template/tag_helper_test.rb b/actionpack/test/template/tag_helper_test.rb
index 4b73289060..4da6116095 100644
--- a/actionpack/test/template/tag_helper_test.rb
+++ b/actionpack/test/template/tag_helper_test.rb
@@ -1,10 +1,7 @@
require 'abstract_unit'
-class TagHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::TagHelper
- include ActionView::Helpers::UrlHelper
- include ActionView::Helpers::TextHelper
- include ActionView::Helpers::CaptureHelper
+class TagHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::TagHelper
def test_tag
assert_equal "<br />", tag("br")
diff --git a/actionpack/test/template/test_test.rb b/actionpack/test/template/test_test.rb
new file mode 100644
index 0000000000..660f51b3be
--- /dev/null
+++ b/actionpack/test/template/test_test.rb
@@ -0,0 +1,56 @@
+require 'abstract_unit'
+
+module PeopleHelper
+ def title(text)
+ content_tag(:h1, text)
+ end
+
+ def homepage_path
+ people_path
+ end
+
+ def homepage_url
+ people_url
+ end
+
+ def link_to_person(person)
+ link_to person.name, person
+ end
+end
+
+class PeopleHelperTest < ActionView::TestCase
+ def setup
+ ActionController::Routing::Routes.draw do |map|
+ map.people 'people', :controller => 'people', :action => 'index'
+ map.connect ':controller/:action/:id'
+ end
+ end
+
+ def test_title
+ assert_equal "<h1>Ruby on Rails</h1>", title("Ruby on Rails")
+ end
+
+ def test_homepage_path
+ assert_equal "/people", homepage_path
+ end
+
+ def test_homepage_url
+ assert_equal "http://test.host/people", homepage_url
+ end
+
+ uses_mocha "link_to_person" do
+ def test_link_to_person
+ person = mock(:name => "David")
+ expects(:mocha_mock_path).with(person).returns("/people/1")
+ assert_equal '<a href="/people/1">David</a>', link_to_person(person)
+ end
+ end
+end
+
+class CrazyHelperTest < ActionView::TestCase
+ tests PeopleHelper
+
+ def test_helper_class_can_be_set_manually_not_just_inferred
+ assert_equal PeopleHelper, self.class.helper_class
+ end
+end
diff --git a/actionpack/test/template/text_helper_test.rb b/actionpack/test/template/text_helper_test.rb
index 7d92bce4bd..25ecda687f 100644
--- a/actionpack/test/template/text_helper_test.rb
+++ b/actionpack/test/template/text_helper_test.rb
@@ -1,9 +1,8 @@
require 'abstract_unit'
require 'testing_sandbox'
-class TextHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::TextHelper
- include ActionView::Helpers::TagHelper
+class TextHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::TextHelper
include TestingSandbox
def setup
diff --git a/actionpack/test/template/url_helper_test.rb b/actionpack/test/template/url_helper_test.rb
index 9cd3b6e2f9..d45ea08a6f 100644
--- a/actionpack/test/template/url_helper_test.rb
+++ b/actionpack/test/template/url_helper_test.rb
@@ -2,10 +2,8 @@ require 'abstract_unit'
RequestMock = Struct.new("Request", :request_uri, :protocol, :host_with_port, :env)
-class UrlHelperTest < Test::Unit::TestCase
- include ActionView::Helpers::AssetTagHelper
- include ActionView::Helpers::UrlHelper
- include ActionView::Helpers::TagHelper
+class UrlHelperTest < ActionView::TestCase
+ tests ActionView::Helpers::UrlHelper
def setup
@controller = Class.new do
@@ -293,7 +291,7 @@ class UrlHelperTest < Test::Unit::TestCase
end
end
-class UrlHelperWithControllerTest < Test::Unit::TestCase
+class UrlHelperWithControllerTest < ActionView::TestCase
class UrlHelperController < ActionController::Base
self.view_paths = [ "#{File.dirname(__FILE__)}/../fixtures/" ]
@@ -310,7 +308,7 @@ class UrlHelperWithControllerTest < Test::Unit::TestCase
def rescue_action(e) raise e end
end
- include ActionView::Helpers::UrlHelper
+ tests ActionView::Helpers::UrlHelper
def setup
@request = ActionController::TestRequest.new
@@ -348,7 +346,7 @@ class UrlHelperWithControllerTest < Test::Unit::TestCase
end
end
-class LinkToUnlessCurrentWithControllerTest < Test::Unit::TestCase
+class LinkToUnlessCurrentWithControllerTest < ActionView::TestCase
class TasksController < ActionController::Base
self.view_paths = ["#{File.dirname(__FILE__)}/../fixtures/"]
@@ -372,7 +370,7 @@ class LinkToUnlessCurrentWithControllerTest < Test::Unit::TestCase
end
end
- include ActionView::Helpers::UrlHelper
+ tests ActionView::Helpers::UrlHelper
def setup
@request = ActionController::TestRequest.new
@@ -440,7 +438,7 @@ class Session
end
end
-class PolymorphicControllerTest < Test::Unit::TestCase
+class PolymorphicControllerTest < ActionView::TestCase
class WorkshopsController < ActionController::Base
self.view_paths = ["#{File.dirname(__FILE__)}/../fixtures/"]
@@ -479,7 +477,7 @@ class PolymorphicControllerTest < Test::Unit::TestCase
def rescue_action(e) raise e end
end
- include ActionView::Helpers::UrlHelper
+ tests ActionView::Helpers::UrlHelper
def setup
@request = ActionController::TestRequest.new