From 94a83007b60f6e7cdadd05513ccda9bfe689c719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 19 Jun 2009 12:42:17 +0200 Subject: Kick boot_test back to life. --- railties/test/boot_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'railties/test') diff --git a/railties/test/boot_test.rb b/railties/test/boot_test.rb index 2dd68857c3..02c7b461f7 100644 --- a/railties/test/boot_test.rb +++ b/railties/test/boot_test.rb @@ -1,6 +1,6 @@ require 'abstract_unit' require 'initializer' -require "#{File.dirname(__FILE__)}/../environments/boot" +require "#{File.dirname(__FILE__)}/../lib/generator/templates/app/config/boot" require 'rails/gem_dependency' class BootTest < Test::Unit::TestCase -- cgit v1.2.3 From 98adc9a42e856b59952ba1513361efae5175e52a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 19 Jun 2009 12:43:00 +0200 Subject: Secret key generator. You are gone. --- railties/test/secret_key_generation_test.rb | 38 ----------------------------- 1 file changed, 38 deletions(-) delete mode 100644 railties/test/secret_key_generation_test.rb (limited to 'railties/test') diff --git a/railties/test/secret_key_generation_test.rb b/railties/test/secret_key_generation_test.rb deleted file mode 100644 index 2c7c3d5dfe..0000000000 --- a/railties/test/secret_key_generation_test.rb +++ /dev/null @@ -1,38 +0,0 @@ -require 'abstract_unit' - -# Must set before requiring generator libs. -if defined?(RAILS_ROOT) - RAILS_ROOT.replace "#{File.dirname(__FILE__)}/fixtures" -else - RAILS_ROOT = "#{File.dirname(__FILE__)}/fixtures" -end - -$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib" - -require 'initializer' - -# Mocks out the configuration -module Rails - def self.configuration - Rails::Configuration.new - end -end - -require 'rails_generator' -require 'rails_generator/secret_key_generator' -require 'rails_generator/generators/applications/app/app_generator' - -class SecretKeyGenerationTest < ActiveSupport::TestCase - SECRET_KEY_MIN_LENGTH = 128 - APP_NAME = "foo" - - def setup - @generator = Rails::SecretKeyGenerator.new(APP_NAME) - end - - def test_secret_key_generation - assert_deprecated /ActiveSupport::SecureRandom\.hex\(64\)/ do - assert @generator.generate_secret.length >= SECRET_KEY_MIN_LENGTH - end - end -end -- cgit v1.2.3 From 9dd1e2f2b08ddf591b5fcc5848d404b0c14c4949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 19 Jun 2009 13:13:46 +0200 Subject: Starting test structure. --- railties/test/generator/actions_test.rb | 218 +++++++++++++++++++++++ railties/test/generator/generator_test_helper.rb | 38 ++++ 2 files changed, 256 insertions(+) create mode 100644 railties/test/generator/actions_test.rb create mode 100644 railties/test/generator/generator_test_helper.rb (limited to 'railties/test') diff --git a/railties/test/generator/actions_test.rb b/railties/test/generator/actions_test.rb new file mode 100644 index 0000000000..cdcc386aa9 --- /dev/null +++ b/railties/test/generator/actions_test.rb @@ -0,0 +1,218 @@ +require 'abstract_unit' +require 'generator/generator_test_helper' + +class RailsTemplateRunnerTest < GeneratorTestCase + def setup + super + + capture(:stdout) { Rails::Generators::App.start [destination_root] } + + @git_plugin_uri = 'git://github.com/technoweenie/restful-authentication.git' + @svn_plugin_uri = 'svn://svnhub.com/technoweenie/restful-authentication/trunk' + end + + def teardown + super + end + +# def teardown +# super +# rm_rf "#{RAILS_ROOT}/README" +# rm_rf "#{RAILS_ROOT}/Rakefile" +# rm_rf "#{RAILS_ROOT}/doc" +# rm_rf "#{RAILS_ROOT}/lib" +# rm_rf "#{RAILS_ROOT}/log" +# rm_rf "#{RAILS_ROOT}/script" +# rm_rf "#{RAILS_ROOT}/vendor" +# rm_rf "#{RAILS_ROOT}/tmp" +# rm_rf "#{RAILS_ROOT}/Capfile" +# rm_rf @template_path +# end + +# def test_initialize_should_load_template +# Rails::TemplateRunner.any_instance.expects(:load_template).with(@template_path) +# silence_generator do +# Rails::TemplateRunner.new(@template_path, RAILS_ROOT) +# end +# end + +# def test_initialize_should_raise_error_on_missing_template_file +# assert_raise(RuntimeError) do +# silence_generator do +# Rails::TemplateRunner.new('non/existent/path/to/template.rb', RAILS_ROOT) +# end +# end +# end + +# def test_file_should_write_data_to_file_path +# run_template_method(:file, 'lib/test_file.rb', 'heres test data') +# assert_generated_file_with_data 'lib/test_file.rb', 'heres test data' +# end + +# def test_file_should_write_block_contents_to_file_path +# run_template_method(:file, 'lib/test_file.rb') { 'heres block data' } +# assert_generated_file_with_data 'lib/test_file.rb', 'heres block data' +# end + +# def test_plugin_with_git_option_should_run_plugin_install +# expects_run_ruby_script_with_command("script/plugin install #{@git_plugin_uri}") +# run_template_method(:plugin, 'restful-authentication', :git => @git_plugin_uri) +# end + +# def test_plugin_with_svn_option_should_run_plugin_install +# expects_run_ruby_script_with_command("script/plugin install #{@svn_plugin_uri}") +# run_template_method(:plugin, 'restful-authentication', :svn => @svn_plugin_uri) +# end + +# def test_plugin_with_git_option_and_submodule_should_use_git_scm +# Rails::Git.expects(:run).with("submodule add #{@git_plugin_uri} vendor/plugins/rest_auth") +# run_template_method(:plugin, 'rest_auth', :git => @git_plugin_uri, :submodule => true) +# end + +# def test_plugin_with_no_options_should_skip_method +# Rails::TemplateRunner.any_instance.expects(:run).never +# run_template_method(:plugin, 'rest_auth', {}) +# end + +# def test_gem_should_put_gem_dependency_in_enviroment +# run_template_method(:gem, 'will-paginate') +# assert_rails_initializer_includes("config.gem 'will-paginate'") +# end + +# def test_gem_with_options_should_include_options_in_gem_dependency_in_environment +# run_template_method(:gem, 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com') +# assert_rails_initializer_includes("config.gem 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com'") +# end + +# def test_gem_with_env_string_should_put_gem_dependency_in_specified_environment +# run_template_method(:gem, 'rspec', :env => 'test') +# assert_generated_file_with_data('config/environments/test.rb', "config.gem 'rspec'", 'test') +# end + +# def test_gem_with_env_array_should_put_gem_dependency_in_specified_environments +# run_template_method(:gem, 'quietbacktrace', :env => %w[ development test ]) +# assert_generated_file_with_data('config/environments/development.rb', "config.gem 'quietbacktrace'") +# assert_generated_file_with_data('config/environments/test.rb', "config.gem 'quietbacktrace'") +# end + +# def test_gem_with_lib_option_set_to_false_should_put_gem_dependency_in_enviroment_correctly +# run_template_method(:gem, 'mislav-will-paginate', :lib => false, :source => 'http://gems.github.com') +# assert_rails_initializer_includes("config.gem 'mislav-will-paginate', :lib => false, :source => 'http://gems.github.com'") +# end + +# def test_environment_should_include_data_in_environment_initializer_block +# load_paths = 'config.load_paths += %w["#{RAILS_ROOT}/app/extras"]' +# run_template_method(:environment, load_paths) +# assert_rails_initializer_includes(load_paths) +# end + +# def test_environment_with_block_should_include_block_contents_in_environment_initializer_block +# run_template_method(:environment) do +# '# This wont be added' +# '# This will be added' +# end +# assert_rails_initializer_includes('# This will be added') +# end + +# def test_git_with_symbol_should_run_command_using_git_scm +# Rails::Git.expects(:run).once.with('init') +# run_template_method(:git, :init) +# end + +# def test_git_with_hash_should_run_each_command_using_git_scm +# Rails::Git.expects(:run).times(2) +# run_template_method(:git, {:init => '', :add => '.'}) +# end + +# def test_vendor_should_write_data_to_file_in_vendor +# run_template_method(:vendor, 'vendor_file.rb', '# vendor data') +# assert_generated_file_with_data('vendor/vendor_file.rb', '# vendor data') +# end + +# def test_lib_should_write_data_to_file_in_lib +# run_template_method(:lib, 'my_library.rb', 'class MyLibrary') +# assert_generated_file_with_data('lib/my_library.rb', 'class MyLibrary') +# end + +# def test_rakefile_should_write_date_to_file_in_lib_tasks +# run_template_method(:rakefile, 'myapp.rake', 'task :run => [:environment]') +# assert_generated_file_with_data('lib/tasks/myapp.rake', 'task :run => [:environment]') +# end + +# def test_initializer_should_write_date_to_file_in_config_initializers +# run_template_method(:initializer, 'constants.rb', 'MY_CONSTANT = 42') +# assert_generated_file_with_data('config/initializers/constants.rb', 'MY_CONSTANT = 42') +# end + +# def test_generate_should_run_script_generate_with_argument_and_options +# expects_run_ruby_script_with_command('script/generate model MyModel') +# run_template_method(:generate, 'model', 'MyModel') +# end + +# def test_rake_should_run_rake_command_with_development_env +# expects_run_with_command('rake log:clear RAILS_ENV=development') +# run_template_method(:rake, 'log:clear') +# end + +# def test_rake_with_env_option_should_run_rake_command_in_env +# expects_run_with_command('rake log:clear RAILS_ENV=production') +# run_template_method(:rake, 'log:clear', :env => 'production') +# end + +# def test_rake_with_sudo_option_should_run_rake_command_with_sudo +# expects_run_with_command('sudo rake log:clear RAILS_ENV=development') +# run_template_method(:rake, 'log:clear', :sudo => true) +# end + +# def test_capify_should_run_the_capify_command +# expects_run_with_command('capify .') +# run_template_method(:capify!) +# end + +# def test_freeze_should_freeze_rails_edge +# expects_run_with_command('rake rails:freeze:edge') +# run_template_method(:freeze!) +# end + +# def test_route_should_add_data_to_the_routes_block_in_config_routes +# route_command = "map.route '/login', :controller => 'sessions', :action => 'new'" +# run_template_method(:route, route_command) +# assert_generated_file_with_data 'config/routes.rb', route_command +# end + +# def test_run_ruby_script_should_add_ruby_to_command_in_win32_environment +# ruby_command = RUBY_PLATFORM =~ /win32/ ? 'ruby ' : '' +# expects_run_with_command("#{ruby_command}script/generate model MyModel") +# run_template_method(:generate, 'model', 'MyModel') +# end + +# protected +# def run_template_method(method_name, *args, &block) +# silence_generator do +# @template_runner = Rails::TemplateRunner.new(@template_path, RAILS_ROOT) +# @template_runner.send(method_name, *args, &block) +# end +# end + +# def expects_run_with_command(command) +# Rails::TemplateRunner.any_instance.stubs(:run).once.with(command, false) +# end + +# def expects_run_ruby_script_with_command(command) +# Rails::TemplateRunner.any_instance.stubs(:run_ruby_script).once.with(command,false) +# end + +# def assert_rails_initializer_includes(data, message = nil) +# message ||= "Rails::Initializer should include #{data}" +# assert_generated_file 'config/environment.rb' do |body| +# assert_match(/#{Regexp.escape("Rails::Initializer.run do |config|")}.+#{Regexp.escape(data)}.+end/m, body, message) +# end +# end + +# def assert_generated_file_with_data(file, data, message = nil) +# message ||= "#{file} should include '#{data}'" +# assert_generated_file(file) do |file| +# assert_match(/#{Regexp.escape(data)}/,file, message) +# end +# end +end diff --git a/railties/test/generator/generator_test_helper.rb b/railties/test/generator/generator_test_helper.rb new file mode 100644 index 0000000000..251a7868bc --- /dev/null +++ b/railties/test/generator/generator_test_helper.rb @@ -0,0 +1,38 @@ +require 'test/unit' +require 'fileutils' + +$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" + +# For this while, let's load all generators by hand +require 'generator/generators/app' + +class GeneratorTestCase < Test::Unit::TestCase + include FileUtils + + def destination_root + "#{File.dirname(__FILE__)}/../fixtures/tmp" + end + + def setup + mkdir_p(destination_root) + rm_rf(destination_root) + end + + def test_truth + # don't complain, test/unit + end + + def capture(stream) + begin + stream = stream.to_s + eval "$#{stream} = StringIO.new" + yield + result = eval("$#{stream}").string + ensure + eval("$#{stream} = #{stream.upcase}") + end + + result + end + alias :silence :capture +end -- cgit v1.2.3 From 5b8fe9c4c72e8e33d7b595b94b127b96c7240247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 19 Jun 2009 16:08:03 +0200 Subject: Moving tests to new generators schema. --- railties/test/generator/actions_test.rb | 377 +++++++++++------------ railties/test/generator/generator_test_helper.rb | 14 +- 2 files changed, 185 insertions(+), 206 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generator/actions_test.rb b/railties/test/generator/actions_test.rb index cdcc386aa9..4977765d40 100644 --- a/railties/test/generator/actions_test.rb +++ b/railties/test/generator/actions_test.rb @@ -1,218 +1,185 @@ require 'abstract_unit' require 'generator/generator_test_helper' -class RailsTemplateRunnerTest < GeneratorTestCase +class ActionsTest < GeneratorTestCase def setup super - capture(:stdout) { Rails::Generators::App.start [destination_root] } - @git_plugin_uri = 'git://github.com/technoweenie/restful-authentication.git' @svn_plugin_uri = 'svn://svnhub.com/technoweenie/restful-authentication/trunk' end - def teardown - super + def test_apply_loads_a_template_and_evaluates_it + template = <<-TEMPLATE + @foo = "FOO" + TEMPLATE + template.instance_eval "def read; self; end" # Make the string respond to read + + generator.expects(:open).with("http://gist.github.com/103208.txt").returns(template) + action :apply, "http://gist.github.com/103208.txt" + assert_equal generator.instance_variable_get("@foo"), "FOO" + end + + def test_file_should_write_data_to_file_path + action :file, 'lib/test_file.rb', 'heres test data' + assert_file 'lib/test_file.rb', 'heres test data' + end + + def test_file_should_write_block_contents_to_file_path + action(:file, 'lib/test_file.rb'){ 'heres block data' } + assert_file 'lib/test_file.rb', 'heres block data' + end + + def test_plugin_with_git_option_should_run_plugin_install + generator.expects(:run).once.with("ruby script/plugin install #{@git_plugin_uri}", false) + action :plugin, 'restful-authentication', :git => @git_plugin_uri + end + + def test_plugin_with_svn_option_should_run_plugin_install + generator.expects(:run).once.with("ruby script/plugin install #{@svn_plugin_uri}", false) + action :plugin, 'restful-authentication', :svn => @svn_plugin_uri + end + + def test_plugin_with_git_option_and_submodule_should_use_git_scm + generator.expects(:run).with("git submodule add #{@git_plugin_uri} vendor/plugins/rest_auth", false) + action :plugin, 'rest_auth', :git => @git_plugin_uri, :submodule => true + end + + def test_plugin_with_no_options_should_skip_method + generator.expects(:run).never + action :plugin, 'rest_auth', {} + end + + def test_gem_should_put_gem_dependency_in_enviroment + run_generator + action :gem, 'will-paginate' + assert_file 'config/environment.rb', /config\.gem 'will\-paginate'/ + end + + def test_gem_with_options_should_include_options_in_gem_dependency_in_environment + run_generator + action :gem, 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com' + + regexp = /#{Regexp.escape("config.gem 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com'")}/ + assert_file 'config/environment.rb', regexp + end + + def test_gem_with_env_string_should_put_gem_dependency_in_specified_environment + run_generator + action :gem, 'rspec', :env => 'test' + assert_file 'config/environments/test.rb', /config\.gem 'rspec'/ + end + + def test_gem_with_env_array_should_put_gem_dependency_in_specified_environments + run_generator + action :gem, 'quietbacktrace', :env => %w[ development test ] + assert_file 'config/environments/development.rb', /config\.gem 'quietbacktrace'/ + assert_file 'config/environments/test.rb', /config\.gem 'quietbacktrace'/ + end + + def test_gem_with_lib_option_set_to_false_should_put_gem_dependency_in_enviroment_correctly + run_generator + action :gem, 'mislav-will-paginate', :lib => false + assert_file 'config/environment.rb', /config\.gem 'mislav\-will\-paginate'\, :lib => false/ + end + + def test_environment_should_include_data_in_environment_initializer_block + run_generator + load_paths = 'config.load_paths += %w["#{RAILS_ROOT}/app/extras"]' + action :environment, load_paths + assert_file 'config/environment.rb', /#{Regexp.escape(load_paths)}/ + end + + def test_environment_with_block_should_include_block_contents_in_environment_initializer_block + run_generator + + action :environment do + '# This wont be added' + '# This will be added' + end + + assert_file 'config/environment.rb', /# This will be added/ + end + + def test_git_with_symbol_should_run_command_using_git_scm + generator.expects(:run).once.with('git init') + action :git, :init + end + + def test_git_with_hash_should_run_each_command_using_git_scm + generator.expects(:run).times(2) + action :git, :rm => 'README', :add => '.' + end + + def test_vendor_should_write_data_to_file_in_vendor + action :vendor, 'vendor_file.rb', '# vendor data' + assert_file 'vendor/vendor_file.rb', '# vendor data' + end + + def test_lib_should_write_data_to_file_in_lib + action :lib, 'my_library.rb', 'class MyLibrary' + assert_file 'lib/my_library.rb', 'class MyLibrary' + end + + def test_rakefile_should_write_date_to_file_in_lib_tasks + action :rakefile, 'myapp.rake', 'task :run => [:environment]' + assert_file 'lib/tasks/myapp.rake', 'task :run => [:environment]' + end + + def test_initializer_should_write_date_to_file_in_config_initializers + action :initializer, 'constants.rb', 'MY_CONSTANT = 42' + assert_file 'config/initializers/constants.rb', 'MY_CONSTANT = 42' + end + + def test_generate_should_run_script_generate_with_argument_and_options + generator.expects(:run).once.with('ruby script/generate model MyModel', false) + action :generate, 'model', 'MyModel' end -# def teardown -# super -# rm_rf "#{RAILS_ROOT}/README" -# rm_rf "#{RAILS_ROOT}/Rakefile" -# rm_rf "#{RAILS_ROOT}/doc" -# rm_rf "#{RAILS_ROOT}/lib" -# rm_rf "#{RAILS_ROOT}/log" -# rm_rf "#{RAILS_ROOT}/script" -# rm_rf "#{RAILS_ROOT}/vendor" -# rm_rf "#{RAILS_ROOT}/tmp" -# rm_rf "#{RAILS_ROOT}/Capfile" -# rm_rf @template_path -# end - -# def test_initialize_should_load_template -# Rails::TemplateRunner.any_instance.expects(:load_template).with(@template_path) -# silence_generator do -# Rails::TemplateRunner.new(@template_path, RAILS_ROOT) -# end -# end - -# def test_initialize_should_raise_error_on_missing_template_file -# assert_raise(RuntimeError) do -# silence_generator do -# Rails::TemplateRunner.new('non/existent/path/to/template.rb', RAILS_ROOT) -# end -# end -# end - -# def test_file_should_write_data_to_file_path -# run_template_method(:file, 'lib/test_file.rb', 'heres test data') -# assert_generated_file_with_data 'lib/test_file.rb', 'heres test data' -# end - -# def test_file_should_write_block_contents_to_file_path -# run_template_method(:file, 'lib/test_file.rb') { 'heres block data' } -# assert_generated_file_with_data 'lib/test_file.rb', 'heres block data' -# end - -# def test_plugin_with_git_option_should_run_plugin_install -# expects_run_ruby_script_with_command("script/plugin install #{@git_plugin_uri}") -# run_template_method(:plugin, 'restful-authentication', :git => @git_plugin_uri) -# end - -# def test_plugin_with_svn_option_should_run_plugin_install -# expects_run_ruby_script_with_command("script/plugin install #{@svn_plugin_uri}") -# run_template_method(:plugin, 'restful-authentication', :svn => @svn_plugin_uri) -# end - -# def test_plugin_with_git_option_and_submodule_should_use_git_scm -# Rails::Git.expects(:run).with("submodule add #{@git_plugin_uri} vendor/plugins/rest_auth") -# run_template_method(:plugin, 'rest_auth', :git => @git_plugin_uri, :submodule => true) -# end - -# def test_plugin_with_no_options_should_skip_method -# Rails::TemplateRunner.any_instance.expects(:run).never -# run_template_method(:plugin, 'rest_auth', {}) -# end - -# def test_gem_should_put_gem_dependency_in_enviroment -# run_template_method(:gem, 'will-paginate') -# assert_rails_initializer_includes("config.gem 'will-paginate'") -# end - -# def test_gem_with_options_should_include_options_in_gem_dependency_in_environment -# run_template_method(:gem, 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com') -# assert_rails_initializer_includes("config.gem 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com'") -# end - -# def test_gem_with_env_string_should_put_gem_dependency_in_specified_environment -# run_template_method(:gem, 'rspec', :env => 'test') -# assert_generated_file_with_data('config/environments/test.rb', "config.gem 'rspec'", 'test') -# end - -# def test_gem_with_env_array_should_put_gem_dependency_in_specified_environments -# run_template_method(:gem, 'quietbacktrace', :env => %w[ development test ]) -# assert_generated_file_with_data('config/environments/development.rb', "config.gem 'quietbacktrace'") -# assert_generated_file_with_data('config/environments/test.rb', "config.gem 'quietbacktrace'") -# end - -# def test_gem_with_lib_option_set_to_false_should_put_gem_dependency_in_enviroment_correctly -# run_template_method(:gem, 'mislav-will-paginate', :lib => false, :source => 'http://gems.github.com') -# assert_rails_initializer_includes("config.gem 'mislav-will-paginate', :lib => false, :source => 'http://gems.github.com'") -# end - -# def test_environment_should_include_data_in_environment_initializer_block -# load_paths = 'config.load_paths += %w["#{RAILS_ROOT}/app/extras"]' -# run_template_method(:environment, load_paths) -# assert_rails_initializer_includes(load_paths) -# end - -# def test_environment_with_block_should_include_block_contents_in_environment_initializer_block -# run_template_method(:environment) do -# '# This wont be added' -# '# This will be added' -# end -# assert_rails_initializer_includes('# This will be added') -# end - -# def test_git_with_symbol_should_run_command_using_git_scm -# Rails::Git.expects(:run).once.with('init') -# run_template_method(:git, :init) -# end - -# def test_git_with_hash_should_run_each_command_using_git_scm -# Rails::Git.expects(:run).times(2) -# run_template_method(:git, {:init => '', :add => '.'}) -# end - -# def test_vendor_should_write_data_to_file_in_vendor -# run_template_method(:vendor, 'vendor_file.rb', '# vendor data') -# assert_generated_file_with_data('vendor/vendor_file.rb', '# vendor data') -# end - -# def test_lib_should_write_data_to_file_in_lib -# run_template_method(:lib, 'my_library.rb', 'class MyLibrary') -# assert_generated_file_with_data('lib/my_library.rb', 'class MyLibrary') -# end - -# def test_rakefile_should_write_date_to_file_in_lib_tasks -# run_template_method(:rakefile, 'myapp.rake', 'task :run => [:environment]') -# assert_generated_file_with_data('lib/tasks/myapp.rake', 'task :run => [:environment]') -# end - -# def test_initializer_should_write_date_to_file_in_config_initializers -# run_template_method(:initializer, 'constants.rb', 'MY_CONSTANT = 42') -# assert_generated_file_with_data('config/initializers/constants.rb', 'MY_CONSTANT = 42') -# end - -# def test_generate_should_run_script_generate_with_argument_and_options -# expects_run_ruby_script_with_command('script/generate model MyModel') -# run_template_method(:generate, 'model', 'MyModel') -# end - -# def test_rake_should_run_rake_command_with_development_env -# expects_run_with_command('rake log:clear RAILS_ENV=development') -# run_template_method(:rake, 'log:clear') -# end - -# def test_rake_with_env_option_should_run_rake_command_in_env -# expects_run_with_command('rake log:clear RAILS_ENV=production') -# run_template_method(:rake, 'log:clear', :env => 'production') -# end - -# def test_rake_with_sudo_option_should_run_rake_command_with_sudo -# expects_run_with_command('sudo rake log:clear RAILS_ENV=development') -# run_template_method(:rake, 'log:clear', :sudo => true) -# end - -# def test_capify_should_run_the_capify_command -# expects_run_with_command('capify .') -# run_template_method(:capify!) -# end - -# def test_freeze_should_freeze_rails_edge -# expects_run_with_command('rake rails:freeze:edge') -# run_template_method(:freeze!) -# end - -# def test_route_should_add_data_to_the_routes_block_in_config_routes -# route_command = "map.route '/login', :controller => 'sessions', :action => 'new'" -# run_template_method(:route, route_command) -# assert_generated_file_with_data 'config/routes.rb', route_command -# end - -# def test_run_ruby_script_should_add_ruby_to_command_in_win32_environment -# ruby_command = RUBY_PLATFORM =~ /win32/ ? 'ruby ' : '' -# expects_run_with_command("#{ruby_command}script/generate model MyModel") -# run_template_method(:generate, 'model', 'MyModel') -# end - -# protected -# def run_template_method(method_name, *args, &block) -# silence_generator do -# @template_runner = Rails::TemplateRunner.new(@template_path, RAILS_ROOT) -# @template_runner.send(method_name, *args, &block) -# end -# end - -# def expects_run_with_command(command) -# Rails::TemplateRunner.any_instance.stubs(:run).once.with(command, false) -# end - -# def expects_run_ruby_script_with_command(command) -# Rails::TemplateRunner.any_instance.stubs(:run_ruby_script).once.with(command,false) -# end - -# def assert_rails_initializer_includes(data, message = nil) -# message ||= "Rails::Initializer should include #{data}" -# assert_generated_file 'config/environment.rb' do |body| -# assert_match(/#{Regexp.escape("Rails::Initializer.run do |config|")}.+#{Regexp.escape(data)}.+end/m, body, message) -# end -# end - -# def assert_generated_file_with_data(file, data, message = nil) -# message ||= "#{file} should include '#{data}'" -# assert_generated_file(file) do |file| -# assert_match(/#{Regexp.escape(data)}/,file, message) -# end -# end + def test_rake_should_run_rake_command_with_development_env + generator.expects(:run).once.with('rake log:clear RAILS_ENV=development', false) + action :rake, 'log:clear' + end + + def test_rake_with_env_option_should_run_rake_command_in_env + generator.expects(:run).once.with('rake log:clear RAILS_ENV=production', false) + action :rake, 'log:clear', :env => 'production' + end + + def test_rake_with_sudo_option_should_run_rake_command_with_sudo + generator.expects(:run).once.with('sudo rake log:clear RAILS_ENV=development', false) + action :rake, 'log:clear', :sudo => true + end + + def test_capify_should_run_the_capify_command + generator.expects(:run).once.with('capify .', false) + action :capify! + end + + def test_freeze_should_freeze_rails_edge + generator.expects(:run).once.with('rake rails:freeze:edge', false) + action :freeze! + end + + def test_route_should_add_data_to_the_routes_block_in_config_routes + run_generator + route_command = "map.route '/login', :controller => 'sessions', :action => 'new'" + action :route, route_command + assert_file 'config/routes.rb', /#{Regexp.escape(route_command)}/ + end + + protected + + def run_generator + silence(:stdout) { Rails::Generators::App.start [destination_root] } + end + + def generator(config={}) + @generator ||= Rails::Generators::Base.new([], {}, { :root => destination_root }.merge!(config)) + end + + def action(*args, &block) + silence(:stdout){ generator.send(*args, &block) } + end + end diff --git a/railties/test/generator/generator_test_helper.rb b/railties/test/generator/generator_test_helper.rb index 251a7868bc..a405a5cd9d 100644 --- a/railties/test/generator/generator_test_helper.rb +++ b/railties/test/generator/generator_test_helper.rb @@ -10,7 +10,7 @@ class GeneratorTestCase < Test::Unit::TestCase include FileUtils def destination_root - "#{File.dirname(__FILE__)}/../fixtures/tmp" + @destinartion_root ||= File.expand_path("#{File.dirname(__FILE__)}/../fixtures/tmp") end def setup @@ -35,4 +35,16 @@ class GeneratorTestCase < Test::Unit::TestCase result end alias :silence :capture + + def assert_file(relative, content=nil) + absolute = File.join(destination_root, relative) + assert File.exists?(absolute) + + case content + when String + assert_equal content, File.read(absolute) + when Regexp + assert_match content, File.read(absolute) + end + end end -- cgit v1.2.3 From 181feecfb9343781ac03b724a34242257f35e1e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 20 Jun 2009 15:43:25 +0200 Subject: First stub at app generators test. --- railties/test/generator/actions_test.rb | 3 +- railties/test/generator/app_test.rb | 65 +++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 railties/test/generator/app_test.rb (limited to 'railties/test') diff --git a/railties/test/generator/actions_test.rb b/railties/test/generator/actions_test.rb index 4977765d40..60db8905d7 100644 --- a/railties/test/generator/actions_test.rb +++ b/railties/test/generator/actions_test.rb @@ -4,12 +4,11 @@ require 'generator/generator_test_helper' class ActionsTest < GeneratorTestCase def setup super - @git_plugin_uri = 'git://github.com/technoweenie/restful-authentication.git' @svn_plugin_uri = 'svn://svnhub.com/technoweenie/restful-authentication/trunk' end - def test_apply_loads_a_template_and_evaluates_it + def test_apply_loads_and_evaluates_a_template template = <<-TEMPLATE @foo = "FOO" TEMPLATE diff --git a/railties/test/generator/app_test.rb b/railties/test/generator/app_test.rb new file mode 100644 index 0000000000..ab0554d0cf --- /dev/null +++ b/railties/test/generator/app_test.rb @@ -0,0 +1,65 @@ +require 'abstract_unit' +require 'generator/generator_test_helper' + +class AppTest < GeneratorTestCase + + def test_application_skeleton_is_created + run_generator + + %w( + app/controllers + app/helpers + app/models + app/views/layouts + config/environments + config/initializers + config/locales + db + doc + lib + lib/tasks + log + public/images + public/javascripts + public/stylesheets + script/performance + test/fixtures + test/functional + test/integration + test/performance + test/unit + vendor + vendor/plugins + tmp/sessions + tmp/sockets + tmp/cache + tmp/pids + ).each{ |path| assert_file path } + 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 + assert_match /non\/existant\/path/, content + end + + def test_template_is_executed_when_supplied + path = "http://gist.github.com/103208.txt" + template = %{ say "It works!" } + template.instance_eval "def read; self; end" # Make the string respond to read + + generator(:template => path, :database => "sqlite3").expects(:open).with(path).returns(template) + assert_match /It works!/, silence(:stdout){ generator.invoke(:all) } + end + + protected + + def run_generator(args=[]) + silence(:stdout) { Rails::Generators::App.start [destination_root].concat(args) } + end + + def generator(options={}) + @generator ||= Rails::Generators::App.new([destination_root], options, :root => destination_root) + end + +end -- cgit v1.2.3 From 2c3ebc00b768b9f580ce7367dd96e8f41a1420dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 20 Jun 2009 16:58:15 +0200 Subject: More tests to app generator. --- railties/test/generator/app_test.rb | 66 ++++++++++++++++++++++++ railties/test/generator/generator_test_helper.rb | 5 ++ 2 files changed, 71 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generator/app_test.rb b/railties/test/generator/app_test.rb index ab0554d0cf..431a4bc4f6 100644 --- a/railties/test/generator/app_test.rb +++ b/railties/test/generator/app_test.rb @@ -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 diff --git a/railties/test/generator/generator_test_helper.rb b/railties/test/generator/generator_test_helper.rb index a405a5cd9d..cdfd9bac0d 100644 --- a/railties/test/generator/generator_test_helper.rb +++ b/railties/test/generator/generator_test_helper.rb @@ -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 -- cgit v1.2.3 From 6dd196914c293fbc1a331e4a0bc1c06a26dded43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 20 Jun 2009 22:04:34 +0200 Subject: Remove class level conditions and ensure that RAILS_GEM_VERSION is commented when freeze. --- railties/test/generator/app_test.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'railties/test') diff --git a/railties/test/generator/app_test.rb b/railties/test/generator/app_test.rb index 431a4bc4f6..5329e27f9b 100644 --- a/railties/test/generator/app_test.rb +++ b/railties/test/generator/app_test.rb @@ -98,9 +98,10 @@ class AppTest < GeneratorTestCase ).each { |path| assert_file "script/#{path}", /#!foo\/bar\/baz/ } end - def test_rails_is_vendorized_if_freeze_is_supplied + def test_rails_is_frozen generator(:freeze => true, :database => "sqlite3").expects(:run).with("rake rails:freeze:edge", false) silence(:stdout){ generator.invoke(:all) } + assert_file 'config/environment.rb', /# RAILS_GEM_VERSION/ end def test_template_raises_an_error_with_invalid_path -- cgit v1.2.3 From f03890e151d7a8b9cc413ea9955efc95ff4fbfe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sun, 21 Jun 2009 10:06:02 +0200 Subject: Use Rails generators files organization. --- railties/test/generator/generator_test_helper.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generator/generator_test_helper.rb b/railties/test/generator/generator_test_helper.rb index cdfd9bac0d..ebd3547e5e 100644 --- a/railties/test/generator/generator_test_helper.rb +++ b/railties/test/generator/generator_test_helper.rb @@ -4,13 +4,13 @@ require 'fileutils' $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" # For this while, let's load all generators by hand -require 'generator/generators/app' +require 'generator/generators/app/app_generator' class GeneratorTestCase < Test::Unit::TestCase include FileUtils def destination_root - @destinartion_root ||= File.expand_path("#{File.dirname(__FILE__)}/../fixtures/tmp") + @destination_root ||= File.expand_path("#{File.dirname(__FILE__)}/../fixtures/tmp") end def setup -- cgit v1.2.3 From 1845675822fef4ead89b8919da56c4fadb145e56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 23 Jun 2009 14:42:59 +0200 Subject: Added metal generator. --- railties/test/generator/app_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generator/app_test.rb b/railties/test/generator/app_test.rb index 5329e27f9b..af1be03e59 100644 --- a/railties/test/generator/app_test.rb +++ b/railties/test/generator/app_test.rb @@ -122,11 +122,11 @@ class AppTest < GeneratorTestCase protected def run_generator(args=[]) - silence(:stdout) { Rails::Generators::App.start [destination_root].concat(args) } + silence(:stdout) { Rails::Generators::AppGenerator.start [destination_root].concat(args) } end def generator(options={}) - @generator ||= Rails::Generators::App.new([destination_root], options, :root => destination_root) + @generator ||= Rails::Generators::AppGenerator.new([destination_root], options, :root => destination_root) end end -- cgit v1.2.3 From d4ec091580fa8e3f58e246b37e444905ce06ac62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 23 Jun 2009 16:58:43 +0200 Subject: Removing template runner old specs. --- .../test/generators/rails_template_runner_test.rb | 216 --------------------- 1 file changed, 216 deletions(-) delete mode 100644 railties/test/generators/rails_template_runner_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/rails_template_runner_test.rb b/railties/test/generators/rails_template_runner_test.rb deleted file mode 100644 index 2da6bd59b5..0000000000 --- a/railties/test/generators/rails_template_runner_test.rb +++ /dev/null @@ -1,216 +0,0 @@ -require 'abstract_unit' -require 'generators/generator_test_helper' - -class RailsTemplateRunnerTest < GeneratorTestCase - def setup - Rails::Generator::Base.use_application_sources! - run_generator('app', [RAILS_ROOT]) - # generate empty template - @template_path = File.join(RAILS_ROOT, 'template.rb') - File.open(File.join(@template_path), 'w') {|f| f << '' } - - @git_plugin_uri = 'git://github.com/technoweenie/restful-authentication.git' - @svn_plugin_uri = 'svn://svnhub.com/technoweenie/restful-authentication/trunk' - end - - def teardown - super - rm_rf "#{RAILS_ROOT}/README" - rm_rf "#{RAILS_ROOT}/Rakefile" - rm_rf "#{RAILS_ROOT}/doc" - rm_rf "#{RAILS_ROOT}/lib" - rm_rf "#{RAILS_ROOT}/log" - rm_rf "#{RAILS_ROOT}/script" - rm_rf "#{RAILS_ROOT}/vendor" - rm_rf "#{RAILS_ROOT}/tmp" - rm_rf "#{RAILS_ROOT}/Capfile" - rm_rf @template_path - end - - def test_initialize_should_load_template - Rails::TemplateRunner.any_instance.expects(:load_template).with(@template_path) - silence_generator do - Rails::TemplateRunner.new(@template_path, RAILS_ROOT) - end - end - - def test_initialize_should_raise_error_on_missing_template_file - assert_raise(RuntimeError) do - silence_generator do - Rails::TemplateRunner.new('non/existent/path/to/template.rb', RAILS_ROOT) - end - end - end - - def test_file_should_write_data_to_file_path - run_template_method(:file, 'lib/test_file.rb', 'heres test data') - assert_generated_file_with_data 'lib/test_file.rb', 'heres test data' - end - - def test_file_should_write_block_contents_to_file_path - run_template_method(:file, 'lib/test_file.rb') { 'heres block data' } - assert_generated_file_with_data 'lib/test_file.rb', 'heres block data' - end - - def test_plugin_with_git_option_should_run_plugin_install - expects_run_ruby_script_with_command("script/plugin install #{@git_plugin_uri}") - run_template_method(:plugin, 'restful-authentication', :git => @git_plugin_uri) - end - - def test_plugin_with_svn_option_should_run_plugin_install - expects_run_ruby_script_with_command("script/plugin install #{@svn_plugin_uri}") - run_template_method(:plugin, 'restful-authentication', :svn => @svn_plugin_uri) - end - - def test_plugin_with_git_option_and_submodule_should_use_git_scm - Rails::Git.expects(:run).with("submodule add #{@git_plugin_uri} vendor/plugins/rest_auth") - run_template_method(:plugin, 'rest_auth', :git => @git_plugin_uri, :submodule => true) - end - - def test_plugin_with_no_options_should_skip_method - Rails::TemplateRunner.any_instance.expects(:run).never - run_template_method(:plugin, 'rest_auth', {}) - end - - def test_gem_should_put_gem_dependency_in_enviroment - run_template_method(:gem, 'will-paginate') - assert_rails_initializer_includes("config.gem 'will-paginate'") - end - - def test_gem_with_options_should_include_options_in_gem_dependency_in_environment - run_template_method(:gem, 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com') - assert_rails_initializer_includes("config.gem 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com'") - end - - def test_gem_with_env_string_should_put_gem_dependency_in_specified_environment - run_template_method(:gem, 'rspec', :env => 'test') - assert_generated_file_with_data('config/environments/test.rb', "config.gem 'rspec'", 'test') - end - - def test_gem_with_env_array_should_put_gem_dependency_in_specified_environments - run_template_method(:gem, 'quietbacktrace', :env => %w[ development test ]) - assert_generated_file_with_data('config/environments/development.rb', "config.gem 'quietbacktrace'") - assert_generated_file_with_data('config/environments/test.rb', "config.gem 'quietbacktrace'") - end - - def test_gem_with_lib_option_set_to_false_should_put_gem_dependency_in_enviroment_correctly - run_template_method(:gem, 'mislav-will-paginate', :lib => false, :source => 'http://gems.github.com') - assert_rails_initializer_includes("config.gem 'mislav-will-paginate', :lib => false, :source => 'http://gems.github.com'") - end - - def test_environment_should_include_data_in_environment_initializer_block - load_paths = 'config.load_paths += %w["#{RAILS_ROOT}/app/extras"]' - run_template_method(:environment, load_paths) - assert_rails_initializer_includes(load_paths) - end - - def test_environment_with_block_should_include_block_contents_in_environment_initializer_block - run_template_method(:environment) do - '# This wont be added' - '# This will be added' - end - assert_rails_initializer_includes('# This will be added') - end - - def test_git_with_symbol_should_run_command_using_git_scm - Rails::Git.expects(:run).once.with('init') - run_template_method(:git, :init) - end - - def test_git_with_hash_should_run_each_command_using_git_scm - Rails::Git.expects(:run).times(2) - run_template_method(:git, {:init => '', :add => '.'}) - end - - def test_vendor_should_write_data_to_file_in_vendor - run_template_method(:vendor, 'vendor_file.rb', '# vendor data') - assert_generated_file_with_data('vendor/vendor_file.rb', '# vendor data') - end - - def test_lib_should_write_data_to_file_in_lib - run_template_method(:lib, 'my_library.rb', 'class MyLibrary') - assert_generated_file_with_data('lib/my_library.rb', 'class MyLibrary') - end - - def test_rakefile_should_write_date_to_file_in_lib_tasks - run_template_method(:rakefile, 'myapp.rake', 'task :run => [:environment]') - assert_generated_file_with_data('lib/tasks/myapp.rake', 'task :run => [:environment]') - end - - def test_initializer_should_write_date_to_file_in_config_initializers - run_template_method(:initializer, 'constants.rb', 'MY_CONSTANT = 42') - assert_generated_file_with_data('config/initializers/constants.rb', 'MY_CONSTANT = 42') - end - - def test_generate_should_run_script_generate_with_argument_and_options - expects_run_ruby_script_with_command('script/generate model MyModel') - run_template_method(:generate, 'model', 'MyModel') - end - - def test_rake_should_run_rake_command_with_development_env - expects_run_with_command('rake log:clear RAILS_ENV=development') - run_template_method(:rake, 'log:clear') - end - - def test_rake_with_env_option_should_run_rake_command_in_env - expects_run_with_command('rake log:clear RAILS_ENV=production') - run_template_method(:rake, 'log:clear', :env => 'production') - end - - def test_rake_with_sudo_option_should_run_rake_command_with_sudo - expects_run_with_command('sudo rake log:clear RAILS_ENV=development') - run_template_method(:rake, 'log:clear', :sudo => true) - end - - def test_capify_should_run_the_capify_command - expects_run_with_command('capify .') - run_template_method(:capify!) - end - - def test_freeze_should_freeze_rails_edge - expects_run_with_command('rake rails:freeze:edge') - run_template_method(:freeze!) - end - - def test_route_should_add_data_to_the_routes_block_in_config_routes - route_command = "map.route '/login', :controller => 'sessions', :action => 'new'" - run_template_method(:route, route_command) - assert_generated_file_with_data 'config/routes.rb', route_command - end - - def test_run_ruby_script_should_add_ruby_to_command_in_win32_environment - ruby_command = RUBY_PLATFORM =~ /win32/ ? 'ruby ' : '' - expects_run_with_command("#{ruby_command}script/generate model MyModel") - run_template_method(:generate, 'model', 'MyModel') - end - - protected - def run_template_method(method_name, *args, &block) - silence_generator do - @template_runner = Rails::TemplateRunner.new(@template_path, RAILS_ROOT) - @template_runner.send(method_name, *args, &block) - end - end - - def expects_run_with_command(command) - Rails::TemplateRunner.any_instance.stubs(:run).once.with(command, false) - end - - def expects_run_ruby_script_with_command(command) - Rails::TemplateRunner.any_instance.stubs(:run_ruby_script).once.with(command,false) - end - - def assert_rails_initializer_includes(data, message = nil) - message ||= "Rails::Initializer should include #{data}" - assert_generated_file 'config/environment.rb' do |body| - assert_match(/#{Regexp.escape("Rails::Initializer.run do |config|")}.+#{Regexp.escape(data)}.+end/m, body, message) - end - end - - def assert_generated_file_with_data(file, data, message = nil) - message ||= "#{file} should include '#{data}'" - assert_generated_file(file) do |file| - assert_match(/#{Regexp.escape(data)}/,file, message) - end - end -end \ No newline at end of file -- cgit v1.2.3 From 4494a752c3c568c65fa899c54486153a1a5fa187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 23 Jun 2009 19:10:42 +0200 Subject: Change current sstructure. --- railties/test/generator/actions_test.rb | 184 ------------- railties/test/generator/app_test.rb | 132 --------- railties/test/generator/generator_test_helper.rb | 55 ---- railties/test/generators/actions_test.rb | 184 +++++++++++++ railties/test/generators/app_test.rb | 132 +++++++++ railties/test/generators/generator_test_helper.rb | 305 ++------------------- .../generators/rails_controller_generator_test.rb | 44 --- .../test/generators/rails_helper_generator_test.rb | 36 --- .../test/generators/rails_mailer_generator_test.rb | 29 -- .../test/generators/rails_model_generator_test.rb | 48 ---- .../rails_model_subclass_generator_test.rb | 15 - .../generators/rails_resource_generator_test.rb | 29 -- .../generators/rails_scaffold_generator_test.rb | 150 ---------- .../test/rails_generator/generator_test_helper.rb | 303 ++++++++++++++++++++ .../rails_controller_generator_test.rb | 44 +++ .../rails_generator/rails_helper_generator_test.rb | 36 +++ .../rails_generator/rails_mailer_generator_test.rb | 29 ++ .../rails_generator/rails_model_generator_test.rb | 48 ++++ .../rails_model_subclass_generator_test.rb | 15 + .../rails_resource_generator_test.rb | 29 ++ .../rails_scaffold_generator_test.rb | 150 ++++++++++ 21 files changed, 999 insertions(+), 998 deletions(-) delete mode 100644 railties/test/generator/actions_test.rb delete mode 100644 railties/test/generator/app_test.rb delete mode 100644 railties/test/generator/generator_test_helper.rb create mode 100644 railties/test/generators/actions_test.rb create mode 100644 railties/test/generators/app_test.rb delete mode 100644 railties/test/generators/rails_controller_generator_test.rb delete mode 100644 railties/test/generators/rails_helper_generator_test.rb delete mode 100644 railties/test/generators/rails_mailer_generator_test.rb delete mode 100644 railties/test/generators/rails_model_generator_test.rb delete mode 100644 railties/test/generators/rails_model_subclass_generator_test.rb delete mode 100644 railties/test/generators/rails_resource_generator_test.rb delete mode 100644 railties/test/generators/rails_scaffold_generator_test.rb create mode 100644 railties/test/rails_generator/generator_test_helper.rb create mode 100644 railties/test/rails_generator/rails_controller_generator_test.rb create mode 100644 railties/test/rails_generator/rails_helper_generator_test.rb create mode 100644 railties/test/rails_generator/rails_mailer_generator_test.rb create mode 100644 railties/test/rails_generator/rails_model_generator_test.rb create mode 100644 railties/test/rails_generator/rails_model_subclass_generator_test.rb create mode 100644 railties/test/rails_generator/rails_resource_generator_test.rb create mode 100644 railties/test/rails_generator/rails_scaffold_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generator/actions_test.rb b/railties/test/generator/actions_test.rb deleted file mode 100644 index 60db8905d7..0000000000 --- a/railties/test/generator/actions_test.rb +++ /dev/null @@ -1,184 +0,0 @@ -require 'abstract_unit' -require 'generator/generator_test_helper' - -class ActionsTest < GeneratorTestCase - def setup - super - @git_plugin_uri = 'git://github.com/technoweenie/restful-authentication.git' - @svn_plugin_uri = 'svn://svnhub.com/technoweenie/restful-authentication/trunk' - end - - def test_apply_loads_and_evaluates_a_template - template = <<-TEMPLATE - @foo = "FOO" - TEMPLATE - template.instance_eval "def read; self; end" # Make the string respond to read - - generator.expects(:open).with("http://gist.github.com/103208.txt").returns(template) - action :apply, "http://gist.github.com/103208.txt" - assert_equal generator.instance_variable_get("@foo"), "FOO" - end - - def test_file_should_write_data_to_file_path - action :file, 'lib/test_file.rb', 'heres test data' - assert_file 'lib/test_file.rb', 'heres test data' - end - - def test_file_should_write_block_contents_to_file_path - action(:file, 'lib/test_file.rb'){ 'heres block data' } - assert_file 'lib/test_file.rb', 'heres block data' - end - - def test_plugin_with_git_option_should_run_plugin_install - generator.expects(:run).once.with("ruby script/plugin install #{@git_plugin_uri}", false) - action :plugin, 'restful-authentication', :git => @git_plugin_uri - end - - def test_plugin_with_svn_option_should_run_plugin_install - generator.expects(:run).once.with("ruby script/plugin install #{@svn_plugin_uri}", false) - action :plugin, 'restful-authentication', :svn => @svn_plugin_uri - end - - def test_plugin_with_git_option_and_submodule_should_use_git_scm - generator.expects(:run).with("git submodule add #{@git_plugin_uri} vendor/plugins/rest_auth", false) - action :plugin, 'rest_auth', :git => @git_plugin_uri, :submodule => true - end - - def test_plugin_with_no_options_should_skip_method - generator.expects(:run).never - action :plugin, 'rest_auth', {} - end - - def test_gem_should_put_gem_dependency_in_enviroment - run_generator - action :gem, 'will-paginate' - assert_file 'config/environment.rb', /config\.gem 'will\-paginate'/ - end - - def test_gem_with_options_should_include_options_in_gem_dependency_in_environment - run_generator - action :gem, 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com' - - regexp = /#{Regexp.escape("config.gem 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com'")}/ - assert_file 'config/environment.rb', regexp - end - - def test_gem_with_env_string_should_put_gem_dependency_in_specified_environment - run_generator - action :gem, 'rspec', :env => 'test' - assert_file 'config/environments/test.rb', /config\.gem 'rspec'/ - end - - def test_gem_with_env_array_should_put_gem_dependency_in_specified_environments - run_generator - action :gem, 'quietbacktrace', :env => %w[ development test ] - assert_file 'config/environments/development.rb', /config\.gem 'quietbacktrace'/ - assert_file 'config/environments/test.rb', /config\.gem 'quietbacktrace'/ - end - - def test_gem_with_lib_option_set_to_false_should_put_gem_dependency_in_enviroment_correctly - run_generator - action :gem, 'mislav-will-paginate', :lib => false - assert_file 'config/environment.rb', /config\.gem 'mislav\-will\-paginate'\, :lib => false/ - end - - def test_environment_should_include_data_in_environment_initializer_block - run_generator - load_paths = 'config.load_paths += %w["#{RAILS_ROOT}/app/extras"]' - action :environment, load_paths - assert_file 'config/environment.rb', /#{Regexp.escape(load_paths)}/ - end - - def test_environment_with_block_should_include_block_contents_in_environment_initializer_block - run_generator - - action :environment do - '# This wont be added' - '# This will be added' - end - - assert_file 'config/environment.rb', /# This will be added/ - end - - def test_git_with_symbol_should_run_command_using_git_scm - generator.expects(:run).once.with('git init') - action :git, :init - end - - def test_git_with_hash_should_run_each_command_using_git_scm - generator.expects(:run).times(2) - action :git, :rm => 'README', :add => '.' - end - - def test_vendor_should_write_data_to_file_in_vendor - action :vendor, 'vendor_file.rb', '# vendor data' - assert_file 'vendor/vendor_file.rb', '# vendor data' - end - - def test_lib_should_write_data_to_file_in_lib - action :lib, 'my_library.rb', 'class MyLibrary' - assert_file 'lib/my_library.rb', 'class MyLibrary' - end - - def test_rakefile_should_write_date_to_file_in_lib_tasks - action :rakefile, 'myapp.rake', 'task :run => [:environment]' - assert_file 'lib/tasks/myapp.rake', 'task :run => [:environment]' - end - - def test_initializer_should_write_date_to_file_in_config_initializers - action :initializer, 'constants.rb', 'MY_CONSTANT = 42' - assert_file 'config/initializers/constants.rb', 'MY_CONSTANT = 42' - end - - def test_generate_should_run_script_generate_with_argument_and_options - generator.expects(:run).once.with('ruby script/generate model MyModel', false) - action :generate, 'model', 'MyModel' - end - - def test_rake_should_run_rake_command_with_development_env - generator.expects(:run).once.with('rake log:clear RAILS_ENV=development', false) - action :rake, 'log:clear' - end - - def test_rake_with_env_option_should_run_rake_command_in_env - generator.expects(:run).once.with('rake log:clear RAILS_ENV=production', false) - action :rake, 'log:clear', :env => 'production' - end - - def test_rake_with_sudo_option_should_run_rake_command_with_sudo - generator.expects(:run).once.with('sudo rake log:clear RAILS_ENV=development', false) - action :rake, 'log:clear', :sudo => true - end - - def test_capify_should_run_the_capify_command - generator.expects(:run).once.with('capify .', false) - action :capify! - end - - def test_freeze_should_freeze_rails_edge - generator.expects(:run).once.with('rake rails:freeze:edge', false) - action :freeze! - end - - def test_route_should_add_data_to_the_routes_block_in_config_routes - run_generator - route_command = "map.route '/login', :controller => 'sessions', :action => 'new'" - action :route, route_command - assert_file 'config/routes.rb', /#{Regexp.escape(route_command)}/ - end - - protected - - def run_generator - silence(:stdout) { Rails::Generators::App.start [destination_root] } - end - - def generator(config={}) - @generator ||= Rails::Generators::Base.new([], {}, { :root => destination_root }.merge!(config)) - end - - def action(*args, &block) - silence(:stdout){ generator.send(*args, &block) } - end - -end diff --git a/railties/test/generator/app_test.rb b/railties/test/generator/app_test.rb deleted file mode 100644 index af1be03e59..0000000000 --- a/railties/test/generator/app_test.rb +++ /dev/null @@ -1,132 +0,0 @@ -require 'abstract_unit' -require 'generator/generator_test_helper' - -class AppTest < GeneratorTestCase - - def test_application_skeleton_is_created - run_generator - - %w( - app/controllers - app/helpers - app/models - app/views/layouts - config/environments - config/initializers - config/locales - db - doc - lib - lib/tasks - log - public/images - public/javascripts - public/stylesheets - script/performance - test/fixtures - test/functional - test/integration - test/performance - test/unit - vendor - vendor/plugins - tmp/sessions - tmp/sockets - tmp/cache - tmp/pids - ).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_frozen - generator(:freeze => true, :database => "sqlite3").expects(:run).with("rake rails:freeze:edge", false) - silence(:stdout){ generator.invoke(:all) } - assert_file 'config/environment.rb', /# RAILS_GEM_VERSION/ - 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 - assert_match /non\/existant\/path/, content - end - - def test_template_is_executed_when_supplied - path = "http://gist.github.com/103208.txt" - template = %{ say "It works!" } - template.instance_eval "def read; self; end" # Make the string respond to read - - generator(:template => path, :database => "sqlite3").expects(:open).with(path).returns(template) - assert_match /It works!/, silence(:stdout){ generator.invoke(:all) } - end - - protected - - def run_generator(args=[]) - silence(:stdout) { Rails::Generators::AppGenerator.start [destination_root].concat(args) } - end - - def generator(options={}) - @generator ||= Rails::Generators::AppGenerator.new([destination_root], options, :root => destination_root) - end - -end diff --git a/railties/test/generator/generator_test_helper.rb b/railties/test/generator/generator_test_helper.rb deleted file mode 100644 index ebd3547e5e..0000000000 --- a/railties/test/generator/generator_test_helper.rb +++ /dev/null @@ -1,55 +0,0 @@ -require 'test/unit' -require 'fileutils' - -$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" - -# For this while, let's load all generators by hand -require 'generator/generators/app/app_generator' - -class GeneratorTestCase < Test::Unit::TestCase - include FileUtils - - def destination_root - @destination_root ||= File.expand_path("#{File.dirname(__FILE__)}/../fixtures/tmp") - end - - def setup - mkdir_p(destination_root) - rm_rf(destination_root) - end - - def test_truth - # don't complain, test/unit - end - - def capture(stream) - begin - stream = stream.to_s - eval "$#{stream} = StringIO.new" - yield - result = eval("$#{stream}").string - ensure - eval("$#{stream} = #{stream.upcase}") - end - - result - end - alias :silence :capture - - def assert_file(relative, content=nil) - absolute = File.join(destination_root, relative) - assert File.exists?(absolute) - - case content - when String - assert_equal content, File.read(absolute) - when Regexp - 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 diff --git a/railties/test/generators/actions_test.rb b/railties/test/generators/actions_test.rb new file mode 100644 index 0000000000..6030504fa3 --- /dev/null +++ b/railties/test/generators/actions_test.rb @@ -0,0 +1,184 @@ +require 'abstract_unit' +require 'generators/generator_test_helper' + +class ActionsTest < GeneratorTestCase + def setup + super + @git_plugin_uri = 'git://github.com/technoweenie/restful-authentication.git' + @svn_plugin_uri = 'svn://svnhub.com/technoweenie/restful-authentication/trunk' + end + + def test_apply_loads_and_evaluates_a_template + template = <<-TEMPLATE + @foo = "FOO" + TEMPLATE + template.instance_eval "def read; self; end" # Make the string respond to read + + generator.expects(:open).with("http://gist.github.com/103208.txt").returns(template) + action :apply, "http://gist.github.com/103208.txt" + assert_equal generator.instance_variable_get("@foo"), "FOO" + end + + def test_file_should_write_data_to_file_path + action :file, 'lib/test_file.rb', 'heres test data' + assert_file 'lib/test_file.rb', 'heres test data' + end + + def test_file_should_write_block_contents_to_file_path + action(:file, 'lib/test_file.rb'){ 'heres block data' } + assert_file 'lib/test_file.rb', 'heres block data' + end + + def test_plugin_with_git_option_should_run_plugin_install + generator.expects(:run).once.with("ruby script/plugin install #{@git_plugin_uri}", false) + action :plugin, 'restful-authentication', :git => @git_plugin_uri + end + + def test_plugin_with_svn_option_should_run_plugin_install + generator.expects(:run).once.with("ruby script/plugin install #{@svn_plugin_uri}", false) + action :plugin, 'restful-authentication', :svn => @svn_plugin_uri + end + + def test_plugin_with_git_option_and_submodule_should_use_git_scm + generator.expects(:run).with("git submodule add #{@git_plugin_uri} vendor/plugins/rest_auth", false) + action :plugin, 'rest_auth', :git => @git_plugin_uri, :submodule => true + end + + def test_plugin_with_no_options_should_skip_method + generator.expects(:run).never + action :plugin, 'rest_auth', {} + end + + def test_gem_should_put_gem_dependency_in_enviroment + run_generator + action :gem, 'will-paginate' + assert_file 'config/environment.rb', /config\.gem 'will\-paginate'/ + end + + def test_gem_with_options_should_include_options_in_gem_dependency_in_environment + run_generator + action :gem, 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com' + + regexp = /#{Regexp.escape("config.gem 'mislav-will-paginate', :lib => 'will-paginate', :source => 'http://gems.github.com'")}/ + assert_file 'config/environment.rb', regexp + end + + def test_gem_with_env_string_should_put_gem_dependency_in_specified_environment + run_generator + action :gem, 'rspec', :env => 'test' + assert_file 'config/environments/test.rb', /config\.gem 'rspec'/ + end + + def test_gem_with_env_array_should_put_gem_dependency_in_specified_environments + run_generator + action :gem, 'quietbacktrace', :env => %w[ development test ] + assert_file 'config/environments/development.rb', /config\.gem 'quietbacktrace'/ + assert_file 'config/environments/test.rb', /config\.gem 'quietbacktrace'/ + end + + def test_gem_with_lib_option_set_to_false_should_put_gem_dependency_in_enviroment_correctly + run_generator + action :gem, 'mislav-will-paginate', :lib => false + assert_file 'config/environment.rb', /config\.gem 'mislav\-will\-paginate'\, :lib => false/ + end + + def test_environment_should_include_data_in_environment_initializer_block + run_generator + load_paths = 'config.load_paths += %w["#{RAILS_ROOT}/app/extras"]' + action :environment, load_paths + assert_file 'config/environment.rb', /#{Regexp.escape(load_paths)}/ + end + + def test_environment_with_block_should_include_block_contents_in_environment_initializer_block + run_generator + + action :environment do + '# This wont be added' + '# This will be added' + end + + assert_file 'config/environment.rb', /# This will be added/ + end + + def test_git_with_symbol_should_run_command_using_git_scm + generator.expects(:run).once.with('git init') + action :git, :init + end + + def test_git_with_hash_should_run_each_command_using_git_scm + generator.expects(:run).times(2) + action :git, :rm => 'README', :add => '.' + end + + def test_vendor_should_write_data_to_file_in_vendor + action :vendor, 'vendor_file.rb', '# vendor data' + assert_file 'vendor/vendor_file.rb', '# vendor data' + end + + def test_lib_should_write_data_to_file_in_lib + action :lib, 'my_library.rb', 'class MyLibrary' + assert_file 'lib/my_library.rb', 'class MyLibrary' + end + + def test_rakefile_should_write_date_to_file_in_lib_tasks + action :rakefile, 'myapp.rake', 'task :run => [:environment]' + assert_file 'lib/tasks/myapp.rake', 'task :run => [:environment]' + end + + def test_initializer_should_write_date_to_file_in_config_initializers + action :initializer, 'constants.rb', 'MY_CONSTANT = 42' + assert_file 'config/initializers/constants.rb', 'MY_CONSTANT = 42' + end + + def test_generate_should_run_script_generate_with_argument_and_options + generator.expects(:run).once.with('ruby script/generate model MyModel', false) + action :generate, 'model', 'MyModel' + end + + def test_rake_should_run_rake_command_with_development_env + generator.expects(:run).once.with('rake log:clear RAILS_ENV=development', false) + action :rake, 'log:clear' + end + + def test_rake_with_env_option_should_run_rake_command_in_env + generator.expects(:run).once.with('rake log:clear RAILS_ENV=production', false) + action :rake, 'log:clear', :env => 'production' + end + + def test_rake_with_sudo_option_should_run_rake_command_with_sudo + generator.expects(:run).once.with('sudo rake log:clear RAILS_ENV=development', false) + action :rake, 'log:clear', :sudo => true + end + + def test_capify_should_run_the_capify_command + generator.expects(:run).once.with('capify .', false) + action :capify! + end + + def test_freeze_should_freeze_rails_edge + generator.expects(:run).once.with('rake rails:freeze:edge', false) + action :freeze! + end + + def test_route_should_add_data_to_the_routes_block_in_config_routes + run_generator + route_command = "map.route '/login', :controller => 'sessions', :action => 'new'" + action :route, route_command + assert_file 'config/routes.rb', /#{Regexp.escape(route_command)}/ + end + + protected + + def run_generator + silence(:stdout) { Rails::Generators::AppGenerator.start [destination_root] } + end + + def generator(config={}) + @generator ||= Rails::Generators::Base.new([], {}, { :root => destination_root }.merge!(config)) + end + + def action(*args, &block) + silence(:stdout){ generator.send(*args, &block) } + end + +end diff --git a/railties/test/generators/app_test.rb b/railties/test/generators/app_test.rb new file mode 100644 index 0000000000..a67f7e4926 --- /dev/null +++ b/railties/test/generators/app_test.rb @@ -0,0 +1,132 @@ +require 'abstract_unit' +require 'generators/generator_test_helper' + +class AppTest < GeneratorTestCase + + def test_application_skeleton_is_created + run_generator + + %w( + app/controllers + app/helpers + app/models + app/views/layouts + config/environments + config/initializers + config/locales + db + doc + lib + lib/tasks + log + public/images + public/javascripts + public/stylesheets + script/performance + test/fixtures + test/functional + test/integration + test/performance + test/unit + vendor + vendor/plugins + tmp/sessions + tmp/sockets + tmp/cache + tmp/pids + ).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_frozen + generator(:freeze => true, :database => "sqlite3").expects(:run).with("rake rails:freeze:edge", false) + silence(:stdout){ generator.invoke(:all) } + assert_file 'config/environment.rb', /# RAILS_GEM_VERSION/ + 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 + assert_match /non\/existant\/path/, content + end + + def test_template_is_executed_when_supplied + path = "http://gist.github.com/103208.txt" + template = %{ say "It works!" } + template.instance_eval "def read; self; end" # Make the string respond to read + + generator(:template => path, :database => "sqlite3").expects(:open).with(path).returns(template) + assert_match /It works!/, silence(:stdout){ generator.invoke(:all) } + end + + protected + + def run_generator(args=[]) + silence(:stdout) { Rails::Generators::AppGenerator.start [destination_root].concat(args) } + end + + def generator(options={}) + @generator ||= Rails::Generators::AppGenerator.new([destination_root], options, :root => destination_root) + end + +end diff --git a/railties/test/generators/generator_test_helper.rb b/railties/test/generators/generator_test_helper.rb index 01bf1c90bd..2b988bde7a 100644 --- a/railties/test/generators/generator_test_helper.rb +++ b/railties/test/generators/generator_test_helper.rb @@ -1,303 +1,56 @@ require 'test/unit' require 'fileutils' -# Mock out what we need from AR::Base -module ActiveRecord - class Base - class << self - attr_accessor :pluralize_table_names, :timestamped_migrations - end - self.pluralize_table_names = true - self.timestamped_migrations = true - end - - module ConnectionAdapters - class Column - attr_reader :name, :default, :type, :limit, :null, :sql_type, :precision, :scale - - def initialize(name, default, sql_type = nil) - @name = name - @default = default - @type = @sql_type = sql_type - end - - def human_name - @name.humanize - end - end - end -end - -# Mock up necessities from ActionView -module ActionView - module Helpers - module ActionRecordHelper; end - class InstanceTag; end - end -end - -# Set RAILS_ROOT appropriately fixture generation -tmp_dir = "#{File.dirname(__FILE__)}/../fixtures/tmp" - -if defined? RAILS_ROOT - RAILS_ROOT.replace tmp_dir -else - RAILS_ROOT = tmp_dir -end -FileUtils.mkdir_p RAILS_ROOT - $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" -require 'initializer' -# Mocks out the configuration -module Rails - def self.configuration - Rails::Configuration.new - end -end - -require 'rails_generator' +# For this while, let's load all generators by hand +require 'generators' +require 'generators/rails/app/app_generator' class GeneratorTestCase < Test::Unit::TestCase include FileUtils - def setup - ActiveRecord::Base.pluralize_table_names = true - - mkdir_p "#{RAILS_ROOT}/app/views/layouts" - mkdir_p "#{RAILS_ROOT}/config" - mkdir_p "#{RAILS_ROOT}/db" - mkdir_p "#{RAILS_ROOT}/test/fixtures" - mkdir_p "#{RAILS_ROOT}/public/stylesheets" - - File.open("#{RAILS_ROOT}/config/routes.rb", 'w') do |f| - f << "ActionController::Routing::Routes.draw do |map|\n\nend" - end + def destination_root + @destination_root ||= File.expand_path("#{File.dirname(__FILE__)}/../fixtures/tmp") end - def teardown - rm_rf "#{RAILS_ROOT}/app" - rm_rf "#{RAILS_ROOT}/test" - rm_rf "#{RAILS_ROOT}/config" - rm_rf "#{RAILS_ROOT}/db" - rm_rf "#{RAILS_ROOT}/public" + def setup + mkdir_p(destination_root) + rm_rf(destination_root) end def test_truth # don't complain, test/unit end - # Instantiates the Generator. - def build_generator(name, params) - Rails::Generator::Base.instance(name, params) - end - - # Runs the +create+ command (like the command line does). - def run_generator(name, params) - silence_generator do - build_generator(name, params).command(:create).invoke! - end - end - - # Silences the logger temporarily and returns the output as a String. - def silence_generator - logger_original = Rails::Generator::Base.logger - myout = StringIO.new - Rails::Generator::Base.logger = Rails::Generator::SimpleLogger.new(myout) - yield if block_given? - Rails::Generator::Base.logger = logger_original - myout.string - end - - # Asserts that the given controller was generated. - # It takes a name or symbol without the _controller part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_controller_for(name, parent = "ApplicationController") - assert_generated_class "app/controllers/#{name.to_s.underscore}_controller", parent do |body| - yield body if block_given? - end - end - - # Asserts that the given model was generated. - # It takes a name or symbol and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_model_for(name, parent = "ActiveRecord::Base") - assert_generated_class "app/models/#{name.to_s.underscore}", parent do |body| - yield body if block_given? - end - end - - # Asserts that the given helper was generated. - # It takes a name or symbol without the _helper part. - # The contents of the module source file is passed to a block. - def assert_generated_helper_for(name) - assert_generated_module "app/helpers/#{name.to_s.underscore}_helper" do |body| - yield body if block_given? - end - end - - # Asserts that the given functional test was generated. - # It takes a name or symbol without the _controller_test part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_functional_test_for(name, parent = "ActionController::TestCase") - assert_generated_class "test/functional/#{name.to_s.underscore}_controller_test",parent do |body| - yield body if block_given? - end - end - - # Asserts that the given helper test test was generated. - # It takes a name or symbol without the _helper_test part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_helper_test_for(name, parent = "ActionView::TestCase") - path = "test/unit/helpers/#{name.to_s.underscore}_helper_test" - # Have to pass the path without the "test/" part so that class_name_from_path will return a correct result - class_name = class_name_from_path(path.gsub(/^test\//, '')) - - assert_generated_class path,parent,class_name do |body| - yield body if block_given? - end - end - - # Asserts that the given unit test was generated. - # It takes a name or symbol without the _test part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_unit_test_for(name, parent = "ActiveSupport::TestCase") - assert_generated_class "test/unit/#{name.to_s.underscore}_test", parent do |body| - yield body if block_given? - end - end - - # Asserts that the given file was generated. - # The contents of the file is passed to a block. - def assert_generated_file(path) - assert_file_exists(path) - File.open("#{RAILS_ROOT}/#{path}") do |f| - yield f.read if block_given? - end - end - - # asserts that the given file exists - def assert_file_exists(path) - assert File.exist?("#{RAILS_ROOT}/#{path}"), - "The file '#{RAILS_ROOT}/#{path}' should exist" - end - - # Asserts that the given class source file was generated. - # It takes a path without the .rb part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_class(path, parent = nil, class_name = class_name_from_path(path)) - assert_generated_file("#{path}.rb") do |body| - assert_match /class #{class_name}#{parent.nil? ? '':" < #{parent}"}/, body, "the file '#{path}.rb' should be a class" - yield body if block_given? - end - end - - def class_name_from_path(path) - # FIXME: Sucky way to detect namespaced classes - if path.split('/').size > 3 - path =~ /\/?(\d+_)?(\w+)\/(\w+)$/ - "#{$2.camelize}::#{$3.camelize}" - else - path =~ /\/?(\d+_)?(\w+)$/ - $2.camelize - end - end - - # Asserts that the given module source file was generated. - # It takes a path without the .rb part. - # The contents of the class source file is passed to a block. - def assert_generated_module(path) - # FIXME: Sucky way to detect namespaced modules - if path.split('/').size > 3 - path =~ /\/?(\w+)\/(\w+)$/ - module_name = "#{$1.camelize}::#{$2.camelize}" - else - path =~ /\/?(\w+)$/ - module_name = $1.camelize + def capture(stream) + begin + stream = stream.to_s + eval "$#{stream} = StringIO.new" + yield + result = eval("$#{stream}").string + ensure + eval("$#{stream} = #{stream.upcase}") end - assert_generated_file("#{path}.rb") do |body| - assert_match /module #{module_name}/, body, "the file '#{path}.rb' should be a module" - yield body if block_given? - end - end - - # Asserts that the given CSS stylesheet file was generated. - # It takes a path without the .css part. - # The contents of the stylesheet source file is passed to a block. - def assert_generated_stylesheet(path) - assert_generated_file("public/stylesheets/#{path}.css") do |body| - yield body if block_given? - end - end - - # Asserts that the given YAML file was generated. - # It takes a path without the .yml part. - # The parsed YAML tree is passed to a block. - def assert_generated_yaml(path) - assert_generated_file("#{path}.yml") do |body| - yaml = YAML.load(body) - assert yaml, 'YAML data missing' - yield yaml if block_given? - end - end - - # Asserts that the given fixtures YAML file was generated. - # It takes a fixture name without the .yml part. - # The parsed YAML tree is passed to a block. - def assert_generated_fixtures_for(name) - assert_generated_yaml "test/fixtures/#{name.to_s.underscore}" do |yaml| - yield yaml if block_given? - end + result end + alias :silence :capture - # Asserts that the given views were generated. - # It takes a controller name and a list of views (including extensions). - # The body of each view is passed to a block. - def assert_generated_views_for(name, *actions) - actions.each do |action| - assert_generated_file("app/views/#{name.to_s.underscore}/#{action}") do |body| - yield body if block_given? - end - end - end - - def assert_generated_migration(name, parent = "ActiveRecord::Migration") - file = Dir.glob("#{RAILS_ROOT}/db/migrate/*_#{name.to_s.underscore}.rb").first - file = file.match(/db\/migrate\/[0-9]+_\w+/).to_s - assert_generated_class file, parent do |body| - assert_match /timestamps/, body, "should have timestamps defined" - yield body if block_given? - end - end - - # Asserts that the given migration file was not generated. - # It takes the name of the migration as a parameter. - def assert_skipped_migration(name) - migration_file = "#{RAILS_ROOT}/db/migrate/001_#{name.to_s.underscore}.rb" - assert !File.exist?(migration_file), "should not create migration #{migration_file}" - end - - # Asserts that the given resource was added to the routes. - def assert_added_route_for(name) - assert_generated_file("config/routes.rb") do |body| - assert_match /map.resources :#{name.to_s.underscore}/, body, - "should add route for :#{name.to_s.underscore}" - end - end + def assert_file(relative, content=nil) + absolute = File.join(destination_root, relative) + assert File.exists?(absolute) - # Asserts that the given methods are defined in the body. - # This does assume standard rails code conventions with regards to the source code. - # The body of each individual method is passed to a block. - def assert_has_method(body, *methods) - methods.each do |name| - assert body =~ /^ def #{name}(\(.+\))?\n((\n| .*\n)*) end/, "should have method #{name}" - yield(name, $2) if block_given? + case content + when String + assert_equal content, File.read(absolute) + when Regexp + assert_match content, File.read(absolute) end end - # Asserts that the given column is defined in the migration. - def assert_generated_column(body, name, type) - assert_match /t\.#{type.to_s} :#{name.to_s}/, body, "should have column #{name.to_s} defined" + def assert_no_file(relative, content=nil) + absolute = File.join(destination_root, relative) + assert !File.exists?(absolute) end end diff --git a/railties/test/generators/rails_controller_generator_test.rb b/railties/test/generators/rails_controller_generator_test.rb deleted file mode 100644 index 43fbe972e2..0000000000 --- a/railties/test/generators/rails_controller_generator_test.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'generators/generator_test_helper' - -module Admin -end - -class RailsControllerGeneratorTest < GeneratorTestCase - - def test_controller_generates_controller - run_generator('controller', %w(products)) - - assert_generated_controller_for :products - assert_generated_functional_test_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - end - - def test_controller_generates_namespaced_controller - run_generator('controller', %w(admin::products)) - - assert_generated_controller_for "admin::products" - assert_generated_functional_test_for "admin::products" - assert_generated_helper_for "admin::products" - assert_generated_helper_test_for "admin::products" - end - - def test_controller_generates_namespaced_and_not_namespaced_controllers - run_generator('controller', %w(products)) - - # We have to require the generated helper to show the problem because - # the test helpers just check for generated files and contents but - # do not actually load them. But they have to be loaded (as in a real environment) - # to make the second generator run fail - require "#{RAILS_ROOT}/app/helpers/products_helper" - - assert_nothing_raised do - begin - run_generator('controller', %w(admin::products)) - ensure - # cleanup - Object.send(:remove_const, :ProductsHelper) - end - end - end -end diff --git a/railties/test/generators/rails_helper_generator_test.rb b/railties/test/generators/rails_helper_generator_test.rb deleted file mode 100644 index 8d05f555e6..0000000000 --- a/railties/test/generators/rails_helper_generator_test.rb +++ /dev/null @@ -1,36 +0,0 @@ -require File.dirname(__FILE__) + '/generator_test_helper' - -class RailsHelperGeneratorTest < GeneratorTestCase - def test_helper_generates_helper - run_generator('helper', %w(products)) - - assert_generated_helper_for :products - assert_generated_helper_test_for :products - end - - def test_helper_generates_namespaced_helper - run_generator('helper', %w(admin::products)) - - assert_generated_helper_for "admin::products" - assert_generated_helper_test_for "admin::products" - end - - def test_helper_generates_namespaced_and_not_namespaced_helpers - run_generator('helper', %w(products)) - - # We have to require the generated helper to show the problem because - # the test helpers just check for generated files and contents but - # do not actually load them. But they have to be loaded (as in a real environment) - # to make the second generator run fail - require "#{RAILS_ROOT}/app/helpers/products_helper" - - assert_nothing_raised do - begin - run_generator('helper', %w(admin::products)) - ensure - # cleanup - Object.send(:remove_const, :ProductsHelper) - end - end - end -end diff --git a/railties/test/generators/rails_mailer_generator_test.rb b/railties/test/generators/rails_mailer_generator_test.rb deleted file mode 100644 index de61e6736d..0000000000 --- a/railties/test/generators/rails_mailer_generator_test.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'generators/generator_test_helper' - -class RailsMailerGeneratorTest < GeneratorTestCase - - def test_generates_mailer - run_generator('mailer', %w(Notifier reset_password)) - - assert_generated_model_for :notifier, 'ActionMailer::Base' do |model| - assert_has_method model, :reset_password do |name, body| - assert_equal [ - "subject 'Notifier#reset_password'", - "recipients ''", - "from ''", - "sent_on sent_at", - "", - "body :greeting => 'Hi,'" - ], - body.split("\n").map{|line| line.sub(' '*4, '') } - end - - assert_no_match /(self.default_url_options =|default_url_options\[.*\] =)/, model, - 'individual mailer models should not set default_url_options because the options are shared by all mailers' - end - - assert_generated_views_for :notifier, 'reset_password.erb' - assert_generated_unit_test_for :notifier, 'ActionMailer::TestCase' - assert_generated_file "test/fixtures/notifier/reset_password" - end -end diff --git a/railties/test/generators/rails_model_generator_test.rb b/railties/test/generators/rails_model_generator_test.rb deleted file mode 100644 index aea2abafba..0000000000 --- a/railties/test/generators/rails_model_generator_test.rb +++ /dev/null @@ -1,48 +0,0 @@ -require 'generators/generator_test_helper' - -class RailsModelGeneratorTest < GeneratorTestCase - - def test_model_generates_resources - run_generator('model', %w(Product name:string)) - - assert_generated_model_for :product - assert_generated_fixtures_for :products - assert_generated_migration :create_products - end - - def test_model_skip_migration_skips_migration - run_generator('model', %w(Product name:string --skip-migration)) - - assert_generated_model_for :product - assert_generated_fixtures_for :products - assert_skipped_migration :create_products - end - - def test_model_with_attributes_generates_resources_with_attributes - run_generator('model', %w(Product name:string supplier_id:integer created_at:timestamp)) - - assert_generated_model_for :product - assert_generated_fixtures_for :products - assert_generated_migration :create_products do |t| - assert_generated_column t, :name, :string - assert_generated_column t, :supplier_id, :integer - assert_generated_column t, :created_at, :timestamp - end - end - - def test_model_with_reference_attributes_generates_belongs_to_associations - run_generator('model', %w(Product name:string supplier:references)) - - assert_generated_model_for :product do |body| - assert body =~ /^\s+belongs_to :supplier/, "#{body.inspect} should contain 'belongs_to :supplier'" - end - end - - def test_model_with_belongs_to_attributes_generates_belongs_to_associations - run_generator('model', %w(Product name:string supplier:belongs_to)) - - assert_generated_model_for :product do |body| - assert body =~ /^\s+belongs_to :supplier/, "#{body.inspect} should contain 'belongs_to :supplier'" - end - end -end diff --git a/railties/test/generators/rails_model_subclass_generator_test.rb b/railties/test/generators/rails_model_subclass_generator_test.rb deleted file mode 100644 index 30066b5a3c..0000000000 --- a/railties/test/generators/rails_model_subclass_generator_test.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'generators/generator_test_helper' - -class RailsModelSubclassGeneratorTest < GeneratorTestCase - - def test_model_subclass_generates_resources - run_generator('model_subclass', %w(Car Product)) - - assert_generated_model_for :car, "Product" - assert_generated_unit_test_for :car - end - - def test_model_subclass_must_have_a_parent_class_name - assert_raise(Rails::Generator::UsageError) { run_generator('model_subclass', %w(Car)) } - end -end \ No newline at end of file diff --git a/railties/test/generators/rails_resource_generator_test.rb b/railties/test/generators/rails_resource_generator_test.rb deleted file mode 100644 index 1f5bd0ef1e..0000000000 --- a/railties/test/generators/rails_resource_generator_test.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'generators/generator_test_helper' - -class RailsResourceGeneratorTest < GeneratorTestCase - def test_resource_generates_resources - run_generator('resource', %w(Product name:string)) - - assert_generated_controller_for :products - assert_generated_model_for :product - assert_generated_fixtures_for :products - assert_generated_functional_test_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_generated_migration :create_products - assert_added_route_for :products - end - - def test_resource_skip_migration_skips_migration - run_generator('resource', %w(Product name:string --skip-migration)) - - assert_generated_controller_for :products - assert_generated_model_for :product - assert_generated_fixtures_for :products - assert_generated_functional_test_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_skipped_migration :create_products - assert_added_route_for :products - end -end diff --git a/railties/test/generators/rails_scaffold_generator_test.rb b/railties/test/generators/rails_scaffold_generator_test.rb deleted file mode 100644 index 70829a77fd..0000000000 --- a/railties/test/generators/rails_scaffold_generator_test.rb +++ /dev/null @@ -1,150 +0,0 @@ -require 'generators/generator_test_helper' -require 'abstract_unit' - -class RailsScaffoldGeneratorTest < GeneratorTestCase - def test_scaffolded_names - g = Rails::Generator::Base.instance('scaffold', %w(ProductLine)) - assert_equal "ProductLines", g.controller_name - assert_equal "ProductLines", g.controller_class_name - assert_equal "ProductLine", g.controller_singular_name - assert_equal "product_lines", g.controller_plural_name - assert_equal "product_lines", g.controller_file_name - assert_equal "product_lines", g.controller_table_name - end - - def test_scaffold_generates_resources - - run_generator('scaffold', %w(Product name:string)) - - assert_generated_controller_for :products do |f| - - assert_has_method f, :index do |name, m| - assert_match /@products = Product\.all/, m, "#{name} should query products table" - end - - assert_has_method f, :show, :edit, :update, :destroy do |name, m| - assert_match /@product = Product\.find\(params\[:id\]\)/, m, "#{name.to_s} should query products table" - end - - assert_has_method f, :new do |name, m| - assert_match /@product = Product\.new/, m, "#{name.to_s} should instantiate a product" - end - - assert_has_method f, :create do |name, m| - assert_match /@product = Product\.new\(params\[:product\]\)/, m, "#{name.to_s} should instantiate a product" - assert_match /format.xml \{ render :xml => @product.errors, :status => :unprocessable_entity \}/, m, "#{name.to_s} should set status to :unprocessable_entity code for xml" - end - - end - - assert_generated_model_for :product - assert_generated_functional_test_for :products - assert_generated_unit_test_for :product - assert_generated_fixtures_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_generated_stylesheet :scaffold - assert_generated_views_for :products, "index.html.erb", "new.html.erb", "edit.html.erb", "show.html.erb" - - assert_generated_migration :create_products - assert_added_route_for :products - end - - def test_scaffold_skip_migration_skips_migration - run_generator('scaffold', %w(Product name:string --skip-migration)) - - assert_generated_model_for :product - assert_generated_functional_test_for :products - assert_generated_unit_test_for :product - assert_generated_fixtures_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_generated_stylesheet :scaffold - assert_generated_views_for :products, "index.html.erb","new.html.erb","edit.html.erb","show.html.erb" - assert_skipped_migration :create_products - assert_added_route_for :products - end - - def test_scaffold_generates_resources_with_attributes - run_generator('scaffold', %w(Product name:string supplier_id:integer created_at:timestamp)) - - assert_generated_controller_for :products do |f| - - assert_has_method f, :index do |name, m| - assert_match /@products = Product\.all/, m, "#{name} should query products table" - end - - assert_has_method f, :show, :edit, :update, :destroy do |name, m| - assert_match /@product = Product\.find\(params\[:id\]\)/, m, "#{name.to_s} should query products table" - end - - assert_has_method f, :new do |name, m| - assert_match /@product = Product\.new/, m, "#{name.to_s} should instantiate a product" - end - - assert_has_method f, :create do |name, m| - assert_match /@product = Product\.new\(params\[:product\]\)/, m, "#{name.to_s} should instantiate a product" - assert_match /format.xml \{ render :xml => @product.errors, :status => :unprocessable_entity \}/, m, "#{name.to_s} should set status to :unprocessable_entity code for xml" - end - - end - - assert_generated_model_for :product - assert_generated_functional_test_for :products - assert_generated_unit_test_for :product - assert_generated_fixtures_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_generated_stylesheet :scaffold - assert_generated_views_for :products, "index.html.erb", "new.html.erb", "edit.html.erb", "show.html.erb" - - assert_generated_migration :create_products do |t| - assert_generated_column t, :name, :string - assert_generated_column t, :supplier_id, :integer - assert_generated_column t, :created_at, :timestamp - end - - assert_added_route_for :products - end - - def test_scaffolded_plural_names - Rails::Generator::Base.logger.expects(:warning) - g = Rails::Generator::Base.instance('scaffold', %w(ProductLines)) - assert_equal "ProductLines", g.controller_name - assert_equal "ProductLines", g.controller_class_name - assert_equal "ProductLine", g.controller_singular_name - assert_equal "product_lines", g.controller_plural_name - assert_equal "product_lines", g.controller_file_name - assert_equal "product_lines", g.controller_table_name - end - - def test_scaffold_plural_model_name_without_force_plural_generates_singular_model - run_generator('scaffold', %w(Products name:string)) - - assert_generated_model_for :product - assert_generated_functional_test_for :products - assert_generated_unit_test_for :product - assert_generated_fixtures_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_generated_stylesheet :scaffold - assert_generated_views_for :products, "index.html.erb","new.html.erb","edit.html.erb","show.html.erb" - assert_skipped_migration :create_products - assert_added_route_for :products - end - - def test_scaffold_plural_model_name_with_force_plural_forces_plural_model - run_generator('scaffold', %w(Products name:string --force-plural)) - - assert_generated_model_for :products - assert_generated_functional_test_for :products - assert_generated_unit_test_for :products - assert_generated_fixtures_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_generated_stylesheet :scaffold - assert_generated_views_for :products, "index.html.erb","new.html.erb","edit.html.erb","show.html.erb" - assert_skipped_migration :create_products - assert_added_route_for :products - end -end diff --git a/railties/test/rails_generator/generator_test_helper.rb b/railties/test/rails_generator/generator_test_helper.rb new file mode 100644 index 0000000000..01bf1c90bd --- /dev/null +++ b/railties/test/rails_generator/generator_test_helper.rb @@ -0,0 +1,303 @@ +require 'test/unit' +require 'fileutils' + +# Mock out what we need from AR::Base +module ActiveRecord + class Base + class << self + attr_accessor :pluralize_table_names, :timestamped_migrations + end + self.pluralize_table_names = true + self.timestamped_migrations = true + end + + module ConnectionAdapters + class Column + attr_reader :name, :default, :type, :limit, :null, :sql_type, :precision, :scale + + def initialize(name, default, sql_type = nil) + @name = name + @default = default + @type = @sql_type = sql_type + end + + def human_name + @name.humanize + end + end + end +end + +# Mock up necessities from ActionView +module ActionView + module Helpers + module ActionRecordHelper; end + class InstanceTag; end + end +end + +# Set RAILS_ROOT appropriately fixture generation +tmp_dir = "#{File.dirname(__FILE__)}/../fixtures/tmp" + +if defined? RAILS_ROOT + RAILS_ROOT.replace tmp_dir +else + RAILS_ROOT = tmp_dir +end +FileUtils.mkdir_p RAILS_ROOT + +$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" +require 'initializer' + +# Mocks out the configuration +module Rails + def self.configuration + Rails::Configuration.new + end +end + +require 'rails_generator' + +class GeneratorTestCase < Test::Unit::TestCase + include FileUtils + + def setup + ActiveRecord::Base.pluralize_table_names = true + + mkdir_p "#{RAILS_ROOT}/app/views/layouts" + mkdir_p "#{RAILS_ROOT}/config" + mkdir_p "#{RAILS_ROOT}/db" + mkdir_p "#{RAILS_ROOT}/test/fixtures" + mkdir_p "#{RAILS_ROOT}/public/stylesheets" + + File.open("#{RAILS_ROOT}/config/routes.rb", 'w') do |f| + f << "ActionController::Routing::Routes.draw do |map|\n\nend" + end + end + + def teardown + rm_rf "#{RAILS_ROOT}/app" + rm_rf "#{RAILS_ROOT}/test" + rm_rf "#{RAILS_ROOT}/config" + rm_rf "#{RAILS_ROOT}/db" + rm_rf "#{RAILS_ROOT}/public" + end + + def test_truth + # don't complain, test/unit + end + + # Instantiates the Generator. + def build_generator(name, params) + Rails::Generator::Base.instance(name, params) + end + + # Runs the +create+ command (like the command line does). + def run_generator(name, params) + silence_generator do + build_generator(name, params).command(:create).invoke! + end + end + + # Silences the logger temporarily and returns the output as a String. + def silence_generator + logger_original = Rails::Generator::Base.logger + myout = StringIO.new + Rails::Generator::Base.logger = Rails::Generator::SimpleLogger.new(myout) + yield if block_given? + Rails::Generator::Base.logger = logger_original + myout.string + end + + # Asserts that the given controller was generated. + # It takes a name or symbol without the _controller part and an optional super class. + # The contents of the class source file is passed to a block. + def assert_generated_controller_for(name, parent = "ApplicationController") + assert_generated_class "app/controllers/#{name.to_s.underscore}_controller", parent do |body| + yield body if block_given? + end + end + + # Asserts that the given model was generated. + # It takes a name or symbol and an optional super class. + # The contents of the class source file is passed to a block. + def assert_generated_model_for(name, parent = "ActiveRecord::Base") + assert_generated_class "app/models/#{name.to_s.underscore}", parent do |body| + yield body if block_given? + end + end + + # Asserts that the given helper was generated. + # It takes a name or symbol without the _helper part. + # The contents of the module source file is passed to a block. + def assert_generated_helper_for(name) + assert_generated_module "app/helpers/#{name.to_s.underscore}_helper" do |body| + yield body if block_given? + end + end + + # Asserts that the given functional test was generated. + # It takes a name or symbol without the _controller_test part and an optional super class. + # The contents of the class source file is passed to a block. + def assert_generated_functional_test_for(name, parent = "ActionController::TestCase") + assert_generated_class "test/functional/#{name.to_s.underscore}_controller_test",parent do |body| + yield body if block_given? + end + end + + # Asserts that the given helper test test was generated. + # It takes a name or symbol without the _helper_test part and an optional super class. + # The contents of the class source file is passed to a block. + def assert_generated_helper_test_for(name, parent = "ActionView::TestCase") + path = "test/unit/helpers/#{name.to_s.underscore}_helper_test" + # Have to pass the path without the "test/" part so that class_name_from_path will return a correct result + class_name = class_name_from_path(path.gsub(/^test\//, '')) + + assert_generated_class path,parent,class_name do |body| + yield body if block_given? + end + end + + # Asserts that the given unit test was generated. + # It takes a name or symbol without the _test part and an optional super class. + # The contents of the class source file is passed to a block. + def assert_generated_unit_test_for(name, parent = "ActiveSupport::TestCase") + assert_generated_class "test/unit/#{name.to_s.underscore}_test", parent do |body| + yield body if block_given? + end + end + + # Asserts that the given file was generated. + # The contents of the file is passed to a block. + def assert_generated_file(path) + assert_file_exists(path) + File.open("#{RAILS_ROOT}/#{path}") do |f| + yield f.read if block_given? + end + end + + # asserts that the given file exists + def assert_file_exists(path) + assert File.exist?("#{RAILS_ROOT}/#{path}"), + "The file '#{RAILS_ROOT}/#{path}' should exist" + end + + # Asserts that the given class source file was generated. + # It takes a path without the .rb part and an optional super class. + # The contents of the class source file is passed to a block. + def assert_generated_class(path, parent = nil, class_name = class_name_from_path(path)) + assert_generated_file("#{path}.rb") do |body| + assert_match /class #{class_name}#{parent.nil? ? '':" < #{parent}"}/, body, "the file '#{path}.rb' should be a class" + yield body if block_given? + end + end + + def class_name_from_path(path) + # FIXME: Sucky way to detect namespaced classes + if path.split('/').size > 3 + path =~ /\/?(\d+_)?(\w+)\/(\w+)$/ + "#{$2.camelize}::#{$3.camelize}" + else + path =~ /\/?(\d+_)?(\w+)$/ + $2.camelize + end + end + + # Asserts that the given module source file was generated. + # It takes a path without the .rb part. + # The contents of the class source file is passed to a block. + def assert_generated_module(path) + # FIXME: Sucky way to detect namespaced modules + if path.split('/').size > 3 + path =~ /\/?(\w+)\/(\w+)$/ + module_name = "#{$1.camelize}::#{$2.camelize}" + else + path =~ /\/?(\w+)$/ + module_name = $1.camelize + end + + assert_generated_file("#{path}.rb") do |body| + assert_match /module #{module_name}/, body, "the file '#{path}.rb' should be a module" + yield body if block_given? + end + end + + # Asserts that the given CSS stylesheet file was generated. + # It takes a path without the .css part. + # The contents of the stylesheet source file is passed to a block. + def assert_generated_stylesheet(path) + assert_generated_file("public/stylesheets/#{path}.css") do |body| + yield body if block_given? + end + end + + # Asserts that the given YAML file was generated. + # It takes a path without the .yml part. + # The parsed YAML tree is passed to a block. + def assert_generated_yaml(path) + assert_generated_file("#{path}.yml") do |body| + yaml = YAML.load(body) + assert yaml, 'YAML data missing' + yield yaml if block_given? + end + end + + # Asserts that the given fixtures YAML file was generated. + # It takes a fixture name without the .yml part. + # The parsed YAML tree is passed to a block. + def assert_generated_fixtures_for(name) + assert_generated_yaml "test/fixtures/#{name.to_s.underscore}" do |yaml| + yield yaml if block_given? + end + end + + # Asserts that the given views were generated. + # It takes a controller name and a list of views (including extensions). + # The body of each view is passed to a block. + def assert_generated_views_for(name, *actions) + actions.each do |action| + assert_generated_file("app/views/#{name.to_s.underscore}/#{action}") do |body| + yield body if block_given? + end + end + end + + def assert_generated_migration(name, parent = "ActiveRecord::Migration") + file = Dir.glob("#{RAILS_ROOT}/db/migrate/*_#{name.to_s.underscore}.rb").first + file = file.match(/db\/migrate\/[0-9]+_\w+/).to_s + assert_generated_class file, parent do |body| + assert_match /timestamps/, body, "should have timestamps defined" + yield body if block_given? + end + end + + # Asserts that the given migration file was not generated. + # It takes the name of the migration as a parameter. + def assert_skipped_migration(name) + migration_file = "#{RAILS_ROOT}/db/migrate/001_#{name.to_s.underscore}.rb" + assert !File.exist?(migration_file), "should not create migration #{migration_file}" + end + + # Asserts that the given resource was added to the routes. + def assert_added_route_for(name) + assert_generated_file("config/routes.rb") do |body| + assert_match /map.resources :#{name.to_s.underscore}/, body, + "should add route for :#{name.to_s.underscore}" + end + end + + # Asserts that the given methods are defined in the body. + # This does assume standard rails code conventions with regards to the source code. + # The body of each individual method is passed to a block. + def assert_has_method(body, *methods) + methods.each do |name| + assert body =~ /^ def #{name}(\(.+\))?\n((\n| .*\n)*) end/, "should have method #{name}" + yield(name, $2) if block_given? + end + end + + # Asserts that the given column is defined in the migration. + def assert_generated_column(body, name, type) + assert_match /t\.#{type.to_s} :#{name.to_s}/, body, "should have column #{name.to_s} defined" + end +end diff --git a/railties/test/rails_generator/rails_controller_generator_test.rb b/railties/test/rails_generator/rails_controller_generator_test.rb new file mode 100644 index 0000000000..43fbe972e2 --- /dev/null +++ b/railties/test/rails_generator/rails_controller_generator_test.rb @@ -0,0 +1,44 @@ +require 'generators/generator_test_helper' + +module Admin +end + +class RailsControllerGeneratorTest < GeneratorTestCase + + def test_controller_generates_controller + run_generator('controller', %w(products)) + + assert_generated_controller_for :products + assert_generated_functional_test_for :products + assert_generated_helper_for :products + assert_generated_helper_test_for :products + end + + def test_controller_generates_namespaced_controller + run_generator('controller', %w(admin::products)) + + assert_generated_controller_for "admin::products" + assert_generated_functional_test_for "admin::products" + assert_generated_helper_for "admin::products" + assert_generated_helper_test_for "admin::products" + end + + def test_controller_generates_namespaced_and_not_namespaced_controllers + run_generator('controller', %w(products)) + + # We have to require the generated helper to show the problem because + # the test helpers just check for generated files and contents but + # do not actually load them. But they have to be loaded (as in a real environment) + # to make the second generator run fail + require "#{RAILS_ROOT}/app/helpers/products_helper" + + assert_nothing_raised do + begin + run_generator('controller', %w(admin::products)) + ensure + # cleanup + Object.send(:remove_const, :ProductsHelper) + end + end + end +end diff --git a/railties/test/rails_generator/rails_helper_generator_test.rb b/railties/test/rails_generator/rails_helper_generator_test.rb new file mode 100644 index 0000000000..8d05f555e6 --- /dev/null +++ b/railties/test/rails_generator/rails_helper_generator_test.rb @@ -0,0 +1,36 @@ +require File.dirname(__FILE__) + '/generator_test_helper' + +class RailsHelperGeneratorTest < GeneratorTestCase + def test_helper_generates_helper + run_generator('helper', %w(products)) + + assert_generated_helper_for :products + assert_generated_helper_test_for :products + end + + def test_helper_generates_namespaced_helper + run_generator('helper', %w(admin::products)) + + assert_generated_helper_for "admin::products" + assert_generated_helper_test_for "admin::products" + end + + def test_helper_generates_namespaced_and_not_namespaced_helpers + run_generator('helper', %w(products)) + + # We have to require the generated helper to show the problem because + # the test helpers just check for generated files and contents but + # do not actually load them. But they have to be loaded (as in a real environment) + # to make the second generator run fail + require "#{RAILS_ROOT}/app/helpers/products_helper" + + assert_nothing_raised do + begin + run_generator('helper', %w(admin::products)) + ensure + # cleanup + Object.send(:remove_const, :ProductsHelper) + end + end + end +end diff --git a/railties/test/rails_generator/rails_mailer_generator_test.rb b/railties/test/rails_generator/rails_mailer_generator_test.rb new file mode 100644 index 0000000000..de61e6736d --- /dev/null +++ b/railties/test/rails_generator/rails_mailer_generator_test.rb @@ -0,0 +1,29 @@ +require 'generators/generator_test_helper' + +class RailsMailerGeneratorTest < GeneratorTestCase + + def test_generates_mailer + run_generator('mailer', %w(Notifier reset_password)) + + assert_generated_model_for :notifier, 'ActionMailer::Base' do |model| + assert_has_method model, :reset_password do |name, body| + assert_equal [ + "subject 'Notifier#reset_password'", + "recipients ''", + "from ''", + "sent_on sent_at", + "", + "body :greeting => 'Hi,'" + ], + body.split("\n").map{|line| line.sub(' '*4, '') } + end + + assert_no_match /(self.default_url_options =|default_url_options\[.*\] =)/, model, + 'individual mailer models should not set default_url_options because the options are shared by all mailers' + end + + assert_generated_views_for :notifier, 'reset_password.erb' + assert_generated_unit_test_for :notifier, 'ActionMailer::TestCase' + assert_generated_file "test/fixtures/notifier/reset_password" + end +end diff --git a/railties/test/rails_generator/rails_model_generator_test.rb b/railties/test/rails_generator/rails_model_generator_test.rb new file mode 100644 index 0000000000..aea2abafba --- /dev/null +++ b/railties/test/rails_generator/rails_model_generator_test.rb @@ -0,0 +1,48 @@ +require 'generators/generator_test_helper' + +class RailsModelGeneratorTest < GeneratorTestCase + + def test_model_generates_resources + run_generator('model', %w(Product name:string)) + + assert_generated_model_for :product + assert_generated_fixtures_for :products + assert_generated_migration :create_products + end + + def test_model_skip_migration_skips_migration + run_generator('model', %w(Product name:string --skip-migration)) + + assert_generated_model_for :product + assert_generated_fixtures_for :products + assert_skipped_migration :create_products + end + + def test_model_with_attributes_generates_resources_with_attributes + run_generator('model', %w(Product name:string supplier_id:integer created_at:timestamp)) + + assert_generated_model_for :product + assert_generated_fixtures_for :products + assert_generated_migration :create_products do |t| + assert_generated_column t, :name, :string + assert_generated_column t, :supplier_id, :integer + assert_generated_column t, :created_at, :timestamp + end + end + + def test_model_with_reference_attributes_generates_belongs_to_associations + run_generator('model', %w(Product name:string supplier:references)) + + assert_generated_model_for :product do |body| + assert body =~ /^\s+belongs_to :supplier/, "#{body.inspect} should contain 'belongs_to :supplier'" + end + end + + def test_model_with_belongs_to_attributes_generates_belongs_to_associations + run_generator('model', %w(Product name:string supplier:belongs_to)) + + assert_generated_model_for :product do |body| + assert body =~ /^\s+belongs_to :supplier/, "#{body.inspect} should contain 'belongs_to :supplier'" + end + end +end diff --git a/railties/test/rails_generator/rails_model_subclass_generator_test.rb b/railties/test/rails_generator/rails_model_subclass_generator_test.rb new file mode 100644 index 0000000000..30066b5a3c --- /dev/null +++ b/railties/test/rails_generator/rails_model_subclass_generator_test.rb @@ -0,0 +1,15 @@ +require 'generators/generator_test_helper' + +class RailsModelSubclassGeneratorTest < GeneratorTestCase + + def test_model_subclass_generates_resources + run_generator('model_subclass', %w(Car Product)) + + assert_generated_model_for :car, "Product" + assert_generated_unit_test_for :car + end + + def test_model_subclass_must_have_a_parent_class_name + assert_raise(Rails::Generator::UsageError) { run_generator('model_subclass', %w(Car)) } + end +end \ No newline at end of file diff --git a/railties/test/rails_generator/rails_resource_generator_test.rb b/railties/test/rails_generator/rails_resource_generator_test.rb new file mode 100644 index 0000000000..1f5bd0ef1e --- /dev/null +++ b/railties/test/rails_generator/rails_resource_generator_test.rb @@ -0,0 +1,29 @@ +require 'generators/generator_test_helper' + +class RailsResourceGeneratorTest < GeneratorTestCase + def test_resource_generates_resources + run_generator('resource', %w(Product name:string)) + + assert_generated_controller_for :products + assert_generated_model_for :product + assert_generated_fixtures_for :products + assert_generated_functional_test_for :products + assert_generated_helper_for :products + assert_generated_helper_test_for :products + assert_generated_migration :create_products + assert_added_route_for :products + end + + def test_resource_skip_migration_skips_migration + run_generator('resource', %w(Product name:string --skip-migration)) + + assert_generated_controller_for :products + assert_generated_model_for :product + assert_generated_fixtures_for :products + assert_generated_functional_test_for :products + assert_generated_helper_for :products + assert_generated_helper_test_for :products + assert_skipped_migration :create_products + assert_added_route_for :products + end +end diff --git a/railties/test/rails_generator/rails_scaffold_generator_test.rb b/railties/test/rails_generator/rails_scaffold_generator_test.rb new file mode 100644 index 0000000000..70829a77fd --- /dev/null +++ b/railties/test/rails_generator/rails_scaffold_generator_test.rb @@ -0,0 +1,150 @@ +require 'generators/generator_test_helper' +require 'abstract_unit' + +class RailsScaffoldGeneratorTest < GeneratorTestCase + def test_scaffolded_names + g = Rails::Generator::Base.instance('scaffold', %w(ProductLine)) + assert_equal "ProductLines", g.controller_name + assert_equal "ProductLines", g.controller_class_name + assert_equal "ProductLine", g.controller_singular_name + assert_equal "product_lines", g.controller_plural_name + assert_equal "product_lines", g.controller_file_name + assert_equal "product_lines", g.controller_table_name + end + + def test_scaffold_generates_resources + + run_generator('scaffold', %w(Product name:string)) + + assert_generated_controller_for :products do |f| + + assert_has_method f, :index do |name, m| + assert_match /@products = Product\.all/, m, "#{name} should query products table" + end + + assert_has_method f, :show, :edit, :update, :destroy do |name, m| + assert_match /@product = Product\.find\(params\[:id\]\)/, m, "#{name.to_s} should query products table" + end + + assert_has_method f, :new do |name, m| + assert_match /@product = Product\.new/, m, "#{name.to_s} should instantiate a product" + end + + assert_has_method f, :create do |name, m| + assert_match /@product = Product\.new\(params\[:product\]\)/, m, "#{name.to_s} should instantiate a product" + assert_match /format.xml \{ render :xml => @product.errors, :status => :unprocessable_entity \}/, m, "#{name.to_s} should set status to :unprocessable_entity code for xml" + end + + end + + assert_generated_model_for :product + assert_generated_functional_test_for :products + assert_generated_unit_test_for :product + assert_generated_fixtures_for :products + assert_generated_helper_for :products + assert_generated_helper_test_for :products + assert_generated_stylesheet :scaffold + assert_generated_views_for :products, "index.html.erb", "new.html.erb", "edit.html.erb", "show.html.erb" + + assert_generated_migration :create_products + assert_added_route_for :products + end + + def test_scaffold_skip_migration_skips_migration + run_generator('scaffold', %w(Product name:string --skip-migration)) + + assert_generated_model_for :product + assert_generated_functional_test_for :products + assert_generated_unit_test_for :product + assert_generated_fixtures_for :products + assert_generated_helper_for :products + assert_generated_helper_test_for :products + assert_generated_stylesheet :scaffold + assert_generated_views_for :products, "index.html.erb","new.html.erb","edit.html.erb","show.html.erb" + assert_skipped_migration :create_products + assert_added_route_for :products + end + + def test_scaffold_generates_resources_with_attributes + run_generator('scaffold', %w(Product name:string supplier_id:integer created_at:timestamp)) + + assert_generated_controller_for :products do |f| + + assert_has_method f, :index do |name, m| + assert_match /@products = Product\.all/, m, "#{name} should query products table" + end + + assert_has_method f, :show, :edit, :update, :destroy do |name, m| + assert_match /@product = Product\.find\(params\[:id\]\)/, m, "#{name.to_s} should query products table" + end + + assert_has_method f, :new do |name, m| + assert_match /@product = Product\.new/, m, "#{name.to_s} should instantiate a product" + end + + assert_has_method f, :create do |name, m| + assert_match /@product = Product\.new\(params\[:product\]\)/, m, "#{name.to_s} should instantiate a product" + assert_match /format.xml \{ render :xml => @product.errors, :status => :unprocessable_entity \}/, m, "#{name.to_s} should set status to :unprocessable_entity code for xml" + end + + end + + assert_generated_model_for :product + assert_generated_functional_test_for :products + assert_generated_unit_test_for :product + assert_generated_fixtures_for :products + assert_generated_helper_for :products + assert_generated_helper_test_for :products + assert_generated_stylesheet :scaffold + assert_generated_views_for :products, "index.html.erb", "new.html.erb", "edit.html.erb", "show.html.erb" + + assert_generated_migration :create_products do |t| + assert_generated_column t, :name, :string + assert_generated_column t, :supplier_id, :integer + assert_generated_column t, :created_at, :timestamp + end + + assert_added_route_for :products + end + + def test_scaffolded_plural_names + Rails::Generator::Base.logger.expects(:warning) + g = Rails::Generator::Base.instance('scaffold', %w(ProductLines)) + assert_equal "ProductLines", g.controller_name + assert_equal "ProductLines", g.controller_class_name + assert_equal "ProductLine", g.controller_singular_name + assert_equal "product_lines", g.controller_plural_name + assert_equal "product_lines", g.controller_file_name + assert_equal "product_lines", g.controller_table_name + end + + def test_scaffold_plural_model_name_without_force_plural_generates_singular_model + run_generator('scaffold', %w(Products name:string)) + + assert_generated_model_for :product + assert_generated_functional_test_for :products + assert_generated_unit_test_for :product + assert_generated_fixtures_for :products + assert_generated_helper_for :products + assert_generated_helper_test_for :products + assert_generated_stylesheet :scaffold + assert_generated_views_for :products, "index.html.erb","new.html.erb","edit.html.erb","show.html.erb" + assert_skipped_migration :create_products + assert_added_route_for :products + end + + def test_scaffold_plural_model_name_with_force_plural_forces_plural_model + run_generator('scaffold', %w(Products name:string --force-plural)) + + assert_generated_model_for :products + assert_generated_functional_test_for :products + assert_generated_unit_test_for :products + assert_generated_fixtures_for :products + assert_generated_helper_for :products + assert_generated_helper_test_for :products + assert_generated_stylesheet :scaffold + assert_generated_views_for :products, "index.html.erb","new.html.erb","edit.html.erb","show.html.erb" + assert_skipped_migration :create_products + assert_added_route_for :products + end +end -- cgit v1.2.3 From f596495556f871650ed6b7a67128e4fd13cd3773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 25 Jun 2009 10:18:00 +0200 Subject: Tests for plugin generator. --- railties/test/generators/actions_test.rb | 5 +- railties/test/generators/app_generator_test.rb | 133 +++++++++++++++++++++ railties/test/generators/app_test.rb | 132 -------------------- railties/test/generators/generator_test_helper.rb | 56 --------- railties/test/generators/generators_test_helper.rb | 53 ++++++++ railties/test/generators/plugin_generator_test.rb | 51 ++++++++ 6 files changed, 240 insertions(+), 190 deletions(-) create mode 100644 railties/test/generators/app_generator_test.rb delete mode 100644 railties/test/generators/app_test.rb delete mode 100644 railties/test/generators/generator_test_helper.rb create mode 100644 railties/test/generators/generators_test_helper.rb create mode 100644 railties/test/generators/plugin_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/actions_test.rb b/railties/test/generators/actions_test.rb index 6030504fa3..a0502e9112 100644 --- a/railties/test/generators/actions_test.rb +++ b/railties/test/generators/actions_test.rb @@ -1,7 +1,8 @@ require 'abstract_unit' -require 'generators/generator_test_helper' +require 'generators/generators_test_helper' +require 'generators/rails/app/app_generator' -class ActionsTest < GeneratorTestCase +class ActionsTest < GeneratorsTestCase def setup super @git_plugin_uri = 'git://github.com/technoweenie/restful-authentication.git' diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb new file mode 100644 index 0000000000..c41f257e15 --- /dev/null +++ b/railties/test/generators/app_generator_test.rb @@ -0,0 +1,133 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/rails/app/app_generator' + +class AppGeneratorTest < GeneratorsTestCase + + def test_application_skeleton_is_created + run_generator + + %w( + app/controllers + app/helpers + app/models + app/views/layouts + config/environments + config/initializers + config/locales + db + doc + lib + lib/tasks + log + public/images + public/javascripts + public/stylesheets + script/performance + test/fixtures + test/functional + test/integration + test/performance + test/unit + vendor + vendor/plugins + tmp/sessions + tmp/sockets + tmp/cache + tmp/pids + ).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_frozen + generator(:freeze => true, :database => "sqlite3").expects(:run).with("rake rails:freeze:edge", false) + silence(:stdout){ generator.invoke(:all) } + assert_file 'config/environment.rb', /# RAILS_GEM_VERSION/ + 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 + assert_match /non\/existant\/path/, content + end + + def test_template_is_executed_when_supplied + path = "http://gist.github.com/103208.txt" + template = %{ say "It works!" } + template.instance_eval "def read; self; end" # Make the string respond to read + + generator(:template => path, :database => "sqlite3").expects(:open).with(path).returns(template) + assert_match /It works!/, silence(:stdout){ generator.invoke(:all) } + end + + protected + + def run_generator(args=[]) + silence(:stdout) { Rails::Generators::AppGenerator.start [destination_root].concat(args) } + end + + def generator(options={}) + @generator ||= Rails::Generators::AppGenerator.new([destination_root], options, :root => destination_root) + end + +end diff --git a/railties/test/generators/app_test.rb b/railties/test/generators/app_test.rb deleted file mode 100644 index a67f7e4926..0000000000 --- a/railties/test/generators/app_test.rb +++ /dev/null @@ -1,132 +0,0 @@ -require 'abstract_unit' -require 'generators/generator_test_helper' - -class AppTest < GeneratorTestCase - - def test_application_skeleton_is_created - run_generator - - %w( - app/controllers - app/helpers - app/models - app/views/layouts - config/environments - config/initializers - config/locales - db - doc - lib - lib/tasks - log - public/images - public/javascripts - public/stylesheets - script/performance - test/fixtures - test/functional - test/integration - test/performance - test/unit - vendor - vendor/plugins - tmp/sessions - tmp/sockets - tmp/cache - tmp/pids - ).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_frozen - generator(:freeze => true, :database => "sqlite3").expects(:run).with("rake rails:freeze:edge", false) - silence(:stdout){ generator.invoke(:all) } - assert_file 'config/environment.rb', /# RAILS_GEM_VERSION/ - 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 - assert_match /non\/existant\/path/, content - end - - def test_template_is_executed_when_supplied - path = "http://gist.github.com/103208.txt" - template = %{ say "It works!" } - template.instance_eval "def read; self; end" # Make the string respond to read - - generator(:template => path, :database => "sqlite3").expects(:open).with(path).returns(template) - assert_match /It works!/, silence(:stdout){ generator.invoke(:all) } - end - - protected - - def run_generator(args=[]) - silence(:stdout) { Rails::Generators::AppGenerator.start [destination_root].concat(args) } - end - - def generator(options={}) - @generator ||= Rails::Generators::AppGenerator.new([destination_root], options, :root => destination_root) - end - -end diff --git a/railties/test/generators/generator_test_helper.rb b/railties/test/generators/generator_test_helper.rb deleted file mode 100644 index 2b988bde7a..0000000000 --- a/railties/test/generators/generator_test_helper.rb +++ /dev/null @@ -1,56 +0,0 @@ -require 'test/unit' -require 'fileutils' - -$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" - -# For this while, let's load all generators by hand -require 'generators' -require 'generators/rails/app/app_generator' - -class GeneratorTestCase < Test::Unit::TestCase - include FileUtils - - def destination_root - @destination_root ||= File.expand_path("#{File.dirname(__FILE__)}/../fixtures/tmp") - end - - def setup - mkdir_p(destination_root) - rm_rf(destination_root) - end - - def test_truth - # don't complain, test/unit - end - - def capture(stream) - begin - stream = stream.to_s - eval "$#{stream} = StringIO.new" - yield - result = eval("$#{stream}").string - ensure - eval("$#{stream} = #{stream.upcase}") - end - - result - end - alias :silence :capture - - def assert_file(relative, content=nil) - absolute = File.join(destination_root, relative) - assert File.exists?(absolute) - - case content - when String - assert_equal content, File.read(absolute) - when Regexp - 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 diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb new file mode 100644 index 0000000000..9f9b48264b --- /dev/null +++ b/railties/test/generators/generators_test_helper.rb @@ -0,0 +1,53 @@ +require 'test/unit' +require 'fileutils' + +$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" +require 'generators' + +class GeneratorsTestCase < Test::Unit::TestCase + include FileUtils + + def destination_root + @destination_root ||= File.expand_path("#{File.dirname(__FILE__)}/../fixtures/tmp") + end + + def setup + mkdir_p(destination_root) + rm_rf(destination_root) + end + + def test_truth + # don't complain, test/unit + end + + def capture(stream) + begin + stream = stream.to_s + eval "$#{stream} = StringIO.new" + yield + result = eval("$#{stream}").string + ensure + eval("$#{stream} = #{stream.upcase}") + end + + result + end + alias :silence :capture + + def assert_file(relative, content=nil) + absolute = File.join(destination_root, relative) + assert File.exists?(absolute) + + case content + when String + assert_equal content, File.read(absolute) + when Regexp + 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 diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb new file mode 100644 index 0000000000..a28a007ff8 --- /dev/null +++ b/railties/test/generators/plugin_generator_test.rb @@ -0,0 +1,51 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/rails/plugin/plugin_generator' +require 'generators/test_unit/plugin/plugin_generator' + +class PluginGeneratorTest < GeneratorsTestCase + + def test_plugin_skeleton_is_created + run_generator + + %w( + vendor/plugins + vendor/plugins/plugin_fu + vendor/plugins/plugin_fu/lib + ).each{ |path| assert_file path } + end + + def test_invokes_default_test_framework + run_generator + assert_file "vendor/plugins/plugin_fu/test/plugin_fu_test.rb" + end + + def test_logs_if_the_test_framework_cannot_be_found + content = run_generator ["--test-framework=unknown"] + assert_match /Could not find and invoke 'unknown:generators:plugin'/, content + end + + def test_creates_tasks_if_required + run_generator ["--with-tasks"] + assert_file "vendor/plugins/plugin_fu/tasks/plugin_fu_tasks.rake" + end + + def test_creates_generator_if_required + run_generator ["--with-generator"] + assert_file "vendor/plugins/plugin_fu/generators/plugin_fu/templates" + + flag = /class PluginFuGenerator < Rails::Generators::NamedBase/ + assert_file "vendor/plugins/plugin_fu/generators/plugin_fu/plugin_fu_generator.rb", flag + end + + protected + + def run_generator(args=[]) + silence(:stdout) { Rails::Generators::PluginGenerator.start ["plugin_fu"].concat(args), :root => destination_root } + end + + def generator(options={}) + @generator ||= Rails::Generators::PluginGenerator.new(["plugin_fu"], options, :root => destination_root) + end + +end -- cgit v1.2.3 From 5337766fa02142c72312ae2d39620e377f6c7155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 25 Jun 2009 10:21:00 +0200 Subject: Tests for metal generator. --- railties/test/generators/metal_generator_test.rb | 18 ++++++++++++++++++ railties/test/generators/plugin_generator_test.rb | 4 ---- 2 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 railties/test/generators/metal_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/metal_generator_test.rb b/railties/test/generators/metal_generator_test.rb new file mode 100644 index 0000000000..dfa948d14e --- /dev/null +++ b/railties/test/generators/metal_generator_test.rb @@ -0,0 +1,18 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/rails/metal/metal_generator' + +class MetalGeneratorTest < GeneratorsTestCase + + def test_metal_skeleton_is_created + run_generator + assert_file "app/metal/foo.rb", /class Foo/ + end + + protected + + def run_generator(args=[]) + silence(:stdout) { Rails::Generators::MetalGenerator.start ["foo"].concat(args), :root => destination_root } + end + +end diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb index a28a007ff8..b4aa39ae5f 100644 --- a/railties/test/generators/plugin_generator_test.rb +++ b/railties/test/generators/plugin_generator_test.rb @@ -44,8 +44,4 @@ class PluginGeneratorTest < GeneratorsTestCase silence(:stdout) { Rails::Generators::PluginGenerator.start ["plugin_fu"].concat(args), :root => destination_root } end - def generator(options={}) - @generator ||= Rails::Generators::PluginGenerator.new(["plugin_fu"], options, :root => destination_root) - end - end -- cgit v1.2.3 From eaef1ee09c4bd2ed11722660fddf9b4e7e1384cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 25 Jun 2009 10:44:46 +0200 Subject: Make tests pass again after merge. --- railties/test/boot_test.rb | 2 +- railties/test/generators/generators_test_helper.rb | 4 ++++ railties/test/rails_generator/rails_controller_generator_test.rb | 2 +- railties/test/rails_generator/rails_mailer_generator_test.rb | 2 +- railties/test/rails_generator/rails_model_generator_test.rb | 2 +- railties/test/rails_generator/rails_model_subclass_generator_test.rb | 4 ++-- railties/test/rails_generator/rails_resource_generator_test.rb | 2 +- railties/test/rails_generator/rails_scaffold_generator_test.rb | 2 +- 8 files changed, 12 insertions(+), 8 deletions(-) (limited to 'railties/test') diff --git a/railties/test/boot_test.rb b/railties/test/boot_test.rb index 02c7b461f7..7bf420d4f2 100644 --- a/railties/test/boot_test.rb +++ b/railties/test/boot_test.rb @@ -1,6 +1,6 @@ require 'abstract_unit' require 'initializer' -require "#{File.dirname(__FILE__)}/../lib/generator/templates/app/config/boot" +require "#{File.dirname(__FILE__)}/../lib/generators/rails/app/templates/config/boot" require 'rails/gem_dependency' class BootTest < Test::Unit::TestCase diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index 9f9b48264b..9462fc2214 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -16,6 +16,10 @@ class GeneratorsTestCase < Test::Unit::TestCase rm_rf(destination_root) end + def teardown + rm_rf(destination_root) + end + def test_truth # don't complain, test/unit end diff --git a/railties/test/rails_generator/rails_controller_generator_test.rb b/railties/test/rails_generator/rails_controller_generator_test.rb index 43fbe972e2..6cbb6bf2bd 100644 --- a/railties/test/rails_generator/rails_controller_generator_test.rb +++ b/railties/test/rails_generator/rails_controller_generator_test.rb @@ -1,4 +1,4 @@ -require 'generators/generator_test_helper' +require 'rails_generator/generator_test_helper' module Admin end diff --git a/railties/test/rails_generator/rails_mailer_generator_test.rb b/railties/test/rails_generator/rails_mailer_generator_test.rb index de61e6736d..f580fe27ab 100644 --- a/railties/test/rails_generator/rails_mailer_generator_test.rb +++ b/railties/test/rails_generator/rails_mailer_generator_test.rb @@ -1,4 +1,4 @@ -require 'generators/generator_test_helper' +require 'rails_generator/generator_test_helper' class RailsMailerGeneratorTest < GeneratorTestCase diff --git a/railties/test/rails_generator/rails_model_generator_test.rb b/railties/test/rails_generator/rails_model_generator_test.rb index aea2abafba..ae3c2e316e 100644 --- a/railties/test/rails_generator/rails_model_generator_test.rb +++ b/railties/test/rails_generator/rails_model_generator_test.rb @@ -1,4 +1,4 @@ -require 'generators/generator_test_helper' +require 'rails_generator/generator_test_helper' class RailsModelGeneratorTest < GeneratorTestCase diff --git a/railties/test/rails_generator/rails_model_subclass_generator_test.rb b/railties/test/rails_generator/rails_model_subclass_generator_test.rb index 30066b5a3c..4f20de6eba 100644 --- a/railties/test/rails_generator/rails_model_subclass_generator_test.rb +++ b/railties/test/rails_generator/rails_model_subclass_generator_test.rb @@ -1,4 +1,4 @@ -require 'generators/generator_test_helper' +require 'rails_generator/generator_test_helper' class RailsModelSubclassGeneratorTest < GeneratorTestCase @@ -12,4 +12,4 @@ class RailsModelSubclassGeneratorTest < GeneratorTestCase def test_model_subclass_must_have_a_parent_class_name assert_raise(Rails::Generator::UsageError) { run_generator('model_subclass', %w(Car)) } end -end \ No newline at end of file +end diff --git a/railties/test/rails_generator/rails_resource_generator_test.rb b/railties/test/rails_generator/rails_resource_generator_test.rb index 1f5bd0ef1e..b9a432cbff 100644 --- a/railties/test/rails_generator/rails_resource_generator_test.rb +++ b/railties/test/rails_generator/rails_resource_generator_test.rb @@ -1,4 +1,4 @@ -require 'generators/generator_test_helper' +require 'rails_generator/generator_test_helper' class RailsResourceGeneratorTest < GeneratorTestCase def test_resource_generates_resources diff --git a/railties/test/rails_generator/rails_scaffold_generator_test.rb b/railties/test/rails_generator/rails_scaffold_generator_test.rb index 70829a77fd..ffbeff79fb 100644 --- a/railties/test/rails_generator/rails_scaffold_generator_test.rb +++ b/railties/test/rails_generator/rails_scaffold_generator_test.rb @@ -1,4 +1,4 @@ -require 'generators/generator_test_helper' +require 'rails_generator/generator_test_helper' require 'abstract_unit' class RailsScaffoldGeneratorTest < GeneratorTestCase -- cgit v1.2.3 From 4573fd2e06ee9b5a68f84f085f0a10c9ad6f129b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 25 Jun 2009 11:24:35 +0200 Subject: Added observer generator. --- .../test/generators/observer_generator_test.rb | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 railties/test/generators/observer_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/observer_generator_test.rb b/railties/test/generators/observer_generator_test.rb new file mode 100644 index 0000000000..85c95c9dc7 --- /dev/null +++ b/railties/test/generators/observer_generator_test.rb @@ -0,0 +1,34 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/rails/observer/observer_generator' +require 'generators/test_unit/observer/observer_generator' + +class ObserverGeneratorTest < GeneratorsTestCase + + def test_observer_skeleton_is_created + run_generator + assert_file "app/models/account_observer.rb", /class AccountObserver < ActiveRecord::Observer/ + end + + def test_observer_with_class_path_skeleton_is_created + run_generator ["admin/account"] + assert_file "app/models/admin/account_observer.rb", /class Admin::AccountObserver < ActiveRecord::Observer/ + end + + def test_invokes_default_test_framework + run_generator + assert_file "test/unit/account_observer_test.rb" + end + + def test_logs_if_the_test_framework_cannot_be_found + content = run_generator ["account", "--test-framework=unknown"] + assert_match /Could not find and invoke 'unknown:generators:observer'/, content + end + + protected + + def run_generator(args=["account"]) + silence(:stdout) { Rails::Generators::ObserverGenerator.start args, :root => destination_root } + end + +end -- cgit v1.2.3 From ed33c29a4e2a07c2a738ec13775c5cc0d7867b50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 25 Jun 2009 11:56:18 +0200 Subject: Added class collision checks. --- railties/test/generators/generators_test_helper.rb | 6 +----- railties/test/generators/metal_generator_test.rb | 9 +++++++-- railties/test/generators/plugin_generator_test.rb | 15 ++++++++++----- 3 files changed, 18 insertions(+), 12 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index 9462fc2214..1fcfdaebb9 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -12,12 +12,8 @@ class GeneratorsTestCase < Test::Unit::TestCase end def setup - mkdir_p(destination_root) - rm_rf(destination_root) - end - - def teardown rm_rf(destination_root) + mkdir_p(destination_root) end def test_truth diff --git a/railties/test/generators/metal_generator_test.rb b/railties/test/generators/metal_generator_test.rb index dfa948d14e..4e73883feb 100644 --- a/railties/test/generators/metal_generator_test.rb +++ b/railties/test/generators/metal_generator_test.rb @@ -9,10 +9,15 @@ class MetalGeneratorTest < GeneratorsTestCase assert_file "app/metal/foo.rb", /class Foo/ end + def test_check_class_collision + content = capture(:stderr){ run_generator ["object"] } + assert_match /The name 'Object' is either already used in your application or reserved/, content + end + protected - def run_generator(args=[]) - silence(:stdout) { Rails::Generators::MetalGenerator.start ["foo"].concat(args), :root => destination_root } + def run_generator(args=["foo"]) + silence(:stdout) { Rails::Generators::MetalGenerator.start args, :root => destination_root } end end diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb index b4aa39ae5f..3f2b27c518 100644 --- a/railties/test/generators/plugin_generator_test.rb +++ b/railties/test/generators/plugin_generator_test.rb @@ -15,23 +15,28 @@ class PluginGeneratorTest < GeneratorsTestCase ).each{ |path| assert_file path } end + def test_check_class_collision + content = capture(:stderr){ run_generator ["object"] } + assert_match /The name 'Object' is either already used in your application or reserved/, content + end + def test_invokes_default_test_framework run_generator assert_file "vendor/plugins/plugin_fu/test/plugin_fu_test.rb" end def test_logs_if_the_test_framework_cannot_be_found - content = run_generator ["--test-framework=unknown"] + content = run_generator ["plugin_fu", "--test-framework=unknown"] assert_match /Could not find and invoke 'unknown:generators:plugin'/, content end def test_creates_tasks_if_required - run_generator ["--with-tasks"] + run_generator ["plugin_fu", "--with-tasks"] assert_file "vendor/plugins/plugin_fu/tasks/plugin_fu_tasks.rake" end def test_creates_generator_if_required - run_generator ["--with-generator"] + run_generator ["plugin_fu", "--with-generator"] assert_file "vendor/plugins/plugin_fu/generators/plugin_fu/templates" flag = /class PluginFuGenerator < Rails::Generators::NamedBase/ @@ -40,8 +45,8 @@ class PluginGeneratorTest < GeneratorsTestCase protected - def run_generator(args=[]) - silence(:stdout) { Rails::Generators::PluginGenerator.start ["plugin_fu"].concat(args), :root => destination_root } + def run_generator(args=["plugin_fu"]) + silence(:stdout) { Rails::Generators::PluginGenerator.start args, :root => destination_root } end end -- cgit v1.2.3 From 0bb95968db3695467b63357aab66a9dddb62295c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 25 Jun 2009 15:45:15 +0200 Subject: More code refactoring. --- railties/test/generators/app_generator_test.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb index c41f257e15..1e1c7cfb04 100644 --- a/railties/test/generators/app_generator_test.rb +++ b/railties/test/generators/app_generator_test.rb @@ -4,6 +4,16 @@ require 'generators/rails/app/app_generator' class AppGeneratorTest < GeneratorsTestCase + def setup + super + Rails::Generators::AppGenerator.instance_variable_set('@desc', nil) + end + + def teardown + super + Rails::Generators::AppGenerator.instance_variable_set('@desc', nil) + end + def test_application_skeleton_is_created run_generator @@ -120,6 +130,20 @@ class AppGeneratorTest < GeneratorsTestCase assert_match /It works!/, silence(:stdout){ generator.invoke(:all) } end + def test_usage_read_from_file + File.expects(:read).returns("USAGE FROM FILE") + assert_equal "USAGE FROM FILE", Rails::Generators::AppGenerator.desc + end + + def test_default_usage + File.expects(:exist?).returns(false) + assert_match /Create rails files for app generator/, Rails::Generators::AppGenerator.desc + end + + def test_default_namespace + assert_match "rails:generators:app", Rails::Generators::AppGenerator.namespace + end + protected def run_generator(args=[]) -- cgit v1.2.3 From 534f7b54e33a142c8c0aca8b92a6298701efd13b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 25 Jun 2009 16:21:33 +0200 Subject: Mailer tests. --- railties/test/generators/mailer_generator_test.rb | 48 +++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 railties/test/generators/mailer_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/mailer_generator_test.rb b/railties/test/generators/mailer_generator_test.rb new file mode 100644 index 0000000000..2574ed43bd --- /dev/null +++ b/railties/test/generators/mailer_generator_test.rb @@ -0,0 +1,48 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/erb/mailer/mailer_generator' +require 'generators/rails/mailer/mailer_generator' +require 'generators/test_unit/mailer/mailer_generator' + +class MailerGeneratorTest < GeneratorsTestCase + + def test_mailer_skeleton_is_created + run_generator + assert_file "app/models/notifier.rb" + end + + def test_check_class_collision + content = capture(:stderr){ run_generator ["object"] } + assert_match /The name 'Object' is either already used in your application or reserved/, content + end + + def test_invokes_default_test_framework + run_generator + assert_file "test/unit/notifier_test.rb" + assert_file "test/fixtures/notifier/foo" + assert_file "test/fixtures/notifier/bar" + end + + def test_invokes_default_template_engine + run_generator + assert_file "app/views/notifier/foo.erb" + assert_file "app/views/notifier/bar.erb" + end + + def test_invokes_default_template_engine_even_with_no_action + run_generator ["notifier"] + assert_file "app/views/notifier" + end + + def test_logs_if_the_template_engine_cannot_be_found + content = run_generator ["notifier", "foo", "bar", "--template-engine=unknown"] + assert_match /Could not find and invoke 'unknown:generators:mailer'/, content + end + + protected + + def run_generator(args=["notifier", "foo", "bar"]) + silence(:stdout) { Rails::Generators::MailerGenerator.start args, :root => destination_root } + end + +end -- cgit v1.2.3 From aee63a12f2cfd110725c74686ae1eed58e18fda7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 25 Jun 2009 16:27:44 +0200 Subject: More tests for mailer. --- railties/test/generators/mailer_generator_test.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'railties/test') diff --git a/railties/test/generators/mailer_generator_test.rb b/railties/test/generators/mailer_generator_test.rb index 2574ed43bd..d702379822 100644 --- a/railties/test/generators/mailer_generator_test.rb +++ b/railties/test/generators/mailer_generator_test.rb @@ -8,7 +8,7 @@ class MailerGeneratorTest < GeneratorsTestCase def test_mailer_skeleton_is_created run_generator - assert_file "app/models/notifier.rb" + assert_file "app/models/notifier.rb", /class Notifier < ActionMailer::Base/ end def test_check_class_collision @@ -39,6 +39,12 @@ class MailerGeneratorTest < GeneratorsTestCase assert_match /Could not find and invoke 'unknown:generators:mailer'/, content end + def test_actions_are_turned_into_methods + run_generator + assert_file "app/models/notifier.rb", /def foo/ + assert_file "app/models/notifier.rb", /def bar/ + end + protected def run_generator(args=["notifier", "foo", "bar"]) -- cgit v1.2.3 From da1baeab4a681b63b29f4a3c7222d660306551d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 26 Jun 2009 09:11:37 +0200 Subject: Added integration and performance test generators. --- .../test/generators/integration_test_generator_test.rb | 18 ++++++++++++++++++ .../test/generators/performance_test_generator_test.rb | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 railties/test/generators/integration_test_generator_test.rb create mode 100644 railties/test/generators/performance_test_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/integration_test_generator_test.rb b/railties/test/generators/integration_test_generator_test.rb new file mode 100644 index 0000000000..9e1e265c9a --- /dev/null +++ b/railties/test/generators/integration_test_generator_test.rb @@ -0,0 +1,18 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/rails/integration_test/integration_test_generator' + +class IntegrationTestGeneratorTest < GeneratorsTestCase + + def test_integration_test_skeleton_is_created + run_generator + assert_file "test/integration/integration_test.rb" + end + + protected + + def run_generator(args=["integration"]) + silence(:stdout) { Rails::Generators::IntegrationTestGenerator.start args, :root => destination_root } + end + +end diff --git a/railties/test/generators/performance_test_generator_test.rb b/railties/test/generators/performance_test_generator_test.rb new file mode 100644 index 0000000000..0a92bb587b --- /dev/null +++ b/railties/test/generators/performance_test_generator_test.rb @@ -0,0 +1,18 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/rails/performance_test/performance_test_generator' + +class PerformanceTestGeneratorTest < GeneratorsTestCase + + def test_performance_test_skeleton_is_created + run_generator + assert_file "test/performance/performance_test.rb" + end + + protected + + def run_generator(args=["performance"]) + silence(:stdout) { Rails::Generators::PerformanceTestGenerator.start args, :root => destination_root } + end + +end -- cgit v1.2.3 From e0843136405e26a13405567d65fe7e5cc40dfcff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 26 Jun 2009 09:53:53 +0200 Subject: Added HelperGenerator. --- railties/test/generators/helper_generator_test.rb | 36 ++++++++++++++++++++++ .../generators/integration_test_generator_test.rb | 2 +- .../generators/performance_test_generator_test.rb | 2 +- 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 railties/test/generators/helper_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/helper_generator_test.rb b/railties/test/generators/helper_generator_test.rb new file mode 100644 index 0000000000..506889e4a7 --- /dev/null +++ b/railties/test/generators/helper_generator_test.rb @@ -0,0 +1,36 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/rails/helper/helper_generator' +require 'generators/test_unit/helper/helper_generator' + +ObjectHelper = Class.new + +class HelperGeneratorTest < GeneratorsTestCase + + def test_helper_skeleton_is_created + run_generator + assert_file "app/helpers/admin_helper.rb", /module AdminHelper/ + end + + def test_invokes_default_test_framework + run_generator + assert_file "test/unit/helpers/admin_helper_test.rb" + end + + def test_logs_if_the_test_framework_cannot_be_found + content = run_generator ["admin", "--test-framework=unknown"] + assert_match /Could not find and invoke 'unknown:generators:helper'/, content + end + + def test_check_class_collision + content = capture(:stderr){ run_generator ["object"] } + assert_match /The name 'ObjectHelper' is either already used in your application or reserved/, content + end + + protected + + def run_generator(args=["admin"]) + silence(:stdout) { Rails::Generators::HelperGenerator.start args, :root => destination_root } + end + +end diff --git a/railties/test/generators/integration_test_generator_test.rb b/railties/test/generators/integration_test_generator_test.rb index 9e1e265c9a..1961a102b9 100644 --- a/railties/test/generators/integration_test_generator_test.rb +++ b/railties/test/generators/integration_test_generator_test.rb @@ -6,7 +6,7 @@ class IntegrationTestGeneratorTest < GeneratorsTestCase def test_integration_test_skeleton_is_created run_generator - assert_file "test/integration/integration_test.rb" + assert_file "test/integration/integration_test.rb", /class IntegrationTest < ActionController::IntegrationTest/ end protected diff --git a/railties/test/generators/performance_test_generator_test.rb b/railties/test/generators/performance_test_generator_test.rb index 0a92bb587b..fdfbf9031c 100644 --- a/railties/test/generators/performance_test_generator_test.rb +++ b/railties/test/generators/performance_test_generator_test.rb @@ -6,7 +6,7 @@ class PerformanceTestGeneratorTest < GeneratorsTestCase def test_performance_test_skeleton_is_created run_generator - assert_file "test/performance/performance_test.rb" + assert_file "test/performance/performance_test.rb", /class PerformanceTest < ActionController::PerformanceTest/ end protected -- cgit v1.2.3 From 6bd101188e3396317d93d2d0692587d577ad9662 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 26 Jun 2009 10:03:05 +0200 Subject: Class collision checks. --- railties/test/generators/helper_generator_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'railties/test') diff --git a/railties/test/generators/helper_generator_test.rb b/railties/test/generators/helper_generator_test.rb index 506889e4a7..56e66a7c41 100644 --- a/railties/test/generators/helper_generator_test.rb +++ b/railties/test/generators/helper_generator_test.rb @@ -14,7 +14,7 @@ class HelperGeneratorTest < GeneratorsTestCase def test_invokes_default_test_framework run_generator - assert_file "test/unit/helpers/admin_helper_test.rb" + assert_file "test/unit/helpers/admin_helper_test.rb", /class AdminHelperTest < ActionView::TestCase/ end def test_logs_if_the_test_framework_cannot_be_found -- cgit v1.2.3 From 2f3681dfc24e51698b9b900a5d03950da4508d2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 26 Jun 2009 10:40:02 +0200 Subject: Clean up class collisions check and a class method helper. --- railties/test/generators/helper_generator_test.rb | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators/helper_generator_test.rb b/railties/test/generators/helper_generator_test.rb index 56e66a7c41..9b2f277f54 100644 --- a/railties/test/generators/helper_generator_test.rb +++ b/railties/test/generators/helper_generator_test.rb @@ -4,6 +4,7 @@ require 'generators/rails/helper/helper_generator' require 'generators/test_unit/helper/helper_generator' ObjectHelper = Class.new +AnotherObjectHelperTest = Class.new class HelperGeneratorTest < GeneratorsTestCase @@ -27,6 +28,11 @@ class HelperGeneratorTest < GeneratorsTestCase assert_match /The name 'ObjectHelper' is either already used in your application or reserved/, content end + def test_check_class_collision_on_tests + content = capture(:stderr){ run_generator ["another_object"] } + assert_match /The name 'AnotherObjectHelperTest' is either already used in your application or reserved/, content + end + protected def run_generator(args=["admin"]) -- cgit v1.2.3 From e2346244a25ea9365ce0c93ca355c710b6712304 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 26 Jun 2009 11:57:40 +0200 Subject: Added Controller Generators. --- .../test/generators/controller_generator_test.rb | 62 ++++++++++++++++++++++ railties/test/generators/mailer_generator_test.rb | 4 +- 2 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 railties/test/generators/controller_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/controller_generator_test.rb b/railties/test/generators/controller_generator_test.rb new file mode 100644 index 0000000000..88b54a54ed --- /dev/null +++ b/railties/test/generators/controller_generator_test.rb @@ -0,0 +1,62 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/erb/controller/controller_generator' +require 'generators/rails/controller/controller_generator' +require 'generators/rails/helper/helper_generator' +require 'generators/test_unit/controller/controller_generator' +require 'generators/test_unit/helper/helper_generator' + +ObjectController = Class.new + +class ControllerGeneratorTest < GeneratorsTestCase + + def test_controller_skeleton_is_created + run_generator + assert_file "app/controllers/account_controller.rb", /class AccountController < ApplicationController/ + end + + def test_check_class_collision + content = capture(:stderr){ run_generator ["object"] } + assert_match /The name 'ObjectController' is either already used in your application or reserved/, content + end + + def test_invokes_helpers + run_generator + assert_file "app/helpers/account_helper.rb" + assert_file "test/unit/helpers/account_helper_test.rb" + end + + def test_invokes_default_test_framework + run_generator + assert_file "test/functional/account_controller_test.rb" + end + + def test_invokes_default_template_engine + run_generator + assert_file "app/views/account/foo.html.erb", /app\/views\/account\/foo/ + assert_file "app/views/account/bar.html.erb", /app\/views\/account\/bar/ + end + + def test_invokes_default_template_engine_even_with_no_action + run_generator ["account"] + assert_file "app/views/account" + end + + def test_template_engine_with_class_path + run_generator ["admin/account"] + assert_file "app/views/admin/account" + end + + def test_actions_are_turned_into_methods + run_generator + assert_file "app/controllers/account_controller.rb", /def foo/ + assert_file "app/controllers/account_controller.rb", /def bar/ + end + + protected + + def run_generator(args=["Account", "foo", "bar"]) + silence(:stdout) { Rails::Generators::ControllerGenerator.start args, :root => destination_root } + end + +end diff --git a/railties/test/generators/mailer_generator_test.rb b/railties/test/generators/mailer_generator_test.rb index d702379822..710847587d 100644 --- a/railties/test/generators/mailer_generator_test.rb +++ b/railties/test/generators/mailer_generator_test.rb @@ -25,8 +25,8 @@ class MailerGeneratorTest < GeneratorsTestCase def test_invokes_default_template_engine run_generator - assert_file "app/views/notifier/foo.erb" - assert_file "app/views/notifier/bar.erb" + assert_file "app/views/notifier/foo.erb", /app\/views\/notifier\/foo/ + assert_file "app/views/notifier/bar.erb", /app\/views\/notifier\/bar/ end def test_invokes_default_template_engine_even_with_no_action -- cgit v1.2.3 From e375819b76ac04bc60fd516b15bbe42c093eb547 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 26 Jun 2009 20:42:00 +0200 Subject: Spec --no and --skip. --- railties/test/generators/controller_generator_test.rb | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'railties/test') diff --git a/railties/test/generators/controller_generator_test.rb b/railties/test/generators/controller_generator_test.rb index 88b54a54ed..e10580f40f 100644 --- a/railties/test/generators/controller_generator_test.rb +++ b/railties/test/generators/controller_generator_test.rb @@ -20,17 +20,28 @@ class ControllerGeneratorTest < GeneratorsTestCase assert_match /The name 'ObjectController' is either already used in your application or reserved/, content end - def test_invokes_helpers + def test_invokes_helper run_generator assert_file "app/helpers/account_helper.rb" assert_file "test/unit/helpers/account_helper_test.rb" end + def test_does_not_invoke_helper_if_required + run_generator ["account", "--skip-helper"] + assert_no_file "app/helpers/account_helper.rb" + assert_no_file "test/unit/helpers/account_helper_test.rb" + end + def test_invokes_default_test_framework run_generator assert_file "test/functional/account_controller_test.rb" end + def test_does_not_invoke_test_framework_if_required + run_generator ["account", "--no-test-framework"] + assert_no_file "test/functional/account_controller_test.rb" + end + def test_invokes_default_template_engine run_generator assert_file "app/views/account/foo.html.erb", /app\/views\/account\/foo/ -- cgit v1.2.3 From ff48e23a4eb9f4a5fd3a02addb398499fb3c1455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 27 Jun 2009 11:05:43 +0200 Subject: Make Observer generator agnostic. --- railties/test/generators/observer_generator_test.rb | 1 + 1 file changed, 1 insertion(+) (limited to 'railties/test') diff --git a/railties/test/generators/observer_generator_test.rb b/railties/test/generators/observer_generator_test.rb index 85c95c9dc7..780c854d85 100644 --- a/railties/test/generators/observer_generator_test.rb +++ b/railties/test/generators/observer_generator_test.rb @@ -1,5 +1,6 @@ require 'abstract_unit' require 'generators/generators_test_helper' +require 'generators/active_record/observer/observer_generator' require 'generators/rails/observer/observer_generator' require 'generators/test_unit/observer/observer_generator' -- cgit v1.2.3 From 8c5622f0d4d3b5c6bce52b0eb22756a83060b1b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 27 Jun 2009 13:03:07 +0200 Subject: Initial scratch of model generators. --- .../test/generators/controller_generator_test.rb | 2 + railties/test/generators/generators_test_helper.rb | 14 +++-- railties/test/generators/helper_generator_test.rb | 19 ++++++ railties/test/generators/mailer_generator_test.rb | 6 +- railties/test/generators/model_generator_test.rb | 72 ++++++++++++++++++++++ .../test/generators/observer_generator_test.rb | 6 +- 6 files changed, 107 insertions(+), 12 deletions(-) create mode 100644 railties/test/generators/model_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/controller_generator_test.rb b/railties/test/generators/controller_generator_test.rb index e10580f40f..d0c963a9ac 100644 --- a/railties/test/generators/controller_generator_test.rb +++ b/railties/test/generators/controller_generator_test.rb @@ -20,6 +20,8 @@ class ControllerGeneratorTest < GeneratorsTestCase assert_match /The name 'ObjectController' is either already used in your application or reserved/, content end + # No need to spec content since it's already spec'ed on helper generator. + # def test_invokes_helper run_generator assert_file "app/helpers/account_helper.rb" diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index 1fcfdaebb9..29ff306551 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -34,15 +34,17 @@ class GeneratorsTestCase < Test::Unit::TestCase end alias :silence :capture - def assert_file(relative, content=nil) + def assert_file(relative, *contents) absolute = File.join(destination_root, relative) assert File.exists?(absolute) - case content - when String - assert_equal content, File.read(absolute) - when Regexp - assert_match content, File.read(absolute) + contents.each do |content| + case content + when String + assert_equal content, File.read(absolute) + when Regexp + assert_match content, File.read(absolute) + end end end diff --git a/railties/test/generators/helper_generator_test.rb b/railties/test/generators/helper_generator_test.rb index 9b2f277f54..b2533e5315 100644 --- a/railties/test/generators/helper_generator_test.rb +++ b/railties/test/generators/helper_generator_test.rb @@ -33,6 +33,25 @@ class HelperGeneratorTest < GeneratorsTestCase assert_match /The name 'AnotherObjectHelperTest' is either already used in your application or reserved/, content end + def test_namespaced_and_not_namespaced_helpers + run_generator ["products"] + + # We have to require the generated helper to show the problem because + # the test helpers just check for generated files and contents but + # do not actually load them. But they have to be loaded (as in a real environment) + # to make the second generator run fail + require "#{destination_root}/app/helpers/products_helper" + + assert_nothing_raised do + begin + run_generator ["admin::products"] + ensure + # cleanup + Object.send(:remove_const, :ProductsHelper) + end + end + end + protected def run_generator(args=["admin"]) diff --git a/railties/test/generators/mailer_generator_test.rb b/railties/test/generators/mailer_generator_test.rb index 710847587d..3e5dc60361 100644 --- a/railties/test/generators/mailer_generator_test.rb +++ b/railties/test/generators/mailer_generator_test.rb @@ -18,9 +18,9 @@ class MailerGeneratorTest < GeneratorsTestCase def test_invokes_default_test_framework run_generator - assert_file "test/unit/notifier_test.rb" - assert_file "test/fixtures/notifier/foo" - assert_file "test/fixtures/notifier/bar" + assert_file "test/unit/notifier_test.rb", /class NotifierTest < ActionMailer::TestCase/ + assert_file "test/fixtures/notifier/foo", /app\/views\/notifier\/foo/ + assert_file "test/fixtures/notifier/bar", /app\/views\/notifier\/bar/ end def test_invokes_default_template_engine diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb new file mode 100644 index 0000000000..425c4f581a --- /dev/null +++ b/railties/test/generators/model_generator_test.rb @@ -0,0 +1,72 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/active_record/model/model_generator' +require 'generators/rails/model/model_generator' +require 'generators/test_unit/model/model_generator' + +class ModelGeneratorTest < GeneratorsTestCase + + def test_invokes_default_orm + run_generator + assert_file "app/models/account.rb", /class Account < ActiveRecord::Base/ + end + + def test_invokes_default_test_framework + run_generator + assert_file "test/unit/account_test.rb", /class AccountTest < ActiveSupport::TestCase/ + assert_file "test/fixtures/accounts.yml", /name: MyString/, /age: 1/ + end + + def test_fixtures_are_skipped + run_generator ["account", "--skip-fixture"] + assert_no_file "test/fixtures/accounts.yml" + end + + def test_check_class_collision + content = capture(:stderr){ run_generator ["object"] } + assert_match /The name 'Object' is either already used in your application or reserved/, content + end + +# def test_model_skip_migration_skips_migration +# run_generator('model', %w(Product name:string --skip-migration)) + +# assert_generated_model_for :product +# assert_generated_fixtures_for :products +# assert_skipped_migration :create_products +# end + +# def test_model_with_attributes_generates_resources_with_attributes +# run_generator('model', %w(Product name:string supplier_id:integer created_at:timestamp)) + +# assert_generated_model_for :product +# assert_generated_fixtures_for :products +# assert_generated_migration :create_products do |t| +# assert_generated_column t, :name, :string +# assert_generated_column t, :supplier_id, :integer +# assert_generated_column t, :created_at, :timestamp +# end +# end + +# def test_model_with_reference_attributes_generates_belongs_to_associations +# run_generator('model', %w(Product name:string supplier:references)) + +# assert_generated_model_for :product do |body| +# assert body =~ /^\s+belongs_to :supplier/, "#{body.inspect} should contain 'belongs_to :supplier'" +# end +# end + +# def test_model_with_belongs_to_attributes_generates_belongs_to_associations +# run_generator('model', %w(Product name:string supplier:belongs_to)) + +# assert_generated_model_for :product do |body| +# assert body =~ /^\s+belongs_to :supplier/, "#{body.inspect} should contain 'belongs_to :supplier'" +# end +# end + + protected + + def run_generator(args=["Account", "name:string", "age:integer"]) + silence(:stdout) { Rails::Generators::ModelGenerator.start args, :root => destination_root } + end + +end diff --git a/railties/test/generators/observer_generator_test.rb b/railties/test/generators/observer_generator_test.rb index 780c854d85..e2b027028a 100644 --- a/railties/test/generators/observer_generator_test.rb +++ b/railties/test/generators/observer_generator_test.rb @@ -6,19 +6,19 @@ require 'generators/test_unit/observer/observer_generator' class ObserverGeneratorTest < GeneratorsTestCase - def test_observer_skeleton_is_created + def test_invokes_default_orm run_generator assert_file "app/models/account_observer.rb", /class AccountObserver < ActiveRecord::Observer/ end - def test_observer_with_class_path_skeleton_is_created + def test_invokes_default_orm_with_class_path run_generator ["admin/account"] assert_file "app/models/admin/account_observer.rb", /class Admin::AccountObserver < ActiveRecord::Observer/ end def test_invokes_default_test_framework run_generator - assert_file "test/unit/account_observer_test.rb" + assert_file "test/unit/account_observer_test.rb", /class AccountObserverTest < ActiveSupport::TestCase/ end def test_logs_if_the_test_framework_cannot_be_found -- cgit v1.2.3 From acaeaf308a071d9892f8d555be0697c45558ef4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 27 Jun 2009 14:03:35 +0200 Subject: Add a fixture replacement hook to TestUnit model generator. --- railties/test/generators/helper_generator_test.rb | 2 +- railties/test/generators/mailer_generator_test.rb | 2 +- railties/test/generators/model_generator_test.rb | 6 ++++++ railties/test/generators/observer_generator_test.rb | 2 +- railties/test/generators/plugin_generator_test.rb | 2 +- 5 files changed, 10 insertions(+), 4 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/helper_generator_test.rb b/railties/test/generators/helper_generator_test.rb index b2533e5315..41e1e1dce2 100644 --- a/railties/test/generators/helper_generator_test.rb +++ b/railties/test/generators/helper_generator_test.rb @@ -20,7 +20,7 @@ class HelperGeneratorTest < GeneratorsTestCase def test_logs_if_the_test_framework_cannot_be_found content = run_generator ["admin", "--test-framework=unknown"] - assert_match /Could not find and invoke 'unknown:generators:helper'/, content + assert_match /Could not find and invoke 'unknown'/, content end def test_check_class_collision diff --git a/railties/test/generators/mailer_generator_test.rb b/railties/test/generators/mailer_generator_test.rb index 3e5dc60361..5d21da3dd1 100644 --- a/railties/test/generators/mailer_generator_test.rb +++ b/railties/test/generators/mailer_generator_test.rb @@ -36,7 +36,7 @@ class MailerGeneratorTest < GeneratorsTestCase def test_logs_if_the_template_engine_cannot_be_found content = run_generator ["notifier", "foo", "bar", "--template-engine=unknown"] - assert_match /Could not find and invoke 'unknown:generators:mailer'/, content + assert_match /Could not find and invoke 'unknown'/, content end def test_actions_are_turned_into_methods diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index 425c4f581a..904f77242d 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -22,6 +22,12 @@ class ModelGeneratorTest < GeneratorsTestCase assert_no_file "test/fixtures/accounts.yml" end + def test_fixtures_are_skipped_if_fixture_replacement_is_given + content = run_generator ["account", "-r", "fixjour"] + assert_match /Could not find and invoke 'fixjour'/, content + assert_no_file "test/fixtures/accounts.yml" + end + def test_check_class_collision content = capture(:stderr){ run_generator ["object"] } assert_match /The name 'Object' is either already used in your application or reserved/, content diff --git a/railties/test/generators/observer_generator_test.rb b/railties/test/generators/observer_generator_test.rb index e2b027028a..3707b70c7e 100644 --- a/railties/test/generators/observer_generator_test.rb +++ b/railties/test/generators/observer_generator_test.rb @@ -23,7 +23,7 @@ class ObserverGeneratorTest < GeneratorsTestCase def test_logs_if_the_test_framework_cannot_be_found content = run_generator ["account", "--test-framework=unknown"] - assert_match /Could not find and invoke 'unknown:generators:observer'/, content + assert_match /Could not find and invoke 'unknown'/, content end protected diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb index 3f2b27c518..9e7b597739 100644 --- a/railties/test/generators/plugin_generator_test.rb +++ b/railties/test/generators/plugin_generator_test.rb @@ -27,7 +27,7 @@ class PluginGeneratorTest < GeneratorsTestCase def test_logs_if_the_test_framework_cannot_be_found content = run_generator ["plugin_fu", "--test-framework=unknown"] - assert_match /Could not find and invoke 'unknown:generators:plugin'/, content + assert_match /Could not find and invoke 'unknown'/, content end def test_creates_tasks_if_required -- cgit v1.2.3 From 7b6c5ed7dbc2fcbaaf56deacd8061b3da51221e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 27 Jun 2009 15:41:29 +0200 Subject: Added parent option to model generator. --- railties/test/generators/model_generator_test.rb | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index 904f77242d..55c08d0199 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -11,6 +11,11 @@ class ModelGeneratorTest < GeneratorsTestCase assert_file "app/models/account.rb", /class Account < ActiveRecord::Base/ end + def test_orm_with_parent_option + run_generator ["account", "--parent", "Admin::Account"] + assert_file "app/models/account.rb", /class Account < Admin::Account/ + end + def test_invokes_default_test_framework run_generator assert_file "test/unit/account_test.rb", /class AccountTest < ActiveSupport::TestCase/ -- cgit v1.2.3 From fdeee65c9624fa1490aaee829468af3b015fe956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 27 Jun 2009 16:01:11 +0200 Subject: Add model_subclass generator with deprecation warning. --- railties/test/generators/model_generator_test.rb | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index 55c08d0199..62ad1d9305 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -16,6 +16,11 @@ class ModelGeneratorTest < GeneratorsTestCase assert_file "app/models/account.rb", /class Account < Admin::Account/ end + def test_orm_with_underscored_parent_option + run_generator ["account", "--parent", "admin/account"] + assert_file "app/models/account.rb", /class Account < Admin::Account/ + end + def test_invokes_default_test_framework run_generator assert_file "test/unit/account_test.rb", /class AccountTest < ActiveSupport::TestCase/ -- cgit v1.2.3 From c03585aa8da175888ad0893ef29d887f87fb749b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 27 Jun 2009 21:26:53 +0200 Subject: Show invoked generators options on meta generators. --- railties/test/generators/controller_generator_test.rb | 5 +++++ railties/test/generators/model_generator_test.rb | 6 ++++++ 2 files changed, 11 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators/controller_generator_test.rb b/railties/test/generators/controller_generator_test.rb index d0c963a9ac..6ef0e1cb3d 100644 --- a/railties/test/generators/controller_generator_test.rb +++ b/railties/test/generators/controller_generator_test.rb @@ -10,6 +10,11 @@ ObjectController = Class.new class ControllerGeneratorTest < GeneratorsTestCase + def test_help_does_not_show_invoked_generators_options_if_they_already_exist + content = run_generator ["--help"] + assert_no_match /Helper options:/, content + end + def test_controller_skeleton_is_created run_generator assert_file "app/controllers/account_controller.rb", /class AccountController < ApplicationController/ diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index 62ad1d9305..8a9c081cd9 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -6,6 +6,12 @@ require 'generators/test_unit/model/model_generator' class ModelGeneratorTest < GeneratorsTestCase + def test_help_shows_invoked_generators_options + content = run_generator ["--help"] + assert_match /ActiveRecord options:/, content + assert_match /TestUnit options:/, content + end + def test_invokes_default_orm run_generator assert_file "app/models/account.rb", /class Account < ActiveRecord::Base/ -- cgit v1.2.3 From 496dde95fbedddad5d04afbe660ff1544229032c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sun, 28 Jun 2009 11:56:44 +0200 Subject: Added migrations and make base generators be lazy loaded. --- railties/test/generators/generators_test_helper.rb | 31 +++++++-- railties/test/generators/model_generator_test.rb | 80 +++++++++++----------- 2 files changed, 66 insertions(+), 45 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index 29ff306551..662646fbff 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -36,20 +36,41 @@ class GeneratorsTestCase < Test::Unit::TestCase def assert_file(relative, *contents) absolute = File.join(destination_root, relative) - assert File.exists?(absolute) + assert File.exists?(absolute), "Expected file #{relative.inspect} to exist, but does not" + read = File.read(absolute) unless File.directory?(absolute) contents.each do |content| case content when String - assert_equal content, File.read(absolute) + assert_equal content, read when Regexp - assert_match content, File.read(absolute) + assert_match content, read end end + read end - def assert_no_file(relative, content=nil) + def assert_no_file(relative) absolute = File.join(destination_root, relative) - assert !File.exists?(absolute) + assert !File.exists?(absolute), "Expected file #{relative.inspect} to not exist, but does" + end + + def assert_migration(relative, *contents) + file_name = migration_file_name(relative) + assert file_name, "Expected migration #{relative} to exist, but was not found" + assert_file File.join(File.dirname(relative), file_name), *contents + end + + def assert_no_migration(relative) + file_name = migration_file_name(relative) + assert_nil file_name, "Expected migration #{relative} to not exist, but found #{file_name}" + end + + def migration_file_name(relative) + absolute = File.join(destination_root, relative) + dirname, file_name = File.dirname(absolute), File.basename(absolute).sub(/\.rb$/, '') + + migration = Dir.glob("#{dirname}/[0-9]*_*.rb").grep(/\d+_#{file_name}.rb$/).first + File.basename(migration) if migration end end diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index 8a9c081cd9..212f0f3691 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -17,28 +17,64 @@ class ModelGeneratorTest < GeneratorsTestCase assert_file "app/models/account.rb", /class Account < ActiveRecord::Base/ end - def test_orm_with_parent_option + def test_model_with_parent_option run_generator ["account", "--parent", "Admin::Account"] assert_file "app/models/account.rb", /class Account < Admin::Account/ end - def test_orm_with_underscored_parent_option + def test_model_with_underscored_parent_option run_generator ["account", "--parent", "admin/account"] assert_file "app/models/account.rb", /class Account < Admin::Account/ end + def test_migration + run_generator + assert_migration "db/migrate/create_accounts.rb", /class CreateAccounts < ActiveRecord::Migration/ + end + + def test_migration_is_skipped + run_generator ["account", "--no-migration"] + assert_no_migration "db/migrate/create_accounts.rb" + end + + def test_migration_with_attributes + run_generator ["product", "name:string", "supplier_id:integer"] + assert_migration "db/migrate/create_products.rb", /t\.string :name/, /t\.integer :supplier_id/ + end + + def test_model_with_references_attribute_generates_belongs_to_associations + run_generator ["product", "name:string", "supplier_id:references"] + assert_file "app/models/product.rb", /belongs_to :supplier/ + end + + def test_model_with_belongs_to_attribute_generates_belongs_to_associations + run_generator ["product", "name:string", "supplier_id:belongs_to"] + assert_file "app/models/product.rb", /belongs_to :supplier/ + end + + def test_migration_with_timestamps + run_generator + assert_migration "db/migrate/create_accounts.rb", /t.timestamps/ + end + + def test_migration_timestamps_are_skipped + run_generator ["account", "--no-timestamps"] + content = assert_migration "db/migrate/create_accounts.rb" + assert_no_match /t.timestamps/, content + end + def test_invokes_default_test_framework run_generator assert_file "test/unit/account_test.rb", /class AccountTest < ActiveSupport::TestCase/ assert_file "test/fixtures/accounts.yml", /name: MyString/, /age: 1/ end - def test_fixtures_are_skipped + def test_fixture_is_skipped run_generator ["account", "--skip-fixture"] assert_no_file "test/fixtures/accounts.yml" end - def test_fixtures_are_skipped_if_fixture_replacement_is_given + def test_fixture_is_skipped_if_fixture_replacement_is_given content = run_generator ["account", "-r", "fixjour"] assert_match /Could not find and invoke 'fixjour'/, content assert_no_file "test/fixtures/accounts.yml" @@ -49,42 +85,6 @@ class ModelGeneratorTest < GeneratorsTestCase assert_match /The name 'Object' is either already used in your application or reserved/, content end -# def test_model_skip_migration_skips_migration -# run_generator('model', %w(Product name:string --skip-migration)) - -# assert_generated_model_for :product -# assert_generated_fixtures_for :products -# assert_skipped_migration :create_products -# end - -# def test_model_with_attributes_generates_resources_with_attributes -# run_generator('model', %w(Product name:string supplier_id:integer created_at:timestamp)) - -# assert_generated_model_for :product -# assert_generated_fixtures_for :products -# assert_generated_migration :create_products do |t| -# assert_generated_column t, :name, :string -# assert_generated_column t, :supplier_id, :integer -# assert_generated_column t, :created_at, :timestamp -# end -# end - -# def test_model_with_reference_attributes_generates_belongs_to_associations -# run_generator('model', %w(Product name:string supplier:references)) - -# assert_generated_model_for :product do |body| -# assert body =~ /^\s+belongs_to :supplier/, "#{body.inspect} should contain 'belongs_to :supplier'" -# end -# end - -# def test_model_with_belongs_to_attributes_generates_belongs_to_associations -# run_generator('model', %w(Product name:string supplier:belongs_to)) - -# assert_generated_model_for :product do |body| -# assert body =~ /^\s+belongs_to :supplier/, "#{body.inspect} should contain 'belongs_to :supplier'" -# end -# end - protected def run_generator(args=["Account", "name:string", "age:integer"]) -- cgit v1.2.3 From 4f3e44fa03ab8fc47f75fa710b28c72b9b2328b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sun, 28 Jun 2009 12:00:13 +0200 Subject: Move file action only to app generator. --- railties/test/generators/actions_test.rb | 8 ++++---- railties/test/generators/app_generator_test.rb | 9 +++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/actions_test.rb b/railties/test/generators/actions_test.rb index a0502e9112..baf687336a 100644 --- a/railties/test/generators/actions_test.rb +++ b/railties/test/generators/actions_test.rb @@ -20,13 +20,13 @@ class ActionsTest < GeneratorsTestCase assert_equal generator.instance_variable_get("@foo"), "FOO" end - def test_file_should_write_data_to_file_path - action :file, 'lib/test_file.rb', 'heres test data' + def test_create_file_should_write_data_to_file_path + action :create_file, 'lib/test_file.rb', 'heres test data' assert_file 'lib/test_file.rb', 'heres test data' end - def test_file_should_write_block_contents_to_file_path - action(:file, 'lib/test_file.rb'){ 'heres block data' } + def test_create_file_should_write_block_contents_to_file_path + action(:create_file, 'lib/test_file.rb'){ 'heres block data' } assert_file 'lib/test_file.rb', 'heres block data' end diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb index 1e1c7cfb04..6f0bad06b9 100644 --- a/railties/test/generators/app_generator_test.rb +++ b/railties/test/generators/app_generator_test.rb @@ -144,6 +144,11 @@ class AppGeneratorTest < GeneratorsTestCase assert_match "rails:generators:app", Rails::Generators::AppGenerator.namespace end + def test_file_is_added_for_backwards_compatibility + action :file, 'lib/test_file.rb', 'heres test data' + assert_file 'lib/test_file.rb', 'heres test data' + end + protected def run_generator(args=[]) @@ -154,4 +159,8 @@ class AppGeneratorTest < GeneratorsTestCase @generator ||= Rails::Generators::AppGenerator.new([destination_root], options, :root => destination_root) end + def action(*args, &block) + silence(:stdout){ generator.send(*args, &block) } + end + end -- cgit v1.2.3 From 1ca51df0001a750fafb0da70e4560c1ec439236c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sun, 28 Jun 2009 13:16:14 +0200 Subject: Added migration and session_migration generator. --- railties/test/generators/generators_test_helper.rb | 9 ++++ .../test/generators/migration_generator_test.rb | 58 ++++++++++++++++++++++ .../generators/session_migration_generator_test.rb | 24 +++++++++ 3 files changed, 91 insertions(+) create mode 100644 railties/test/generators/migration_generator_test.rb create mode 100644 railties/test/generators/session_migration_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index 662646fbff..7c58c7b64e 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -73,4 +73,13 @@ class GeneratorsTestCase < Test::Unit::TestCase migration = Dir.glob("#{dirname}/[0-9]*_*.rb").grep(/\d+_#{file_name}.rb$/).first File.basename(migration) if migration end + + def assert_class_method_for(content, method, &block) + assert_instance_method_for content, "self.#{method}", &block + end + + def assert_instance_method_for(content, method) + assert_match /def #{method}(.*?)end/m, content + yield content.match(/def #{method}(.*?)end/m)[1] + end end diff --git a/railties/test/generators/migration_generator_test.rb b/railties/test/generators/migration_generator_test.rb new file mode 100644 index 0000000000..90bc91344f --- /dev/null +++ b/railties/test/generators/migration_generator_test.rb @@ -0,0 +1,58 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/active_record/migration/migration_generator' +require 'generators/rails/migration/migration_generator' + +class MigrationGeneratorTest < GeneratorsTestCase + + def test_migration + @migration = "change_title_body_from_posts" + run_generator + assert_migration "db/migrate/#{@migration}.rb", /class ChangeTitleBodyFromPosts < ActiveRecord::Migration/ + end + + def test_migration_with_class_name + @migration = "ChangeTitleBodyFromPosts" + run_generator + assert_migration "db/migrate/change_title_body_from_posts.rb", /class #{@migration} < ActiveRecord::Migration/ + end + + def test_add_migration_with_attributes + @migration = "add_title_body_to_posts" + run_generator [@migration, "title:string", "body:text"] + content = assert_migration "db/migrate/#{@migration}.rb" + + assert_class_method_for content, :up do |up| + assert_match /add_column :posts, :title, :string/, up + assert_match /add_column :posts, :body, :text/, up + end + + assert_class_method_for content, :down do |down| + assert_match /remove_column :posts, :title/, down + assert_match /remove_column :posts, :body/, down + end + end + + def test_remove_migration_with_attributes + @migration = "remove_title_body_from_posts" + run_generator [@migration, "title:string", "body:text"] + content = assert_migration "db/migrate/#{@migration}.rb" + + assert_class_method_for content, :up do |up| + assert_match /remove_column :posts, :title/, up + assert_match /remove_column :posts, :body/, up + end + + assert_class_method_for content, :down do |down| + assert_match /add_column :posts, :title, :string/, down + assert_match /add_column :posts, :body, :text/, down + end + end + + protected + + def run_generator(args=[@migration]) + silence(:stdout) { Rails::Generators::MigrationGenerator.start args, :root => destination_root } + end + +end diff --git a/railties/test/generators/session_migration_generator_test.rb b/railties/test/generators/session_migration_generator_test.rb new file mode 100644 index 0000000000..05b51b1566 --- /dev/null +++ b/railties/test/generators/session_migration_generator_test.rb @@ -0,0 +1,24 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/active_record/session_migration/session_migration_generator' +require 'generators/rails/session_migration/session_migration_generator' + +class SessionMigrationGeneratorTest < GeneratorsTestCase + + def test_session_migration_with_default_name + run_generator + assert_migration "db/migrate/add_sessions_table.rb", /class AddSessionsTable < ActiveRecord::Migration/ + end + + def test_session_migration_with_given_name + run_generator ["create_session_table"] + assert_migration "db/migrate/create_session_table.rb", /class CreateSessionTable < ActiveRecord::Migration/ + end + + protected + + def run_generator(args=[]) + silence(:stdout) { Rails::Generators::SessionMigrationGenerator.start args, :root => destination_root } + end + +end -- cgit v1.2.3 From 9413dba432b11d86b80449ca7b959b32ecb0844c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sun, 28 Jun 2009 19:46:34 +0200 Subject: Added tessts for resources generator. --- .../test/generators/controller_generator_test.rb | 7 +- railties/test/generators/generators_test_helper.rb | 35 +++++---- .../test/generators/migration_generator_test.rb | 34 +++++---- railties/test/generators/model_generator_test.rb | 22 +++++- .../test/generators/resource_generator_test.rb | 87 ++++++++++++++++++++++ 5 files changed, 148 insertions(+), 37 deletions(-) create mode 100644 railties/test/generators/resource_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/controller_generator_test.rb b/railties/test/generators/controller_generator_test.rb index 6ef0e1cb3d..e3fe2594b9 100644 --- a/railties/test/generators/controller_generator_test.rb +++ b/railties/test/generators/controller_generator_test.rb @@ -67,8 +67,11 @@ class ControllerGeneratorTest < GeneratorsTestCase def test_actions_are_turned_into_methods run_generator - assert_file "app/controllers/account_controller.rb", /def foo/ - assert_file "app/controllers/account_controller.rb", /def bar/ + + assert_file "app/controllers/account_controller.rb" do |controller| + assert_instance_method controller, :foo + assert_instance_method controller, :bar + end end protected diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index 7c58c7b64e..591da45c72 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -38,7 +38,9 @@ class GeneratorsTestCase < Test::Unit::TestCase absolute = File.join(destination_root, relative) assert File.exists?(absolute), "Expected file #{relative.inspect} to exist, but does not" - read = File.read(absolute) unless File.directory?(absolute) + read = File.read(absolute) if block_given? || !contents.empty? + yield read if block_given? + contents.each do |content| case content when String @@ -47,7 +49,6 @@ class GeneratorsTestCase < Test::Unit::TestCase assert_match content, read end end - read end def assert_no_file(relative) @@ -55,10 +56,10 @@ class GeneratorsTestCase < Test::Unit::TestCase assert !File.exists?(absolute), "Expected file #{relative.inspect} to not exist, but does" end - def assert_migration(relative, *contents) + def assert_migration(relative, *contents, &block) file_name = migration_file_name(relative) assert file_name, "Expected migration #{relative} to exist, but was not found" - assert_file File.join(File.dirname(relative), file_name), *contents + assert_file File.join(File.dirname(relative), file_name), *contents, &block end def assert_no_migration(relative) @@ -66,20 +67,22 @@ class GeneratorsTestCase < Test::Unit::TestCase assert_nil file_name, "Expected migration #{relative} to not exist, but found #{file_name}" end - def migration_file_name(relative) - absolute = File.join(destination_root, relative) - dirname, file_name = File.dirname(absolute), File.basename(absolute).sub(/\.rb$/, '') - - migration = Dir.glob("#{dirname}/[0-9]*_*.rb").grep(/\d+_#{file_name}.rb$/).first - File.basename(migration) if migration - end - - def assert_class_method_for(content, method, &block) - assert_instance_method_for content, "self.#{method}", &block + def assert_class_method(content, method, &block) + assert_instance_method content, "self.#{method}", &block end - def assert_instance_method_for(content, method) + def assert_instance_method(content, method) assert_match /def #{method}(.*?)end/m, content - yield content.match(/def #{method}(.*?)end/m)[1] + yield content.match(/def #{method}(.*?)end/m)[1] if block_given? end + + protected + + def migration_file_name(relative) + absolute = File.join(destination_root, relative) + dirname, file_name = File.dirname(absolute), File.basename(absolute).sub(/\.rb$/, '') + + migration = Dir.glob("#{dirname}/[0-9]*_*.rb").grep(/\d+_#{file_name}.rb$/).first + File.basename(migration) if migration + end end diff --git a/railties/test/generators/migration_generator_test.rb b/railties/test/generators/migration_generator_test.rb index 90bc91344f..547ca6a9e3 100644 --- a/railties/test/generators/migration_generator_test.rb +++ b/railties/test/generators/migration_generator_test.rb @@ -20,32 +20,34 @@ class MigrationGeneratorTest < GeneratorsTestCase def test_add_migration_with_attributes @migration = "add_title_body_to_posts" run_generator [@migration, "title:string", "body:text"] - content = assert_migration "db/migrate/#{@migration}.rb" - assert_class_method_for content, :up do |up| - assert_match /add_column :posts, :title, :string/, up - assert_match /add_column :posts, :body, :text/, up - end + assert_migration "db/migrate/#{@migration}.rb" do |content| + assert_class_method content, :up do |up| + assert_match /add_column :posts, :title, :string/, up + assert_match /add_column :posts, :body, :text/, up + end - assert_class_method_for content, :down do |down| - assert_match /remove_column :posts, :title/, down - assert_match /remove_column :posts, :body/, down + assert_class_method content, :down do |down| + assert_match /remove_column :posts, :title/, down + assert_match /remove_column :posts, :body/, down + end end end def test_remove_migration_with_attributes @migration = "remove_title_body_from_posts" run_generator [@migration, "title:string", "body:text"] - content = assert_migration "db/migrate/#{@migration}.rb" - assert_class_method_for content, :up do |up| - assert_match /remove_column :posts, :title/, up - assert_match /remove_column :posts, :body/, up - end + assert_migration "db/migrate/#{@migration}.rb" do |content| + assert_class_method content, :up do |up| + assert_match /remove_column :posts, :title/, up + assert_match /remove_column :posts, :body/, up + end - assert_class_method_for content, :down do |down| - assert_match /add_column :posts, :title, :string/, down - assert_match /add_column :posts, :body, :text/, down + assert_class_method content, :down do |down| + assert_match /add_column :posts, :title, :string/, down + assert_match /add_column :posts, :body, :text/, down + end end end diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index 212f0f3691..14cafe7b0d 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -20,6 +20,7 @@ class ModelGeneratorTest < GeneratorsTestCase def test_model_with_parent_option run_generator ["account", "--parent", "Admin::Account"] assert_file "app/models/account.rb", /class Account < Admin::Account/ + assert_no_migration "db/migrate/create_accounts.rb" end def test_model_with_underscored_parent_option @@ -39,7 +40,18 @@ class ModelGeneratorTest < GeneratorsTestCase def test_migration_with_attributes run_generator ["product", "name:string", "supplier_id:integer"] - assert_migration "db/migrate/create_products.rb", /t\.string :name/, /t\.integer :supplier_id/ + + assert_migration "db/migrate/create_products.rb" do |m| + assert_class_method m, :up do |up| + assert_match /create_table :products/, up + assert_match /t\.string :name/, up + assert_match /t\.integer :supplier_id/, up + end + + assert_class_method m, :down do |down| + assert_match /drop_table :products/, down + end + end end def test_model_with_references_attribute_generates_belongs_to_associations @@ -59,8 +71,12 @@ class ModelGeneratorTest < GeneratorsTestCase def test_migration_timestamps_are_skipped run_generator ["account", "--no-timestamps"] - content = assert_migration "db/migrate/create_accounts.rb" - assert_no_match /t.timestamps/, content + + assert_migration "db/migrate/create_accounts.rb" do |m| + assert_class_method m, :up do |up| + assert_no_match /t.timestamps/, up + end + end end def test_invokes_default_test_framework diff --git a/railties/test/generators/resource_generator_test.rb b/railties/test/generators/resource_generator_test.rb new file mode 100644 index 0000000000..aed45f190d --- /dev/null +++ b/railties/test/generators/resource_generator_test.rb @@ -0,0 +1,87 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/rails/resource/resource_generator' + +# Model +require 'generators/active_record/model/model_generator' +require 'generators/rails/model/model_generator' +require 'generators/test_unit/model/model_generator' + +# Controller +require 'generators/erb/controller/controller_generator' +require 'generators/rails/controller/controller_generator' +require 'generators/rails/helper/helper_generator' +require 'generators/test_unit/controller/controller_generator' +require 'generators/test_unit/helper/helper_generator' + +class ResourceGeneratorTest < GeneratorsTestCase + + def setup + super + routes = Rails::Generators::ResourceGenerator.source_root + routes = File.join(routes, "..", "..", "app", "templates", "config", "routes.rb") + destination = File.join(destination_root, "config") + + FileUtils.mkdir_p(destination) + FileUtils.cp File.expand_path(routes), destination + end + + def test_help_with_inherited_options + content = run_generator ["--help"] + assert_match /ActiveRecord options:/, content + assert_match /TestUnit options:/, content + end + + def test_files_from_inherited_invocation + run_generator + + %w( + app/models/account.rb + test/unit/account_test.rb + test/fixtures/accounts.yml + ).each { |path| assert_file path } + + assert_migration "db/migrate/create_accounts.rb" + end + + def test_inherited_invocations_with_attributes + run_generator ["account", "name:string"] + assert_migration "db/migrate/create_accounts.rb", /t.string :name/ + end + + def test_resource_controller_with_pluralized_class_name + run_generator + assert_file "app/controllers/accounts_controller.rb", /class AccountsController < ApplicationController/ + assert_file "test/functional/accounts_controller_test.rb", /class AccountsControllerTest < ActionController::TestCase/ + + assert_file "app/helpers/accounts_helper.rb", /module AccountsHelper/ + assert_file "test/unit/helpers/accounts_helper_test.rb", /class AccountsHelperTest < ActionView::TestCase/ + end + + def test_resource_controller_with_actions + run_generator ["account", "--actions", "index", "new"] + + assert_file "app/controllers/accounts_controller.rb" do |controller| + assert_instance_method controller, :index + assert_instance_method controller, :new + end + + assert_file "app/views/accounts/index.html.erb" + assert_file "app/views/accounts/new.html.erb" + end + + def test_resource_routes_are_added + run_generator + + assert_file "config/routes.rb" do |route| + assert_match /map\.resources :accounts$/, route + end + end + + protected + + def run_generator(args=["account"]) + silence(:stdout) { Rails::Generators::ResourceGenerator.start args, :root => destination_root } + end + +end -- cgit v1.2.3 From ff4c6004484a3201f28f7512531c4e8f5f58b617 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sun, 28 Jun 2009 19:57:00 +0200 Subject: Added singleton support to resource controller. --- railties/test/generators/resource_generator_test.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators/resource_generator_test.rb b/railties/test/generators/resource_generator_test.rb index aed45f190d..3d856f519b 100644 --- a/railties/test/generators/resource_generator_test.rb +++ b/railties/test/generators/resource_generator_test.rb @@ -78,6 +78,20 @@ class ResourceGeneratorTest < GeneratorsTestCase end end + def test_singleton_resource + run_generator ["account", "--singleton"] + + assert_file "app/controllers/account_controller.rb", /class AccountController < ApplicationController/ + assert_file "test/functional/account_controller_test.rb", /class AccountControllerTest < ActionController::TestCase/ + + assert_file "app/helpers/account_helper.rb", /module AccountHelper/ + assert_file "test/unit/helpers/account_helper_test.rb", /class AccountHelperTest < ActionView::TestCase/ + + assert_file "config/routes.rb" do |route| + assert_match /map\.resource :account$/, route + end + end + protected def run_generator(args=["account"]) -- cgit v1.2.3 From 95ef9bd67fa5ae21ed38ae118255ee7408dedec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Mon, 29 Jun 2009 19:56:22 +0200 Subject: Simplifying resource generator. --- railties/test/generators/app_generator_test.rb | 4 ++-- railties/test/generators/plugin_generator_test.rb | 3 ++- railties/test/generators/resource_generator_test.rb | 6 ------ 3 files changed, 4 insertions(+), 9 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb index 6f0bad06b9..98994f6ad2 100644 --- a/railties/test/generators/app_generator_test.rb +++ b/railties/test/generators/app_generator_test.rb @@ -111,7 +111,7 @@ class AppGeneratorTest < GeneratorsTestCase def test_rails_is_frozen generator(:freeze => true, :database => "sqlite3").expects(:run).with("rake rails:freeze:edge", false) - silence(:stdout){ generator.invoke(:all) } + silence(:stdout){ generator.invoke } assert_file 'config/environment.rb', /# RAILS_GEM_VERSION/ end @@ -127,7 +127,7 @@ class AppGeneratorTest < GeneratorsTestCase template.instance_eval "def read; self; end" # Make the string respond to read generator(:template => path, :database => "sqlite3").expects(:open).with(path).returns(template) - assert_match /It works!/, silence(:stdout){ generator.invoke(:all) } + assert_match /It works!/, silence(:stdout){ generator.invoke } end def test_usage_read_from_file diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb index 9e7b597739..3388b2f6f5 100644 --- a/railties/test/generators/plugin_generator_test.rb +++ b/railties/test/generators/plugin_generator_test.rb @@ -22,7 +22,8 @@ class PluginGeneratorTest < GeneratorsTestCase def test_invokes_default_test_framework run_generator - assert_file "vendor/plugins/plugin_fu/test/plugin_fu_test.rb" + assert_file "vendor/plugins/plugin_fu/test/plugin_fu_test.rb", /class PluginFuTest < ActiveSupport::TestCase/ + assert_file "vendor/plugins/plugin_fu/test/test_helper.rb" end def test_logs_if_the_test_framework_cannot_be_found diff --git a/railties/test/generators/resource_generator_test.rb b/railties/test/generators/resource_generator_test.rb index 3d856f519b..456e6ff3ea 100644 --- a/railties/test/generators/resource_generator_test.rb +++ b/railties/test/generators/resource_generator_test.rb @@ -81,12 +81,6 @@ class ResourceGeneratorTest < GeneratorsTestCase def test_singleton_resource run_generator ["account", "--singleton"] - assert_file "app/controllers/account_controller.rb", /class AccountController < ApplicationController/ - assert_file "test/functional/account_controller_test.rb", /class AccountControllerTest < ActionController::TestCase/ - - assert_file "app/helpers/account_helper.rb", /module AccountHelper/ - assert_file "test/unit/helpers/account_helper_test.rb", /class AccountHelperTest < ActionView::TestCase/ - assert_file "config/routes.rb" do |route| assert_match /map\.resource :account$/, route end -- cgit v1.2.3 From dec1ee7422417c38cdcbea428d922c67eb3e708f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 30 Jun 2009 08:49:25 +0200 Subject: Started with scaffold controller and added remove_hook_for. --- railties/test/generators/resource_generator_test.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators/resource_generator_test.rb b/railties/test/generators/resource_generator_test.rb index 456e6ff3ea..53e9a1e817 100644 --- a/railties/test/generators/resource_generator_test.rb +++ b/railties/test/generators/resource_generator_test.rb @@ -86,6 +86,20 @@ class ResourceGeneratorTest < GeneratorsTestCase end end + def test_plural_names_are_singularized + content = run_generator ["accounts"] + assert_file "app/models/account.rb", /class Account < ActiveRecord::Base/ + assert_file "test/unit/account_test.rb", /class AccountTest/ + assert_match /Plural version of the model detected, using singularized version. Override with --force-plural./, content + end + + def test_plural_names_can_be_forced + content = run_generator ["accounts", "--force-plural"] + assert_file "app/models/accounts.rb", /class Accounts < ActiveRecord::Base/ + assert_file "test/unit/accounts_test.rb", /class AccountsTest/ + assert_no_match /Plural version of the model detected/, content + end + protected def run_generator(args=["account"]) -- cgit v1.2.3 From 555a956a66628f0c14440e350fefe62125067058 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 1 Jul 2009 12:07:05 +0200 Subject: Ensure both migration and routes are removed on revoke. --- railties/test/generators/model_generator_test.rb | 22 ++++++++++++++++++++-- .../test/generators/resource_generator_test.rb | 13 +++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index 14cafe7b0d..c0768bba7b 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -79,6 +79,24 @@ class ModelGeneratorTest < GeneratorsTestCase end end + def test_migration_already_exists_error_message + run_generator + error = capture(:stderr){ run_generator ["Account"], :behavior => :skip } + assert_match /Another migration is already named create_accounts/, error + end + + def test_migration_error_is_not_shown_on_revoke + run_generator + error = capture(:stderr){ run_generator ["Account"], :behavior => :revoke } + assert_no_match /Another migration is already named create_accounts/, error + end + + def test_migration_is_removed_on_revoke + run_generator + run_generator ["Account"], :behavior => :revoke + assert_no_migration "db/migrate/create_accounts.rb" + end + def test_invokes_default_test_framework run_generator assert_file "test/unit/account_test.rb", /class AccountTest < ActiveSupport::TestCase/ @@ -103,8 +121,8 @@ class ModelGeneratorTest < GeneratorsTestCase protected - def run_generator(args=["Account", "name:string", "age:integer"]) - silence(:stdout) { Rails::Generators::ModelGenerator.start args, :root => destination_root } + def run_generator(args=["Account", "name:string", "age:integer"], config={}) + silence(:stdout) { Rails::Generators::ModelGenerator.start args, config.merge(:root => destination_root) } end end diff --git a/railties/test/generators/resource_generator_test.rb b/railties/test/generators/resource_generator_test.rb index 53e9a1e817..a4cbb1894e 100644 --- a/railties/test/generators/resource_generator_test.rb +++ b/railties/test/generators/resource_generator_test.rb @@ -100,10 +100,19 @@ class ResourceGeneratorTest < GeneratorsTestCase assert_no_match /Plural version of the model detected/, content end + def test_route_is_removed_on_revoke + run_generator + run_generator ["account"], :behavior => :revoke + + assert_file "config/routes.rb" do |route| + assert_no_match /map\.resources :accounts$/, route + end + end + protected - def run_generator(args=["account"]) - silence(:stdout) { Rails::Generators::ResourceGenerator.start args, :root => destination_root } + def run_generator(args=["account"], config={}) + silence(:stdout) { Rails::Generators::ResourceGenerator.start args, config.merge(:root => destination_root) } end end -- cgit v1.2.3 From 1a4d8aca8a675aa02cead4b1db53ba5a3f9aa326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 1 Jul 2009 20:12:29 +0200 Subject: Added tests to scaffold controller. --- railties/test/generators/generators_test_helper.rb | 4 +- .../scaffold_controller_generator_test.rb | 117 +++++++++++++++++++++ 2 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 railties/test/generators/scaffold_controller_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index 591da45c72..578753e070 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -72,8 +72,8 @@ class GeneratorsTestCase < Test::Unit::TestCase end def assert_instance_method(content, method) - assert_match /def #{method}(.*?)end/m, content - yield content.match(/def #{method}(.*?)end/m)[1] if block_given? + assert content =~ /def #{method}(\(.+\))?(.*?)\n end/m, "Expected to have method #{method}" + yield $2.strip if block_given? end protected diff --git a/railties/test/generators/scaffold_controller_generator_test.rb b/railties/test/generators/scaffold_controller_generator_test.rb new file mode 100644 index 0000000000..60c1145310 --- /dev/null +++ b/railties/test/generators/scaffold_controller_generator_test.rb @@ -0,0 +1,117 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/active_record' +require 'generators/erb/scaffold/scaffold_generator' +require 'generators/rails/helper/helper_generator' +require 'generators/rails/scaffold_controller/scaffold_controller_generator' +require 'generators/test_unit/scaffold/scaffold_generator' +require 'generators/test_unit/helper/helper_generator' + +class ScaffoldControllerGeneratorTest < GeneratorsTestCase + + def test_controller_skeleton_is_created + run_generator + + assert_file "app/controllers/users_controller.rb" do |content| + assert_match /class UsersController < ApplicationController/, content + + assert_instance_method content, :index do |m| + assert_match /@users = User\.all/, m + end + + assert_instance_method content, :show do |m| + assert_match /@user = User\.find\(params\[:id\]\)/, m + end + + assert_instance_method content, :new do |m| + assert_match /@user = User\.new/, m + end + + assert_instance_method content, :edit do |m| + assert_match /@user = User\.find\(params\[:id\]\)/, m + end + + assert_instance_method content, :create do |m| + assert_match /@user = User\.new\(params\[:user\]\)/, m + assert_match /@user\.save/, m + assert_match /@user\.errors/, m + end + + assert_instance_method content, :update do |m| + assert_match /@user = User\.find\(params\[:id\]\)/, m + assert_match /@user\.update_attributes\(params\[:user\]\)/, m + assert_match /@user\.errors/, m + end + + assert_instance_method content, :destroy do |m| + assert_match /@user = User\.find\(params\[:id\]\)/, m + assert_match /@user\.destroy/, m + end + end + end + + def test_helper_are_invoked_with_a_pluralized_name + run_generator + assert_file "app/helpers/users_helper.rb", /module UsersHelper/ + assert_file "test/unit/helpers/users_helper_test.rb", /class UsersHelperTest < ActionView::TestCase/ + end + + def test_views_are_generated + run_generator + + %w( + index + edit + new + show + ).each { |view| assert_file "app/views/users/#{view}.html.erb" } + assert_file "app/views/layouts/users.html.erb" + end + + def test_functional_tests + run_generator + + assert_file "test/functional/users_controller_test.rb" do |content| + assert_match /class UsersControllerTest < ActionController::TestCase/, content + assert_match /test "should get index"/, content + end + end + + def test_generates_singleton_controller + run_generator ["User", "name:string", "age:integer", "--singleton"] + + assert_file "app/controllers/users_controller.rb" do |content| + assert_no_match /def index/, content + end + + assert_file "test/functional/users_controller_test.rb" do |content| + assert_no_match /test "should get index"/, content + end + + assert_no_file "app/views/users/index.html.erb" + end + + def test_skip_helper_if_required + run_generator ["User", "name:string", "age:integer", "--no-helper"] + assert_no_file "app/helpers/users_helper.rb" + assert_no_file "test/unit/helpers/users_helper_test.rb" + end + + def test_skip_layout_if_required + run_generator ["User", "name:string", "age:integer", "--no-layout"] + assert_no_file "app/views/layouts/users.html.erb" + end + + def test_error_is_shown_if_orm_does_not_provide_interface + error = capture(:stderr){ run_generator ["User", "--orm=unknown"] } + assert_equal "Could not load Unknown::Generators::ActionORM, skipping controller. " << + "Error: uninitialized constant Unknown.\n", error + end + + protected + + def run_generator(args=["User", "name:string", "age:integer"]) + silence(:stdout) { Rails::Generators::ScaffoldControllerGenerator.start args, :root => destination_root } + end + +end -- cgit v1.2.3 From a7c1591315b49e94798d6d51446cbc4139463140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 1 Jul 2009 21:23:30 +0200 Subject: Added stylesheets controller which is invoked by scaffold. --- railties/test/generators/stylesheets_generator_test.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 railties/test/generators/stylesheets_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/stylesheets_generator_test.rb b/railties/test/generators/stylesheets_generator_test.rb new file mode 100644 index 0000000000..89bcbc87a3 --- /dev/null +++ b/railties/test/generators/stylesheets_generator_test.rb @@ -0,0 +1,18 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/rails/stylesheets/stylesheets_generator' + +class StylesheetsGeneratorTest < GeneratorsTestCase + + def test_copy_stylesheets + run_generator + assert_file "public/stylesheets/scaffold.css" + end + + protected + + def run_generator(args=[]) + silence(:stdout) { Rails::Generators::StylesheetsGenerator.start args, :root => destination_root } + end + +end -- cgit v1.2.3 From c972b25df56e12a995774aa0291b2d8c2f3eabb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 1 Jul 2009 22:06:05 +0200 Subject: Tests for scaffold generator. --- railties/test/generators/plugin_generator_test.rb | 9 +- .../test/generators/scaffold_generator_test.rb | 143 +++++++++++++++++++++ .../test/generators/stylesheets_generator_test.rb | 10 +- 3 files changed, 158 insertions(+), 4 deletions(-) create mode 100644 railties/test/generators/scaffold_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb index 3388b2f6f5..f9adf6ea14 100644 --- a/railties/test/generators/plugin_generator_test.rb +++ b/railties/test/generators/plugin_generator_test.rb @@ -44,10 +44,15 @@ class PluginGeneratorTest < GeneratorsTestCase assert_file "vendor/plugins/plugin_fu/generators/plugin_fu/plugin_fu_generator.rb", flag end + def test_plugin_generator_on_revoke + run_generator + run_generator ["plugin_fu"], :behavior => :revoke + end + protected - def run_generator(args=["plugin_fu"]) - silence(:stdout) { Rails::Generators::PluginGenerator.start args, :root => destination_root } + def run_generator(args=["plugin_fu"], config={}) + silence(:stdout) { Rails::Generators::PluginGenerator.start args, config.merge(:root => destination_root) } end end diff --git a/railties/test/generators/scaffold_generator_test.rb b/railties/test/generators/scaffold_generator_test.rb new file mode 100644 index 0000000000..85c039a9cb --- /dev/null +++ b/railties/test/generators/scaffold_generator_test.rb @@ -0,0 +1,143 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/active_record' +require 'generators/rails/scaffold/scaffold_generator' +require 'generators/rails/stylesheets/stylesheets_generator' + +# Model +require 'generators/active_record/model/model_generator' +require 'generators/rails/model/model_generator' +require 'generators/test_unit/model/model_generator' + +# Controller +require 'generators/erb/scaffold/scaffold_generator' +require 'generators/rails/scaffold_controller/scaffold_controller_generator' +require 'generators/rails/helper/helper_generator' +require 'generators/test_unit/scaffold/scaffold_generator' +require 'generators/test_unit/helper/helper_generator' + +class ScaffoldGeneratorTest < GeneratorsTestCase + + def setup + super + routes = Rails::Generators::ResourceGenerator.source_root + routes = File.join(routes, "..", "..", "app", "templates", "config", "routes.rb") + destination = File.join(destination_root, "config") + + FileUtils.mkdir_p(destination) + FileUtils.cp File.expand_path(routes), destination + end + + def test_scaffold_on_invoke + run_generator + + # Model + assert_file "app/models/product_line.rb", /class ProductLine < ActiveRecord::Base/ + assert_file "test/unit/product_line_test.rb", /class ProductLineTest < ActiveSupport::TestCase/ + assert_file "test/fixtures/product_lines.yml" + assert_migration "db/migrate/create_product_lines.rb" + + # Route + assert_file "config/routes.rb" do |route| + assert_match /map\.resources :product_lines$/, route + end + + # Controller + assert_file "app/controllers/product_lines_controller.rb" do |content| + assert_match /class ProductLinesController < ApplicationController/, content + + assert_instance_method content, :index do |m| + assert_match /@product_lines = ProductLine\.all/, m + end + + assert_instance_method content, :show do |m| + assert_match /@product_line = ProductLine\.find\(params\[:id\]\)/, m + end + + assert_instance_method content, :new do |m| + assert_match /@product_line = ProductLine\.new/, m + end + + assert_instance_method content, :edit do |m| + assert_match /@product_line = ProductLine\.find\(params\[:id\]\)/, m + end + + assert_instance_method content, :create do |m| + assert_match /@product_line = ProductLine\.new\(params\[:product_line\]\)/, m + assert_match /@product_line\.save/, m + assert_match /@product_line\.errors/, m + end + + assert_instance_method content, :update do |m| + assert_match /@product_line = ProductLine\.find\(params\[:id\]\)/, m + assert_match /@product_line\.update_attributes\(params\[:product_line\]\)/, m + assert_match /@product_line\.errors/, m + end + + assert_instance_method content, :destroy do |m| + assert_match /@product_line = ProductLine\.find\(params\[:id\]\)/, m + assert_match /@product_line\.destroy/, m + end + end + + assert_file "test/functional/product_lines_controller_test.rb", + /class ProductLinesControllerTest < ActionController::TestCase/ + + # Views + %w( + index + edit + new + show + ).each { |view| assert_file "app/views/product_lines/#{view}.html.erb" } + assert_file "app/views/layouts/product_lines.html.erb" + + # Helpers + assert_file "app/helpers/product_lines_helper.rb" + assert_file "test/unit/helpers/product_lines_helper_test.rb" + + # Stylesheets + assert_file "public/stylesheets/scaffold.css" + end + + def test_scaffold_on_revoke + run_generator + run_generator :behavior => :revoke + + # Model + assert_no_file "app/models/product_line.rb" + assert_no_file "test/unit/product_line_test.rb" + assert_no_file "test/fixtures/product_lines.yml" + assert_no_migration "db/migrate/create_product_lines.rb" + + # Route + assert_file "config/routes.rb" do |route| + assert_no_match /map\.resources :product_lines$/, route + end + + # Controller + assert_no_file "app/controllers/product_lines_controller.rb" + assert_no_file "test/functional/product_lines_controller_test.rb" + + # Views + assert_no_file "app/views/product_lines" + assert_no_file "app/views/layouts/product_lines.html.erb" + + # Helpers + assert_no_file "app/helpers/product_lines_helper.rb" + assert_no_file "test/unit/helpers/product_lines_helper_test.rb" + + # Stylesheets (should not be removed) + assert_file "public/stylesheets/scaffold.css" + end + + protected + + def run_generator(config={}) + silence(:stdout) do + Rails::Generators::ScaffoldGenerator.start ["product_line", "title:string", "price:integer"], + config.merge(:root => destination_root) + end + end + +end diff --git a/railties/test/generators/stylesheets_generator_test.rb b/railties/test/generators/stylesheets_generator_test.rb index 89bcbc87a3..e2cddedf1a 100644 --- a/railties/test/generators/stylesheets_generator_test.rb +++ b/railties/test/generators/stylesheets_generator_test.rb @@ -9,10 +9,16 @@ class StylesheetsGeneratorTest < GeneratorsTestCase assert_file "public/stylesheets/scaffold.css" end + def test_stylesheets_are_not_deleted_on_revoke + run_generator + run_generator :behavior => :revoke + assert_file "public/stylesheets/scaffold.css" + end + protected - def run_generator(args=[]) - silence(:stdout) { Rails::Generators::StylesheetsGenerator.start args, :root => destination_root } + def run_generator(config={}) + silence(:stdout) { Rails::Generators::StylesheetsGenerator.start [], config.merge(:root => destination_root) } end end -- cgit v1.2.3 From ea0b0c820de64fa3d67890071af8120dc503dcb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 1 Jul 2009 22:19:54 +0200 Subject: rm -rf rails_generator/generators --- railties/test/generators/named_base_test.rb | 42 +++ .../test/rails_generator/generator_test_helper.rb | 303 --------------------- .../rails_controller_generator_test.rb | 44 --- .../rails_generator/rails_helper_generator_test.rb | 36 --- .../rails_generator/rails_mailer_generator_test.rb | 29 -- .../rails_generator/rails_model_generator_test.rb | 48 ---- .../rails_model_subclass_generator_test.rb | 15 - .../rails_resource_generator_test.rb | 29 -- .../rails_scaffold_generator_test.rb | 150 ---------- railties/test/rails_generator_test.rb | 173 +++++------- 10 files changed, 113 insertions(+), 756 deletions(-) create mode 100644 railties/test/generators/named_base_test.rb delete mode 100644 railties/test/rails_generator/generator_test_helper.rb delete mode 100644 railties/test/rails_generator/rails_controller_generator_test.rb delete mode 100644 railties/test/rails_generator/rails_helper_generator_test.rb delete mode 100644 railties/test/rails_generator/rails_mailer_generator_test.rb delete mode 100644 railties/test/rails_generator/rails_model_generator_test.rb delete mode 100644 railties/test/rails_generator/rails_model_subclass_generator_test.rb delete mode 100644 railties/test/rails_generator/rails_resource_generator_test.rb delete mode 100644 railties/test/rails_generator/rails_scaffold_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/named_base_test.rb b/railties/test/generators/named_base_test.rb new file mode 100644 index 0000000000..3a5c58ab32 --- /dev/null +++ b/railties/test/generators/named_base_test.rb @@ -0,0 +1,42 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/rails/scaffold_controller/scaffold_controller_generator' + +# Mock out what we need from AR::Base. +module ActiveRecord + class Base + class << self + attr_accessor :pluralize_table_names + end + self.pluralize_table_names = true + end +end + +class NamedBaseTest < GeneratorsTestCase + + def test_named_generator_attributes + g = Rails::Generators::ScaffoldControllerGenerator.new ["admin/foo"] + assert_equal 'admin/foo', g.name + assert_equal %w(admin), g.class_path + assert_equal 1, g.class_nesting_depth + assert_equal 'Admin::Foo', g.class_name + assert_equal 'foo', g.singular_name + assert_equal 'foos', g.plural_name + assert_equal g.singular_name, g.file_name + assert_equal "admin_#{g.plural_name}", g.table_name + end + + def test_named_generator_attributes_without_pluralized + ActiveRecord::Base.pluralize_table_names = false + g = Rails::Generators::ScaffoldControllerGenerator.new ["admin/foo"] + assert_equal "admin_#{g.singular_name}", g.table_name + end + + def test_scaffold_plural_names + g = Rails::Generators::ScaffoldControllerGenerator.new ["ProductLine"] + assert_equal "ProductLines", g.controller_name + assert_equal "ProductLines", g.controller_class_name + assert_equal "product_lines", g.controller_file_name + end + +end diff --git a/railties/test/rails_generator/generator_test_helper.rb b/railties/test/rails_generator/generator_test_helper.rb deleted file mode 100644 index 01bf1c90bd..0000000000 --- a/railties/test/rails_generator/generator_test_helper.rb +++ /dev/null @@ -1,303 +0,0 @@ -require 'test/unit' -require 'fileutils' - -# Mock out what we need from AR::Base -module ActiveRecord - class Base - class << self - attr_accessor :pluralize_table_names, :timestamped_migrations - end - self.pluralize_table_names = true - self.timestamped_migrations = true - end - - module ConnectionAdapters - class Column - attr_reader :name, :default, :type, :limit, :null, :sql_type, :precision, :scale - - def initialize(name, default, sql_type = nil) - @name = name - @default = default - @type = @sql_type = sql_type - end - - def human_name - @name.humanize - end - end - end -end - -# Mock up necessities from ActionView -module ActionView - module Helpers - module ActionRecordHelper; end - class InstanceTag; end - end -end - -# Set RAILS_ROOT appropriately fixture generation -tmp_dir = "#{File.dirname(__FILE__)}/../fixtures/tmp" - -if defined? RAILS_ROOT - RAILS_ROOT.replace tmp_dir -else - RAILS_ROOT = tmp_dir -end -FileUtils.mkdir_p RAILS_ROOT - -$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" -require 'initializer' - -# Mocks out the configuration -module Rails - def self.configuration - Rails::Configuration.new - end -end - -require 'rails_generator' - -class GeneratorTestCase < Test::Unit::TestCase - include FileUtils - - def setup - ActiveRecord::Base.pluralize_table_names = true - - mkdir_p "#{RAILS_ROOT}/app/views/layouts" - mkdir_p "#{RAILS_ROOT}/config" - mkdir_p "#{RAILS_ROOT}/db" - mkdir_p "#{RAILS_ROOT}/test/fixtures" - mkdir_p "#{RAILS_ROOT}/public/stylesheets" - - File.open("#{RAILS_ROOT}/config/routes.rb", 'w') do |f| - f << "ActionController::Routing::Routes.draw do |map|\n\nend" - end - end - - def teardown - rm_rf "#{RAILS_ROOT}/app" - rm_rf "#{RAILS_ROOT}/test" - rm_rf "#{RAILS_ROOT}/config" - rm_rf "#{RAILS_ROOT}/db" - rm_rf "#{RAILS_ROOT}/public" - end - - def test_truth - # don't complain, test/unit - end - - # Instantiates the Generator. - def build_generator(name, params) - Rails::Generator::Base.instance(name, params) - end - - # Runs the +create+ command (like the command line does). - def run_generator(name, params) - silence_generator do - build_generator(name, params).command(:create).invoke! - end - end - - # Silences the logger temporarily and returns the output as a String. - def silence_generator - logger_original = Rails::Generator::Base.logger - myout = StringIO.new - Rails::Generator::Base.logger = Rails::Generator::SimpleLogger.new(myout) - yield if block_given? - Rails::Generator::Base.logger = logger_original - myout.string - end - - # Asserts that the given controller was generated. - # It takes a name or symbol without the _controller part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_controller_for(name, parent = "ApplicationController") - assert_generated_class "app/controllers/#{name.to_s.underscore}_controller", parent do |body| - yield body if block_given? - end - end - - # Asserts that the given model was generated. - # It takes a name or symbol and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_model_for(name, parent = "ActiveRecord::Base") - assert_generated_class "app/models/#{name.to_s.underscore}", parent do |body| - yield body if block_given? - end - end - - # Asserts that the given helper was generated. - # It takes a name or symbol without the _helper part. - # The contents of the module source file is passed to a block. - def assert_generated_helper_for(name) - assert_generated_module "app/helpers/#{name.to_s.underscore}_helper" do |body| - yield body if block_given? - end - end - - # Asserts that the given functional test was generated. - # It takes a name or symbol without the _controller_test part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_functional_test_for(name, parent = "ActionController::TestCase") - assert_generated_class "test/functional/#{name.to_s.underscore}_controller_test",parent do |body| - yield body if block_given? - end - end - - # Asserts that the given helper test test was generated. - # It takes a name or symbol without the _helper_test part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_helper_test_for(name, parent = "ActionView::TestCase") - path = "test/unit/helpers/#{name.to_s.underscore}_helper_test" - # Have to pass the path without the "test/" part so that class_name_from_path will return a correct result - class_name = class_name_from_path(path.gsub(/^test\//, '')) - - assert_generated_class path,parent,class_name do |body| - yield body if block_given? - end - end - - # Asserts that the given unit test was generated. - # It takes a name or symbol without the _test part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_unit_test_for(name, parent = "ActiveSupport::TestCase") - assert_generated_class "test/unit/#{name.to_s.underscore}_test", parent do |body| - yield body if block_given? - end - end - - # Asserts that the given file was generated. - # The contents of the file is passed to a block. - def assert_generated_file(path) - assert_file_exists(path) - File.open("#{RAILS_ROOT}/#{path}") do |f| - yield f.read if block_given? - end - end - - # asserts that the given file exists - def assert_file_exists(path) - assert File.exist?("#{RAILS_ROOT}/#{path}"), - "The file '#{RAILS_ROOT}/#{path}' should exist" - end - - # Asserts that the given class source file was generated. - # It takes a path without the .rb part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_class(path, parent = nil, class_name = class_name_from_path(path)) - assert_generated_file("#{path}.rb") do |body| - assert_match /class #{class_name}#{parent.nil? ? '':" < #{parent}"}/, body, "the file '#{path}.rb' should be a class" - yield body if block_given? - end - end - - def class_name_from_path(path) - # FIXME: Sucky way to detect namespaced classes - if path.split('/').size > 3 - path =~ /\/?(\d+_)?(\w+)\/(\w+)$/ - "#{$2.camelize}::#{$3.camelize}" - else - path =~ /\/?(\d+_)?(\w+)$/ - $2.camelize - end - end - - # Asserts that the given module source file was generated. - # It takes a path without the .rb part. - # The contents of the class source file is passed to a block. - def assert_generated_module(path) - # FIXME: Sucky way to detect namespaced modules - if path.split('/').size > 3 - path =~ /\/?(\w+)\/(\w+)$/ - module_name = "#{$1.camelize}::#{$2.camelize}" - else - path =~ /\/?(\w+)$/ - module_name = $1.camelize - end - - assert_generated_file("#{path}.rb") do |body| - assert_match /module #{module_name}/, body, "the file '#{path}.rb' should be a module" - yield body if block_given? - end - end - - # Asserts that the given CSS stylesheet file was generated. - # It takes a path without the .css part. - # The contents of the stylesheet source file is passed to a block. - def assert_generated_stylesheet(path) - assert_generated_file("public/stylesheets/#{path}.css") do |body| - yield body if block_given? - end - end - - # Asserts that the given YAML file was generated. - # It takes a path without the .yml part. - # The parsed YAML tree is passed to a block. - def assert_generated_yaml(path) - assert_generated_file("#{path}.yml") do |body| - yaml = YAML.load(body) - assert yaml, 'YAML data missing' - yield yaml if block_given? - end - end - - # Asserts that the given fixtures YAML file was generated. - # It takes a fixture name without the .yml part. - # The parsed YAML tree is passed to a block. - def assert_generated_fixtures_for(name) - assert_generated_yaml "test/fixtures/#{name.to_s.underscore}" do |yaml| - yield yaml if block_given? - end - end - - # Asserts that the given views were generated. - # It takes a controller name and a list of views (including extensions). - # The body of each view is passed to a block. - def assert_generated_views_for(name, *actions) - actions.each do |action| - assert_generated_file("app/views/#{name.to_s.underscore}/#{action}") do |body| - yield body if block_given? - end - end - end - - def assert_generated_migration(name, parent = "ActiveRecord::Migration") - file = Dir.glob("#{RAILS_ROOT}/db/migrate/*_#{name.to_s.underscore}.rb").first - file = file.match(/db\/migrate\/[0-9]+_\w+/).to_s - assert_generated_class file, parent do |body| - assert_match /timestamps/, body, "should have timestamps defined" - yield body if block_given? - end - end - - # Asserts that the given migration file was not generated. - # It takes the name of the migration as a parameter. - def assert_skipped_migration(name) - migration_file = "#{RAILS_ROOT}/db/migrate/001_#{name.to_s.underscore}.rb" - assert !File.exist?(migration_file), "should not create migration #{migration_file}" - end - - # Asserts that the given resource was added to the routes. - def assert_added_route_for(name) - assert_generated_file("config/routes.rb") do |body| - assert_match /map.resources :#{name.to_s.underscore}/, body, - "should add route for :#{name.to_s.underscore}" - end - end - - # Asserts that the given methods are defined in the body. - # This does assume standard rails code conventions with regards to the source code. - # The body of each individual method is passed to a block. - def assert_has_method(body, *methods) - methods.each do |name| - assert body =~ /^ def #{name}(\(.+\))?\n((\n| .*\n)*) end/, "should have method #{name}" - yield(name, $2) if block_given? - end - end - - # Asserts that the given column is defined in the migration. - def assert_generated_column(body, name, type) - assert_match /t\.#{type.to_s} :#{name.to_s}/, body, "should have column #{name.to_s} defined" - end -end diff --git a/railties/test/rails_generator/rails_controller_generator_test.rb b/railties/test/rails_generator/rails_controller_generator_test.rb deleted file mode 100644 index 6cbb6bf2bd..0000000000 --- a/railties/test/rails_generator/rails_controller_generator_test.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'rails_generator/generator_test_helper' - -module Admin -end - -class RailsControllerGeneratorTest < GeneratorTestCase - - def test_controller_generates_controller - run_generator('controller', %w(products)) - - assert_generated_controller_for :products - assert_generated_functional_test_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - end - - def test_controller_generates_namespaced_controller - run_generator('controller', %w(admin::products)) - - assert_generated_controller_for "admin::products" - assert_generated_functional_test_for "admin::products" - assert_generated_helper_for "admin::products" - assert_generated_helper_test_for "admin::products" - end - - def test_controller_generates_namespaced_and_not_namespaced_controllers - run_generator('controller', %w(products)) - - # We have to require the generated helper to show the problem because - # the test helpers just check for generated files and contents but - # do not actually load them. But they have to be loaded (as in a real environment) - # to make the second generator run fail - require "#{RAILS_ROOT}/app/helpers/products_helper" - - assert_nothing_raised do - begin - run_generator('controller', %w(admin::products)) - ensure - # cleanup - Object.send(:remove_const, :ProductsHelper) - end - end - end -end diff --git a/railties/test/rails_generator/rails_helper_generator_test.rb b/railties/test/rails_generator/rails_helper_generator_test.rb deleted file mode 100644 index 8d05f555e6..0000000000 --- a/railties/test/rails_generator/rails_helper_generator_test.rb +++ /dev/null @@ -1,36 +0,0 @@ -require File.dirname(__FILE__) + '/generator_test_helper' - -class RailsHelperGeneratorTest < GeneratorTestCase - def test_helper_generates_helper - run_generator('helper', %w(products)) - - assert_generated_helper_for :products - assert_generated_helper_test_for :products - end - - def test_helper_generates_namespaced_helper - run_generator('helper', %w(admin::products)) - - assert_generated_helper_for "admin::products" - assert_generated_helper_test_for "admin::products" - end - - def test_helper_generates_namespaced_and_not_namespaced_helpers - run_generator('helper', %w(products)) - - # We have to require the generated helper to show the problem because - # the test helpers just check for generated files and contents but - # do not actually load them. But they have to be loaded (as in a real environment) - # to make the second generator run fail - require "#{RAILS_ROOT}/app/helpers/products_helper" - - assert_nothing_raised do - begin - run_generator('helper', %w(admin::products)) - ensure - # cleanup - Object.send(:remove_const, :ProductsHelper) - end - end - end -end diff --git a/railties/test/rails_generator/rails_mailer_generator_test.rb b/railties/test/rails_generator/rails_mailer_generator_test.rb deleted file mode 100644 index f580fe27ab..0000000000 --- a/railties/test/rails_generator/rails_mailer_generator_test.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'rails_generator/generator_test_helper' - -class RailsMailerGeneratorTest < GeneratorTestCase - - def test_generates_mailer - run_generator('mailer', %w(Notifier reset_password)) - - assert_generated_model_for :notifier, 'ActionMailer::Base' do |model| - assert_has_method model, :reset_password do |name, body| - assert_equal [ - "subject 'Notifier#reset_password'", - "recipients ''", - "from ''", - "sent_on sent_at", - "", - "body :greeting => 'Hi,'" - ], - body.split("\n").map{|line| line.sub(' '*4, '') } - end - - assert_no_match /(self.default_url_options =|default_url_options\[.*\] =)/, model, - 'individual mailer models should not set default_url_options because the options are shared by all mailers' - end - - assert_generated_views_for :notifier, 'reset_password.erb' - assert_generated_unit_test_for :notifier, 'ActionMailer::TestCase' - assert_generated_file "test/fixtures/notifier/reset_password" - end -end diff --git a/railties/test/rails_generator/rails_model_generator_test.rb b/railties/test/rails_generator/rails_model_generator_test.rb deleted file mode 100644 index ae3c2e316e..0000000000 --- a/railties/test/rails_generator/rails_model_generator_test.rb +++ /dev/null @@ -1,48 +0,0 @@ -require 'rails_generator/generator_test_helper' - -class RailsModelGeneratorTest < GeneratorTestCase - - def test_model_generates_resources - run_generator('model', %w(Product name:string)) - - assert_generated_model_for :product - assert_generated_fixtures_for :products - assert_generated_migration :create_products - end - - def test_model_skip_migration_skips_migration - run_generator('model', %w(Product name:string --skip-migration)) - - assert_generated_model_for :product - assert_generated_fixtures_for :products - assert_skipped_migration :create_products - end - - def test_model_with_attributes_generates_resources_with_attributes - run_generator('model', %w(Product name:string supplier_id:integer created_at:timestamp)) - - assert_generated_model_for :product - assert_generated_fixtures_for :products - assert_generated_migration :create_products do |t| - assert_generated_column t, :name, :string - assert_generated_column t, :supplier_id, :integer - assert_generated_column t, :created_at, :timestamp - end - end - - def test_model_with_reference_attributes_generates_belongs_to_associations - run_generator('model', %w(Product name:string supplier:references)) - - assert_generated_model_for :product do |body| - assert body =~ /^\s+belongs_to :supplier/, "#{body.inspect} should contain 'belongs_to :supplier'" - end - end - - def test_model_with_belongs_to_attributes_generates_belongs_to_associations - run_generator('model', %w(Product name:string supplier:belongs_to)) - - assert_generated_model_for :product do |body| - assert body =~ /^\s+belongs_to :supplier/, "#{body.inspect} should contain 'belongs_to :supplier'" - end - end -end diff --git a/railties/test/rails_generator/rails_model_subclass_generator_test.rb b/railties/test/rails_generator/rails_model_subclass_generator_test.rb deleted file mode 100644 index 4f20de6eba..0000000000 --- a/railties/test/rails_generator/rails_model_subclass_generator_test.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'rails_generator/generator_test_helper' - -class RailsModelSubclassGeneratorTest < GeneratorTestCase - - def test_model_subclass_generates_resources - run_generator('model_subclass', %w(Car Product)) - - assert_generated_model_for :car, "Product" - assert_generated_unit_test_for :car - end - - def test_model_subclass_must_have_a_parent_class_name - assert_raise(Rails::Generator::UsageError) { run_generator('model_subclass', %w(Car)) } - end -end diff --git a/railties/test/rails_generator/rails_resource_generator_test.rb b/railties/test/rails_generator/rails_resource_generator_test.rb deleted file mode 100644 index b9a432cbff..0000000000 --- a/railties/test/rails_generator/rails_resource_generator_test.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'rails_generator/generator_test_helper' - -class RailsResourceGeneratorTest < GeneratorTestCase - def test_resource_generates_resources - run_generator('resource', %w(Product name:string)) - - assert_generated_controller_for :products - assert_generated_model_for :product - assert_generated_fixtures_for :products - assert_generated_functional_test_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_generated_migration :create_products - assert_added_route_for :products - end - - def test_resource_skip_migration_skips_migration - run_generator('resource', %w(Product name:string --skip-migration)) - - assert_generated_controller_for :products - assert_generated_model_for :product - assert_generated_fixtures_for :products - assert_generated_functional_test_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_skipped_migration :create_products - assert_added_route_for :products - end -end diff --git a/railties/test/rails_generator/rails_scaffold_generator_test.rb b/railties/test/rails_generator/rails_scaffold_generator_test.rb deleted file mode 100644 index ffbeff79fb..0000000000 --- a/railties/test/rails_generator/rails_scaffold_generator_test.rb +++ /dev/null @@ -1,150 +0,0 @@ -require 'rails_generator/generator_test_helper' -require 'abstract_unit' - -class RailsScaffoldGeneratorTest < GeneratorTestCase - def test_scaffolded_names - g = Rails::Generator::Base.instance('scaffold', %w(ProductLine)) - assert_equal "ProductLines", g.controller_name - assert_equal "ProductLines", g.controller_class_name - assert_equal "ProductLine", g.controller_singular_name - assert_equal "product_lines", g.controller_plural_name - assert_equal "product_lines", g.controller_file_name - assert_equal "product_lines", g.controller_table_name - end - - def test_scaffold_generates_resources - - run_generator('scaffold', %w(Product name:string)) - - assert_generated_controller_for :products do |f| - - assert_has_method f, :index do |name, m| - assert_match /@products = Product\.all/, m, "#{name} should query products table" - end - - assert_has_method f, :show, :edit, :update, :destroy do |name, m| - assert_match /@product = Product\.find\(params\[:id\]\)/, m, "#{name.to_s} should query products table" - end - - assert_has_method f, :new do |name, m| - assert_match /@product = Product\.new/, m, "#{name.to_s} should instantiate a product" - end - - assert_has_method f, :create do |name, m| - assert_match /@product = Product\.new\(params\[:product\]\)/, m, "#{name.to_s} should instantiate a product" - assert_match /format.xml \{ render :xml => @product.errors, :status => :unprocessable_entity \}/, m, "#{name.to_s} should set status to :unprocessable_entity code for xml" - end - - end - - assert_generated_model_for :product - assert_generated_functional_test_for :products - assert_generated_unit_test_for :product - assert_generated_fixtures_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_generated_stylesheet :scaffold - assert_generated_views_for :products, "index.html.erb", "new.html.erb", "edit.html.erb", "show.html.erb" - - assert_generated_migration :create_products - assert_added_route_for :products - end - - def test_scaffold_skip_migration_skips_migration - run_generator('scaffold', %w(Product name:string --skip-migration)) - - assert_generated_model_for :product - assert_generated_functional_test_for :products - assert_generated_unit_test_for :product - assert_generated_fixtures_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_generated_stylesheet :scaffold - assert_generated_views_for :products, "index.html.erb","new.html.erb","edit.html.erb","show.html.erb" - assert_skipped_migration :create_products - assert_added_route_for :products - end - - def test_scaffold_generates_resources_with_attributes - run_generator('scaffold', %w(Product name:string supplier_id:integer created_at:timestamp)) - - assert_generated_controller_for :products do |f| - - assert_has_method f, :index do |name, m| - assert_match /@products = Product\.all/, m, "#{name} should query products table" - end - - assert_has_method f, :show, :edit, :update, :destroy do |name, m| - assert_match /@product = Product\.find\(params\[:id\]\)/, m, "#{name.to_s} should query products table" - end - - assert_has_method f, :new do |name, m| - assert_match /@product = Product\.new/, m, "#{name.to_s} should instantiate a product" - end - - assert_has_method f, :create do |name, m| - assert_match /@product = Product\.new\(params\[:product\]\)/, m, "#{name.to_s} should instantiate a product" - assert_match /format.xml \{ render :xml => @product.errors, :status => :unprocessable_entity \}/, m, "#{name.to_s} should set status to :unprocessable_entity code for xml" - end - - end - - assert_generated_model_for :product - assert_generated_functional_test_for :products - assert_generated_unit_test_for :product - assert_generated_fixtures_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_generated_stylesheet :scaffold - assert_generated_views_for :products, "index.html.erb", "new.html.erb", "edit.html.erb", "show.html.erb" - - assert_generated_migration :create_products do |t| - assert_generated_column t, :name, :string - assert_generated_column t, :supplier_id, :integer - assert_generated_column t, :created_at, :timestamp - end - - assert_added_route_for :products - end - - def test_scaffolded_plural_names - Rails::Generator::Base.logger.expects(:warning) - g = Rails::Generator::Base.instance('scaffold', %w(ProductLines)) - assert_equal "ProductLines", g.controller_name - assert_equal "ProductLines", g.controller_class_name - assert_equal "ProductLine", g.controller_singular_name - assert_equal "product_lines", g.controller_plural_name - assert_equal "product_lines", g.controller_file_name - assert_equal "product_lines", g.controller_table_name - end - - def test_scaffold_plural_model_name_without_force_plural_generates_singular_model - run_generator('scaffold', %w(Products name:string)) - - assert_generated_model_for :product - assert_generated_functional_test_for :products - assert_generated_unit_test_for :product - assert_generated_fixtures_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_generated_stylesheet :scaffold - assert_generated_views_for :products, "index.html.erb","new.html.erb","edit.html.erb","show.html.erb" - assert_skipped_migration :create_products - assert_added_route_for :products - end - - def test_scaffold_plural_model_name_with_force_plural_forces_plural_model - run_generator('scaffold', %w(Products name:string --force-plural)) - - assert_generated_model_for :products - assert_generated_functional_test_for :products - assert_generated_unit_test_for :products - assert_generated_fixtures_for :products - assert_generated_helper_for :products - assert_generated_helper_test_for :products - assert_generated_stylesheet :scaffold - assert_generated_views_for :products, "index.html.erb","new.html.erb","edit.html.erb","show.html.erb" - assert_skipped_migration :create_products - assert_added_route_for :products - end -end diff --git a/railties/test/rails_generator_test.rb b/railties/test/rails_generator_test.rb index 38bd90dcc1..5a1409fc2e 100644 --- a/railties/test/rails_generator_test.rb +++ b/railties/test/rails_generator_test.rb @@ -44,105 +44,74 @@ end require 'rails_generator' -class RailsGeneratorTest < Test::Unit::TestCase - BUILTINS = %w(controller integration_test mailer migration model observer plugin resource scaffold session_migration) - CAPITALIZED_BUILTINS = BUILTINS.map { |b| b.capitalize } - - def setup - ActiveRecord::Base.pluralize_table_names = true - @initializer = Rails::Initializer.default - @initializer.config = Rails.configuration - @initializer.run(:set_root_path) - end - - def test_sources - expected = [:lib, :vendor, - "plugins (vendor/plugins)".to_sym, # /generators and /rails_generators - :user, - :RubyGems, :RubyGems, # gems named _generator, gems containing /rails_generator/ folder - :builtin] - expected.delete(:RubyGems) unless Object.const_defined?(:Gem) - assert_equal expected, Rails::Generator::Base.sources.map { |s| s.label } - end - - def test_lookup_builtins - (BUILTINS + CAPITALIZED_BUILTINS).each do |name| - assert_nothing_raised do - spec = Rails::Generator::Base.lookup(name) - assert_not_nil spec - assert_kind_of Rails::Generator::Spec, spec - - klass = spec.klass - assert klass < Rails::Generator::Base - assert_equal spec, klass.spec - end - end - end - - def test_autolookup - assert_nothing_raised { ControllerGenerator } - assert_nothing_raised { ModelGenerator } - end - - def test_lookup_missing_generator - assert_raise Rails::Generator::GeneratorError do - Rails::Generator::Base.lookup('missing').klass - end - end - - def test_lookup_missing_class - spec = nil - assert_nothing_raised { spec = Rails::Generator::Base.lookup('missing_class') } - assert_not_nil spec - assert_kind_of Rails::Generator::Spec, spec - assert_raise(NameError) { spec.klass } - end - - def test_generator_usage - (BUILTINS - ["session_migration"]).each do |name| - assert_raise(Rails::Generator::UsageError, "Generator '#{name}' should raise an error without arguments") { - Rails::Generator::Base.instance(name) - } - end - end - - def test_generator_spec - spec = Rails::Generator::Base.lookup('working') - assert_equal 'working', spec.name - assert_match(/#{spec.path}$/, "#{RAILS_ROOT}/lib/generators/working") - assert_equal :lib, spec.source - assert_nothing_raised { assert_match(/WorkingGenerator$/, spec.klass.name) } - end - - def test_named_generator_attributes - g = Rails::Generator::Base.instance('working', %w(admin/foo bar baz)) - assert_equal 'admin/foo', g.name - assert_equal %w(admin), g.class_path - assert_equal 'Admin', g.class_nesting - assert_equal 'Admin::Foo', g.class_name - assert_equal 'foo', g.singular_name - assert_equal 'foos', g.plural_name - assert_equal g.singular_name, g.file_name - assert_equal "admin_#{g.plural_name}", g.table_name - assert_equal %w(bar baz), g.args - end - - def test_named_generator_attributes_without_pluralized - ActiveRecord::Base.pluralize_table_names = false - g = Rails::Generator::Base.instance('working', %w(admin/foo bar baz)) - assert_equal "admin_#{g.singular_name}", g.table_name - end - - def test_session_migration_generator_with_pluralization - g = Rails::Generator::Base.instance('session_migration') - assert_equal 'session'.pluralize, g.send(:default_session_table_name) - ActiveRecord::Base.pluralize_table_names = false - assert_equal 'session', g.send(:default_session_table_name) - end - - def test_scaffold_controller_name - # Default behaviour is use the model name - g = Rails::Generator::Base.instance('scaffold', %w(Product)) - assert_equal "Products", g.controller_name - end -end +#class RailsGeneratorTest < Test::Unit::TestCase +# BUILTINS = %w(controller integration_test mailer migration model observer plugin resource scaffold session_migration) +# CAPITALIZED_BUILTINS = BUILTINS.map { |b| b.capitalize } + +# def setup +# ActiveRecord::Base.pluralize_table_names = true +# @initializer = Rails::Initializer.default +# @initializer.config = Rails.configuration +# @initializer.run(:set_root_path) +# end + +# def test_sources +# expected = [:lib, :vendor, +# "plugins (vendor/plugins)".to_sym, # /generators and /rails_generators +# :user, +# :RubyGems, :RubyGems, # gems named _generator, gems containing /rails_generator/ folder +# :builtin] +# expected.delete(:RubyGems) unless Object.const_defined?(:Gem) +# assert_equal expected, Rails::Generator::Base.sources.map { |s| s.label } +# end + +# def test_lookup_builtins +# (BUILTINS + CAPITALIZED_BUILTINS).each do |name| +# assert_nothing_raised do +# spec = Rails::Generator::Base.lookup(name) +# assert_not_nil spec +# assert_kind_of Rails::Generator::Spec, spec + +# klass = spec.klass +# assert klass < Rails::Generator::Base +# assert_equal spec, klass.spec +# end +# end +# end + +# def test_autolookup +# assert_nothing_raised { ControllerGenerator } +# assert_nothing_raised { ModelGenerator } +# end + +# def test_lookup_missing_generator +# assert_raise Rails::Generator::GeneratorError do +# Rails::Generator::Base.lookup('missing').klass +# end +# end + +# def test_lookup_missing_class +# spec = nil +# assert_nothing_raised { spec = Rails::Generator::Base.lookup('missing_class') } +# assert_not_nil spec +# assert_kind_of Rails::Generator::Spec, spec +# assert_raise(NameError) { spec.klass } +# end + +# def test_generator_usage +# (BUILTINS - ["session_migration"]).each do |name| +# assert_raise(Rails::Generator::UsageError, "Generator '#{name}' should raise an error without arguments") { +# Rails::Generator::Base.instance(name) +# } +# end +# end + +# def test_generator_spec +# spec = Rails::Generator::Base.lookup('working') +# assert_equal 'working', spec.name +# assert_match(/#{spec.path}$/, "#{RAILS_ROOT}/lib/generators/working") +# assert_equal :lib, spec.source +# assert_nothing_raised { assert_match(/WorkingGenerator$/, spec.klass.name) } +# end + +#end -- cgit v1.2.3 From 528d555e378e9900ffda40c8ff3627e0609a048c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 2 Jul 2009 15:55:21 +0200 Subject: Make invoke output white and use padding. --- railties/test/generators/scaffold_generator_test.rb | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators/scaffold_generator_test.rb b/railties/test/generators/scaffold_generator_test.rb index 85c039a9cb..dfa11fd84b 100644 --- a/railties/test/generators/scaffold_generator_test.rb +++ b/railties/test/generators/scaffold_generator_test.rb @@ -131,6 +131,12 @@ class ScaffoldGeneratorTest < GeneratorsTestCase assert_file "public/stylesheets/scaffold.css" end + def test_invoke_output + output = run_generator + assert_match /invoke.{4} active_record/, output + assert_match /create.{4} app\/models\/product_line\.rb/, output + end + protected def run_generator(config={}) -- cgit v1.2.3 From d1c404ee90ea7470d662517aa7a2d312a61c8c61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 3 Jul 2009 12:10:09 +0200 Subject: Added lookup to generators. --- railties/test/generators/controller_generator_test.rb | 9 +++------ railties/test/generators/generators_test_helper.rb | 1 + railties/test/generators/helper_generator_test.rb | 1 - railties/test/generators/mailer_generator_test.rb | 2 -- railties/test/generators/migration_generator_test.rb | 1 - railties/test/generators/model_generator_test.rb | 2 -- railties/test/generators/observer_generator_test.rb | 2 -- railties/test/generators/plugin_generator_test.rb | 5 ++--- railties/test/generators/resource_generator_test.rb | 12 ------------ .../test/generators/scaffold_controller_generator_test.rb | 5 ----- railties/test/generators/scaffold_generator_test.rb | 14 -------------- .../test/generators/session_migration_generator_test.rb | 1 - 12 files changed, 6 insertions(+), 49 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/controller_generator_test.rb b/railties/test/generators/controller_generator_test.rb index e3fe2594b9..29169f225b 100644 --- a/railties/test/generators/controller_generator_test.rb +++ b/railties/test/generators/controller_generator_test.rb @@ -1,12 +1,6 @@ require 'abstract_unit' require 'generators/generators_test_helper' -require 'generators/erb/controller/controller_generator' require 'generators/rails/controller/controller_generator' -require 'generators/rails/helper/helper_generator' -require 'generators/test_unit/controller/controller_generator' -require 'generators/test_unit/helper/helper_generator' - -ObjectController = Class.new class ControllerGeneratorTest < GeneratorsTestCase @@ -21,8 +15,11 @@ class ControllerGeneratorTest < GeneratorsTestCase end def test_check_class_collision + Object.send :const_set, :ObjectController, Class.new content = capture(:stderr){ run_generator ["object"] } assert_match /The name 'ObjectController' is either already used in your application or reserved/, content + ensure + Object.send :remove_const, :ObjectController end # No need to spec content since it's already spec'ed on helper generator. diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index 578753e070..782118aeb0 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -1,5 +1,6 @@ require 'test/unit' require 'fileutils' +require 'mocha' $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" require 'generators' diff --git a/railties/test/generators/helper_generator_test.rb b/railties/test/generators/helper_generator_test.rb index 41e1e1dce2..3b240a96c5 100644 --- a/railties/test/generators/helper_generator_test.rb +++ b/railties/test/generators/helper_generator_test.rb @@ -1,7 +1,6 @@ require 'abstract_unit' require 'generators/generators_test_helper' require 'generators/rails/helper/helper_generator' -require 'generators/test_unit/helper/helper_generator' ObjectHelper = Class.new AnotherObjectHelperTest = Class.new diff --git a/railties/test/generators/mailer_generator_test.rb b/railties/test/generators/mailer_generator_test.rb index 5d21da3dd1..8532667d15 100644 --- a/railties/test/generators/mailer_generator_test.rb +++ b/railties/test/generators/mailer_generator_test.rb @@ -1,8 +1,6 @@ require 'abstract_unit' require 'generators/generators_test_helper' -require 'generators/erb/mailer/mailer_generator' require 'generators/rails/mailer/mailer_generator' -require 'generators/test_unit/mailer/mailer_generator' class MailerGeneratorTest < GeneratorsTestCase diff --git a/railties/test/generators/migration_generator_test.rb b/railties/test/generators/migration_generator_test.rb index 547ca6a9e3..e756d0a9fa 100644 --- a/railties/test/generators/migration_generator_test.rb +++ b/railties/test/generators/migration_generator_test.rb @@ -1,6 +1,5 @@ require 'abstract_unit' require 'generators/generators_test_helper' -require 'generators/active_record/migration/migration_generator' require 'generators/rails/migration/migration_generator' class MigrationGeneratorTest < GeneratorsTestCase diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index c0768bba7b..d076244abd 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -1,8 +1,6 @@ require 'abstract_unit' require 'generators/generators_test_helper' -require 'generators/active_record/model/model_generator' require 'generators/rails/model/model_generator' -require 'generators/test_unit/model/model_generator' class ModelGeneratorTest < GeneratorsTestCase diff --git a/railties/test/generators/observer_generator_test.rb b/railties/test/generators/observer_generator_test.rb index 3707b70c7e..d97486d957 100644 --- a/railties/test/generators/observer_generator_test.rb +++ b/railties/test/generators/observer_generator_test.rb @@ -1,8 +1,6 @@ require 'abstract_unit' require 'generators/generators_test_helper' -require 'generators/active_record/observer/observer_generator' require 'generators/rails/observer/observer_generator' -require 'generators/test_unit/observer/observer_generator' class ObserverGeneratorTest < GeneratorsTestCase diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb index f9adf6ea14..b9f09d5163 100644 --- a/railties/test/generators/plugin_generator_test.rb +++ b/railties/test/generators/plugin_generator_test.rb @@ -1,7 +1,6 @@ require 'abstract_unit' require 'generators/generators_test_helper' require 'generators/rails/plugin/plugin_generator' -require 'generators/test_unit/plugin/plugin_generator' class PluginGeneratorTest < GeneratorsTestCase @@ -32,12 +31,12 @@ class PluginGeneratorTest < GeneratorsTestCase end def test_creates_tasks_if_required - run_generator ["plugin_fu", "--with-tasks"] + run_generator ["plugin_fu", "--tasks"] assert_file "vendor/plugins/plugin_fu/tasks/plugin_fu_tasks.rake" end def test_creates_generator_if_required - run_generator ["plugin_fu", "--with-generator"] + run_generator ["plugin_fu", "--generator"] assert_file "vendor/plugins/plugin_fu/generators/plugin_fu/templates" flag = /class PluginFuGenerator < Rails::Generators::NamedBase/ diff --git a/railties/test/generators/resource_generator_test.rb b/railties/test/generators/resource_generator_test.rb index a4cbb1894e..7b03ca31ec 100644 --- a/railties/test/generators/resource_generator_test.rb +++ b/railties/test/generators/resource_generator_test.rb @@ -2,18 +2,6 @@ require 'abstract_unit' require 'generators/generators_test_helper' require 'generators/rails/resource/resource_generator' -# Model -require 'generators/active_record/model/model_generator' -require 'generators/rails/model/model_generator' -require 'generators/test_unit/model/model_generator' - -# Controller -require 'generators/erb/controller/controller_generator' -require 'generators/rails/controller/controller_generator' -require 'generators/rails/helper/helper_generator' -require 'generators/test_unit/controller/controller_generator' -require 'generators/test_unit/helper/helper_generator' - class ResourceGeneratorTest < GeneratorsTestCase def setup diff --git a/railties/test/generators/scaffold_controller_generator_test.rb b/railties/test/generators/scaffold_controller_generator_test.rb index 60c1145310..46b37d0cde 100644 --- a/railties/test/generators/scaffold_controller_generator_test.rb +++ b/railties/test/generators/scaffold_controller_generator_test.rb @@ -1,11 +1,6 @@ require 'abstract_unit' require 'generators/generators_test_helper' -require 'generators/active_record' -require 'generators/erb/scaffold/scaffold_generator' -require 'generators/rails/helper/helper_generator' require 'generators/rails/scaffold_controller/scaffold_controller_generator' -require 'generators/test_unit/scaffold/scaffold_generator' -require 'generators/test_unit/helper/helper_generator' class ScaffoldControllerGeneratorTest < GeneratorsTestCase diff --git a/railties/test/generators/scaffold_generator_test.rb b/railties/test/generators/scaffold_generator_test.rb index dfa11fd84b..2e5d4b609e 100644 --- a/railties/test/generators/scaffold_generator_test.rb +++ b/railties/test/generators/scaffold_generator_test.rb @@ -1,20 +1,6 @@ require 'abstract_unit' require 'generators/generators_test_helper' -require 'generators/active_record' require 'generators/rails/scaffold/scaffold_generator' -require 'generators/rails/stylesheets/stylesheets_generator' - -# Model -require 'generators/active_record/model/model_generator' -require 'generators/rails/model/model_generator' -require 'generators/test_unit/model/model_generator' - -# Controller -require 'generators/erb/scaffold/scaffold_generator' -require 'generators/rails/scaffold_controller/scaffold_controller_generator' -require 'generators/rails/helper/helper_generator' -require 'generators/test_unit/scaffold/scaffold_generator' -require 'generators/test_unit/helper/helper_generator' class ScaffoldGeneratorTest < GeneratorsTestCase diff --git a/railties/test/generators/session_migration_generator_test.rb b/railties/test/generators/session_migration_generator_test.rb index 05b51b1566..7eefbe51e6 100644 --- a/railties/test/generators/session_migration_generator_test.rb +++ b/railties/test/generators/session_migration_generator_test.rb @@ -1,6 +1,5 @@ require 'abstract_unit' require 'generators/generators_test_helper' -require 'generators/active_record/session_migration/session_migration_generator' require 'generators/rails/session_migration/session_migration_generator' class SessionMigrationGeneratorTest < GeneratorsTestCase -- cgit v1.2.3 From de68cf7e0624e7d8e7e94034858a061ca0f6f68c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 3 Jul 2009 12:19:22 +0200 Subject: Plugin generators now reflect new generators sutrcture. --- railties/test/generators/plugin_generator_test.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb index b9f09d5163..2b41f85a2d 100644 --- a/railties/test/generators/plugin_generator_test.rb +++ b/railties/test/generators/plugin_generator_test.rb @@ -37,10 +37,9 @@ class PluginGeneratorTest < GeneratorsTestCase def test_creates_generator_if_required run_generator ["plugin_fu", "--generator"] - assert_file "vendor/plugins/plugin_fu/generators/plugin_fu/templates" - - flag = /class PluginFuGenerator < Rails::Generators::NamedBase/ - assert_file "vendor/plugins/plugin_fu/generators/plugin_fu/plugin_fu_generator.rb", flag + assert_file "vendor/plugins/plugin_fu/lib/generators/templates" + assert_file "vendor/plugins/plugin_fu/lib/generators/plugin_fu_generator.rb", + /class PluginFuGenerator < Rails::Generators::NamedBase/ end def test_plugin_generator_on_revoke -- cgit v1.2.3 From 3ca504c966b8cf3ad51cdccd3377efc33fccab33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 3 Jul 2009 12:32:46 +0200 Subject: Removed remaining old generators files. --- railties/test/generator_lookup_test.rb | 42 -------- railties/test/generators/generators_test_helper.rb | 8 +- railties/test/rails_generator_test.rb | 117 --------------------- 3 files changed, 7 insertions(+), 160 deletions(-) delete mode 100644 railties/test/generator_lookup_test.rb delete mode 100644 railties/test/rails_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generator_lookup_test.rb b/railties/test/generator_lookup_test.rb deleted file mode 100644 index b67087e5ea..0000000000 --- a/railties/test/generator_lookup_test.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'plugin_test_helper' - -class GeneratorLookupTest < Test::Unit::TestCase - def setup - @fixture_dirs = %w{alternate default} - @configuration = Rails.configuration = Rails::Configuration.new - # We need to add our testing plugin directory to the plugin paths so - # the locator knows where to look for our plugins - @configuration.plugin_paths += @fixture_dirs.map{|fd| plugin_fixture_path(fd)} - @initializer = Rails::Initializer.default - @initializer.config = @configuration - @initializer.run(:add_plugin_load_paths) - @initializer.run(:load_plugins) - @initializer.run(:set_root_path) - load 'rails_generator.rb' - require 'rails_generator/scripts' - end - - def test_should_load_from_all_plugin_paths - assert Rails::Generator::Base.lookup('a_generator') - assert Rails::Generator::Base.lookup('stubby_generator') - end - - def test_should_create_generator_source_for_each_directory_in_plugin_paths - sources = Rails::Generator::Base.sources - @fixture_dirs.each do |gen_dir| - expected_label = "plugins (fixtures/plugins/#{gen_dir})".to_sym - assert sources.any? {|source| source.label == expected_label } - end - end - - def test_should_preserve_order_in_usage_message - msg = Rails::Generator::Scripts::Base.new.send(:usage_message) - positions = @fixture_dirs.map do |gen_dir| - pos = msg.index("Plugins (fixtures/plugins/#{gen_dir})") - assert_not_nil pos - pos - end - assert_equal positions.sort, positions - end - -end diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index 782118aeb0..7f22197a54 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -1,10 +1,16 @@ require 'test/unit' require 'fileutils' -require 'mocha' $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" require 'generators' +fixtures = File.expand_path(File.join(File.dirname(__FILE__), '..', 'fixtures')) +if defined?(RAILS_ROOT) + RAILS_ROOT.replace fixtures +else + RAILS_ROOT = fixtures +end + class GeneratorsTestCase < Test::Unit::TestCase include FileUtils diff --git a/railties/test/rails_generator_test.rb b/railties/test/rails_generator_test.rb deleted file mode 100644 index 5a1409fc2e..0000000000 --- a/railties/test/rails_generator_test.rb +++ /dev/null @@ -1,117 +0,0 @@ -require 'test/unit' - -# Optionally load RubyGems. -begin - require 'rubygems' -rescue LoadError -end - -# Mock out what we need from AR::Base. -module ActiveRecord - class Base - class << self - attr_accessor :pluralize_table_names - end - self.pluralize_table_names = true - end -end - -# And what we need from ActionView -module ActionView - module Helpers - module ActiveRecordHelper; end - class InstanceTag; end - end -end - - -# Must set before requiring generator libs. -if defined?(RAILS_ROOT) - RAILS_ROOT.replace "#{File.dirname(__FILE__)}/fixtures" -else - RAILS_ROOT = "#{File.dirname(__FILE__)}/fixtures" -end - -$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib" -require 'initializer' - -# Mocks out the configuration -module Rails - def self.configuration - Rails::Configuration.new - end -end - -require 'rails_generator' - -#class RailsGeneratorTest < Test::Unit::TestCase -# BUILTINS = %w(controller integration_test mailer migration model observer plugin resource scaffold session_migration) -# CAPITALIZED_BUILTINS = BUILTINS.map { |b| b.capitalize } - -# def setup -# ActiveRecord::Base.pluralize_table_names = true -# @initializer = Rails::Initializer.default -# @initializer.config = Rails.configuration -# @initializer.run(:set_root_path) -# end - -# def test_sources -# expected = [:lib, :vendor, -# "plugins (vendor/plugins)".to_sym, # /generators and /rails_generators -# :user, -# :RubyGems, :RubyGems, # gems named _generator, gems containing /rails_generator/ folder -# :builtin] -# expected.delete(:RubyGems) unless Object.const_defined?(:Gem) -# assert_equal expected, Rails::Generator::Base.sources.map { |s| s.label } -# end - -# def test_lookup_builtins -# (BUILTINS + CAPITALIZED_BUILTINS).each do |name| -# assert_nothing_raised do -# spec = Rails::Generator::Base.lookup(name) -# assert_not_nil spec -# assert_kind_of Rails::Generator::Spec, spec - -# klass = spec.klass -# assert klass < Rails::Generator::Base -# assert_equal spec, klass.spec -# end -# end -# end - -# def test_autolookup -# assert_nothing_raised { ControllerGenerator } -# assert_nothing_raised { ModelGenerator } -# end - -# def test_lookup_missing_generator -# assert_raise Rails::Generator::GeneratorError do -# Rails::Generator::Base.lookup('missing').klass -# end -# end - -# def test_lookup_missing_class -# spec = nil -# assert_nothing_raised { spec = Rails::Generator::Base.lookup('missing_class') } -# assert_not_nil spec -# assert_kind_of Rails::Generator::Spec, spec -# assert_raise(NameError) { spec.klass } -# end - -# def test_generator_usage -# (BUILTINS - ["session_migration"]).each do |name| -# assert_raise(Rails::Generator::UsageError, "Generator '#{name}' should raise an error without arguments") { -# Rails::Generator::Base.instance(name) -# } -# end -# end - -# def test_generator_spec -# spec = Rails::Generator::Base.lookup('working') -# assert_equal 'working', spec.name -# assert_match(/#{spec.path}$/, "#{RAILS_ROOT}/lib/generators/working") -# assert_equal :lib, spec.source -# assert_nothing_raised { assert_match(/WorkingGenerator$/, spec.klass.name) } -# end - -#end -- cgit v1.2.3 From 21db04818e0120a35912cbf57663dfecc9bec4a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 3 Jul 2009 14:55:37 +0200 Subject: More tests for rails generators and lookup. --- .../active_record/fixjour/fixjour_generator.rb | 8 +++ .../fixtures/lib/generators/fixjour_generator.rb | 2 + .../missing_class/missing_class_generator.rb | 0 .../generators/missing_class/templates/.gitignore | 0 .../missing_generator/templates/.gitignore | 0 .../lib/generators/missing_templates/.gitignore | 0 .../lib/generators/rails/javascripts_generator.rb | 4 ++ .../lib/generators/working/working_generator.rb | 2 - railties/test/generators/generators_test_helper.rb | 6 +- railties/test/generators/model_generator_test.rb | 4 +- railties/test/generators_test.rb | 80 ++++++++++++++++++++++ 11 files changed, 99 insertions(+), 7 deletions(-) create mode 100644 railties/test/fixtures/lib/generators/active_record/fixjour/fixjour_generator.rb create mode 100644 railties/test/fixtures/lib/generators/fixjour_generator.rb delete mode 100644 railties/test/fixtures/lib/generators/missing_class/missing_class_generator.rb delete mode 100644 railties/test/fixtures/lib/generators/missing_class/templates/.gitignore delete mode 100644 railties/test/fixtures/lib/generators/missing_generator/templates/.gitignore delete mode 100644 railties/test/fixtures/lib/generators/missing_templates/.gitignore create mode 100644 railties/test/fixtures/lib/generators/rails/javascripts_generator.rb delete mode 100644 railties/test/fixtures/lib/generators/working/working_generator.rb create mode 100644 railties/test/generators_test.rb (limited to 'railties/test') diff --git a/railties/test/fixtures/lib/generators/active_record/fixjour/fixjour_generator.rb b/railties/test/fixtures/lib/generators/active_record/fixjour/fixjour_generator.rb new file mode 100644 index 0000000000..7a4edb8bcb --- /dev/null +++ b/railties/test/fixtures/lib/generators/active_record/fixjour/fixjour_generator.rb @@ -0,0 +1,8 @@ +require 'generators/active_record' + +module ActiveRecord + module Generators + class FixjourGenerator < Base + end + end +end diff --git a/railties/test/fixtures/lib/generators/fixjour_generator.rb b/railties/test/fixtures/lib/generators/fixjour_generator.rb new file mode 100644 index 0000000000..ef3e9edbed --- /dev/null +++ b/railties/test/fixtures/lib/generators/fixjour_generator.rb @@ -0,0 +1,2 @@ +class FixjourGenerator < Rails::Generators::NamedBase +end diff --git a/railties/test/fixtures/lib/generators/missing_class/missing_class_generator.rb b/railties/test/fixtures/lib/generators/missing_class/missing_class_generator.rb deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/railties/test/fixtures/lib/generators/missing_class/templates/.gitignore b/railties/test/fixtures/lib/generators/missing_class/templates/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/railties/test/fixtures/lib/generators/missing_generator/templates/.gitignore b/railties/test/fixtures/lib/generators/missing_generator/templates/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/railties/test/fixtures/lib/generators/missing_templates/.gitignore b/railties/test/fixtures/lib/generators/missing_templates/.gitignore deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/railties/test/fixtures/lib/generators/rails/javascripts_generator.rb b/railties/test/fixtures/lib/generators/rails/javascripts_generator.rb new file mode 100644 index 0000000000..cad5e96784 --- /dev/null +++ b/railties/test/fixtures/lib/generators/rails/javascripts_generator.rb @@ -0,0 +1,4 @@ +module Rails::Generators + class JavascriptsGenerator < Rails::Generators::NamedBase + end +end diff --git a/railties/test/fixtures/lib/generators/working/working_generator.rb b/railties/test/fixtures/lib/generators/working/working_generator.rb deleted file mode 100644 index 465b34319a..0000000000 --- a/railties/test/fixtures/lib/generators/working/working_generator.rb +++ /dev/null @@ -1,2 +0,0 @@ -class WorkingGenerator < Rails::Generator::NamedBase -end diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index 7f22197a54..2ccedf814d 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -1,9 +1,6 @@ require 'test/unit' require 'fileutils' -$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" -require 'generators' - fixtures = File.expand_path(File.join(File.dirname(__FILE__), '..', 'fixtures')) if defined?(RAILS_ROOT) RAILS_ROOT.replace fixtures @@ -11,6 +8,9 @@ else RAILS_ROOT = fixtures end +$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" +require 'generators' + class GeneratorsTestCase < Test::Unit::TestCase include FileUtils diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index d076244abd..30fc837834 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -107,8 +107,8 @@ class ModelGeneratorTest < GeneratorsTestCase end def test_fixture_is_skipped_if_fixture_replacement_is_given - content = run_generator ["account", "-r", "fixjour"] - assert_match /Could not find and invoke 'fixjour'/, content + content = run_generator ["account", "-r", "factory_girl"] + assert_match /Could not find and invoke 'factory_girl'/, content assert_no_file "test/fixtures/accounts.yml" end diff --git a/railties/test/generators_test.rb b/railties/test/generators_test.rb new file mode 100644 index 0000000000..ac290b10bb --- /dev/null +++ b/railties/test/generators_test.rb @@ -0,0 +1,80 @@ +require File.join(File.dirname(__FILE__), 'generators', 'generators_test_helper') +require 'generators/rails/model/model_generator' +require 'mocha' + +class GeneratorsTest < GeneratorsTestCase + def test_invoke_when_generator_is_not_found + output = capture(:stdout){ Rails::Generators.invoke :unknown } + assert_equal "Could not find generator unknown.\n", output + end + + def test_help_when_a_generator_with_required_arguments_is_invoked_without_arguments + output = capture(:stdout){ Rails::Generators.invoke :model, [] } + assert_match /Description:/, output + end + + def test_invoke_with_default_behavior + Rails::Generators::ModelGenerator.expects(:start).with(["Account"], :behavior => :invoke) + Rails::Generators.invoke :model, ["Account"] + end + + def test_invoke_with_given_behavior + Rails::Generators::ModelGenerator.expects(:start).with(["Account"], :behavior => :skip) + Rails::Generators.invoke :model, ["Account"], :skip + end + + def test_find_by_namespace_without_base_or_context + assert_nil Rails::Generators.find_by_namespace(:model) + end + + def test_find_by_namespace_with_base + klass = Rails::Generators.find_by_namespace(:model, :rails) + assert klass + assert_equal "rails:generators:model", klass.namespace + end + + def test_find_by_namespace_with_context + klass = Rails::Generators.find_by_namespace(:test_unit, nil, :model) + assert klass + assert_equal "test_unit:generators:model", klass.namespace + end + + def test_find_by_namespace_add_generators_to_raw_lookups + klass = Rails::Generators.find_by_namespace("test_unit:model") + assert klass + assert_equal "test_unit:generators:model", klass.namespace + end + + def test_find_by_namespace_lookup_to_the_rails_root_folder + klass = Rails::Generators.find_by_namespace(:fixjour) + assert klass + assert_equal "fixjour", klass.namespace + end + + def test_find_by_namespace_lookup_to_deep_rails_root_folders + klass = Rails::Generators.find_by_namespace(:fixjour, :active_record) + assert klass + assert_equal "active_record:generators:fixjour", klass.namespace + end + + def test_find_by_namespace_lookup_traverse_folders + klass = Rails::Generators.find_by_namespace(:javascripts, :rails) + assert klass + assert_equal "rails:generators:javascripts", klass.namespace + end + + def test_builtin_generators + assert Rails::Generators.builtin.include? %w(rails model) + end + + def test_rails_generators_help_with_builtin_information + output = capture(:stdout){ Rails::Generators.help } + assert_match /model/, output + assert_match /scaffold_controller/, output + end + + def test_rails_generators_with_others_information + output = capture(:stdout){ Rails::Generators.help }.split("\n").last + assert_equal "Others: active_record:fixjour, fixjour, rails:javascripts.", output + end +end -- cgit v1.2.3 From 44633dc7a587424d21917413500b2d71fa3d31bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 3 Jul 2009 15:12:18 +0200 Subject: Add some tests for no_color! behavior. --- railties/test/generators_test.rb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators_test.rb b/railties/test/generators_test.rb index ac290b10bb..c49081e5cc 100644 --- a/railties/test/generators_test.rb +++ b/railties/test/generators_test.rb @@ -13,14 +13,14 @@ class GeneratorsTest < GeneratorsTestCase assert_match /Description:/, output end - def test_invoke_with_default_behavior - Rails::Generators::ModelGenerator.expects(:start).with(["Account"], :behavior => :invoke) + def test_invoke_with_default_values + Rails::Generators::ModelGenerator.expects(:start).with(["Account"], {}) Rails::Generators.invoke :model, ["Account"] end - def test_invoke_with_given_behavior + def test_invoke_with_config_values Rails::Generators::ModelGenerator.expects(:start).with(["Account"], :behavior => :skip) - Rails::Generators.invoke :model, ["Account"], :skip + Rails::Generators.invoke :model, ["Account"], :behavior => :skip end def test_find_by_namespace_without_base_or_context @@ -77,4 +77,11 @@ class GeneratorsTest < GeneratorsTestCase output = capture(:stdout){ Rails::Generators.help }.split("\n").last assert_equal "Others: active_record:fixjour, fixjour, rails:javascripts.", output end + + def test_no_color_sets_proper_shell + Rails::Generators.no_color! + assert_equal Thor::Shell::Basic, Thor::Base.shell + ensure + Thor::Base.shell = Thor::Shell::Color + end end -- cgit v1.2.3 From cd388e075c363d80f9bba050bbc77d7a1a1e0e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 4 Jul 2009 10:32:10 +0200 Subject: Search for generators on vendorized plugins and gems. --- .../stubby/generators/stubby_generator/stubby_generator.rb | 4 ---- .../fixtures/vendor/gems/mspec/lib/generators/mspec_generator.rb | 2 ++ railties/test/generators_test.rb | 8 +++++++- 3 files changed, 9 insertions(+), 5 deletions(-) delete mode 100644 railties/test/fixtures/plugins/default/stubby/generators/stubby_generator/stubby_generator.rb create mode 100644 railties/test/fixtures/vendor/gems/mspec/lib/generators/mspec_generator.rb (limited to 'railties/test') diff --git a/railties/test/fixtures/plugins/default/stubby/generators/stubby_generator/stubby_generator.rb b/railties/test/fixtures/plugins/default/stubby/generators/stubby_generator/stubby_generator.rb deleted file mode 100644 index 8fda8197d1..0000000000 --- a/railties/test/fixtures/plugins/default/stubby/generators/stubby_generator/stubby_generator.rb +++ /dev/null @@ -1,4 +0,0 @@ -class StubbyGenerator < Rails::Generator::Base - def manifest - end -end diff --git a/railties/test/fixtures/vendor/gems/mspec/lib/generators/mspec_generator.rb b/railties/test/fixtures/vendor/gems/mspec/lib/generators/mspec_generator.rb new file mode 100644 index 0000000000..191bdbf2fc --- /dev/null +++ b/railties/test/fixtures/vendor/gems/mspec/lib/generators/mspec_generator.rb @@ -0,0 +1,2 @@ +class MspecGenerator < Rails::Generators::NamedBase +end diff --git a/railties/test/generators_test.rb b/railties/test/generators_test.rb index c49081e5cc..c7195f753d 100644 --- a/railties/test/generators_test.rb +++ b/railties/test/generators_test.rb @@ -63,6 +63,12 @@ class GeneratorsTest < GeneratorsTestCase assert_equal "rails:generators:javascripts", klass.namespace end + def test_find_by_namespace_lookup_to_vendor_folders + klass = Rails::Generators.find_by_namespace(:mspec) + assert klass + assert_equal "mspec", klass.namespace + end + def test_builtin_generators assert Rails::Generators.builtin.include? %w(rails model) end @@ -75,7 +81,7 @@ class GeneratorsTest < GeneratorsTestCase def test_rails_generators_with_others_information output = capture(:stdout){ Rails::Generators.help }.split("\n").last - assert_equal "Others: active_record:fixjour, fixjour, rails:javascripts.", output + assert_equal "Others: active_record:fixjour, fixjour, mspec, rails:javascripts.", output end def test_no_color_sets_proper_shell -- cgit v1.2.3 From da09d46ed463459eb651f6c1e6af923e283da6e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 4 Jul 2009 16:57:14 +0200 Subject: Make generators test pass with latest Thor version --- railties/test/generators/actions_test.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/actions_test.rb b/railties/test/generators/actions_test.rb index baf687336a..c17b599582 100644 --- a/railties/test/generators/actions_test.rb +++ b/railties/test/generators/actions_test.rb @@ -31,12 +31,12 @@ class ActionsTest < GeneratorsTestCase end def test_plugin_with_git_option_should_run_plugin_install - generator.expects(:run).once.with("ruby script/plugin install #{@git_plugin_uri}", false) + generator.expects(:run_ruby_script).once.with("script/plugin install #{@git_plugin_uri}", false) action :plugin, 'restful-authentication', :git => @git_plugin_uri end def test_plugin_with_svn_option_should_run_plugin_install - generator.expects(:run).once.with("ruby script/plugin install #{@svn_plugin_uri}", false) + generator.expects(:run_ruby_script).once.with("script/plugin install #{@svn_plugin_uri}", false) action :plugin, 'restful-authentication', :svn => @svn_plugin_uri end @@ -132,7 +132,7 @@ class ActionsTest < GeneratorsTestCase end def test_generate_should_run_script_generate_with_argument_and_options - generator.expects(:run).once.with('ruby script/generate model MyModel', false) + generator.expects(:run_ruby_script).once.with('script/generate model MyModel', false) action :generate, 'model', 'MyModel' end -- cgit v1.2.3 From 8ff214e0db31a6827b52f738c409d97d70b363d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 4 Jul 2009 17:09:09 +0200 Subject: Use the proper shebang when using Ruby 1.9 or jruby or windows. --- railties/test/generators/app_generator_test.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb index 98994f6ad2..8955789087 100644 --- a/railties/test/generators/app_generator_test.rb +++ b/railties/test/generators/app_generator_test.rb @@ -109,6 +109,21 @@ class AppGeneratorTest < GeneratorsTestCase ).each { |path| assert_file "script/#{path}", /#!foo\/bar\/baz/ } end + def test_shebang_when_is_the_same_as_default_use_env + run_generator ["--ruby", Thor::Util.ruby_command] + + %w( + about + console + dbconsole + destroy + generate + plugin + runner + server + ).each { |path| assert_file "script/#{path}", /#!\/usr\/bin\/env/ } + end + def test_rails_is_frozen generator(:freeze => true, :database => "sqlite3").expects(:run).with("rake rails:freeze:edge", false) silence(:stdout){ generator.invoke } -- cgit v1.2.3 From 35925a8995e4b3522e4a4e4e52a3a18c9c1cee52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 4 Jul 2009 17:34:48 +0200 Subject: Ensure that rails templates methods are invoked with the proper extensions [#2531 status:resolved] --- railties/test/generators/actions_test.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators/actions_test.rb b/railties/test/generators/actions_test.rb index c17b599582..57ac3f0950 100644 --- a/railties/test/generators/actions_test.rb +++ b/railties/test/generators/actions_test.rb @@ -151,16 +151,34 @@ class ActionsTest < GeneratorsTestCase action :rake, 'log:clear', :sudo => true end + def test_rake_uses_ruby_extension + Thor::Util.expects(:ruby_command).returns('ruby.bat') + generator.expects(:run).once.with('rake.bat log:clear RAILS_ENV=development', false) + action :rake, 'log:clear' + end + def test_capify_should_run_the_capify_command generator.expects(:run).once.with('capify .', false) action :capify! end + def test_capify_uses_ruby_extension + Thor::Util.expects(:ruby_command).returns('ruby.bat') + generator.expects(:run).once.with('capify.bat .', false) + action :capify! + end + def test_freeze_should_freeze_rails_edge generator.expects(:run).once.with('rake rails:freeze:edge', false) action :freeze! end + def test_freeze_uses_ruby_extension + Thor::Util.expects(:ruby_command).returns('ruby.bat') + generator.expects(:run).once.with('rake.bat rails:freeze:edge', false) + action :freeze! + end + def test_route_should_add_data_to_the_routes_block_in_config_routes run_generator route_command = "map.route '/login', :controller => 'sessions', :action => 'new'" -- cgit v1.2.3 From b277cf28e8a6f5636d0485ab8c04ea0660444440 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 4 Jul 2009 18:13:27 +0200 Subject: Allow scaffold controller to load action_orm files on demand. --- railties/test/generators/scaffold_controller_generator_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'railties/test') diff --git a/railties/test/generators/scaffold_controller_generator_test.rb b/railties/test/generators/scaffold_controller_generator_test.rb index 46b37d0cde..1f0060d11e 100644 --- a/railties/test/generators/scaffold_controller_generator_test.rb +++ b/railties/test/generators/scaffold_controller_generator_test.rb @@ -100,7 +100,7 @@ class ScaffoldControllerGeneratorTest < GeneratorsTestCase def test_error_is_shown_if_orm_does_not_provide_interface error = capture(:stderr){ run_generator ["User", "--orm=unknown"] } assert_equal "Could not load Unknown::Generators::ActionORM, skipping controller. " << - "Error: uninitialized constant Unknown.\n", error + "Error: no such file to load -- generators/unknown.\n", error end protected -- cgit v1.2.3 From eeb6a0786a061b640bcd90a5d90bd0d0215fe809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Sat, 4 Jul 2009 19:03:52 +0200 Subject: Load generators from user home and show a error message if they can't be loaded. --- .../fixtures/vendor/gems/wrong/lib/generators/wrong_generator.rb | 3 +++ railties/test/generators_test.rb | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 railties/test/fixtures/vendor/gems/wrong/lib/generators/wrong_generator.rb (limited to 'railties/test') diff --git a/railties/test/fixtures/vendor/gems/wrong/lib/generators/wrong_generator.rb b/railties/test/fixtures/vendor/gems/wrong/lib/generators/wrong_generator.rb new file mode 100644 index 0000000000..6aa7cb052e --- /dev/null +++ b/railties/test/fixtures/vendor/gems/wrong/lib/generators/wrong_generator.rb @@ -0,0 +1,3 @@ +# Old generator version +class WrongGenerator < Rails::Generator::NamedBase +end diff --git a/railties/test/generators_test.rb b/railties/test/generators_test.rb index c7195f753d..964def4158 100644 --- a/railties/test/generators_test.rb +++ b/railties/test/generators_test.rb @@ -81,7 +81,13 @@ class GeneratorsTest < GeneratorsTestCase def test_rails_generators_with_others_information output = capture(:stdout){ Rails::Generators.help }.split("\n").last - assert_equal "Others: active_record:fixjour, fixjour, mspec, rails:javascripts.", output + assert_equal "Others: active_record:fixjour, fixjour, mspec, rails:javascripts, wrong.", output + end + + def test_warning_is_raised_if_generator_cant_be_loaded + output = capture(:stderr){ Rails::Generators.find_by_namespace(:wrong) } + assert_match /\[WARNING\] Could not load generator at/, output + assert_match /Error: uninitialized constant Rails::Generator/, output end def test_no_color_sets_proper_shell -- cgit v1.2.3 From 66d1b968d108787114372144e97f4f817847892b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Mon, 6 Jul 2009 18:31:28 +0200 Subject: Make specs pass on Ruby 1.9. --- railties/test/generators/actions_test.rb | 23 ++++------------------ railties/test/generators/generators_test_helper.rb | 8 +++++++- 2 files changed, 11 insertions(+), 20 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/actions_test.rb b/railties/test/generators/actions_test.rb index 57ac3f0950..3313e92c31 100644 --- a/railties/test/generators/actions_test.rb +++ b/railties/test/generators/actions_test.rb @@ -98,7 +98,10 @@ class ActionsTest < GeneratorsTestCase '# This will be added' end - assert_file 'config/environment.rb', /# This will be added/ + assert_file 'config/environment.rb' do |content| + assert_match /# This will be added/, content + assert_no_match /# This wont be added/, content + end end def test_git_with_symbol_should_run_command_using_git_scm @@ -151,34 +154,16 @@ class ActionsTest < GeneratorsTestCase action :rake, 'log:clear', :sudo => true end - def test_rake_uses_ruby_extension - Thor::Util.expects(:ruby_command).returns('ruby.bat') - generator.expects(:run).once.with('rake.bat log:clear RAILS_ENV=development', false) - action :rake, 'log:clear' - end - def test_capify_should_run_the_capify_command generator.expects(:run).once.with('capify .', false) action :capify! end - def test_capify_uses_ruby_extension - Thor::Util.expects(:ruby_command).returns('ruby.bat') - generator.expects(:run).once.with('capify.bat .', false) - action :capify! - end - def test_freeze_should_freeze_rails_edge generator.expects(:run).once.with('rake rails:freeze:edge', false) action :freeze! end - def test_freeze_uses_ruby_extension - Thor::Util.expects(:ruby_command).returns('ruby.bat') - generator.expects(:run).once.with('rake.bat rails:freeze:edge', false) - action :freeze! - end - def test_route_should_add_data_to_the_routes_block_in_config_routes run_generator route_command = "map.route '/login', :controller => 'sessions', :action => 'new'" diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index 2ccedf814d..f6799eb6da 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -8,17 +8,23 @@ else RAILS_ROOT = fixtures end +$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../../activerecord/lib" $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" require 'generators' class GeneratorsTestCase < Test::Unit::TestCase include FileUtils + def self.test_dir + @@test_dir = File.expand_path("#{File.dirname(__FILE__)}/../../") + end + def destination_root - @destination_root ||= File.expand_path("#{File.dirname(__FILE__)}/../fixtures/tmp") + @destination_root ||= File.join(self.class.test_dir, 'fixtures', 'tmp') end def setup + cd self.class.test_dir rm_rf(destination_root) mkdir_p(destination_root) end -- cgit v1.2.3 From 2699e9c2ddff13c5e19e1c95e838fa6d9a965c34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 8 Jul 2009 10:57:56 +0200 Subject: Added config.generators with tests. --- railties/test/initializer_test.rb | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'railties/test') diff --git a/railties/test/initializer_test.rb b/railties/test/initializer_test.rb index 550cb7de76..da78647ab3 100644 --- a/railties/test/initializer_test.rb +++ b/railties/test/initializer_test.rb @@ -278,6 +278,35 @@ class InitializerPluginLoadingTests < Test::Unit::TestCase end end +class InitializerGeneratorsTests < Test::Unit::TestCase + def test_generators_empty_aliases_and_options + assert_equal({}, Rails::Configuration.new.generators.aliases) + assert_equal({}, Rails::Configuration.new.generators.options) + end + + def test_generators_set_options + config = Rails::Configuration.new + config.generators.orm :datamapper + config.generators.test_framework :rspec + assert_equal({ :orm => :datamapper, :test_framework => :rspec }, config.generators.options) + end + + def test_generators_set_aliases + config = Rails::Configuration.new + config.generators.aliases :test_framework => "-w" + assert_equal({ :test_framework => "-w" }, config.generators.aliases) + end + + def test_generators_with_block + config = Rails::Configuration.new + config.generators do |g| + g.orm :datamapper + g.test_framework :rspec + end + assert_equal({ :orm => :datamapper, :test_framework => :rspec }, config.generators.options) + end +end + class InitializerSetupI18nTests < Test::Unit::TestCase def test_no_config_locales_dir_present_should_return_empty_load_path File.stubs(:exist?).returns(false) -- cgit v1.2.3 From c9ea21717eefb9e9b49891c519cc4d121ef7bb74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 8 Jul 2009 12:19:17 +0200 Subject: Generators are configured on initialization if RAILS_ENV=generators. --- railties/test/initializer_test.rb | 87 ++++++++++++++++++++++++++++++++------- 1 file changed, 72 insertions(+), 15 deletions(-) (limited to 'railties/test') diff --git a/railties/test/initializer_test.rb b/railties/test/initializer_test.rb index da78647ab3..0a423b4da2 100644 --- a/railties/test/initializer_test.rb +++ b/railties/test/initializer_test.rb @@ -1,5 +1,6 @@ require 'abstract_unit' require 'initializer' +require 'generators' require 'action_view' require 'action_mailer' @@ -10,8 +11,19 @@ module Rails def self.configuration Rails::Configuration.new end + + module Generators + def self.clear_aliases! + @aliases = nil + end + + def self.clear_options! + @@options = nil + end + end end + class ConfigurationMock < Rails::Configuration attr_reader :environment_path @@ -279,32 +291,77 @@ class InitializerPluginLoadingTests < Test::Unit::TestCase end class InitializerGeneratorsTests < Test::Unit::TestCase - def test_generators_empty_aliases_and_options - assert_equal({}, Rails::Configuration.new.generators.aliases) - assert_equal({}, Rails::Configuration.new.generators.options) + + def setup + @old_env_value = RAILS_ENV.dup + @configuration = Rails::Configuration.new + @initializer = Rails::Initializer.default + @initializer.config = @configuration + end + + def test_generators_default_values + assert_equal(true, @configuration.generators.colorize_logging) + assert_equal({}, @configuration.generators.aliases) + assert_equal({}, @configuration.generators.options) end def test_generators_set_options - config = Rails::Configuration.new - config.generators.orm :datamapper - config.generators.test_framework :rspec - assert_equal({ :orm => :datamapper, :test_framework => :rspec }, config.generators.options) + @configuration.generators.orm = :datamapper + @configuration.generators.test_framework = :rspec + assert_equal({ :orm => :datamapper, :test_framework => :rspec }, @configuration.generators.options) end def test_generators_set_aliases - config = Rails::Configuration.new - config.generators.aliases :test_framework => "-w" - assert_equal({ :test_framework => "-w" }, config.generators.aliases) + @configuration.generators.aliases = { :test_framework => "-w" } + assert_equal({ :test_framework => "-w" }, @configuration.generators.aliases) end def test_generators_with_block - config = Rails::Configuration.new - config.generators do |g| - g.orm :datamapper - g.test_framework :rspec + @configuration.generators do |g| + g.orm = :datamapper + g.test_framework = :rspec end - assert_equal({ :orm => :datamapper, :test_framework => :rspec }, config.generators.options) + assert_equal({ :orm => :datamapper, :test_framework => :rspec }, @configuration.generators.options) end + + def test_generators_aliases_and_options_on_initialization + @configuration.generators.aliases = { :test_framework => "-w" } + @configuration.generators.orm = :datamapper + @configuration.generators.test_framework = :rspec + + RAILS_ENV.replace "generators" + @initializer.run(:initialize_generators) + + assert_equal :rspec, Rails::Generators.options[:test_framework] + assert_equal "-w", Rails::Generators.aliases[:test_framework] + end + + def test_generators_no_color_on_initialization + @configuration.generators.colorize_logging = false + RAILS_ENV.replace "generators" + @initializer.run(:initialize_generators) + assert_equal Thor::Base.shell, Thor::Shell::Basic + end + + def test_generators_raise_no_method_error_non_setters + assert_raise NoMethodError do + @configuration.generators.foo + end + end + + def test_generators_are_not_invoked_with_other_environments + @configuration.generators.test_framework = :rspec + @initializer.run(:initialize_generators) + assert_equal "test_unit", Rails::Generators.options[:test_framework] + end + + protected + + def teardown + RAILS_ENV.replace @old_env_value + Rails::Generators.clear_aliases! + Rails::Generators.clear_options! + end end class InitializerSetupI18nTests < Test::Unit::TestCase -- cgit v1.2.3 From 09c288f0c5b5f9da4473bb321cccb766d9f59d7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 8 Jul 2009 12:55:50 +0200 Subject: Add the new generators environment and update commands. --- railties/test/generators/helper_generator_test.rb | 4 ++-- railties/test/generators/mailer_generator_test.rb | 4 ++-- railties/test/generators/model_generator_test.rb | 2 +- railties/test/generators/observer_generator_test.rb | 4 ++-- railties/test/generators/plugin_generator_test.rb | 4 ++-- railties/test/initializer_test.rb | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/helper_generator_test.rb b/railties/test/generators/helper_generator_test.rb index 3b240a96c5..02148ee1ce 100644 --- a/railties/test/generators/helper_generator_test.rb +++ b/railties/test/generators/helper_generator_test.rb @@ -18,8 +18,8 @@ class HelperGeneratorTest < GeneratorsTestCase end def test_logs_if_the_test_framework_cannot_be_found - content = run_generator ["admin", "--test-framework=unknown"] - assert_match /Could not find and invoke 'unknown'/, content + content = run_generator ["admin", "--test-framework=rspec"] + assert_match /rspec \[not found\]/, content end def test_check_class_collision diff --git a/railties/test/generators/mailer_generator_test.rb b/railties/test/generators/mailer_generator_test.rb index 8532667d15..d3bb1cd13f 100644 --- a/railties/test/generators/mailer_generator_test.rb +++ b/railties/test/generators/mailer_generator_test.rb @@ -33,8 +33,8 @@ class MailerGeneratorTest < GeneratorsTestCase end def test_logs_if_the_template_engine_cannot_be_found - content = run_generator ["notifier", "foo", "bar", "--template-engine=unknown"] - assert_match /Could not find and invoke 'unknown'/, content + content = run_generator ["notifier", "foo", "bar", "--template-engine=haml"] + assert_match /haml \[not found\]/, content end def test_actions_are_turned_into_methods diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index 30fc837834..62e1c5ab9e 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -108,7 +108,7 @@ class ModelGeneratorTest < GeneratorsTestCase def test_fixture_is_skipped_if_fixture_replacement_is_given content = run_generator ["account", "-r", "factory_girl"] - assert_match /Could not find and invoke 'factory_girl'/, content + assert_match /factory_girl \[not found\]/, content assert_no_file "test/fixtures/accounts.yml" end diff --git a/railties/test/generators/observer_generator_test.rb b/railties/test/generators/observer_generator_test.rb index d97486d957..65e18eb942 100644 --- a/railties/test/generators/observer_generator_test.rb +++ b/railties/test/generators/observer_generator_test.rb @@ -20,8 +20,8 @@ class ObserverGeneratorTest < GeneratorsTestCase end def test_logs_if_the_test_framework_cannot_be_found - content = run_generator ["account", "--test-framework=unknown"] - assert_match /Could not find and invoke 'unknown'/, content + content = run_generator ["account", "--test-framework=rspec"] + assert_match /rspec \[not found\]/, content end protected diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb index 2b41f85a2d..bfec671d31 100644 --- a/railties/test/generators/plugin_generator_test.rb +++ b/railties/test/generators/plugin_generator_test.rb @@ -26,8 +26,8 @@ class PluginGeneratorTest < GeneratorsTestCase end def test_logs_if_the_test_framework_cannot_be_found - content = run_generator ["plugin_fu", "--test-framework=unknown"] - assert_match /Could not find and invoke 'unknown'/, content + content = run_generator ["plugin_fu", "--test-framework=rspec"] + assert_match /rspec \[not found\]/, content end def test_creates_tasks_if_required diff --git a/railties/test/initializer_test.rb b/railties/test/initializer_test.rb index 0a423b4da2..240bf31ab0 100644 --- a/railties/test/initializer_test.rb +++ b/railties/test/initializer_test.rb @@ -352,7 +352,7 @@ class InitializerGeneratorsTests < Test::Unit::TestCase def test_generators_are_not_invoked_with_other_environments @configuration.generators.test_framework = :rspec @initializer.run(:initialize_generators) - assert_equal "test_unit", Rails::Generators.options[:test_framework] + assert_equal :test_unit, Rails::Generators.options[:test_framework] end protected -- cgit v1.2.3 From f68e7a3987adf2cffe0e48263d117839c2028185 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Mon, 13 Jul 2009 18:18:08 +0200 Subject: Remove generator environment until we have a gem manifest. --- railties/test/initializer_test.rb | 8 -------- 1 file changed, 8 deletions(-) (limited to 'railties/test') diff --git a/railties/test/initializer_test.rb b/railties/test/initializer_test.rb index 240bf31ab0..163785fee3 100644 --- a/railties/test/initializer_test.rb +++ b/railties/test/initializer_test.rb @@ -293,7 +293,6 @@ end class InitializerGeneratorsTests < Test::Unit::TestCase def setup - @old_env_value = RAILS_ENV.dup @configuration = Rails::Configuration.new @initializer = Rails::Initializer.default @initializer.config = @configuration @@ -349,16 +348,9 @@ class InitializerGeneratorsTests < Test::Unit::TestCase end end - def test_generators_are_not_invoked_with_other_environments - @configuration.generators.test_framework = :rspec - @initializer.run(:initialize_generators) - assert_equal :test_unit, Rails::Generators.options[:test_framework] - end - protected def teardown - RAILS_ENV.replace @old_env_value Rails::Generators.clear_aliases! Rails::Generators.clear_options! end -- cgit v1.2.3 From a5ab030ae4ca7496fc9167c9ffa4717be130b235 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Mon, 13 Jul 2009 22:26:58 +0200 Subject: Ensure non timestamped migrations are generated properly. --- railties/test/generators/model_generator_test.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index 62e1c5ab9e..85aa2cc145 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -52,6 +52,17 @@ class ModelGeneratorTest < GeneratorsTestCase end end + def test_migration_without_timestamps + ActiveRecord::Base.timestamped_migrations = false + run_generator ["account"] + assert_file "db/migrate/001_create_accounts.rb", /class CreateAccounts < ActiveRecord::Migration/ + + run_generator ["project"] + assert_file "db/migrate/002_create_projects.rb", /class CreateProjects < ActiveRecord::Migration/ + ensure + ActiveRecord::Base.timestamped_migrations = true + end + def test_model_with_references_attribute_generates_belongs_to_associations run_generator ["product", "name:string", "supplier_id:references"] assert_file "app/models/product.rb", /belongs_to :supplier/ -- cgit v1.2.3 From 52673cd2eee2bdd65f4ae636f4fdc209186ab868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Mon, 13 Jul 2009 23:01:12 +0200 Subject: Added a generator generator. --- .../test/generators/generator_generator_test.rb | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 railties/test/generators/generator_generator_test.rb (limited to 'railties/test') diff --git a/railties/test/generators/generator_generator_test.rb b/railties/test/generators/generator_generator_test.rb new file mode 100644 index 0000000000..e31f4eb4be --- /dev/null +++ b/railties/test/generators/generator_generator_test.rb @@ -0,0 +1,26 @@ +require 'abstract_unit' +require 'generators/generators_test_helper' +require 'generators/rails/generator/generator_generator' + +class GeneratorGeneratorTest < GeneratorsTestCase + + def test_generator_skeleton_is_created + run_generator + + %w( + lib/generators/awesome + lib/generators/awesome/USAGE + lib/generators/awesome/templates + ).each{ |path| assert_file path } + + assert_file "lib/generators/awesome/awesome_generator.rb", + /class AwesomeGenerator < Rails::Generators::NamedBase/ + end + + protected + + def run_generator(args=["awesome"], config={}) + silence(:stdout) { Rails::Generators::GeneratorGenerator.start args, config.merge(:root => destination_root) } + end + +end -- cgit v1.2.3 From a06c825b464758a0c22f8b089a596e46f1bba5cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 14 Jul 2009 22:20:43 +0200 Subject: Updated vendored Thor to 0.11.1 and update Rails::Generators. --- railties/test/generators/actions_test.rb | 2 +- railties/test/generators/app_generator_test.rb | 2 +- railties/test/generators/controller_generator_test.rb | 2 +- railties/test/generators/generator_generator_test.rb | 2 +- railties/test/generators/helper_generator_test.rb | 2 +- railties/test/generators/integration_test_generator_test.rb | 2 +- railties/test/generators/mailer_generator_test.rb | 2 +- railties/test/generators/metal_generator_test.rb | 2 +- railties/test/generators/migration_generator_test.rb | 2 +- railties/test/generators/model_generator_test.rb | 2 +- railties/test/generators/observer_generator_test.rb | 2 +- railties/test/generators/performance_test_generator_test.rb | 2 +- railties/test/generators/plugin_generator_test.rb | 2 +- railties/test/generators/resource_generator_test.rb | 2 +- railties/test/generators/scaffold_controller_generator_test.rb | 2 +- railties/test/generators/scaffold_generator_test.rb | 2 +- railties/test/generators/session_migration_generator_test.rb | 2 +- railties/test/generators/stylesheets_generator_test.rb | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/actions_test.rb b/railties/test/generators/actions_test.rb index 3313e92c31..e8b10522b9 100644 --- a/railties/test/generators/actions_test.rb +++ b/railties/test/generators/actions_test.rb @@ -178,7 +178,7 @@ class ActionsTest < GeneratorsTestCase end def generator(config={}) - @generator ||= Rails::Generators::Base.new([], {}, { :root => destination_root }.merge!(config)) + @generator ||= Rails::Generators::Base.new([], {}, { :destination_root => destination_root }.merge!(config)) end def action(*args, &block) diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb index 8955789087..c78b7d2f25 100644 --- a/railties/test/generators/app_generator_test.rb +++ b/railties/test/generators/app_generator_test.rb @@ -171,7 +171,7 @@ class AppGeneratorTest < GeneratorsTestCase end def generator(options={}) - @generator ||= Rails::Generators::AppGenerator.new([destination_root], options, :root => destination_root) + @generator ||= Rails::Generators::AppGenerator.new([destination_root], options, :destination_root => destination_root) end def action(*args, &block) diff --git a/railties/test/generators/controller_generator_test.rb b/railties/test/generators/controller_generator_test.rb index 29169f225b..850b9e632d 100644 --- a/railties/test/generators/controller_generator_test.rb +++ b/railties/test/generators/controller_generator_test.rb @@ -74,7 +74,7 @@ class ControllerGeneratorTest < GeneratorsTestCase protected def run_generator(args=["Account", "foo", "bar"]) - silence(:stdout) { Rails::Generators::ControllerGenerator.start args, :root => destination_root } + silence(:stdout) { Rails::Generators::ControllerGenerator.start args, :destination_root => destination_root } end end diff --git a/railties/test/generators/generator_generator_test.rb b/railties/test/generators/generator_generator_test.rb index e31f4eb4be..b1ebe5f1b5 100644 --- a/railties/test/generators/generator_generator_test.rb +++ b/railties/test/generators/generator_generator_test.rb @@ -20,7 +20,7 @@ class GeneratorGeneratorTest < GeneratorsTestCase protected def run_generator(args=["awesome"], config={}) - silence(:stdout) { Rails::Generators::GeneratorGenerator.start args, config.merge(:root => destination_root) } + silence(:stdout) { Rails::Generators::GeneratorGenerator.start args, config.merge(:destination_root => destination_root) } end end diff --git a/railties/test/generators/helper_generator_test.rb b/railties/test/generators/helper_generator_test.rb index 02148ee1ce..3d655016f1 100644 --- a/railties/test/generators/helper_generator_test.rb +++ b/railties/test/generators/helper_generator_test.rb @@ -54,7 +54,7 @@ class HelperGeneratorTest < GeneratorsTestCase protected def run_generator(args=["admin"]) - silence(:stdout) { Rails::Generators::HelperGenerator.start args, :root => destination_root } + silence(:stdout) { Rails::Generators::HelperGenerator.start args, :destination_root => destination_root } end end diff --git a/railties/test/generators/integration_test_generator_test.rb b/railties/test/generators/integration_test_generator_test.rb index 1961a102b9..190b28012c 100644 --- a/railties/test/generators/integration_test_generator_test.rb +++ b/railties/test/generators/integration_test_generator_test.rb @@ -12,7 +12,7 @@ class IntegrationTestGeneratorTest < GeneratorsTestCase protected def run_generator(args=["integration"]) - silence(:stdout) { Rails::Generators::IntegrationTestGenerator.start args, :root => destination_root } + silence(:stdout) { Rails::Generators::IntegrationTestGenerator.start args, :destination_root => destination_root } end end diff --git a/railties/test/generators/mailer_generator_test.rb b/railties/test/generators/mailer_generator_test.rb index d3bb1cd13f..9e74859c3a 100644 --- a/railties/test/generators/mailer_generator_test.rb +++ b/railties/test/generators/mailer_generator_test.rb @@ -46,7 +46,7 @@ class MailerGeneratorTest < GeneratorsTestCase protected def run_generator(args=["notifier", "foo", "bar"]) - silence(:stdout) { Rails::Generators::MailerGenerator.start args, :root => destination_root } + silence(:stdout) { Rails::Generators::MailerGenerator.start args, :destination_root => destination_root } end end diff --git a/railties/test/generators/metal_generator_test.rb b/railties/test/generators/metal_generator_test.rb index 4e73883feb..97e892cefb 100644 --- a/railties/test/generators/metal_generator_test.rb +++ b/railties/test/generators/metal_generator_test.rb @@ -17,7 +17,7 @@ class MetalGeneratorTest < GeneratorsTestCase protected def run_generator(args=["foo"]) - silence(:stdout) { Rails::Generators::MetalGenerator.start args, :root => destination_root } + silence(:stdout) { Rails::Generators::MetalGenerator.start args, :destination_root => destination_root } end end diff --git a/railties/test/generators/migration_generator_test.rb b/railties/test/generators/migration_generator_test.rb index e756d0a9fa..a4335068e6 100644 --- a/railties/test/generators/migration_generator_test.rb +++ b/railties/test/generators/migration_generator_test.rb @@ -53,7 +53,7 @@ class MigrationGeneratorTest < GeneratorsTestCase protected def run_generator(args=[@migration]) - silence(:stdout) { Rails::Generators::MigrationGenerator.start args, :root => destination_root } + silence(:stdout) { Rails::Generators::MigrationGenerator.start args, :destination_root => destination_root } end end diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb index 85aa2cc145..a9b772d67b 100644 --- a/railties/test/generators/model_generator_test.rb +++ b/railties/test/generators/model_generator_test.rb @@ -131,7 +131,7 @@ class ModelGeneratorTest < GeneratorsTestCase protected def run_generator(args=["Account", "name:string", "age:integer"], config={}) - silence(:stdout) { Rails::Generators::ModelGenerator.start args, config.merge(:root => destination_root) } + silence(:stdout) { Rails::Generators::ModelGenerator.start args, config.merge(:destination_root => destination_root) } end end diff --git a/railties/test/generators/observer_generator_test.rb b/railties/test/generators/observer_generator_test.rb index 65e18eb942..a556731e16 100644 --- a/railties/test/generators/observer_generator_test.rb +++ b/railties/test/generators/observer_generator_test.rb @@ -27,7 +27,7 @@ class ObserverGeneratorTest < GeneratorsTestCase protected def run_generator(args=["account"]) - silence(:stdout) { Rails::Generators::ObserverGenerator.start args, :root => destination_root } + silence(:stdout) { Rails::Generators::ObserverGenerator.start args, :destination_root => destination_root } end end diff --git a/railties/test/generators/performance_test_generator_test.rb b/railties/test/generators/performance_test_generator_test.rb index fdfbf9031c..74c9c20c4c 100644 --- a/railties/test/generators/performance_test_generator_test.rb +++ b/railties/test/generators/performance_test_generator_test.rb @@ -12,7 +12,7 @@ class PerformanceTestGeneratorTest < GeneratorsTestCase protected def run_generator(args=["performance"]) - silence(:stdout) { Rails::Generators::PerformanceTestGenerator.start args, :root => destination_root } + silence(:stdout) { Rails::Generators::PerformanceTestGenerator.start args, :destination_root => destination_root } end end diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb index bfec671d31..3982586bc3 100644 --- a/railties/test/generators/plugin_generator_test.rb +++ b/railties/test/generators/plugin_generator_test.rb @@ -50,7 +50,7 @@ class PluginGeneratorTest < GeneratorsTestCase protected def run_generator(args=["plugin_fu"], config={}) - silence(:stdout) { Rails::Generators::PluginGenerator.start args, config.merge(:root => destination_root) } + silence(:stdout) { Rails::Generators::PluginGenerator.start args, config.merge(:destination_root => destination_root) } end end diff --git a/railties/test/generators/resource_generator_test.rb b/railties/test/generators/resource_generator_test.rb index 7b03ca31ec..876ddbf84e 100644 --- a/railties/test/generators/resource_generator_test.rb +++ b/railties/test/generators/resource_generator_test.rb @@ -100,7 +100,7 @@ class ResourceGeneratorTest < GeneratorsTestCase protected def run_generator(args=["account"], config={}) - silence(:stdout) { Rails::Generators::ResourceGenerator.start args, config.merge(:root => destination_root) } + silence(:stdout) { Rails::Generators::ResourceGenerator.start args, config.merge(:destination_root => destination_root) } end end diff --git a/railties/test/generators/scaffold_controller_generator_test.rb b/railties/test/generators/scaffold_controller_generator_test.rb index 1f0060d11e..024ea439ef 100644 --- a/railties/test/generators/scaffold_controller_generator_test.rb +++ b/railties/test/generators/scaffold_controller_generator_test.rb @@ -106,7 +106,7 @@ class ScaffoldControllerGeneratorTest < GeneratorsTestCase protected def run_generator(args=["User", "name:string", "age:integer"]) - silence(:stdout) { Rails::Generators::ScaffoldControllerGenerator.start args, :root => destination_root } + silence(:stdout) { Rails::Generators::ScaffoldControllerGenerator.start args, :destination_root => destination_root } end end diff --git a/railties/test/generators/scaffold_generator_test.rb b/railties/test/generators/scaffold_generator_test.rb index 2e5d4b609e..9560cf7ba7 100644 --- a/railties/test/generators/scaffold_generator_test.rb +++ b/railties/test/generators/scaffold_generator_test.rb @@ -128,7 +128,7 @@ class ScaffoldGeneratorTest < GeneratorsTestCase def run_generator(config={}) silence(:stdout) do Rails::Generators::ScaffoldGenerator.start ["product_line", "title:string", "price:integer"], - config.merge(:root => destination_root) + config.merge(:destination_root => destination_root) end end diff --git a/railties/test/generators/session_migration_generator_test.rb b/railties/test/generators/session_migration_generator_test.rb index 7eefbe51e6..f83109800b 100644 --- a/railties/test/generators/session_migration_generator_test.rb +++ b/railties/test/generators/session_migration_generator_test.rb @@ -17,7 +17,7 @@ class SessionMigrationGeneratorTest < GeneratorsTestCase protected def run_generator(args=[]) - silence(:stdout) { Rails::Generators::SessionMigrationGenerator.start args, :root => destination_root } + silence(:stdout) { Rails::Generators::SessionMigrationGenerator.start args, :destination_root => destination_root } end end diff --git a/railties/test/generators/stylesheets_generator_test.rb b/railties/test/generators/stylesheets_generator_test.rb index e2cddedf1a..02082d5cc8 100644 --- a/railties/test/generators/stylesheets_generator_test.rb +++ b/railties/test/generators/stylesheets_generator_test.rb @@ -18,7 +18,7 @@ class StylesheetsGeneratorTest < GeneratorsTestCase protected def run_generator(config={}) - silence(:stdout) { Rails::Generators::StylesheetsGenerator.start [], config.merge(:root => destination_root) } + silence(:stdout) { Rails::Generators::StylesheetsGenerator.start [], config.merge(:destination_root => destination_root) } end end -- cgit v1.2.3 From 0702e04e0d671227259f71f614adfe3f35f88b48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 15 Jul 2009 11:33:36 +0200 Subject: Refactored some generators to make use of improved invocations on thor. --- railties/test/generators/generators_test_helper.rb | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index f6799eb6da..c9b9c33a4e 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -12,19 +12,18 @@ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../../activerecord/lib" $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" require 'generators' +CURRENT_PATH = File.expand_path(Dir.pwd) + class GeneratorsTestCase < Test::Unit::TestCase include FileUtils - def self.test_dir - @@test_dir = File.expand_path("#{File.dirname(__FILE__)}/../../") - end - def destination_root - @destination_root ||= File.join(self.class.test_dir, 'fixtures', 'tmp') + @destination_root ||= File.expand_path(File.join(File.dirname(__FILE__), + '..', '..', 'fixtures', 'tmp')) end def setup - cd self.class.test_dir + cd CURRENT_PATH rm_rf(destination_root) mkdir_p(destination_root) end -- cgit v1.2.3 From 7022b58842ec3490d85efc5b947d86a0fd72d0cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 15 Jul 2009 16:20:48 +0200 Subject: Allow namespaced configuration on generators. --- railties/test/initializer_test.rb | 60 ++++++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 17 deletions(-) (limited to 'railties/test') diff --git a/railties/test/initializer_test.rb b/railties/test/initializer_test.rb index 163785fee3..c9362dbe36 100644 --- a/railties/test/initializer_test.rb +++ b/railties/test/initializer_test.rb @@ -304,52 +304,78 @@ class InitializerGeneratorsTests < Test::Unit::TestCase assert_equal({}, @configuration.generators.options) end - def test_generators_set_options + def test_generators_set_rails_options @configuration.generators.orm = :datamapper @configuration.generators.test_framework = :rspec - assert_equal({ :orm => :datamapper, :test_framework => :rspec }, @configuration.generators.options) + expected = { :rails => { :orm => :datamapper, :test_framework => :rspec } } + assert_equal expected, @configuration.generators.options end - def test_generators_set_aliases + def test_generators_set_rails_aliases @configuration.generators.aliases = { :test_framework => "-w" } - assert_equal({ :test_framework => "-w" }, @configuration.generators.aliases) + expected = { :rails => { :test_framework => "-w" } } + assert_equal expected, @configuration.generators.aliases end - def test_generators_with_block + def test_generators_with_block_for_rails_configuration @configuration.generators do |g| g.orm = :datamapper g.test_framework = :rspec end - assert_equal({ :orm => :datamapper, :test_framework => :rspec }, @configuration.generators.options) + expected = { :rails => { :orm => :datamapper, :test_framework => :rspec } } + assert_equal expected, @configuration.generators.options end def test_generators_aliases_and_options_on_initialization - @configuration.generators.aliases = { :test_framework => "-w" } - @configuration.generators.orm = :datamapper - @configuration.generators.test_framework = :rspec + @configuration.generators.aliases :test_framework => "-w" + @configuration.generators.orm :datamapper + @configuration.generators.test_framework :rspec - RAILS_ENV.replace "generators" @initializer.run(:initialize_generators) - assert_equal :rspec, Rails::Generators.options[:test_framework] - assert_equal "-w", Rails::Generators.aliases[:test_framework] + assert_equal :rspec, Rails::Generators.options[:rails][:test_framework] + assert_equal "-w", Rails::Generators.aliases[:rails][:test_framework] end def test_generators_no_color_on_initialization @configuration.generators.colorize_logging = false - RAILS_ENV.replace "generators" @initializer.run(:initialize_generators) assert_equal Thor::Base.shell, Thor::Shell::Basic end - def test_generators_raise_no_method_error_non_setters - assert_raise NoMethodError do - @configuration.generators.foo - end + def test_generators_with_namespaced_blocks_for_options_and_aliases + namespaced_configuration! + expected = { + :rails => { :orm => :datamapper }, + :plugin => { :generator => true }, + :datamapper => { :migrations => true } + } + assert_equal expected, @configuration.generators.options + assert_equal({ :plugin => { :generator => "-g" } }, @configuration.generators.aliases) + end + + def test_generators_with_namespaced_configuration_are_deep_merged + namespaced_configuration! + @initializer.run(:initialize_generators) + assert Rails::Generators.aliases.size >= 1 + assert Rails::Generators.options.size >= 1 end protected + def namespaced_configuration! + @configuration.generators do |g| + g.orm :datamapper do |dm| + dm.migrations = true + end + + g.plugin do |p| + p.aliases = { :generator => "-g" } + p.generator = true + end + end + end + def teardown Rails::Generators.clear_aliases! Rails::Generators.clear_options! -- cgit v1.2.3 From baa4781ac7174e527c2471b4c86ea51c0f65cf6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 15 Jul 2009 16:53:54 +0200 Subject: Allow nil and false to be given as configuration values and avoid creating unecessary hashes. --- railties/test/initializer_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'railties/test') diff --git a/railties/test/initializer_test.rb b/railties/test/initializer_test.rb index c9362dbe36..96553524da 100644 --- a/railties/test/initializer_test.rb +++ b/railties/test/initializer_test.rb @@ -348,7 +348,7 @@ class InitializerGeneratorsTests < Test::Unit::TestCase expected = { :rails => { :orm => :datamapper }, :plugin => { :generator => true }, - :datamapper => { :migrations => true } + :datamapper => { :migrations => false } } assert_equal expected, @configuration.generators.options assert_equal({ :plugin => { :generator => "-g" } }, @configuration.generators.aliases) @@ -366,7 +366,7 @@ class InitializerGeneratorsTests < Test::Unit::TestCase def namespaced_configuration! @configuration.generators do |g| g.orm :datamapper do |dm| - dm.migrations = true + dm.migrations = false end g.plugin do |p| -- cgit v1.2.3 From b4ef958de6b16294094de28d00ba25fe2f48accc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 15 Jul 2009 20:16:37 +0200 Subject: Change false to :verbose => false as in new Thor version. --- railties/test/generators/actions_test.rb | 29 +++++++++++++++------- railties/test/generators/app_generator_test.rb | 3 ++- railties/test/generators/generators_test_helper.rb | 1 + .../test/generators/scaffold_generator_test.rb | 6 ----- 4 files changed, 23 insertions(+), 16 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/actions_test.rb b/railties/test/generators/actions_test.rb index e8b10522b9..9a8d8075a1 100644 --- a/railties/test/generators/actions_test.rb +++ b/railties/test/generators/actions_test.rb @@ -20,6 +20,17 @@ class ActionsTest < GeneratorsTestCase assert_equal generator.instance_variable_get("@foo"), "FOO" end + def test_apply_uses_padding_in_the_applied_template + template = <<-TEMPLATE + say_status :cool, :padding + TEMPLATE + template.instance_eval "def read; self; end" + + generator.expects(:open).with("http://gist.github.com/103208.txt").returns(template) + content = action(:apply, "http://gist.github.com/103208.txt") + assert_match /cool padding/, content + end + def test_create_file_should_write_data_to_file_path action :create_file, 'lib/test_file.rb', 'heres test data' assert_file 'lib/test_file.rb', 'heres test data' @@ -31,17 +42,17 @@ class ActionsTest < GeneratorsTestCase end def test_plugin_with_git_option_should_run_plugin_install - generator.expects(:run_ruby_script).once.with("script/plugin install #{@git_plugin_uri}", false) + generator.expects(:run_ruby_script).once.with("script/plugin install #{@git_plugin_uri}", :verbose => false) action :plugin, 'restful-authentication', :git => @git_plugin_uri end def test_plugin_with_svn_option_should_run_plugin_install - generator.expects(:run_ruby_script).once.with("script/plugin install #{@svn_plugin_uri}", false) + generator.expects(:run_ruby_script).once.with("script/plugin install #{@svn_plugin_uri}", :verbose => false) action :plugin, 'restful-authentication', :svn => @svn_plugin_uri end def test_plugin_with_git_option_and_submodule_should_use_git_scm - generator.expects(:run).with("git submodule add #{@git_plugin_uri} vendor/plugins/rest_auth", false) + generator.expects(:run).with("git submodule add #{@git_plugin_uri} vendor/plugins/rest_auth", :verbose => false) action :plugin, 'rest_auth', :git => @git_plugin_uri, :submodule => true end @@ -135,32 +146,32 @@ class ActionsTest < GeneratorsTestCase end def test_generate_should_run_script_generate_with_argument_and_options - generator.expects(:run_ruby_script).once.with('script/generate model MyModel', false) + generator.expects(:run_ruby_script).once.with('script/generate model MyModel', :verbose => false) action :generate, 'model', 'MyModel' end def test_rake_should_run_rake_command_with_development_env - generator.expects(:run).once.with('rake log:clear RAILS_ENV=development', false) + generator.expects(:run).once.with('rake log:clear RAILS_ENV=development', :verbose => false) action :rake, 'log:clear' end def test_rake_with_env_option_should_run_rake_command_in_env - generator.expects(:run).once.with('rake log:clear RAILS_ENV=production', false) + generator.expects(:run).once.with('rake log:clear RAILS_ENV=production', :verbose => false) action :rake, 'log:clear', :env => 'production' end def test_rake_with_sudo_option_should_run_rake_command_with_sudo - generator.expects(:run).once.with('sudo rake log:clear RAILS_ENV=development', false) + generator.expects(:run).once.with('sudo rake log:clear RAILS_ENV=development', :verbose => false) action :rake, 'log:clear', :sudo => true end def test_capify_should_run_the_capify_command - generator.expects(:run).once.with('capify .', false) + generator.expects(:run).once.with('capify .', :verbose => false) action :capify! end def test_freeze_should_freeze_rails_edge - generator.expects(:run).once.with('rake rails:freeze:edge', false) + generator.expects(:run).once.with('rake rails:freeze:edge', :verbose => false) action :freeze! end diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb index c78b7d2f25..c794a2ade6 100644 --- a/railties/test/generators/app_generator_test.rb +++ b/railties/test/generators/app_generator_test.rb @@ -125,7 +125,8 @@ class AppGeneratorTest < GeneratorsTestCase end def test_rails_is_frozen - generator(:freeze => true, :database => "sqlite3").expects(:run).with("rake rails:freeze:edge", false) + generator(:freeze => true, :database => "sqlite3").expects(:run). + with("rake rails:freeze:edge", :verbose => false) silence(:stdout){ generator.invoke } assert_file 'config/environment.rb', /# RAILS_GEM_VERSION/ end diff --git a/railties/test/generators/generators_test_helper.rb b/railties/test/generators/generators_test_helper.rb index c9b9c33a4e..011bd518f8 100644 --- a/railties/test/generators/generators_test_helper.rb +++ b/railties/test/generators/generators_test_helper.rb @@ -13,6 +13,7 @@ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" require 'generators' CURRENT_PATH = File.expand_path(Dir.pwd) +Rails::Generators.no_color! class GeneratorsTestCase < Test::Unit::TestCase include FileUtils diff --git a/railties/test/generators/scaffold_generator_test.rb b/railties/test/generators/scaffold_generator_test.rb index 9560cf7ba7..05eadd3460 100644 --- a/railties/test/generators/scaffold_generator_test.rb +++ b/railties/test/generators/scaffold_generator_test.rb @@ -117,12 +117,6 @@ class ScaffoldGeneratorTest < GeneratorsTestCase assert_file "public/stylesheets/scaffold.css" end - def test_invoke_output - output = run_generator - assert_match /invoke.{4} active_record/, output - assert_match /create.{4} app\/models\/product_line\.rb/, output - end - protected def run_generator(config={}) -- cgit v1.2.3 From 8d47078a492de9e3fca61ec6894e975d570ef449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 15 Jul 2009 22:37:22 +0200 Subject: Added source_paths to rails generators. If a template is added to RAILS_ROOT/lib/templates/base/generator it will be used. For example, to customize edit.html.erb template on scaffold, just add a customized copy at RAILS_ROOT/lib/templates/erb/scaffold. --- railties/test/generators_test.rb | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'railties/test') diff --git a/railties/test/generators_test.rb b/railties/test/generators_test.rb index 964def4158..78c05f2eb8 100644 --- a/railties/test/generators_test.rb +++ b/railties/test/generators_test.rb @@ -84,7 +84,7 @@ class GeneratorsTest < GeneratorsTestCase assert_equal "Others: active_record:fixjour, fixjour, mspec, rails:javascripts, wrong.", output end - def test_warning_is_raised_if_generator_cant_be_loaded + def test_warning_is_shown_if_generator_cant_be_loaded output = capture(:stderr){ Rails::Generators.find_by_namespace(:wrong) } assert_match /\[WARNING\] Could not load generator at/, output assert_match /Error: uninitialized constant Rails::Generator/, output @@ -96,4 +96,22 @@ class GeneratorsTest < GeneratorsTestCase ensure Thor::Base.shell = Thor::Shell::Color end + + def test_rails_root_templates + template = File.join(RAILS_ROOT, "lib", "templates", "active_record", "model", "model.rb") + + # Create template + mkdir_p(File.dirname(template)) + File.open(template, 'w'){ |f| f.write "empty" } + + output = capture(:stdout) do + Rails::Generators.invoke :model, ["user"], :destination_root => destination_root + end + + assert_file "app/models/user.rb" do |content| + assert_equal "empty", content + end + ensure + rm_rf File.dirname(template) + end end -- cgit v1.2.3 From 9c4ba74b7cd74b0312425ecc8c5b57aa6cf8c0d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 15 Jul 2009 23:38:41 +0200 Subject: Change generators configuration to have a hash style. --- railties/test/initializer_test.rb | 47 +++++++++++++++------------------------ 1 file changed, 18 insertions(+), 29 deletions(-) (limited to 'railties/test') diff --git a/railties/test/initializer_test.rb b/railties/test/initializer_test.rb index 96553524da..1fecd62995 100644 --- a/railties/test/initializer_test.rb +++ b/railties/test/initializer_test.rb @@ -312,22 +312,13 @@ class InitializerGeneratorsTests < Test::Unit::TestCase end def test_generators_set_rails_aliases - @configuration.generators.aliases = { :test_framework => "-w" } + @configuration.generators.aliases = { :rails => { :test_framework => "-w" } } expected = { :rails => { :test_framework => "-w" } } assert_equal expected, @configuration.generators.aliases end - def test_generators_with_block_for_rails_configuration - @configuration.generators do |g| - g.orm = :datamapper - g.test_framework = :rspec - end - expected = { :rails => { :orm => :datamapper, :test_framework => :rspec } } - assert_equal expected, @configuration.generators.options - end - def test_generators_aliases_and_options_on_initialization - @configuration.generators.aliases :test_framework => "-w" + @configuration.generators.rails :aliases => { :test_framework => "-w" } @configuration.generators.orm :datamapper @configuration.generators.test_framework :rspec @@ -343,39 +334,37 @@ class InitializerGeneratorsTests < Test::Unit::TestCase assert_equal Thor::Base.shell, Thor::Shell::Basic end - def test_generators_with_namespaced_blocks_for_options_and_aliases - namespaced_configuration! + def test_generators_with_hashes_for_options_and_aliases + @configuration.generators do |g| + g.orm :datamapper, :migration => false + g.plugin :aliases => { :generator => "-g" }, + :generator => true + end + expected = { :rails => { :orm => :datamapper }, :plugin => { :generator => true }, - :datamapper => { :migrations => false } + :datamapper => { :migration => false } } + assert_equal expected, @configuration.generators.options assert_equal({ :plugin => { :generator => "-g" } }, @configuration.generators.aliases) end - def test_generators_with_namespaced_configuration_are_deep_merged - namespaced_configuration! + def test_generators_with_hashes_are_deep_merged + @configuration.generators do |g| + g.orm :datamapper, :migration => false + g.plugin :aliases => { :generator => "-g" }, + :generator => true + end @initializer.run(:initialize_generators) + assert Rails::Generators.aliases.size >= 1 assert Rails::Generators.options.size >= 1 end protected - def namespaced_configuration! - @configuration.generators do |g| - g.orm :datamapper do |dm| - dm.migrations = false - end - - g.plugin do |p| - p.aliases = { :generator => "-g" } - p.generator = true - end - end - end - def teardown Rails::Generators.clear_aliases! Rails::Generators.clear_options! -- cgit v1.2.3 From e3d5364e41f2063f4ecf3be4a5f05622c045dabf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 16 Jul 2009 00:17:28 +0200 Subject: Implemented generaators fallbacks. --- railties/test/generators_test.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators_test.rb b/railties/test/generators_test.rb index 78c05f2eb8..56c95caa41 100644 --- a/railties/test/generators_test.rb +++ b/railties/test/generators_test.rb @@ -1,5 +1,6 @@ require File.join(File.dirname(__FILE__), 'generators', 'generators_test_helper') require 'generators/rails/model/model_generator' +require 'generators/test_unit/model/model_generator' require 'mocha' class GeneratorsTest < GeneratorsTestCase @@ -114,4 +115,17 @@ class GeneratorsTest < GeneratorsTestCase ensure rm_rf File.dirname(template) end + + def test_fallbacks_for_generators_on_invoke + Rails::Generators.fallbacks[:shoulda] = :test_unit + TestUnit::Generators::ModelGenerator.expects(:start).with(["Account"], {}) + Rails::Generators.invoke "shoulda:model", ["Account"] + end + + def test_fallbacks_for_generators_on_find_by_namespace + Rails::Generators.fallbacks[:remarkable] = :test_unit + klass = Rails::Generators.find_by_namespace(:plugin, :remarkable) + assert klass + assert_equal "test_unit:generators:plugin", klass.namespace + end end -- cgit v1.2.3 From d6a590a7107eabd9c3ab067c60bef904da62f174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 16 Jul 2009 11:17:19 +0200 Subject: Modified rake tasks to use new app generator structure and updated Thor version. --- railties/test/generators/actions_test.rb | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators/actions_test.rb b/railties/test/generators/actions_test.rb index 9a8d8075a1..aeddb21d1f 100644 --- a/railties/test/generators/actions_test.rb +++ b/railties/test/generators/actions_test.rb @@ -31,6 +31,19 @@ class ActionsTest < GeneratorsTestCase assert_match /cool padding/, content end + def test_apply_does_not_log_status_if_required + template = <<-TEMPLATE + say_status :cool, :padding + TEMPLATE + template.instance_eval "def read; self; end" + + generator.expects(:open).with("http://gist.github.com/103208.txt").returns(template) + content = action(:apply, "http://gist.github.com/103208.txt", :verbose => false) + + assert_match /cool padding/, content + assert_no_match /apply http/, content + end + def test_create_file_should_write_data_to_file_path action :create_file, 'lib/test_file.rb', 'heres test data' assert_file 'lib/test_file.rb', 'heres test data' -- cgit v1.2.3 From edda0bfe76fc9b2adcdb705665aaef2769e6ef03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 21 Jul 2009 12:16:25 +0200 Subject: Allow nested and multiple fallbacks for generators. --- railties/test/generators_test.rb | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators_test.rb b/railties/test/generators_test.rb index 56c95caa41..ea3f7d5487 100644 --- a/railties/test/generators_test.rb +++ b/railties/test/generators_test.rb @@ -116,16 +116,22 @@ class GeneratorsTest < GeneratorsTestCase rm_rf File.dirname(template) end + def test_fallbacks_for_generators_on_find_by_namespace + Rails::Generators.fallbacks[:remarkable] = :test_unit + klass = Rails::Generators.find_by_namespace(:plugin, :remarkable) + assert klass + assert_equal "test_unit:generators:plugin", klass.namespace + end + def test_fallbacks_for_generators_on_invoke Rails::Generators.fallbacks[:shoulda] = :test_unit TestUnit::Generators::ModelGenerator.expects(:start).with(["Account"], {}) Rails::Generators.invoke "shoulda:model", ["Account"] end - def test_fallbacks_for_generators_on_find_by_namespace - Rails::Generators.fallbacks[:remarkable] = :test_unit - klass = Rails::Generators.find_by_namespace(:plugin, :remarkable) - assert klass - assert_equal "test_unit:generators:plugin", klass.namespace + def test_nested_fallbacks_for_generators + Rails::Generators.fallbacks[:super_shoulda] = :shoulda + TestUnit::Generators::ModelGenerator.expects(:start).with(["Account"], {}) + Rails::Generators.invoke "super_shoulda:model", ["Account"] end end -- cgit v1.2.3 From edd07b5a7a37783f398a156b2eb99b5b2733a0ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Thu, 23 Jul 2009 14:30:49 +0200 Subject: Updated vendored thor to 0.11.3. --- railties/test/generators/actions_test.rb | 35 -------------------------------- 1 file changed, 35 deletions(-) (limited to 'railties/test') diff --git a/railties/test/generators/actions_test.rb b/railties/test/generators/actions_test.rb index aeddb21d1f..0cda49702b 100644 --- a/railties/test/generators/actions_test.rb +++ b/railties/test/generators/actions_test.rb @@ -9,41 +9,6 @@ class ActionsTest < GeneratorsTestCase @svn_plugin_uri = 'svn://svnhub.com/technoweenie/restful-authentication/trunk' end - def test_apply_loads_and_evaluates_a_template - template = <<-TEMPLATE - @foo = "FOO" - TEMPLATE - template.instance_eval "def read; self; end" # Make the string respond to read - - generator.expects(:open).with("http://gist.github.com/103208.txt").returns(template) - action :apply, "http://gist.github.com/103208.txt" - assert_equal generator.instance_variable_get("@foo"), "FOO" - end - - def test_apply_uses_padding_in_the_applied_template - template = <<-TEMPLATE - say_status :cool, :padding - TEMPLATE - template.instance_eval "def read; self; end" - - generator.expects(:open).with("http://gist.github.com/103208.txt").returns(template) - content = action(:apply, "http://gist.github.com/103208.txt") - assert_match /cool padding/, content - end - - def test_apply_does_not_log_status_if_required - template = <<-TEMPLATE - say_status :cool, :padding - TEMPLATE - template.instance_eval "def read; self; end" - - generator.expects(:open).with("http://gist.github.com/103208.txt").returns(template) - content = action(:apply, "http://gist.github.com/103208.txt", :verbose => false) - - assert_match /cool padding/, content - assert_no_match /apply http/, content - end - def test_create_file_should_write_data_to_file_path action :create_file, 'lib/test_file.rb', 'heres test data' assert_file 'lib/test_file.rb', 'heres test data' -- cgit v1.2.3 From 419ca7a747dd2f33078f12c32b98d3b7ea0bffdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 28 Jul 2009 08:48:21 +0200 Subject: Ensure that developers options are overwritten by user options. --- railties/test/generators_test.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators_test.rb b/railties/test/generators_test.rb index ea3f7d5487..103f9b7def 100644 --- a/railties/test/generators_test.rb +++ b/railties/test/generators_test.rb @@ -134,4 +134,18 @@ class GeneratorsTest < GeneratorsTestCase TestUnit::Generators::ModelGenerator.expects(:start).with(["Account"], {}) Rails::Generators.invoke "super_shoulda:model", ["Account"] end + + def test_developer_options_are_overwriten_by_user_options + Rails::Generators.options[:new_generator] = { :generate => false } + + klass = Class.new(Rails::Generators::Base) do + def self.name + "NewGenerator" + end + + class_option :generate, :default => true + end + + assert_equal false, klass.class_options[:generate].default + end end -- cgit v1.2.3 From 5025ae610f89989f3e15241ec7065e3d443614d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 28 Jul 2009 08:51:57 +0200 Subject: Ensure that not namespaced generators also load RAILS_ROOT/lib/templates files. --- railties/test/generators_test.rb | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'railties/test') diff --git a/railties/test/generators_test.rb b/railties/test/generators_test.rb index 103f9b7def..89d52dd170 100644 --- a/railties/test/generators_test.rb +++ b/railties/test/generators_test.rb @@ -148,4 +148,9 @@ class GeneratorsTest < GeneratorsTestCase assert_equal false, klass.class_options[:generate].default end + + def test_source_paths_for_not_namespaced_generators + mspec = Rails::Generators.find_by_namespace :mspec + assert mspec.source_paths.include?(File.join(RAILS_ROOT, "lib", "templates", "mspec")) + end end -- cgit v1.2.3