mocha 3.0.1 → 3.1.0

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: 46d45199cc8a186e47613514bcb563c823c1c7b4703029950871419a9eee7579
4
- data.tar.gz: 0cc0dc31d17c0c88d305526b7efd248d79514d115945c64b0da745128a46199e
3
+ metadata.gz: 12216e23b807fb2f1fd151d8f68ddd8fbbad2927a444cc563b192fe560ba0433
4
+ data.tar.gz: f5c3575c50f7a16d94fbb2c29b65de160c29cb3a84b460d84b0244a721028628
5
5
  SHA512:
6
- metadata.gz: e971d120e4eae10d6d5ca5cd4628635a8227df3c84b3667200b6e13e1008ae730e0c8ad331a0f5903b4404158e35a5dd64e1e6cca8311b70cd94eea7245d3ca3
7
- data.tar.gz: 52f8b945fd5c433d3a1cec5d31c5c385357acf498992920ab7ee8249844ff36552600e31a3492f30f93d661e5ed7448343fbdfd9e39a3e6ccef4d2130700c403
6
+ metadata.gz: e13297ea4d191863ddd889c7d64dccf0cd652734b46cbd1d04fec4c09c896923aba9fe09f15ce0c50982eb0ef22d892086ad5b8f661283f54ee9913d6c2cfa1e
7
+ data.tar.gz: ef2a1fafc1af00f43033742ebf2aff3870495bac17e0347607606026d3fa5e9cce961921371601cc0752e11501a7fbbf083d65a1743a318b873d7e2455fb4d2c
data/Gemfile CHANGED
@@ -9,6 +9,7 @@ group :development do
9
9
  gem 'rake'
10
10
 
11
11
  if ENV['MOCHA_GENERATE_DOCS']
12
+ gem 'irb'
12
13
  gem 'rdoc'
13
14
  gem 'redcarpet'
14
15
  gem 'yard'
data/README.md CHANGED
@@ -330,7 +330,7 @@ See this [list of contributors](https://github.com/freerange/mocha/graphs/contri
330
330
  ```bash
331
331
  $ MOCHA_GENERATE_DOCS=true bundle install
332
332
 
333
- $ MOCHA_GENERATE_DOCS=true rake docs
333
+ $ MOCHA_GENERATE_DOCS=true bundle exec rake docs
334
334
  ```
335
335
  * Commit documentation & push to GitHub
336
336
  * Sign in to rubygems.org and find API key - https://rubygems.org/profile/edit
@@ -342,7 +342,7 @@ $ curl -u <email-address> -H 'OTP:<one-time-password>' https://rubygems.org/api/
342
342
  * Release gem to Rubygems:
343
343
 
344
344
  ```bash
345
- $ rake release
345
+ $ bundle exec rake release
346
346
  [runs tests]
347
347
  mocha 1.2.0 built to pkg/mocha-1.2.0.gem.
348
348
  Tagged v1.2.0.
data/RELEASE.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # Release Notes
2
2
 
3
+ ## 3.1.0
4
+
5
+ ### External changes
6
+
7
+ * Format warnings consistently and include source location (#794)
8
+
9
+ ### Internal changes
10
+
11
+ * Fix `Style/OneClassPerFile` violations (#796)
12
+ * Remove `mise.toml` which was added accidentally (6c5f84db)
13
+ * Add `.ruby-version` to `.gitignore` (8516ccc1)
14
+
15
+ ## 3.0.2
16
+
17
+ ### External changes
18
+
19
+ * Fix `NoMethodError` on deprecation warning - broken since v3.0.0 (#790)
20
+
21
+ ### Internal changes
22
+
23
+ * Update commands in release docs to use `bundle exec` (7692c735)
24
+ * Fix `test:performance` rake task for minitest v6 (d925ad27)
25
+ * Fix prism gem install on JRuby (683c27b4)
26
+ * Add Ruby v4.0-rc to CI build matrix and change weekly build to nightly (#777)
27
+ * Add Ruby v4.0 to CI build matrix (6ced2025)
28
+ * Add irb to `Gemfile` to fix warning in Ruby v4 (a0fc7798)
29
+ * Auto-correct `Style/EmptyClassDefinition` violation (9ba0a09f)
30
+ * Ensure every test can run in isolation (be12ef06)
31
+ * Rename `run-fail-fast` CircleCI command -> `run-fail-on-warning` (72fc6fe8)
32
+
3
33
  ## 3.0.1
4
34
 
5
35
  ### External changes
data/Rakefile CHANGED
@@ -42,6 +42,25 @@ namespace 'test' do
42
42
  t.warning = true
43
43
  end
44
44
 
45
+ desc 'Run each test in isolation'
46
+ task 'isolated' do
47
+ test_files = FileList['test/unit/**/*_test.rb', 'test/acceptance/*_test.rb']
48
+ failed_tests = []
49
+
50
+ test_files.each do |test_file|
51
+ puts "\n=== Running #{test_file} in isolation ==="
52
+ system("ruby -Itest -w #{test_file}") || (failed_tests << test_file)
53
+ end
54
+
55
+ if failed_tests.any?
56
+ puts "\n❌ #{failed_tests.size} test file(s) failed:"
57
+ failed_tests.each { |f| puts " - #{f}" }
58
+ exit 1
59
+ else
60
+ puts "\n✅ All #{test_files.size} test files passed in isolation!"
61
+ end
62
+ end
63
+
45
64
  namespace 'integration' do
46
65
  desc 'Run Minitest integration tests (intended to be run in its own process)'
47
66
  Rake::TestTask.new('minitest') do |t|
@@ -92,15 +111,16 @@ task 'lint' do
92
111
  end
93
112
  end
94
113
 
95
- def benchmark_test_case(klass, iterations)
114
+ def benchmark_test_case(klass, iterations) # rubocop:disable Metrics/AbcSize
96
115
  require 'benchmark'
97
116
  require 'mocha/detection/minitest'
98
117
 
99
118
  if defined?(Minitest)
100
119
  minitest_version = Gem::Version.new(Mocha::Detection::Minitest.version)
101
120
  if Gem::Requirement.new('>= 5.0.0').satisfied_by?(minitest_version)
121
+ run_method = Gem::Requirement.new('>= 6.0.0').satisfied_by?(minitest_version) ? :run_suite : :run
102
122
  Minitest.seed = 1
103
- result = Benchmark.realtime { iterations.times { |_i| klass.run(Minitest::CompositeReporter.new) } }
123
+ result = Benchmark.realtime { iterations.times { |_i| klass.public_send(run_method, Minitest::CompositeReporter.new) } }
104
124
  Minitest::Runnable.runnables.delete(klass)
105
125
  result
106
126
  else
@@ -9,7 +9,17 @@ module Mocha
9
9
  end
10
10
 
11
11
  def filtered(backtrace)
12
- backtrace.reject { |location| File.expand_path(location).start_with?(@lib_directory) }
12
+ backtrace.reject { |line| exclude?(line) }
13
+ end
14
+
15
+ def filtered_locations(locations)
16
+ locations.reject { |location| exclude?(location.path) }
17
+ end
18
+
19
+ private
20
+
21
+ def exclude?(path)
22
+ File.expand_path(path).start_with?(@lib_directory)
13
23
  end
14
24
  end
15
25
  end
@@ -1,26 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'mocha/backtrace_filter'
3
+ require 'mocha/logger'
4
4
 
5
5
  module Mocha
6
6
  class Deprecation
7
- class Logger
8
- def warning(message)
9
- filter = BacktraceFilter.new
10
- location = filter.filtered(caller)[0]
11
- warn "Mocha deprecation warning at #{location}: #{message}"
12
- end
13
- end
14
-
15
7
  class << self
16
- attr_writer :logger
17
-
18
8
  def warning(message)
19
- logger.call(message)
20
- end
21
-
22
- def logger
23
- @logger ||= Logger.new
9
+ Logger.warning(message, category: :deprecation)
24
10
  end
25
11
  end
26
12
  end
@@ -646,10 +646,10 @@ module Mocha
646
646
  end
647
647
 
648
648
  # @private
649
- attr_reader :backtrace
649
+ attr_reader :backtrace_locations
650
650
 
651
651
  # @private
652
- def initialize(mock, expected_method_name, backtrace = nil)
652
+ def initialize(mock, expected_method_name, backtrace_locations = nil)
653
653
  @mock = mock
654
654
  @method_matcher = MethodMatcher.new(expected_method_name.to_sym)
655
655
  @parameters_matcher = ParametersMatcher.new
@@ -659,7 +659,7 @@ module Mocha
659
659
  @cardinality = Cardinality.new.exactly(1)
660
660
  @return_values = ReturnValues.new
661
661
  @yield_parameters = YieldParameters.new
662
- @backtrace = backtrace || caller
662
+ @backtrace_locations = backtrace_locations || caller_locations
663
663
  end
664
664
 
665
665
  # @private
@@ -760,10 +760,16 @@ module Mocha
760
760
  strings.join
761
761
  end
762
762
 
763
+ # @private
764
+ def backtrace
765
+ backtrace_locations.map(&:to_s)
766
+ end
767
+
763
768
  # @private
764
769
  def definition_location
765
770
  filter = BacktraceFilter.new
766
- filter.filtered(backtrace)[0]
771
+ location = filter.filtered_locations(backtrace_locations)[0]
772
+ "#{location.path}:#{location.lineno}"
767
773
  end
768
774
  end
769
775
  end
data/lib/mocha/inspect.rb CHANGED
@@ -52,22 +52,12 @@ module Mocha
52
52
  end
53
53
  end
54
54
 
55
- class Object
56
- include Mocha::Inspect::ObjectMethods
57
- end
55
+ Object.include(Mocha::Inspect::ObjectMethods)
58
56
 
59
- class Array
60
- include Mocha::Inspect::ArrayMethods
61
- end
57
+ Array.include(Mocha::Inspect::ArrayMethods)
62
58
 
63
- class Hash
64
- include Mocha::Inspect::HashMethods
65
- end
59
+ Hash.include(Mocha::Inspect::HashMethods)
66
60
 
67
- class Time
68
- include Mocha::Inspect::TimeMethods
69
- end
61
+ Time.include(Mocha::Inspect::TimeMethods)
70
62
 
71
- class Date
72
- include Mocha::Inspect::DateMethods
73
- end
63
+ Date.include(Mocha::Inspect::DateMethods)
data/lib/mocha/logger.rb CHANGED
@@ -1,13 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'mocha/backtrace_filter'
4
+
3
5
  module Mocha
4
6
  class Logger
5
- def initialize(io)
6
- @io = io
7
+ class << self
8
+ attr_writer :logger
9
+
10
+ def warning(*args, **kwargs)
11
+ logger.warning(*args, **kwargs)
12
+ end
13
+
14
+ def logger
15
+ @logger ||= new
16
+ end
7
17
  end
8
18
 
9
- def warn(message)
10
- @io.puts "WARNING: #{message}"
19
+ def warning(message, category: nil)
20
+ filter = BacktraceFilter.new
21
+ location = filter.filtered_locations(caller_locations)[0]
22
+ prefix = ['Mocha', category, 'warning'].compact.join(' ')
23
+ warn("#{prefix}: #{message} (at #{location.path}:#{location.lineno})")
11
24
  end
12
25
  end
13
26
  end
data/lib/mocha/mockery.rb CHANGED
@@ -49,7 +49,6 @@ module Mocha
49
49
  def setup(assertion_counter)
50
50
  @instances ||= []
51
51
  mockery = new(assertion_counter)
52
- mockery.logger = instance.logger unless @instances.empty?
53
52
  @instances.push(mockery)
54
53
  end
55
54
 
@@ -149,12 +148,6 @@ module Mocha
149
148
  check(:stubbing_method_on_non_mock_object, 'method on non-mock object', signature_proc)
150
149
  end
151
150
 
152
- attr_writer :logger
153
-
154
- def logger
155
- @logger ||= Logger.new($stderr)
156
- end
157
-
158
151
  private
159
152
 
160
153
  def check(action, description, signature_proc, backtrace = caller)
@@ -165,7 +158,7 @@ module Mocha
165
158
  message = "stubbing #{description}: #{method_signature}"
166
159
  raise StubbingError.new(message, backtrace) if treatment == :prevent
167
160
 
168
- logger.warn(message) if treatment == :warn
161
+ Logger.warning(message) if treatment == :warn
169
162
  end
170
163
 
171
164
  def expectations
@@ -23,6 +23,6 @@ module Mocha
23
23
  end
24
24
 
25
25
  # @private
26
- class Object
26
+ class Object # rubocop:disable Style/OneClassPerFile
27
27
  include Mocha::ParameterMatchers::InstanceMethods
28
28
  end
@@ -5,7 +5,8 @@ require 'mocha/ruby_version'
5
5
 
6
6
  module Mocha
7
7
  class StubbedMethod
8
- PrependedModule = Class.new(Module)
8
+ class PrependedModule < Module
9
+ end
9
10
 
10
11
  attr_reader :stubba_object, :method_name
11
12
 
data/lib/mocha/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mocha
4
- VERSION = '3.0.1'
4
+ VERSION = '3.1.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mocha
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.1
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Mead
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-12-17 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: ruby2_keywords
@@ -146,7 +145,6 @@ metadata:
146
145
  homepage_uri: https://mocha.jamesmead.org
147
146
  source_code_uri: https://github.com/freerange/mocha
148
147
  rubygems_mfa_required: 'true'
149
- post_install_message:
150
148
  rdoc_options: []
151
149
  require_paths:
152
150
  - lib
@@ -161,8 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
161
159
  - !ruby/object:Gem::Version
162
160
  version: '0'
163
161
  requirements: []
164
- rubygems_version: 3.5.3
165
- signing_key:
162
+ rubygems_version: 4.0.3
166
163
  specification_version: 4
167
164
  summary: Mocking and stubbing library
168
165
  test_files: []