diff options
| author | hukl <contact@smyck.org> | 2009-02-17 12:47:49 +0100 |
|---|---|---|
| committer | hukl <contact@smyck.org> | 2009-02-17 12:47:49 +0100 |
| commit | 3cdcb5ca02a94b2b342c30903a27d47d35d46e55 (patch) | |
| tree | ef3e1154fe262561b3955c07edcaee3824a21f47 /vendor/plugins/will_paginate/test/lib | |
| parent | 7a282f2605f6fb3689940e5c7072b4801653deb2 (diff) | |
added will_paginate plugin
Diffstat (limited to 'vendor/plugins/will_paginate/test/lib')
4 files changed, 293 insertions, 0 deletions
diff --git a/vendor/plugins/will_paginate/test/lib/activerecord_test_case.rb b/vendor/plugins/will_paginate/test/lib/activerecord_test_case.rb new file mode 100644 index 0000000..8f66ebe --- /dev/null +++ b/vendor/plugins/will_paginate/test/lib/activerecord_test_case.rb | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | require 'lib/activerecord_test_connector' | ||
| 2 | |||
| 3 | class ActiveRecordTestCase < Test::Unit::TestCase | ||
| 4 | # Set our fixture path | ||
| 5 | if ActiveRecordTestConnector.able_to_connect | ||
| 6 | self.fixture_path = File.join(File.dirname(__FILE__), '..', 'fixtures') | ||
| 7 | self.use_transactional_fixtures = true | ||
| 8 | end | ||
| 9 | |||
| 10 | def self.fixtures(*args) | ||
| 11 | super if ActiveRecordTestConnector.connected | ||
| 12 | end | ||
| 13 | |||
| 14 | def run(*args) | ||
| 15 | super if ActiveRecordTestConnector.connected | ||
| 16 | end | ||
| 17 | |||
| 18 | # Default so Test::Unit::TestCase doesn't complain | ||
| 19 | def test_truth | ||
| 20 | end | ||
| 21 | |||
| 22 | protected | ||
| 23 | |||
| 24 | def assert_queries(num = 1) | ||
| 25 | $query_count = 0 | ||
| 26 | yield | ||
| 27 | ensure | ||
| 28 | assert_equal num, $query_count, "#{$query_count} instead of #{num} queries were executed." | ||
| 29 | end | ||
| 30 | |||
| 31 | def assert_no_queries(&block) | ||
| 32 | assert_queries(0, &block) | ||
| 33 | end | ||
| 34 | end | ||
| 35 | |||
| 36 | ActiveRecordTestConnector.setup | ||
diff --git a/vendor/plugins/will_paginate/test/lib/activerecord_test_connector.rb b/vendor/plugins/will_paginate/test/lib/activerecord_test_connector.rb new file mode 100644 index 0000000..1130cf5 --- /dev/null +++ b/vendor/plugins/will_paginate/test/lib/activerecord_test_connector.rb | |||
| @@ -0,0 +1,75 @@ | |||
| 1 | require 'active_record' | ||
| 2 | require 'active_record/version' | ||
| 3 | require 'active_record/fixtures' | ||
| 4 | |||
| 5 | class ActiveRecordTestConnector | ||
| 6 | cattr_accessor :able_to_connect | ||
| 7 | cattr_accessor :connected | ||
| 8 | |||
| 9 | FIXTURES_PATH = File.join(File.dirname(__FILE__), '..', 'fixtures') | ||
| 10 | |||
| 11 | # Set our defaults | ||
| 12 | self.connected = false | ||
| 13 | self.able_to_connect = true | ||
| 14 | |||
| 15 | def self.setup | ||
| 16 | unless self.connected || !self.able_to_connect | ||
| 17 | setup_connection | ||
| 18 | load_schema | ||
| 19 | add_load_path FIXTURES_PATH | ||
| 20 | self.connected = true | ||
| 21 | end | ||
| 22 | rescue Exception => e # errors from ActiveRecord setup | ||
| 23 | $stderr.puts "\nSkipping ActiveRecord tests: #{e}\n\n" | ||
| 24 | self.able_to_connect = false | ||
| 25 | end | ||
| 26 | |||
| 27 | private | ||
| 28 | |||
| 29 | def self.add_load_path(path) | ||
| 30 | dep = defined?(ActiveSupport::Dependencies) ? ActiveSupport::Dependencies : ::Dependencies | ||
| 31 | dep.load_paths.unshift path | ||
| 32 | end | ||
| 33 | |||
| 34 | def self.setup_connection | ||
| 35 | db = ENV['DB'].blank?? 'sqlite3' : ENV['DB'] | ||
| 36 | |||
| 37 | configurations = YAML.load_file(File.join(File.dirname(__FILE__), '..', 'database.yml')) | ||
| 38 | raise "no configuration for '#{db}'" unless configurations.key? db | ||
| 39 | configuration = configurations[db] | ||
| 40 | |||
| 41 | ActiveRecord::Base.logger = Logger.new(STDOUT) if $0 == 'irb' | ||
| 42 | puts "using #{configuration['adapter']} adapter" unless ENV['DB'].blank? | ||
| 43 | |||
| 44 | gem 'sqlite3-ruby' if 'sqlite3' == db | ||
| 45 | |||
| 46 | ActiveRecord::Base.establish_connection(configuration) | ||
| 47 | ActiveRecord::Base.configurations = { db => configuration } | ||
| 48 | prepare ActiveRecord::Base.connection | ||
| 49 | |||
| 50 | unless Object.const_defined?(:QUOTED_TYPE) | ||
| 51 | Object.send :const_set, :QUOTED_TYPE, ActiveRecord::Base.connection.quote_column_name('type') | ||
| 52 | end | ||
| 53 | end | ||
| 54 | |||
| 55 | def self.load_schema | ||
| 56 | ActiveRecord::Base.silence do | ||
| 57 | ActiveRecord::Migration.verbose = false | ||
| 58 | load File.join(FIXTURES_PATH, 'schema.rb') | ||
| 59 | end | ||
| 60 | end | ||
| 61 | |||
| 62 | def self.prepare(conn) | ||
| 63 | class << conn | ||
| 64 | IGNORED_SQL = [/^PRAGMA/, /^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/, /^SELECT @@ROWCOUNT/, /^SHOW FIELDS /] | ||
| 65 | |||
| 66 | def execute_with_counting(sql, name = nil, &block) | ||
| 67 | $query_count ||= 0 | ||
| 68 | $query_count += 1 unless IGNORED_SQL.any? { |r| sql =~ r } | ||
| 69 | execute_without_counting(sql, name, &block) | ||
| 70 | end | ||
| 71 | |||
| 72 | alias_method_chain :execute, :counting | ||
| 73 | end | ||
| 74 | end | ||
| 75 | end | ||
diff --git a/vendor/plugins/will_paginate/test/lib/load_fixtures.rb b/vendor/plugins/will_paginate/test/lib/load_fixtures.rb new file mode 100644 index 0000000..10d6f42 --- /dev/null +++ b/vendor/plugins/will_paginate/test/lib/load_fixtures.rb | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | require 'boot' | ||
| 2 | require 'lib/activerecord_test_connector' | ||
| 3 | |||
| 4 | # setup the connection | ||
| 5 | ActiveRecordTestConnector.setup | ||
| 6 | |||
| 7 | # load all fixtures | ||
| 8 | Fixtures.create_fixtures(ActiveRecordTestConnector::FIXTURES_PATH, ActiveRecord::Base.connection.tables) | ||
| 9 | |||
| 10 | require 'will_paginate' | ||
| 11 | WillPaginate.enable_activerecord | ||
diff --git a/vendor/plugins/will_paginate/test/lib/view_test_process.rb b/vendor/plugins/will_paginate/test/lib/view_test_process.rb new file mode 100644 index 0000000..508411e --- /dev/null +++ b/vendor/plugins/will_paginate/test/lib/view_test_process.rb | |||
| @@ -0,0 +1,171 @@ | |||
| 1 | require 'action_controller' | ||
| 2 | require 'action_controller/test_process' | ||
| 3 | |||
| 4 | require 'will_paginate' | ||
| 5 | WillPaginate.enable_actionpack | ||
| 6 | |||
| 7 | ActionController::Routing::Routes.draw do |map| | ||
| 8 | map.connect 'dummy/page/:page', :controller => 'dummy' | ||
| 9 | map.connect 'dummy/dots/page.:page', :controller => 'dummy', :action => 'dots' | ||
| 10 | map.connect 'ibocorp/:page', :controller => 'ibocorp', | ||
| 11 | :requirements => { :page => /\d+/ }, | ||
| 12 | :defaults => { :page => 1 } | ||
| 13 | |||
| 14 | map.connect ':controller/:action/:id' | ||
| 15 | end | ||
| 16 | |||
| 17 | ActionController::Base.perform_caching = false | ||
| 18 | |||
| 19 | class WillPaginate::ViewTestCase < Test::Unit::TestCase | ||
| 20 | def setup | ||
| 21 | super | ||
| 22 | @controller = DummyController.new | ||
| 23 | @request = @controller.request | ||
| 24 | @html_result = nil | ||
| 25 | @template = '<%= will_paginate collection, options %>' | ||
| 26 | |||
| 27 | @view = ActionView::Base.new | ||
| 28 | @view.assigns['controller'] = @controller | ||
| 29 | @view.assigns['_request'] = @request | ||
| 30 | @view.assigns['_params'] = @request.params | ||
| 31 | end | ||
| 32 | |||
| 33 | def test_no_complain; end | ||
| 34 | |||
| 35 | protected | ||
| 36 | |||
| 37 | def paginate(collection = {}, options = {}, &block) | ||
| 38 | if collection.instance_of? Hash | ||
| 39 | page_options = { :page => 1, :total_entries => 11, :per_page => 4 }.merge(collection) | ||
| 40 | collection = [1].paginate(page_options) | ||
| 41 | end | ||
| 42 | |||
| 43 | locals = { :collection => collection, :options => options } | ||
| 44 | |||
| 45 | unless @view.respond_to? :render_template | ||
| 46 | # Rails 2.2 | ||
| 47 | @html_result = ActionView::InlineTemplate.new(@template).render(@view, locals) | ||
| 48 | else | ||
| 49 | if defined? ActionView::InlineTemplate | ||
| 50 | # Rails 2.1 | ||
| 51 | args = [ ActionView::InlineTemplate.new(@view, @template, locals) ] | ||
| 52 | else | ||
| 53 | # older Rails versions | ||
| 54 | args = [nil, @template, nil, locals] | ||
| 55 | end | ||
| 56 | |||
| 57 | @html_result = @view.render_template(*args) | ||
| 58 | end | ||
| 59 | |||
| 60 | @html_document = HTML::Document.new(@html_result, true, false) | ||
| 61 | |||
| 62 | if block_given? | ||
| 63 | classname = options[:class] || WillPaginate::ViewHelpers.pagination_options[:class] | ||
| 64 | assert_select("div.#{classname}", 1, 'no main DIV', &block) | ||
| 65 | end | ||
| 66 | end | ||
| 67 | |||
| 68 | def response_from_page_or_rjs | ||
| 69 | @html_document.root | ||
| 70 | end | ||
| 71 | |||
| 72 | def validate_page_numbers expected, links, param_name = :page | ||
| 73 | param_pattern = /\W#{CGI.escape(param_name.to_s)}=([^&]*)/ | ||
| 74 | |||
| 75 | assert_equal(expected, links.map { |e| | ||
| 76 | e['href'] =~ param_pattern | ||
| 77 | $1 ? $1.to_i : $1 | ||
| 78 | }) | ||
| 79 | end | ||
| 80 | |||
| 81 | def assert_links_match pattern, links = nil, numbers = nil | ||
| 82 | links ||= assert_select 'div.pagination a[href]' do |elements| | ||
| 83 | elements | ||
| 84 | end | ||
| 85 | |||
| 86 | pages = [] if numbers | ||
| 87 | |||
| 88 | links.each do |el| | ||
| 89 | assert_match pattern, el['href'] | ||
| 90 | if numbers | ||
| 91 | el['href'] =~ pattern | ||
| 92 | pages << ($1.nil?? nil : $1.to_i) | ||
| 93 | end | ||
| 94 | end | ||
| 95 | |||
| 96 | assert_equal numbers, pages, "page numbers don't match" if numbers | ||
| 97 | end | ||
| 98 | |||
| 99 | def assert_no_links_match pattern | ||
| 100 | assert_select 'div.pagination a[href]' do |elements| | ||
| 101 | elements.each do |el| | ||
| 102 | assert_no_match pattern, el['href'] | ||
| 103 | end | ||
| 104 | end | ||
| 105 | end | ||
| 106 | end | ||
| 107 | |||
| 108 | class DummyRequest | ||
| 109 | attr_accessor :symbolized_path_parameters | ||
| 110 | |||
| 111 | def initialize | ||
| 112 | @get = true | ||
| 113 | @params = {} | ||
| 114 | @symbolized_path_parameters = { :controller => 'foo', :action => 'bar' } | ||
| 115 | end | ||
| 116 | |||
| 117 | def get? | ||
| 118 | @get | ||
| 119 | end | ||
| 120 | |||
| 121 | def post | ||
| 122 | @get = false | ||
| 123 | end | ||
| 124 | |||
| 125 | def relative_url_root | ||
| 126 | '' | ||
| 127 | end | ||
| 128 | |||
| 129 | def params(more = nil) | ||
| 130 | @params.update(more) if more | ||
| 131 | @params | ||
| 132 | end | ||
| 133 | end | ||
| 134 | |||
| 135 | class DummyController | ||
| 136 | attr_reader :request | ||
| 137 | attr_accessor :controller_name | ||
| 138 | |||
| 139 | def initialize | ||
| 140 | @request = DummyRequest.new | ||
| 141 | @url = ActionController::UrlRewriter.new(@request, @request.params) | ||
| 142 | end | ||
| 143 | |||
| 144 | def params | ||
| 145 | @request.params | ||
| 146 | end | ||
| 147 | |||
| 148 | def url_for(params) | ||
| 149 | @url.rewrite(params) | ||
| 150 | end | ||
| 151 | end | ||
| 152 | |||
| 153 | module HTML | ||
| 154 | Node.class_eval do | ||
| 155 | def inner_text | ||
| 156 | children.map(&:inner_text).join('') | ||
| 157 | end | ||
| 158 | end | ||
| 159 | |||
| 160 | Text.class_eval do | ||
| 161 | def inner_text | ||
| 162 | self.to_s | ||
| 163 | end | ||
| 164 | end | ||
| 165 | |||
| 166 | Tag.class_eval do | ||
| 167 | def inner_text | ||
| 168 | childless?? '' : super | ||
| 169 | end | ||
| 170 | end | ||
| 171 | end | ||
