Class: KnapsackPro::Adapters::TestUnitAdapter

Inherits:
BaseAdapter
  • Object
show all
Defined in:
lib/knapsack_pro/adapters/test_unit_adapter.rb

Defined Under Namespace

Modules: BindTimeTrackerTestUnitPlugin

Constant Summary collapse

TEST_DIR_PATTERN =
'test/**{,/*/**}/*_test.rb'
@@parent_of_test_dir =
nil

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BaseAdapter

adapter_bind_method_called_file, bind, #bind, #bind_before_queue_hook, #bind_queue_mode, slow_test_file?, split_by_test_cases_enabled?, test_file_cases_for, verify_bind_method_called

Class Method Details

.test_path(obj) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/knapsack_pro/adapters/test_unit_adapter.rb', line 9

def self.test_path(obj)
  full_test_path = nil
  found_valid_test_file_path = false

  obj.tests.each do |test_obj|
    method = test_obj.method_name
    full_test_path = test_obj.method(method).source_location.first
    # if we find a test file path that is a valid test file path within test suite directory
    # then break to stop looking further.
    # If we won't find a valid test file path then the last found path will be used as full_test_path
    # For instance if test file contains only shared examples then it's not possible to properly detect test file path
    # so the wrong path can be used like:
    # /Users/artur/.rvm/gems/ruby-2.6.5/gems/shared_should-0.10.0/lib/shared_should/shared_context.rb
    if full_test_path.include?(@@parent_of_test_dir)
      found_valid_test_file_path = true
      break
    end
  end

  unless found_valid_test_file_path
    KnapsackPro.logger.warn("cannot detect a valid test file path. Probably the test file contains only shared examples. Please add test cases to your test file. Read more at #{KnapsackPro::Urls::TEST_UNIT__TEST_FILE_PATH_DETECTION}")
    KnapsackPro.logger.warn("See test file for #{obj.inspect}")
  end

  parent_of_test_dir_regexp = Regexp.new("^#{@@parent_of_test_dir}")
  test_path = full_test_path.gsub(parent_of_test_dir_regexp, '.')
  # test_path will look like ./test/dir/unit_test.rb
  test_path
end

Instance Method Details

#bind_save_reportObject



74
75
76
77
78
# File 'lib/knapsack_pro/adapters/test_unit_adapter.rb', line 74

def bind_save_report
  add_post_run_callback do
    KnapsackPro::Report.save
  end
end

#bind_time_trackerObject



66
67
68
69
70
71
72
# File 'lib/knapsack_pro/adapters/test_unit_adapter.rb', line 66

def bind_time_tracker
  ::Test::Unit::TestSuite.send(:prepend, BindTimeTrackerTestUnitPlugin)

  add_post_run_callback do
    KnapsackPro.logger.debug(KnapsackPro::Presenter.global_time)
  end
end

#set_test_helper_path(file_path) ⇒ Object



80
81
82
83
# File 'lib/knapsack_pro/adapters/test_unit_adapter.rb', line 80

def set_test_helper_path(file_path)
  test_dir_path = File.dirname(file_path)
  @@parent_of_test_dir = File.expand_path('../', test_dir_path)
end