test-prof 1.0.5 → 1.0.6

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: edd58f04fbf02f8bfa863b2c68e19f26fbdfb95c36bb361d012848f0a4f76790
4
- data.tar.gz: 820c00eeaaea782bc89581005ac83cc147551550477519d7dd1a59a212f497c9
3
+ metadata.gz: f26a5003d400d430571206914f2f15a94ef4cca220c5f359e315eda7adf7a6b9
4
+ data.tar.gz: 74d5cfb5e92351e628134dcd51230c6c984bd4b03518b89b4f98d8d20621e46f
5
5
  SHA512:
6
- metadata.gz: f999f2073374210ef7c2afbedc977c21210f69e6e180fb54f6ce452741db1841b396b9358c9892e85ae972019d7204676d8a906d6a9f1f896c3669249027c935
7
- data.tar.gz: 38c1f0d45d386acca3edbbd7c52b9d246f02f030cce0717f2480b2917b003c6f2b3542beb6caac45d8fe432bc69b6a7db1720768297eb4a1588f471727664409
6
+ metadata.gz: ea8cd4e7907fceb36874a91240be7baa0bdfb3c43dbddda21dececde541dbe5b9d52738ef3412c9c906e208fe5d33d2b34ce4e13a9063d941f360f2ccb845a30
7
+ data.tar.gz: b87bec660bcd642dced3582c147317bb575628ef264eb7a33e31b59a1f5f7b740423fbd0a08dddf6c28638ffe266b460b05524cbfabbf95a93105053876aaf05
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## master (unrealeased)
4
4
 
5
+ ## 1.0.6 (2021-06-23)
6
+
7
+ - Fix Spring detection when `DISABLE_SPRING=1` is used. ([@palkan][])
8
+
9
+ - Make `before_all` in Minitest inheritable. ([@palkan][])
10
+
5
11
  ## 1.0.5 (2021-05-13)
6
12
 
7
13
  - Fix logging regression when no newline has been added. ([@palkan][])
