Sha256: 482429acbe8ba05d97f47f812e469e58bafc0650e953a7ade982b2ad6e60bdc4

Contents?: true

Size: 1.54 KB

Versions: 6

Compression:

Stored size: 1.54 KB

Contents

require "forwardable"

module Zeus
  module M
    ### Custom wrapper around an array of test methods
    # In charge of some smart querying, filtering, sorting, etc on the the
    # test methods
    class TestCollection
      include Enumerable
      extend Forwardable
      # This should act like an array, so forward some common methods over to the
      # internal collection
      def_delegators :@collection, :size, :<<, :each

      def initialize(collection = nil)
        @collection = collection || []
      end

      # Slice out tests that may be within the given line.
      # Returns a new TestCollection with the results.
      def within(line)
        # Into a new collection, filter only the tests that...
        self.class.new(select do |test|
          # are within the given boundary for this method
          # or include everything if the line given is nil (no line)
          line.nil? || (test.start_line..test.end_line).include?(line)
        end)
      end

      # Used to line up method names in `#sprintf` when `m` aborts
      def column_size
        # Boil down the collection of test methods to the name of the method's
        # size, then find the largest one
        @column_size ||= map { |test| test.name.to_s.size }.max
      end

      # Be considerate when printing out tests and pre-sort them by line number
      def by_line_number(&block)
        # On each member of the collection, sort by line number and yield
        # the block into the sorted collection
        sort_by(&:start_line).each(&block)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
zeus-0.12.0 lib/zeus/m/test_collection.rb
zeus-0.12.0.pre2 lib/zeus/m/test_collection.rb
zeus-0.12.0.pre lib/zeus/m/test_collection.rb
zeus-0.11.2 lib/zeus/m/test_collection.rb
zeus-0.11.1 lib/zeus/m/test_collection.rb
zeus-0.11.0 lib/zeus/m/test_collection.rb