Sha256: 78a32b907441826d4166fc2f845bd455e2f087e05e077f20ce603e3b522a236c

Contents?: true

Size: 1.49 KB

Versions: 3

Compression:

Stored size: 1.49 KB

Contents

# typed: strict
# frozen_string_literal: true

module Minitest
  module Distributed
    class TestSelector
      extend T::Sig

      sig { returns(T::Hash[Symbol, T.untyped]) }
      attr_reader :options

      sig { returns(T::Array[Filters::FilterInterface]) }
      attr_reader :filters

      sig { params(options: T::Hash[Symbol, T.untyped]).void }
      def initialize(options)
        @options = options

        @filters = T.let([], T::Array[Filters::FilterInterface])
        initialize_filters
      end

      sig { void }
      def initialize_filters
        @filters << Filters::IncludeFilter.new(options[:filter]) if options[:filter]
        @filters << Filters::ExcludeFilter.new(options[:exclude]) if options[:exclude]
      end

      sig { returns(T::Array[EnqueuedRunnable]) }
      def discover_tests
        Minitest::Runnable.runnables.flat_map do |runnable|
          runnable.runnable_methods.map do |method_name|
            EnqueuedRunnable.new(class_name: runnable.name, method_name: method_name)
          end
        end
      end

      sig { params(tests: T::Array[EnqueuedRunnable]).returns(T::Array[EnqueuedRunnable]) }
      def select_tests(tests)
        return tests if filters.empty?
        tests.flat_map do |runnable_method|
          filters.flat_map do |filter|
            filter.call(runnable_method)
          end
        end.compact
      end

      sig { returns(T::Array[EnqueuedRunnable]) }
      def tests
        select_tests(discover_tests)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
minitest-distributed-0.1.2 lib/minitest/distributed/test_selector.rb
minitest-distributed-0.1.1 lib/minitest/distributed/test_selector.rb
minitest-distributed-0.1.0 lib/minitest/distributed/test_selector.rb