abstract_unit.rb 5.3 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
require 'bundler_helper'
10
ensure_requirable %w( rack rack/test sqlite3 )
11

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

D
Initial  
David Heinemeier Hansson 已提交
14
require 'test/unit'
15 16
require 'active_support'
require 'active_support/test_case'
J
Joshua Peek 已提交
17
require 'abstract_controller'
18
require 'action_controller'
J
Joshua Peek 已提交
19 20 21 22
require 'action_view'
require 'action_view/base'
require 'action_dispatch'
require 'active_model'
23
require 'fixture_template'
24
require 'action_controller/testing/process'
25
require 'action_controller/testing/integration'
J
Joshua Peek 已提交
26
require 'action_view/test_case'
27
require 'active_support/dependencies'
D
Initial  
David Heinemeier Hansson 已提交
28

29 30
begin
  require 'ruby-debug'
J
Jeremy Kemper 已提交
31
  Debugger.settings[:autoeval] = true
32
  Debugger.start
33 34 35
rescue LoadError
  # Debugging disabled. `gem install ruby-debug` to enable.
end
36

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

39
ActiveSupport::Dependencies.hook!
40

41 42 43
# Show backtraces for deprecated behavior for quicker cleanup.
ActiveSupport::Deprecation.debug = true

J
Joshua Peek 已提交
44 45
# Register danish language for testing
I18n.backend.store_translations 'da', {}
46
I18n.backend.store_translations 'pt-BR', {}
47
ORIGINAL_LOCALES = I18n.available_locales.map {|locale| locale.to_s }.sort
J
Joshua Peek 已提交
48

Y
Yehuda Katz + Carl Lerche 已提交
49
FIXTURE_LOAD_PATH = File.join(File.dirname(__FILE__), 'fixtures')
50 51 52 53 54 55 56 57 58 59 60

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

J
Joshua Peek 已提交
61 62 63 64 65 66 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
# 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

116 117
module ActionController
  Base.session = {
118 119 120 121
    :key         => '_testing_session',
    :secret      => '8273f16463985e2b3747dc25e30f2528'
  }
  Base.session_store = nil
122

123 124 125 126 127 128
  class << Routing
    def possible_controllers
      @@possible_controllers ||= []
    end
  end

129 130
  class Base
    include ActionController::Testing
131 132 133 134 135 136

    def self.inherited(klass)
      name = klass.name.underscore.sub(/_controller$/, '')
      ActionController::Routing.possible_controllers << name unless name.blank?
      super
    end
137 138 139 140 141 142
  end
  
  Base.view_paths = FIXTURE_LOAD_PATH
  
  class TestCase
    include TestProcess
143

144 145 146 147 148
    setup do
      ActionController::Routing::Routes.draw do |map|
        map.connect ':controller/:action/:id'
      end
    end
149

150 151 152
    def assert_template(options = {}, message = nil)
      validate_request!

153
      hax = @controller.view_context.instance_variable_get(:@_rendered)
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172

      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) }
173
            actual_count = found.nil? ? 0 : found[1]
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
            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 已提交
192 193 194 195 196 197 198 199

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