notes_test.rb 4.6 KB
Newer Older
1 2 3 4
require "isolation/abstract_unit"

module ApplicationTests
  module RakeTests
5
    class RakeNotesTest < ActiveSupport::TestCase
6
      def setup
7 8 9
        build_app
        require "rails/all"
      end
10

11 12 13 14
      def teardown
        teardown_app
      end

15
      test 'notes finds notes for certain file_types' do
16 17 18
        app_file "app/views/home/index.html.erb", "<% # TODO: note in erb %>"
        app_file "app/views/home/index.html.haml", "-# TODO: note in haml"
        app_file "app/views/home/index.html.slim", "/ TODO: note in slim"
19
        app_file "app/assets/javascripts/application.js.coffee", "# TODO: note in coffee"
20 21 22
        app_file "app/assets/javascripts/application.js", "// TODO: note in js"
        app_file "app/assets/stylesheets/application.css", "// TODO: note in css"
        app_file "app/assets/stylesheets/application.css.scss", "// TODO: note in scss"
A
Anton Lindqvist 已提交
23
        app_file "app/controllers/application_controller.rb", 1000.times.map { "" }.join("\n") << "# TODO: note in ruby"
24 25 26 27 28 29 30

        boot_rails
        require 'rake'
        require 'rdoc/task'
        require 'rake/testtask'

        Rails.application.load_tasks
31

32 33
        Dir.chdir(app_path) do
          output = `bundle exec rake notes`
34
          lines = output.scan(/\[([0-9\s]+)\](\s)/)
35

36 37 38 39 40 41 42 43
          assert_match(/note in erb/, output)
          assert_match(/note in haml/, output)
          assert_match(/note in slim/, output)
          assert_match(/note in ruby/, output)
          assert_match(/note in coffee/, output)
          assert_match(/note in js/, output)
          assert_match(/note in css/, output)
          assert_match(/note in scss/, output)
A
Anton Lindqvist 已提交
44

45
          assert_equal 8, lines.size
46

47 48 49
          lines.each do |line|
            assert_equal 4, line[0].size
            assert_equal ' ', line[1]
50
          end
51
        end
52 53
      end

54
      test 'notes finds notes in default directories' do
55 56 57 58 59 60
        app_file "app/controllers/some_controller.rb", "# TODO: note in app directory"
        app_file "config/initializers/some_initializer.rb", "# TODO: note in config directory"
        app_file "lib/some_file.rb", "# TODO: note in lib directory"
        app_file "script/run_something.rb", "# TODO: note in script directory"
        app_file "test/some_test.rb", 1000.times.map { "" }.join("\n") << "# TODO: note in test directory"

61 62
        app_file "some_other_dir/blah.rb", "# TODO: note in some_other directory"

63 64 65 66 67 68 69 70 71 72 73 74
        boot_rails

        require 'rake'
        require 'rdoc/task'
        require 'rake/testtask'

        Rails.application.load_tasks

        Dir.chdir(app_path) do
          output = `bundle exec rake notes`
          lines = output.scan(/\[([0-9\s]+)\]/).flatten

75 76 77 78 79 80
          assert_match(/note in app directory/, output)
          assert_match(/note in config directory/, output)
          assert_match(/note in lib directory/, output)
          assert_match(/note in script directory/, output)
          assert_match(/note in test directory/, output)
          assert_no_match(/note in some_other directory/, output)
81 82 83 84 85 86 87

          assert_equal 5, lines.size

          lines.each do |line_number|
            assert_equal 4, line_number.size
          end
        end
88
      end
89

90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
      test 'notes finds notes in custom directories' do
        app_file "app/controllers/some_controller.rb", "# TODO: note in app directory"
        app_file "config/initializers/some_initializer.rb", "# TODO: note in config directory"
        app_file "lib/some_file.rb", "# TODO: note in lib directory"
        app_file "script/run_something.rb", "# TODO: note in script directory"
        app_file "test/some_test.rb", 1000.times.map { "" }.join("\n") << "# TODO: note in test directory"

        app_file "some_other_dir/blah.rb", "# TODO: note in some_other directory"

        boot_rails

        require 'rake'
        require 'rdoc/task'
        require 'rake/testtask'

        Rails.application.load_tasks

        Dir.chdir(app_path) do
          output = `SOURCE_ANNOTATION_DIRECTORIES='some_other_dir' bundle exec rake notes`
          lines = output.scan(/\[([0-9\s]+)\]/).flatten

111 112 113 114 115
          assert_match(/note in app directory/, output)
          assert_match(/note in config directory/, output)
          assert_match(/note in lib directory/, output)
          assert_match(/note in script directory/, output)
          assert_match(/note in test directory/, output)
116

117
          assert_match(/note in some_other directory/, output)
118 119 120 121 122 123 124 125 126

          assert_equal 6, lines.size

          lines.each do |line_number|
            assert_equal 4, line_number.size
          end
        end
      end

127 128 129 130 131 132 133 134
      private
      def boot_rails
        super
        require "#{app_path}/config/environment"
      end
    end
  end
end