Module: Minitest::Suite

Defined in:
lib/minitest/suite.rb,
lib/minitest/suite/version.rb

Defined Under Namespace

Classes: Error, PartialArrayProxy, Registration

Constant Summary collapse

VERSION =
"0.0.3"

Class Method Summary collapse

Class Method Details

.filter_runnables(runnables) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/minitest/suite.rb', line 42

def self.filter_runnables(runnables)
  if (only = ENV["MINITEST_SUITE_ONLY"])
    suites = only.gsub(/\s+/, "").split(",").map(&:to_sym)
    selected_tests = registrations.select { |r| suites.include?(r.suite) }
      .map(&:test)
    runnables.select { |r| selected_tests.include?(r) }
  elsif (except = ENV["MINITEST_SUITE_EXCEPT"])
    suites = except.gsub(/\s+/, "").split(",").map(&:to_sym)
    excepted_tests = registrations.select { |r| suites.include?(r.suite) }
      .map(&:test)
    runnables.reject { |r| excepted_tests.include?(r) }
  else
    runnables
  end
end

.orderObject



30
31
32
# File 'lib/minitest/suite.rb', line 30

def self.order
  @@suite_order ||= []
end

.order=(suite_order) ⇒ Object



21
22
23
24
25
26
27
28
# File 'lib/minitest/suite.rb', line 21

def self.order=(suite_order)
  if !suite_order.is_a?(Array) ||
      suite_order.any? { |suite| !suite.is_a?(Symbol) }
    raise Error.new("Minitest::Suite.order must be an array of Symbol suite names")
  else
    @@suite_order = suite_order.uniq
  end
end

.register(suite_name:, test_class:) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/minitest/suite.rb', line 9

def self.register(suite_name:, test_class:)
  if !suite_name.is_a?(Symbol)
    raise Error.new("suite_name must be a Symbol")
  elsif !test_class.ancestors.include?(Minitest::Test)
    raise Error.new("test_class must be a Minitest::Test")
  elsif (conflict = registrations.find { |r| r.test == test_class && r.suite != suite_name })
    raise Error.new("#{conflict.test.name || "Class"} is already registered to the #{conflict.suite.inspect} suite")
  elsif registrations.none? { |r| r.test == test_class && r.suite == suite_name }
    registrations << Registration.new(suite: suite_name, test: test_class)
  end
end

.registration_for(test_class) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
# File 'lib/minitest/suite.rb', line 58

def self.registration_for(test_class)
  first_registered_ancestor = test_class.ancestors.find { |ancestor|
    registrations.any? { |r| r.test == ancestor }
  }
  if first_registered_ancestor
    Registration.new(
      test: test_class,
      suite: registrations.find { |r| r.test == first_registered_ancestor }.suite
    )
  end
end

.registrationsObject



34
35
36
# File 'lib/minitest/suite.rb', line 34

def self.registrations
  @@registrations ||= reset
end

.resetObject



38
39
40
# File 'lib/minitest/suite.rb', line 38

def self.reset
  @@registrations = []
end