require 'test/unit' # Must set before requiring generator libs. TMP_ROOT = File.dirname(__FILE__) + "/tmp" unless defined?(TMP_ROOT) PROJECT_NAME = "myproject" unless defined?(PROJECT_NAME) app_root = File.join(TMP_ROOT, PROJECT_NAME) if defined?(APP_ROOT) APP_ROOT.replace(app_root) else APP_ROOT = app_root end if defined?(RAILS_ROOT) RAILS_ROOT.replace(app_root) else RAILS_ROOT = app_root end require 'rubygems' gem 'rails', '2.0.2' # getting a Rails.configuration error with 2.1 require 'rubigen' # gem install rubigen require 'rubigen/helpers/generator_test_helper' require 'rails_generator' require 'shoulda' # gem install Shoulda require 'mocha' module NiftyGenerators module TestHelper include RubiGen::GeneratorTestHelper def setup bare_setup end def teardown bare_teardown end protected def run_rails_generator(generator, *args) options = args.pop if args.last.kind_of? Hash options ||= {} run_generator(generator.to_s, args, generator_sources, options.reverse_merge(:quiet => true)) end def generator_sources [RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__), "..", "rails_generators"))] end end module ShouldaAdditions def rails_generator(*args) setup do run_rails_generator(*args) end end def should_generate_file(file, &block) should "generate file #{file}" do yield("foo") if block_given? assert_generated_file(file) end end def should_not_generate_file(file) should "not generate file #{file}" do assert !File.exists?("#{APP_ROOT}/#{file}"),"The file '#{file}' should not exist" end end end end class Thoughtbot::Shoulda::Context include NiftyGenerators::ShouldaAdditions end # Mock out what we need from AR::Base. module ActiveRecord class Base class << self attr_accessor :pluralize_table_names, :columns def add_column(name, type = :string) returning ActiveRecord::ConnectionAdapters::Column.new(name, nil) do |column| column.type = type @columns ||= [] @columns << column end end end self.pluralize_table_names = true end module ConnectionAdapters class Column attr_accessor :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 # And what we need from ActionView module ActionView module Helpers module ActiveRecordHelper; end class InstanceTag; end end end