diff --git a/railties/lib/generator/generators/app.rb b/railties/lib/generator/generators/app.rb index f5e83460d7a3c39102f80f14c73c2f6b026f47ba..b54f8dc41fe4c8a9e8b98fb221386bc07181d02d 100644 --- a/railties/lib/generator/generators/app.rb +++ b/railties/lib/generator/generators/app.rb @@ -167,7 +167,7 @@ def create_vendor_files def apply_rails_template apply options[:template] if options[:template] rescue LoadError, Errno::ENOENT => e - raise "The template [#{template}] could not be loaded. Error: #{e}" + raise Error, "The template [#{options[:template]}] could not be loaded. Error: #{e}" end def freeze? diff --git a/railties/test/generator/actions_test.rb b/railties/test/generator/actions_test.rb index 4977765d40b9e73767c713f5fcf0cbd2eafbd42a..60db8905d719e3091e30e69d7da0a33fd288276b 100644 --- a/railties/test/generator/actions_test.rb +++ b/railties/test/generator/actions_test.rb @@ -4,12 +4,11 @@ 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 0000000000000000000000000000000000000000..ab0554d0cfd48faea74070e1061c8be213c95398 --- /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