mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
More tests to app generator.
This commit is contained in:
@@ -24,14 +24,14 @@ module Rails::Generators
|
||||
class_option :with_dispatchers, :type => :boolean, :aliases => "-D", :default => false,
|
||||
:desc => "Add CGI/FastCGI/mod_ruby dispatchers code"
|
||||
|
||||
class_option :no_activerecord, :type => :boolean, :aliases => "-A", :default => false,
|
||||
:desc => "Do not generate ActiveRecord files"
|
||||
class_option :skip_activerecord, :type => :boolean, :aliases => "-A", :default => false,
|
||||
:desc => "Skip ActiveRecord files"
|
||||
|
||||
class_option :no_testunit, :type => :boolean, :aliases => "-U", :default => false,
|
||||
:desc => "Do not generate TestUnit files"
|
||||
class_option :skip_testunit, :type => :boolean, :aliases => "-U", :default => false,
|
||||
:desc => "Skip TestUnit files"
|
||||
|
||||
class_option :no_prototype, :type => :boolean, :aliases => "-P", :default => false,
|
||||
:desc => "Do not generate Prototype files"
|
||||
class_option :skip_prototype, :type => :boolean, :aliases => "-P", :default => false,
|
||||
:desc => "Skip Prototype files"
|
||||
|
||||
# Add Rails options
|
||||
#
|
||||
@@ -79,8 +79,8 @@ module Rails::Generators
|
||||
end
|
||||
end
|
||||
|
||||
conditions :skip_activerecord => false
|
||||
def create_activerecord_files
|
||||
return if options[:no_activerecord]
|
||||
template "config/databases/#{options[:database]}.yml", "config/database.yml"
|
||||
end
|
||||
|
||||
@@ -112,9 +112,8 @@ module Rails::Generators
|
||||
directory "public", "public", false # Non-recursive. Do small steps, so anyone can overwrite it.
|
||||
end
|
||||
|
||||
conditions :with_dispatchers => true
|
||||
def create_dispatch_files
|
||||
return unless options[:with_dispatchers]
|
||||
|
||||
copy_file "dispatchers/config.ru", "config.ru"
|
||||
|
||||
template "dispatchers/dispatch.rb", "public/dispatch.rb"
|
||||
@@ -135,8 +134,8 @@ module Rails::Generators
|
||||
directory "public/stylesheets"
|
||||
end
|
||||
|
||||
conditions :skip_prototype => false
|
||||
def create_prototype_files
|
||||
return if options[:no_prototype]
|
||||
directory "public/javascripts"
|
||||
end
|
||||
|
||||
@@ -145,8 +144,8 @@ module Rails::Generators
|
||||
chmod "script", 0755, false
|
||||
end
|
||||
|
||||
conditions :skip_testunit => false
|
||||
def create_test_files
|
||||
return if options[:no_testunit]
|
||||
directory "test"
|
||||
end
|
||||
|
||||
@@ -170,8 +169,9 @@ module Rails::Generators
|
||||
raise Error, "The template [#{options[:template]}] could not be loaded. Error: #{e}"
|
||||
end
|
||||
|
||||
def freeze?
|
||||
freeze! if options[:freeze]
|
||||
conditions :freeze => true
|
||||
def vendorize_rails
|
||||
freeze!
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
@@ -26,7 +26,7 @@ Rails::Initializer.run do |config|
|
||||
|
||||
# Skip frameworks you're not going to use. To use Rails without a database,
|
||||
# you must remove the Active Record framework.
|
||||
<%- if options[:no_activerecord] -%>
|
||||
<%- if options[:skip_activerecord] -%>
|
||||
config.frameworks -= [ :active_record ]
|
||||
<%- else -%>
|
||||
# config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
|
||||
|
||||
@@ -37,6 +37,72 @@ class AppTest < GeneratorTestCase
|
||||
).each{ |path| assert_file path }
|
||||
end
|
||||
|
||||
def test_invalid_database_option_raises_an_error
|
||||
content = capture(:stderr){ run_generator(["-d", "unknown"]) }
|
||||
assert_match /Invalid value for \-\-database option/, content
|
||||
end
|
||||
|
||||
def test_dispatchers_are_not_added_by_default
|
||||
run_generator
|
||||
assert_no_file "config.ru"
|
||||
assert_no_file "public/dispatch.cgi"
|
||||
assert_no_file "public/dispatch.fcgi"
|
||||
end
|
||||
|
||||
def test_dispatchers_are_added_if_required
|
||||
run_generator ["--with-dispatchers"]
|
||||
assert_file "config.ru"
|
||||
assert_file "public/dispatch.cgi"
|
||||
assert_file "public/dispatch.fcgi"
|
||||
end
|
||||
|
||||
def test_config_database_is_added_by_default
|
||||
run_generator
|
||||
assert_file "config/database.yml", /sqlite3/
|
||||
end
|
||||
|
||||
def test_config_database_is_not_added_if_skip_activerecord_is_given
|
||||
run_generator ["--skip-activerecord"]
|
||||
assert_no_file "config/database.yml"
|
||||
end
|
||||
|
||||
def test_activerecord_is_removed_from_frameworks_if_skip_activerecord_is_given
|
||||
run_generator ["--skip-activerecord"]
|
||||
assert_file "config/environment.rb", /config\.frameworks \-= \[ :active_record \]/
|
||||
end
|
||||
|
||||
def test_prototype_and_test_unit_are_added_by_default
|
||||
run_generator
|
||||
assert_file "public/javascripts/prototype.js"
|
||||
assert_file "test"
|
||||
end
|
||||
|
||||
def test_prototype_and_test_unit_are_skipped_if_required
|
||||
run_generator ["--skip-prototype", "--skip-testunit"]
|
||||
assert_no_file "public/javascripts/prototype.js"
|
||||
assert_no_file "test"
|
||||
end
|
||||
|
||||
def test_shebang_is_added_to_files
|
||||
run_generator ["--ruby", "foo/bar/baz"]
|
||||
|
||||
%w(
|
||||
about
|
||||
console
|
||||
dbconsole
|
||||
destroy
|
||||
generate
|
||||
plugin
|
||||
runner
|
||||
server
|
||||
).each { |path| assert_file "script/#{path}", /#!foo\/bar\/baz/ }
|
||||
end
|
||||
|
||||
def test_rails_is_vendorized_if_freeze_is_supplied
|
||||
generator(:freeze => true, :database => "sqlite3").expects(:run).with("rake rails:freeze:edge", false)
|
||||
silence(:stdout){ generator.invoke(:all) }
|
||||
end
|
||||
|
||||
def test_template_raises_an_error_with_invalid_path
|
||||
content = capture(:stderr){ run_generator(["-m", "non/existant/path"]) }
|
||||
assert_match /The template \[.*\] could not be loaded/, content
|
||||
|
||||
@@ -47,4 +47,9 @@ class GeneratorTestCase < Test::Unit::TestCase
|
||||
assert_match content, File.read(absolute)
|
||||
end
|
||||
end
|
||||
|
||||
def assert_no_file(relative, content=nil)
|
||||
absolute = File.join(destination_root, relative)
|
||||
assert !File.exists?(absolute)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user