abstract_unit.rb 5.4 KB
Newer Older
D
Initial  
David Heinemeier Hansson 已提交
1
$:.unshift(File.dirname(__FILE__) + '/../lib')
2 3 4
$:.unshift(File.dirname(__FILE__) + '/../../activesupport/lib')
$:.unshift(File.dirname(__FILE__) + '/../../activemodel/lib')

5
$:.unshift(File.dirname(__FILE__) + '/lib')
6
$:.unshift(File.dirname(__FILE__) + '/fixtures/helpers')
7
$:.unshift(File.dirname(__FILE__) + '/fixtures/alternate_helpers')
D
Initial  
David Heinemeier Hansson 已提交
8

9 10 11 12 13 14 15 16
bundler = File.join(File.dirname(__FILE__), '..', 'vendor', 'gems', 'environment')
require bundler if File.exist?("#{bundler}.rb")

begin
  %w( rack rack/test sqlite3 ).each { |lib| require lib }
rescue LoadError => e
  abort e.message
end
17

J
Joshua Peek 已提交
18 19
ENV['TMPDIR'] = File.join(File.dirname(__FILE__), 'tmp')

D
Initial  
David Heinemeier Hansson 已提交
20
require 'test/unit'
21 22
require 'active_support'
require 'active_support/test_case'
J
Joshua Peek 已提交
23
require 'abstract_controller'
24
require 'action_controller'
J
Joshua Peek 已提交
25 26 27 28
require 'action_view'
require 'action_view/base'
require 'action_dispatch'
require 'active_model'
29
require 'fixture_template'
30
require 'action_controller/testing/process'
31
require 'action_controller/testing/integration'
J
Joshua Peek 已提交
32
require 'action_view/test_case'
33
require 'active_support/dependencies'
D
Initial  
David Heinemeier Hansson 已提交
34

35 36
begin
  require 'ruby-debug'
J
Jeremy Kemper 已提交
37
  Debugger.settings[:autoeval] = true
38
  Debugger.start
39 40 41
rescue LoadError
  # Debugging disabled. `gem install ruby-debug` to enable.
end
42

J
Joshua Peek 已提交
43 44
require 'pp' # require 'pp' early to prevent hidden_methods from not picking up the pretty-print methods until too late

45
ActiveSupport::Dependencies.hook!
46

47 48 49
# Show backtraces for deprecated behavior for quicker cleanup.
ActiveSupport::Deprecation.debug = true

J
Joshua Peek 已提交
50 51
# Register danish language for testing
I18n.backend.store_translations 'da', {}
52
I18n.backend.store_translations 'pt-BR', {}
53
ORIGINAL_LOCALES = I18n.available_locales.map {|locale| locale.to_s }.sort
J
Joshua Peek 已提交
54

Y
Yehuda Katz + Carl Lerche 已提交
55
FIXTURE_LOAD_PATH = File.join(File.dirname(__FILE__), 'fixtures')
56 57 58 59 60 61 62 63 64 65 66

module ActionView
  class TestCase
    setup do
      ActionController::Routing::Routes.draw do |map|
        map.connect ':controller/:action/:id'
      end
    end
  end
end

J
Joshua Peek 已提交
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
# Temporary base class
class Rack::TestCase < ActionController::IntegrationTest
  setup do
    ActionController::Base.session_options[:key] = "abc"
    ActionController::Base.session_options[:secret] = ("*" * 30)
  end

  def app
    @app ||= ActionController::Dispatcher.new
  end

  def self.testing(klass = nil)
    if klass
      @testing = "/#{klass.name.underscore}".sub!(/_controller$/, '')
    else
      @testing
    end
  end

  def get(thing, *args)
    if thing.is_a?(Symbol)
      super("#{self.class.testing}/#{thing}", *args)
    else
      super
    end
  end

  def assert_body(body)
    assert_equal body, Array.wrap(response.body).join
  end

  def assert_status(code)
    assert_equal code, response.status
  end

  def assert_response(body, status = 200, headers = {})
    assert_body   body
    assert_status status
    headers.each do |header, value|
      assert_header header, value
    end
  end

  def assert_content_type(type)
    assert_equal type, response.headers["Content-Type"]
  end

  def assert_header(name, value)
    assert_equal value, response.headers[name]
  end
end

class ::ApplicationController < ActionController::Base
end

122 123
module ActionController
  Base.session = {
124 125 126 127
    :key         => '_testing_session',
    :secret      => '8273f16463985e2b3747dc25e30f2528'
  }
  Base.session_store = nil
128

129 130 131 132 133 134
  class << Routing
    def possible_controllers
      @@possible_controllers ||= []
    end
  end

135 136
  class Base
    include ActionController::Testing
137 138 139 140 141 142

    def self.inherited(klass)
      name = klass.name.underscore.sub(/_controller$/, '')
      ActionController::Routing.possible_controllers << name unless name.blank?
      super
    end
143 144 145 146 147 148
  end
  
  Base.view_paths = FIXTURE_LOAD_PATH
  
  class TestCase
    include TestProcess
149

150 151 152 153 154
    setup do
      ActionController::Routing::Routes.draw do |map|
        map.connect ':controller/:action/:id'
      end
    end
155

156 157 158
    def assert_template(options = {}, message = nil)
      validate_request!

159
      hax = @controller.view_context.instance_variable_get(:@_rendered)
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178

      case options
      when NilClass, String
        rendered = (hax[:template] || []).map { |t| t.identifier }
        msg = build_message(message,
                "expecting <?> but rendering with <?>",
                options, rendered.join(', '))
        assert_block(msg) do
          if options.nil?
            hax[:template].blank?
          else
            rendered.any? { |t| t.match(options) }
          end
        end
      when Hash
        if expected_partial = options[:partial]
          partials = hax[:partials]
          if expected_count = options[:count]
            found = partials.detect { |p, _| p.identifier.match(expected_partial) }
179
            actual_count = found.nil? ? 0 : found[1]
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
            msg = build_message(message,
                    "expecting ? to be rendered ? time(s) but rendered ? time(s)",
                     expected_partial, expected_count, actual_count)
            assert(actual_count == expected_count.to_i, msg)
          else
            msg = build_message(message,
                    "expecting partial <?> but action rendered <?>",
                    options[:partial], partials.keys)
            assert(partials.keys.any? { |p| p.identifier.match(expected_partial) }, msg)
          end
        else
          assert hax[:partials].empty?,
            "Expected no partials to be rendered"
        end
      end
    end
  end
end
J
Joshua Peek 已提交
198 199 200 201 202 203 204 205

class SimpleRouteCase < Rack::TestCase
  setup do
    ActionController::Routing::Routes.draw do |map|
      map.connect ':controller/:action/:id'
    end
  end
end