@@ -178,7 +184,7 @@ end
178
184
  ```
179
185
 
180
186
  - Print warning when `ActiveRecordSharedConnection` is used in the version of Rails
181
- supporting `lock_threads` (5.1+). ([@palkan][])
187
+ supporting `lock_threads` (5.1+). ([@palkan][])
182
188
 
183
189
  ## 0.9.0 (2019-05-14)
184
190
 
@@ -236,20 +242,20 @@ See [changelog](https://github.com/test-prof/test-prof/blob/v0.8.0/CHANGELOG.md)
236
242
  [@palkan]: https://github.com/palkan
237
243
  [@marshall-lee]: https://github.com/marshall-lee
238
244
  [@danielwestendorf]: https://github.com/danielwestendorf
239
- [@Shkrt]: https://github.com/Shkrt
240
- [@IDolgirev]: https://github.com/IDolgirev
245
+ [@shkrt]: https://github.com/Shkrt
246
+ [@idolgirev]: https://github.com/IDolgirev
241
247
  [@desoleary]: https://github.com/desoleary
242
248
  [@rabotyaga]: https://github.com/rabotyaga
243
- [@Vasfed]: https://github.com/Vasfed
249
+ [@vasfed]: https://github.com/Vasfed
244
250
  [@szemek]: https://github.com/szemek
245
251
  [@mkldon]: https://github.com/mkldon
246
252
  [@dmagro]: https://github.com/dmagro
247
253
  [@danielwaterworth]: https://github.com/danielwaterworth
248
- [@Envek]: https://github.com/Envek
254
+ [@envek]: https://github.com/Envek
249
255
  [@tyleriguchi]: https://github.com/tyleriguchi
250
256
  [@lostie]: https://github.com/lostie
251
257
  [@pirj]: https://github.com/pirj
252
- [@LynxEyes]: https://github.com/LynxEyes
258
+ [@lynxeyes]: https://github.com/LynxEyes
253
259
  [@stefkin]: https://github.com/stefkin
254
260
  [@jaimerson]: https://github.com/jaimerson
255
261
  [@alexvko]: https://github.com/alexvko
data/lib/test_prof.rb CHANGED
@@ -46,6 +46,13 @@ module TestProf
46
46
  defined?(Minitest)
47
47
  end
48
48
 
49
+ # Returns true if Spring is used and not disabled
50
+ def spring?
51
+ # See https://github.com/rails/spring/blob/577cf01f232bb6dbd0ade7df2df2ac209697e741/lib/spring/binstub.rb
52
+ disabled = ENV["DISABLE_SPRING"]
53
+ defined?(::Spring::Application) && (disabled.nil? || disabled.empty? || disabled == "0")
54
+ end
55
+
49
56
  # Returns the current process time
50
57
  def now
51
58
  Process.clock_gettime(Process::CLOCK_MONOTONIC)
@@ -65,7 +72,7 @@ module TestProf
65
72
  # equal to the provided value (if any).
66
73
  # Contains workaround for applications using Spring.
67
74
  def activate(env_var, val = nil)
68
- if defined?(::Spring::Application)
75
+ if spring?
69
76
  notify_spring_detected
70
77
  ::Spring.after_fork do
71
78
  activate!(env_var, val) do
@@ -9,13 +9,15 @@ module TestProf
9
9
  module Minitest # :nodoc: all
10
10
  class Executor
11
11
  attr_reader :active, :block, :captured_ivars, :teardown_block, :current_test_object,
12
- :setup_fixtures
12
+ :setup_fixtures, :parent
13
13
 
14
14
  alias_method :active?, :active
15
15
  alias_method :setup_fixtures?, :setup_fixtures
16
16
 
17
- def initialize(setup_fixtures: false, &block)
18
- @setup_fixtures = setup_fixtures
17
+ def initialize(setup_fixtures: false, parent: nil, &block)
18
+ @parent = parent
19
+ # Fixtures must be instantiated if any of the executors needs them
20
+ @setup_fixtures = setup_fixtures || parent&.setup_fixtures
19
21
  @block = block
20
22
  @captured_ivars = []
21
23
  end
@@ -28,7 +30,9 @@ module TestProf
28
30
  @current_test_object = test_object
29
31
 
30
32
  return restore_ivars(test_object) if active?
33
+
31
34
  @active = true
35
+
32
36
  BeforeAll.setup_fixtures(test_object) if setup_fixtures?
33
37
  BeforeAll.begin_transaction do
34
38
  capture!(test_object)
@@ -36,20 +40,20 @@ module TestProf
36
40
  end
37
41
 
38
42
  def deactivate!
43
+ return unless active
44
+
39
45
  @active = false
40
46
 
41
- current_test_object&.instance_eval(&teardown_block) if teardown_block
47
+ perform_teardown(current_test_object)
42
48
 
43
49
  @current_test_object = nil
44
50
  BeforeAll.rollback_transaction
45
51
  end
46
52
 
47
53
  def capture!(test_object)
48
- return unless block
49
-
50
54
  before_ivars = test_object.instance_variables
51
55
 
52
- test_object.instance_eval(&block)
56
+ perform_setup(test_object)
53
57
 
54
58
  (test_object.instance_variables - before_ivars).each do |ivar|
55
59
  captured_ivars << [ivar, test_object.instance_variable_get(ivar)]
@@ -64,6 +68,16 @@ module TestProf
64
68
  )
65
69
  end
66
70
  end
71
+
72
+ def perform_setup(test_object)
73
+ parent&.perform_setup(test_object)
74
+ test_object.instance_eval(&block) if block
75
+ end
76
+
77
+ def perform_teardown(test_object)
78
+ current_test_object&.instance_eval(&teardown_block) if teardown_block
79
+ parent&.perform_teardown(test_object)
80
+ end
67
81
  end
68
82
 
69
83
  class << self
@@ -73,10 +87,25 @@ module TestProf
73
87
  end
74
88
 
75
89
  module ClassMethods
76
- attr_accessor :before_all_executor
90
+ attr_writer :before_all_executor
91
+
92
+ def before_all_executor
93
+ return @before_all_executor if instance_variable_defined?(:@before_all_executor)
94
+
95
+ @before_all_executor = if superclass.respond_to?(:before_all_executor)
96
+ superclass.before_all_executor
97
+ end
98
+ end
77
99
 
78
100
  def before_all(setup_fixtures: BeforeAll.config.setup_fixtures, &block)
79
- self.before_all_executor = Executor.new(setup_fixtures: setup_fixtures, &block)
101
+ self.before_all_executor = Executor.new(
102
+ setup_fixtures: setup_fixtures,
103
+ parent: before_all_executor,
104
+ &block
105
+ )
106
+
107
+ # Do not add patches multiple times
108
+ return if before_all_executor.parent
80
109
 
81
110
  prepend(Module.new do
82
111
  def before_setup
@@ -95,7 +124,7 @@ module TestProf
95
124
  end
96
125
 
97
126
  def after_all(&block)
98
- self.before_all_executor ||= Executor.new
127
+ self.before_all_executor = Executor.new(parent: before_all_executor)
99
128
  before_all_executor.teardown(&block)
100
129
  end
101
130
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TestProf
4
- VERSION = "1.0.5"
4
+ VERSION = "1.0.6"
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.5
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dementyev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-13 00:00:00.000000000 Z
11
+ date: 2021-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler