# File lib/generators/templates/application/merb_core/autotest/merb.rb, line 12
  def initialize
    super
    
    initialize_test_layout
    
    # Ignore any happenings in these directories
    add_exception %r%^\./(?:doc|log|public|tmp)%
    
    # Ignore any mappings that Autotest may have already set up
    clear_mappings
    
    # Any changes to a file in the root of the 'lib' directory will run any 
    # model test with a corresponding name.
    add_mapping %r%^lib\/.*\.rb% do |filename, _|
      files_matching Regexp.new(["^#{model_test_for(filename)}$"])
    end
    
    # Any changes to a fixture will run corresponding view, controller and 
    # model tests
    add_mapping %r%^#{fixtures_dir}/(.*)s.yml% do |_, m|
      [
        model_test_for(m[1]), 
        controller_test_for(m[1]), 
        view_test_for(m[1])
      ]
    end
    
    # Any change to a test or test will cause it to be run
    add_mapping %r%^test/(unit|models|integration|controllers|views|functional)/.*rb$% do |filename, _|
      filename
    end
    
    # Any change to a model will cause it's corresponding test to be run
    add_mapping %r%^app/models/(.*)\.rb$% do |_, m|
      model_test_for(m[1])
    end
    
    # Any change to the global helper will result in all view and controller 
    # tests being run
    add_mapping %r%^app/helpers/global_helpers.rb% do
      files_matching %r%^test/(views|functional|controllers)/.*_test\.rb$%
    end
    
    # Any change to a helper will run it's corresponding view and controller 
    # tests, unless the helper is the global helper. Changes to the global 
    # helper run all view and controller tests.
    add_mapping %r%^app/helpers/(.*)_helper(s)?.rb% do |_, m|
      if m[1] == "global" then
        files_matching %r%^test/(views|functional|controllers)/.*_test\.rb$%
      else
        [
          view_test_for(m[1]), 
          controller_test_for(m[1])
        ]
      end
    end
    
    # Changes to views result in their corresponding view and controller test 
    # being run
    add_mapping %r%^app/views/(.*)/% do |_, m|
      [
        view_test_for(m[1]), 
        controller_test_for(m[1])
      ]
    end
    
    # Changes to a controller result in its corresponding test being run. If 
    # the controller is the exception or application controller, all 
    # controller tests are run.
    add_mapping %r%^app/controllers/(.*)\.rb$% do |_, m|
      if ["application", "exception"].include?(m[1])
        files_matching %r%^test/(controllers|views|functional)/.*_test\.rb$%
      else
        controller_test_for(m[1])
      end
    end

    # If a change is made to the router, run all controller and view tests
    add_mapping %r%^config/router.rb$% do # FIX
      files_matching %r%^test/(controllers|views|functional)/.*_test\.rb$%
    end

    # If any of the major files governing the environment are altered, run 
    # everything
    add_mapping %r%^test/test_helper.rb|config/(init|rack|environments/test.rb|database.yml)% do # FIX
      files_matching %r%^test/(unit|models|controllers|views|functional)/.*_test\.rb$%
    end
  end