test-prof 1.0.0.rc1 → 1.0.0.rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b43e971bbd8c55a38c657e3338dc625d5860bd067e96385f310885024a1c5cc5
4
- data.tar.gz: 6d4b767d0ed366be1b27521e986785b6ddfa9f2008eb9640c76baae55084bb34
3
+ metadata.gz: ae1131d5828c1e2b52eab444c34c89bd82b294a7b3725f62c01ce30d7526f46b
4
+ data.tar.gz: 5f0bf2610fef5ad188999259aaca14918e3d96d9d5d2fdc9b6f60a961b02a20f
5
5
  SHA512:
6
- metadata.gz: 1b490801a31def008b6e8c77dff834e67c4c27a96d9d09fbe626dbed0009cb541da48acc7308905f3f8b722e8fc6f6bde39ebce5362e928abb0c2d319f259248
7
- data.tar.gz: 825b2ca0cd5f0c4ea235c5df11686a39799a70685a1ae0911facceb383facec815bed04322336ec67867b51e3a0152d150ed9fe7db9f01bb1acea520fd095258
6
+ metadata.gz: ac9329e707caa20870ec22035678585a9a344968ea98f5f210a6fb0c25558d85162145ff47d731b77f9b17a71bb0c8d1fb23d57b5a46eba2af4244b2c6f269f6
7
+ data.tar.gz: dc0795ccc8916f93ffb9303d703a81da20d3723401b55d2c1ddfef45f8fb2d5879f9988c8b78cb9efe9ea0279e5adb610055bbf56433ff4a01101b9d7c6344e3
@@ -2,6 +2,16 @@
2
2
 
3
3
  ## master (unrealeased)
4
4
 
5
+ ## 1.0.0.rc2 (2021-01-06)
6
+
7
+ - Make Rails fixtures accesible in `before_all`. ([@palkan][])
8
+
9
+ You can load and access fixtures when explicitly enabling them via `before_all(setup_fixtures: true, &block)`.
10
+
11
+ - Minitest's `before_all` is not longer experimental. ([@palkan][])
12
+
13
+ - Add `after_all` to Minitest in addition to `before_all`. ([@palkan][])
14
+
5
15
  ## 1.0.0.rc1 (2020-12-30)
6
16
 
7
17
  - Remove deprecated `AggregateFailures` cop. ([@palkan][])
@@ -32,6 +32,12 @@ module TestProf
32
32
  end
33
33
  end
34
34
 
35
+ def setup_fixtures(test_object)
36
+ raise ArgumentError, "Current adapter doesn't support #setup_fixtures" unless adapter.respond_to?(:setup_fixtures)
37
+
38
+ adapter.setup_fixtures(test_object)
39
+ end
40
+
35
41
  def config
36
42
  @config ||= Configuration.new
37
43
  end
@@ -60,8 +66,11 @@ module TestProf
60
66
  class Configuration
61
67
  HOOKS = %i[begin rollback].freeze
62
68
 
69
+ attr_accessor :setup_fixtures
70
+
63
71
  def initialize
64
72
  @hooks = Hash.new { |h, k| h[k] = HooksChain.new(k) }
73
+ @setup_fixtures = false
65
74
  end
66
75
 
67
76
  # Add `before` hook for `begin` or
@@ -18,6 +18,20 @@ module TestProf
18
18
  end
19
19
  ::ActiveRecord::Base.connection.rollback_transaction
20
20
  end
21
+
22
+ def setup_fixtures(test_object)
23
+ test_object.instance_eval do
24
+ @@already_loaded_fixtures ||= {}
25
+ @fixture_cache ||= {}
26
+
27
+ if @@already_loaded_fixtures[self.class]
28
+ @loaded_fixtures = @@already_loaded_fixtures[self.class]
29
+ else
30
+ @loaded_fixtures = load_fixtures(config)
31
+ @@already_loaded_fixtures[self.class] = @loaded_fixtures
32
+ end
33
+ end
34
+ end
21
35
  end
22
36
  end
23
37
  end
@@ -8,33 +8,45 @@ module TestProf
8
8
  # store instance variables
9
9
  module Minitest # :nodoc: all
10
10
  class Executor
11
- attr_reader :active, :block, :captured_ivars
11
+ attr_reader :active, :block, :captured_ivars, :teardown_block, :current_test_object,
12
+ :setup_fixtures
12
13
 
13
14
  alias active? active
15
+ alias setup_fixtures? setup_fixtures
14
16
 
15
- def initialize(&block)
17
+ def initialize(setup_fixtures: false, &block)
18
+ @setup_fixtures = setup_fixtures
16
19
  @block = block
17
20
  @captured_ivars = []
18
21
  end
19
22
 
23
+ def teardown(&block)
24
+ @teardown_block = block
25
+ end
26
+
20
27
  def activate!(test_object)
28
+ @current_test_object = test_object
29
+
21
30
  return restore_ivars(test_object) if active?
22
31
  @active = true
23
- @examples_left = test_object.class.runnable_methods.size
32
+ BeforeAll.setup_fixtures(test_object) if setup_fixtures?
24
33
  BeforeAll.begin_transaction do
25
34
  capture!(test_object)
26
35
  end
27
36
  end
28
37
 
29
- def try_deactivate!
30
- @examples_left -= 1
31
- return unless @examples_left.zero?
32
-
38
+ def deactivate!
33
39
  @active = false
40
+
41
+ current_test_object&.instance_eval(&teardown_block) if teardown_block
42
+
43
+ @current_test_object = nil
34
44
  BeforeAll.rollback_transaction
35
45
  end
36
46
 
37
47
  def capture!(test_object)
48
+ return unless block
49
+
38
50
  before_ivars = test_object.instance_variables
39
51
 
40
52
  test_object.instance_eval(&block)
@@ -63,21 +75,29 @@ module TestProf
63
75
  module ClassMethods
64
76
  attr_accessor :before_all_executor
65
77
 
66
- def before_all(&block)
67
- self.before_all_executor = Executor.new(&block)
78
+ def before_all(setup_fixtures: BeforeAll.config.setup_fixtures, &block)
79
+ self.before_all_executor = Executor.new(setup_fixtures: setup_fixtures, &block)
68
80
 
69
81
  prepend(Module.new do
70
- def setup
82
+ def before_setup
71
83
  self.class.before_all_executor.activate!(self)
72
84
  super
73
85
  end
86
+ end)
74
87
 
75
- def teardown
88
+ singleton_class.prepend(Module.new do
89
+ def run(*)
76
90
  super
77
- self.class.before_all_executor.try_deactivate!
91
+ ensure
92
+ before_all_executor&.deactivate!
78
93
  end
79
94
  end)
80
95
  end
96
+
97
+ def after_all(&block)
98
+ self.before_all_executor ||= Executor.new
99
+ before_all_executor.teardown(&block)
100
+ end
81
101
  end
82
102
  end
83
103
  end
@@ -6,14 +6,22 @@ module TestProf
6
6
  module BeforeAll
7
7
  # Helper to wrap the whole example group into a transaction
8
8
  module RSpec
9
- def before_all(&block)
9
+ def before_all(setup_fixtures: BeforeAll.config.setup_fixtures, &block)
10
10
  raise ArgumentError, "Block is required!" unless block_given?
11
11
 
12
- return before(:all, &block) if within_before_all?
12
+ if within_before_all?
13
+ before(:all) do
14
+ @__inspect_output = "before_all hook"
15
+ instance_eval(&block)
16
+ end
17
+ return
18
+ end
13
19
 
14
20
  @__before_all_activated__ = true
15
21
 
16
22
  before(:all) do
23
+ @__inspect_output = "before_all hook"
24
+ BeforeAll.setup_fixtures(self) if setup_fixtures
17
25
  BeforeAll.begin_transaction do
18
26
  instance_eval(&block)
19
27
  end
@@ -108,8 +108,9 @@ module TestProf
108
108
 
109
109
  LetItBe.module_for(self).module_eval do
110
110
  define_method(identifier) do
111
- # Trying to detect the context (couldn't find other way so far)
112
- if /\(:context\)/.match?(@__inspect_output)
111
+ # Trying to detect the context
112
+ # Based on https://github.com/rspec/rspec-rails/commit/7cb796db064f58da7790a92e73ab906ef50b1f34
113
+ if @__inspect_output.include?("before(:context)") || @__inspect_output.include?("before_all")
113
114
  instance_variable_get(:"#{PREFIX}#{identifier}")
114
115
  else
115
116
  # Fallback to let definition
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TestProf
4
- VERSION = "1.0.0.rc1"
4
+ VERSION = "1.0.0.rc2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test-prof
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc1
4
+ version: 1.0.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dementyev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-30 00:00:00.000000000 Z
11
+ date: 2021-01-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler