rspec-core 3.0.4 → 3.12.2

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.
Files changed (85) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/.document +1 -1
  4. data/.yardopts +2 -1
  5. data/Changelog.md +888 -2
  6. data/{License.txt → LICENSE.md} +6 -5
  7. data/README.md +165 -24
  8. data/lib/rspec/autorun.rb +1 -0
  9. data/lib/rspec/core/backtrace_formatter.rb +19 -20
  10. data/lib/rspec/core/bisect/coordinator.rb +62 -0
  11. data/lib/rspec/core/bisect/example_minimizer.rb +173 -0
  12. data/lib/rspec/core/bisect/fork_runner.rb +138 -0
  13. data/lib/rspec/core/bisect/server.rb +61 -0
  14. data/lib/rspec/core/bisect/shell_command.rb +126 -0
  15. data/lib/rspec/core/bisect/shell_runner.rb +73 -0
  16. data/lib/rspec/core/bisect/utilities.rb +69 -0
  17. data/lib/rspec/core/configuration.rb +1287 -246
  18. data/lib/rspec/core/configuration_options.rb +95 -35
  19. data/lib/rspec/core/did_you_mean.rb +46 -0
  20. data/lib/rspec/core/drb.rb +21 -12
  21. data/lib/rspec/core/dsl.rb +10 -6
  22. data/lib/rspec/core/example.rb +305 -113
  23. data/lib/rspec/core/example_group.rb +431 -223
  24. data/lib/rspec/core/example_status_persister.rb +235 -0
  25. data/lib/rspec/core/filter_manager.rb +86 -115
  26. data/lib/rspec/core/flat_map.rb +6 -4
  27. data/lib/rspec/core/formatters/base_bisect_formatter.rb +45 -0
  28. data/lib/rspec/core/formatters/base_formatter.rb +14 -116
  29. data/lib/rspec/core/formatters/base_text_formatter.rb +18 -21
  30. data/lib/rspec/core/formatters/bisect_drb_formatter.rb +29 -0
  31. data/lib/rspec/core/formatters/bisect_progress_formatter.rb +157 -0
  32. data/lib/rspec/core/formatters/console_codes.rb +29 -18
  33. data/lib/rspec/core/formatters/deprecation_formatter.rb +16 -16
  34. data/lib/rspec/core/formatters/documentation_formatter.rb +49 -16
  35. data/lib/rspec/core/formatters/exception_presenter.rb +525 -0
  36. data/lib/rspec/core/formatters/failure_list_formatter.rb +23 -0
  37. data/lib/rspec/core/formatters/fallback_message_formatter.rb +28 -0
  38. data/lib/rspec/core/formatters/helpers.rb +45 -15
  39. data/lib/rspec/core/formatters/html_formatter.rb +33 -28
  40. data/lib/rspec/core/formatters/html_printer.rb +30 -20
  41. data/lib/rspec/core/formatters/html_snippet_extractor.rb +120 -0
  42. data/lib/rspec/core/formatters/json_formatter.rb +18 -9
  43. data/lib/rspec/core/formatters/profile_formatter.rb +10 -9
  44. data/lib/rspec/core/formatters/progress_formatter.rb +5 -4
  45. data/lib/rspec/core/formatters/protocol.rb +182 -0
  46. data/lib/rspec/core/formatters/snippet_extractor.rb +113 -82
  47. data/lib/rspec/core/formatters/syntax_highlighter.rb +91 -0
  48. data/lib/rspec/core/formatters.rb +81 -41
  49. data/lib/rspec/core/hooks.rb +314 -244
  50. data/lib/rspec/core/invocations.rb +87 -0
  51. data/lib/rspec/core/memoized_helpers.rb +161 -51
  52. data/lib/rspec/core/metadata.rb +132 -61
  53. data/lib/rspec/core/metadata_filter.rb +224 -64
  54. data/lib/rspec/core/minitest_assertions_adapter.rb +6 -3
  55. data/lib/rspec/core/mocking_adapters/flexmock.rb +4 -2
  56. data/lib/rspec/core/mocking_adapters/mocha.rb +11 -9
  57. data/lib/rspec/core/mocking_adapters/null.rb +2 -0
  58. data/lib/rspec/core/mocking_adapters/rr.rb +3 -1
  59. data/lib/rspec/core/mocking_adapters/rspec.rb +3 -1
  60. data/lib/rspec/core/notifications.rb +192 -206
  61. data/lib/rspec/core/option_parser.rb +174 -69
  62. data/lib/rspec/core/ordering.rb +48 -35
  63. data/lib/rspec/core/output_wrapper.rb +29 -0
  64. data/lib/rspec/core/pending.rb +25 -33
  65. data/lib/rspec/core/profiler.rb +34 -0
  66. data/lib/rspec/core/project_initializer/.rspec +0 -2
  67. data/lib/rspec/core/project_initializer/spec/spec_helper.rb +59 -39
  68. data/lib/rspec/core/project_initializer.rb +5 -3
  69. data/lib/rspec/core/rake_task.rb +99 -55
  70. data/lib/rspec/core/reporter.rb +128 -15
  71. data/lib/rspec/core/ruby_project.rb +14 -6
  72. data/lib/rspec/core/runner.rb +96 -45
  73. data/lib/rspec/core/sandbox.rb +37 -0
  74. data/lib/rspec/core/set.rb +54 -0
  75. data/lib/rspec/core/shared_example_group.rb +133 -43
  76. data/lib/rspec/core/shell_escape.rb +49 -0
  77. data/lib/rspec/core/test_unit_assertions_adapter.rb +4 -4
  78. data/lib/rspec/core/version.rb +1 -1
  79. data/lib/rspec/core/warnings.rb +6 -6
  80. data/lib/rspec/core/world.rb +172 -68
  81. data/lib/rspec/core.rb +66 -21
  82. data.tar.gz.sig +0 -0
  83. metadata +93 -69
  84. metadata.gz.sig +0 -0
  85. data/lib/rspec/core/backport_random.rb +0 -336
metadata CHANGED
@@ -1,40 +1,52 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.4
4
+ version: 3.12.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Baker
8
8
  - David Chelimsky
9
9
  - Chad Humphries
10
10
  - Myron Marston
11
- autorequire:
11
+ autorequire:
12
12
  bindir: exe
13
13
  cert_chain:
14
14
  - |
15
15
  -----BEGIN CERTIFICATE-----
16
- MIIDjjCCAnagAwIBAgIBATANBgkqhkiG9w0BAQUFADBGMRIwEAYDVQQDDAlyc3Bl
17
- Yy1kZXYxGzAZBgoJkiaJk/IsZAEZFgtnb29nbGVnb3VwczETMBEGCgmSJomT8ixk
18
- ARkWA2NvbTAeFw0xMzExMDcxOTQyNTlaFw0xNDExMDcxOTQyNTlaMEYxEjAQBgNV
19
- BAMMCXJzcGVjLWRldjEbMBkGCgmSJomT8ixkARkWC2dvb2dsZWdvdXBzMRMwEQYK
20
- CZImiZPyLGQBGRYDY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
21
- nhCeZouDLXWO55no+EdZNCtjXjfJQ1X9TbPcvBDD29OypIUce2h/VdKXB2gI7ZHs
22
- F5NkPggslTErGFmWAtIiur7u943RVqHOsyoIsy065F9fCtrykkA+22elvTDha4Iz
23
- RUCvuhQ3klatYk4jF+cGt1jNONNVdLOiy0bMynvcM7hoVQ2AomwGs+cEOWQ/4dkD
24
- JcNV3qfzF5QBcTD2372XNM53b25nYVQSX2KH5FF7BhlKyov33bOm2gA9M+mWIujW
25
- qgkyxVlfrlE+ZBgV3wXn1Cojg1LpTq35yOArgwioyrwwlZZJR9joN9s/nDklfr5A
26
- +dyETjFc6cmEPWZrt2cJBQIDAQABo4GGMIGDMAkGA1UdEwQCMAAwCwYDVR0PBAQD
27
- AgSwMB0GA1UdDgQWBBSW+WD7hn1swJ1A7i8tbuFeuNCJCjAkBgNVHREEHTAbgRly
28
- c3BlYy1kZXZAZ29vZ2xlZ291cHMuY29tMCQGA1UdEgQdMBuBGXJzcGVjLWRldkBn
29
- b29nbGVnb3Vwcy5jb20wDQYJKoZIhvcNAQEFBQADggEBAH27jAZ8sD7vnXupj6Y+
30
- BaBdfHtCkFaslLJ0aKuMDIVXwYuKfqoW15cZPDLmSIEBuQFM3lw6d/hEEL4Uo2jZ
31
- FvtmH5OxifPDzFyUtCL4yp6qgNe/Xf6sDsRg6FmKcpgqCwNOmsViaf0LPSUH/GYQ
32
- 3Teoz8QCaDbD7AKsffT7eDrnbHnKweO1XdemRJC98u/yYxnGzMSWKEsn09etBlZ9
33
- 7H67k5Z3uf6cfLZgToWL6zShzZY3Nun5r73YsNf2/QZOe4UZe4vfGvn6baw53ys9
34
- 1yHC1AcSYpvi2dAbOiHT5iQF+krm4wse8KctXgTNnjMsHEoGKulJS2/sZl90jcCz
35
- muA=
16
+ MIIF1TCCA72gAwIBAgIJAPXjfUbCjdXUMA0GCSqGSIb3DQEBBQUAMIGAMQswCQYD
17
+ VQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEO
18
+ MAwGA1UECgwFUlNwZWMxEzARBgNVBAMMCnJzcGVjLmluZm8xJTAjBgkqhkiG9w0B
19
+ CQEWFnJzcGVjQGdvb2dsZWdyb3Vwcy5jb20wHhcNMTQxMjIzMDkzNTIyWhcNMjQx
20
+ MjIyMDkzNTIyWjCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24x
21
+ EDAOBgNVBAcMB1NlYXR0bGUxDjAMBgNVBAoMBVJTcGVjMRMwEQYDVQQDDApyc3Bl
22
+ Yy5pbmZvMSUwIwYJKoZIhvcNAQkBFhZyc3BlY0Bnb29nbGVncm91cHMuY29tMIIC
23
+ IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsSmjgcHaKlD0jizRJowi2bGI
24
+ KMOHnJoExxRNHHxH+3w9kkl95YldvDRVX495b13ZCzwRe0AyqX24wq04tp0G5Z5C
25
+ e/w2pnNK4ol1eECPwQu+YGpepeODlZICL5gwQspe0cDifbBnHx5QySMiPpvx6bC0
26
+ tQTox0ppDIaMhch8IPCwyoE4DQK5bpsdwnLSHTsQjUIb7IM8tUMpd/iKrJgNffwc
27
+ 6gC1TmhIlzQoB26nCNh9uK7xZjUM+sGECzvcYuImchUaIgJA/ybrlZS+m/hxzvBo
28
+ mLnn/xNEC6Vz5HG+3TR0Gb0cSUf6XUu2s51Jk/SJi3MhCZp2gs9OUg4EVZNzQVkZ
29
+ efLBjAZG2Mxk14JyB4/Omc+Jk0ajprINCBbUNnxzCJrYDM3J9TVWIwyUGNX/U3MO
30
+ s3tMAT+EVgx/mZMPnBO8EULlyF51MRUp3Wy9Mnw8AYLk30UnMG5AjqgO5JNyFlA7
31
+ Xeh3EVdWY3vMB1pkhPwlsenpcmj5gOzrd54lELOVbCGHCf48iSqeflY2Lhe0pvzK
32
+ blXCJBDmtrebvus291rM/dHcbEfK1SVd5Wut/n131iouf6dnNCFskFygDcgBbthC
33
+ gpEMqf80lEmhX59VUsm0Pv6OEo+ZPHBvXPiJA6DShQh9t3YtpwyA8uVDMbT/i32u
34
+ 2FUsqZbbJcCmkBrGposCAwEAAaNQME4wHQYDVR0OBBYEFPPvQ5XT0Nvuhi6k+hrW
35
+ Vv35J+TeMB8GA1UdIwQYMBaAFPPvQ5XT0Nvuhi6k+hrWVv35J+TeMAwGA1UdEwQF
36
+ MAMBAf8wDQYJKoZIhvcNAQEFBQADggIBAIqbQSWH2aAF537DKwAMB8nMFsoe24MD
37
+ gtuQAyjTtbH+QBE4N2RdQF/sU7Y3PYR7nqdrCsYc3RxyqM5XXi7I3IYdpfe1RuxY
38
+ +pyPzVQsPPDhMlJlCrwJsADnxlpxZlAgxYSLKOan55ihscaAWA90wqRUrf/ZJM36
39
+ 8LWCPVn5teIt5aaxZWX68RMxa+AXvpbtJOBwXLkIFk3apD8CX4DhelIdw67DbkUe
40
+ ghUd/u62qrnqBTVgditt7OoWIZjzh24/Fda5d0MxZyvLILGOrf5bN4cTbe/q9Cid
41
+ Xrik7Upm+mu3y3yQIfrw85xybHq6iNXyYHvCdSrFfCIKrGpd/0CAdmYnJlx59Fk/
42
+ UbD3Eyx4psBSkU+WKO0Uf+3zNI7N/nVeNIwU/Ft+l8l7/K+427656c+ZGWDO0Gt/
43
+ BeEOSTDKP7qQ1T+JvMrBcBQo+i0cnRT10J1aoV90BhxsvWTRizIbugbaqR6Tq3bj
44
+ Akt00cIlNSplL6DenIAKSh5kF7s0tRD0tC3bNkZmNjNGkdoGEcUODEpTB3RHKKiu
45
+ e6k2Jg6m00z5vGFQhOnROG/QaUzMA3A3mFBe1RHFo07xd0pFeoeWL3vF69Gx9Jwp
46
+ ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
47
+ F3MdtaDehhjC
36
48
  -----END CERTIFICATE-----
37
- date: 2014-08-14 00:00:00.000000000 Z
49
+ date: 2023-04-18 00:00:00.000000000 Z
38
50
  dependencies:
39
51
  - !ruby/object:Gem::Dependency
40
52
  name: rspec-support
@@ -42,40 +54,26 @@ dependencies:
42
54
  requirements:
43
55
  - - "~>"
44
56
  - !ruby/object:Gem::Version
45
- version: 3.0.0
57
+ version: 3.12.0
46
58
  type: :runtime
47
59
  prerelease: false
48
60
  version_requirements: !ruby/object:Gem::Requirement
49
61
  requirements:
50
62
  - - "~>"
51
63
  - !ruby/object:Gem::Version
52
- version: 3.0.0
53
- - !ruby/object:Gem::Dependency
54
- name: rake
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: 10.0.0
60
- type: :development
61
- prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - "~>"
65
- - !ruby/object:Gem::Version
66
- version: 10.0.0
64
+ version: 3.12.0
67
65
  - !ruby/object:Gem::Dependency
68
66
  name: cucumber
69
67
  requirement: !ruby/object:Gem::Requirement
70
68
  requirements:
71
- - - "~>"
69
+ - - ">="
72
70
  - !ruby/object:Gem::Version
73
71
  version: '1.3'
74
72
  type: :development
75
73
  prerelease: false
76
74
  version_requirements: !ruby/object:Gem::Requirement
77
75
  requirements:
78
- - - "~>"
76
+ - - ">="
79
77
  - !ruby/object:Gem::Version
80
78
  version: '1.3'
81
79
  - !ruby/object:Gem::Dependency
@@ -98,42 +96,28 @@ dependencies:
98
96
  requirements:
99
97
  - - "~>"
100
98
  - !ruby/object:Gem::Version
101
- version: '0.5'
99
+ version: 0.14.9
102
100
  type: :development
103
101
  prerelease: false
104
102
  version_requirements: !ruby/object:Gem::Requirement
105
103
  requirements:
106
104
  - - "~>"
107
105
  - !ruby/object:Gem::Version
108
- version: '0.5'
109
- - !ruby/object:Gem::Dependency
110
- name: nokogiri
111
- requirement: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - '='
114
- - !ruby/object:Gem::Version
115
- version: 1.5.2
116
- type: :development
117
- prerelease: false
118
- version_requirements: !ruby/object:Gem::Requirement
119
- requirements:
120
- - - '='
121
- - !ruby/object:Gem::Version
122
- version: 1.5.2
106
+ version: 0.14.9
123
107
  - !ruby/object:Gem::Dependency
124
108
  name: coderay
125
109
  requirement: !ruby/object:Gem::Requirement
126
110
  requirements:
127
111
  - - "~>"
128
112
  - !ruby/object:Gem::Version
129
- version: 1.0.9
113
+ version: 1.1.1
130
114
  type: :development
131
115
  prerelease: false
132
116
  version_requirements: !ruby/object:Gem::Requirement
133
117
  requirements:
134
118
  - - "~>"
135
119
  - !ruby/object:Gem::Version
136
- version: 1.0.9
120
+ version: 1.1.1
137
121
  - !ruby/object:Gem::Dependency
138
122
  name: mocha
139
123
  requirement: !ruby/object:Gem::Requirement
@@ -176,6 +160,20 @@ dependencies:
176
160
  - - "~>"
177
161
  - !ruby/object:Gem::Version
178
162
  version: 0.9.0
163
+ - !ruby/object:Gem::Dependency
164
+ name: thread_order
165
+ requirement: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - "~>"
168
+ - !ruby/object:Gem::Version
169
+ version: 1.1.0
170
+ type: :development
171
+ prerelease: false
172
+ version_requirements: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - "~>"
175
+ - !ruby/object:Gem::Version
176
+ version: 1.1.0
179
177
  description: BDD for Ruby. RSpec runner and example groups.
180
178
  email: rspec@googlegroups.com
181
179
  executables:
@@ -186,35 +184,53 @@ files:
186
184
  - ".document"
187
185
  - ".yardopts"
188
186
  - Changelog.md
189
- - License.txt
187
+ - LICENSE.md
190
188
  - README.md
191
189
  - exe/rspec
192
190
  - lib/rspec/autorun.rb
193
191
  - lib/rspec/core.rb
194
- - lib/rspec/core/backport_random.rb
195
192
  - lib/rspec/core/backtrace_formatter.rb
193
+ - lib/rspec/core/bisect/coordinator.rb
194
+ - lib/rspec/core/bisect/example_minimizer.rb
195
+ - lib/rspec/core/bisect/fork_runner.rb
196
+ - lib/rspec/core/bisect/server.rb
197
+ - lib/rspec/core/bisect/shell_command.rb
198
+ - lib/rspec/core/bisect/shell_runner.rb
199
+ - lib/rspec/core/bisect/utilities.rb
196
200
  - lib/rspec/core/configuration.rb
197
201
  - lib/rspec/core/configuration_options.rb
202
+ - lib/rspec/core/did_you_mean.rb
198
203
  - lib/rspec/core/drb.rb
199
204
  - lib/rspec/core/dsl.rb
200
205
  - lib/rspec/core/example.rb
201
206
  - lib/rspec/core/example_group.rb
207
+ - lib/rspec/core/example_status_persister.rb
202
208
  - lib/rspec/core/filter_manager.rb
203
209
  - lib/rspec/core/flat_map.rb
204
210
  - lib/rspec/core/formatters.rb
211
+ - lib/rspec/core/formatters/base_bisect_formatter.rb
205
212
  - lib/rspec/core/formatters/base_formatter.rb
206
213
  - lib/rspec/core/formatters/base_text_formatter.rb
214
+ - lib/rspec/core/formatters/bisect_drb_formatter.rb
215
+ - lib/rspec/core/formatters/bisect_progress_formatter.rb
207
216
  - lib/rspec/core/formatters/console_codes.rb
208
217
  - lib/rspec/core/formatters/deprecation_formatter.rb
209
218
  - lib/rspec/core/formatters/documentation_formatter.rb
219
+ - lib/rspec/core/formatters/exception_presenter.rb
220
+ - lib/rspec/core/formatters/failure_list_formatter.rb
221
+ - lib/rspec/core/formatters/fallback_message_formatter.rb
210
222
  - lib/rspec/core/formatters/helpers.rb
211
223
  - lib/rspec/core/formatters/html_formatter.rb
212
224
  - lib/rspec/core/formatters/html_printer.rb
225
+ - lib/rspec/core/formatters/html_snippet_extractor.rb
213
226
  - lib/rspec/core/formatters/json_formatter.rb
214
227
  - lib/rspec/core/formatters/profile_formatter.rb
215
228
  - lib/rspec/core/formatters/progress_formatter.rb
229
+ - lib/rspec/core/formatters/protocol.rb
216
230
  - lib/rspec/core/formatters/snippet_extractor.rb
231
+ - lib/rspec/core/formatters/syntax_highlighter.rb
217
232
  - lib/rspec/core/hooks.rb
233
+ - lib/rspec/core/invocations.rb
218
234
  - lib/rspec/core/memoized_helpers.rb
219
235
  - lib/rspec/core/metadata.rb
220
236
  - lib/rspec/core/metadata_filter.rb
@@ -227,7 +243,9 @@ files:
227
243
  - lib/rspec/core/notifications.rb
228
244
  - lib/rspec/core/option_parser.rb
229
245
  - lib/rspec/core/ordering.rb
246
+ - lib/rspec/core/output_wrapper.rb
230
247
  - lib/rspec/core/pending.rb
248
+ - lib/rspec/core/profiler.rb
231
249
  - lib/rspec/core/project_initializer.rb
232
250
  - lib/rspec/core/project_initializer/.rspec
233
251
  - lib/rspec/core/project_initializer/spec/spec_helper.rb
@@ -235,17 +253,25 @@ files:
235
253
  - lib/rspec/core/reporter.rb
236
254
  - lib/rspec/core/ruby_project.rb
237
255
  - lib/rspec/core/runner.rb
256
+ - lib/rspec/core/sandbox.rb
257
+ - lib/rspec/core/set.rb
238
258
  - lib/rspec/core/shared_context.rb
239
259
  - lib/rspec/core/shared_example_group.rb
260
+ - lib/rspec/core/shell_escape.rb
240
261
  - lib/rspec/core/test_unit_assertions_adapter.rb
241
262
  - lib/rspec/core/version.rb
242
263
  - lib/rspec/core/warnings.rb
243
264
  - lib/rspec/core/world.rb
244
- homepage: http://github.com/rspec/rspec-core
265
+ homepage: https://github.com/rspec/rspec-core
245
266
  licenses:
246
267
  - MIT
247
- metadata: {}
248
- post_install_message:
268
+ metadata:
269
+ bug_tracker_uri: https://github.com/rspec/rspec-core/issues
270
+ changelog_uri: https://github.com/rspec/rspec-core/blob/v3.12.2/Changelog.md
271
+ documentation_uri: https://rspec.info/documentation/
272
+ mailing_list_uri: https://groups.google.com/forum/#!forum/rspec
273
+ source_code_uri: https://github.com/rspec/rspec-core
274
+ post_install_message:
249
275
  rdoc_options:
250
276
  - "--charset=UTF-8"
251
277
  require_paths:
@@ -261,10 +287,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
261
287
  - !ruby/object:Gem::Version
262
288
  version: '0'
263
289
  requirements: []
264
- rubyforge_project: rspec
265
- rubygems_version: 2.2.2
266
- signing_key:
290
+ rubygems_version: 3.4.10
291
+ signing_key:
267
292
  specification_version: 4
268
- summary: rspec-core-3.0.4
293
+ summary: rspec-core-3.12.2
269
294
  test_files: []
270
- has_rdoc:
metadata.gz.sig CHANGED
Binary file
@@ -1,336 +0,0 @@
1
- module RSpec
2
- module Core
3
- # @private
4
- #
5
- # Methods used internally by the backports.
6
- #
7
- # This code was (mostly) ported from the backports gem found at
8
- # https://github.com/marcandre/backports which is subject to this license:
9
- #
10
- # =========================================================================
11
- #
12
- # Copyright (c) 2009 Marc-Andre Lafortune
13
- #
14
- # Permission is hereby granted, free of charge, to any person obtaining
15
- # a copy of this software and associated documentation files (the
16
- # "Software"), to deal in the Software without restriction, including
17
- # without limitation the rights to use, copy, modify, merge, publish,
18
- # distribute, sublicense, and/or sell copies of the Software, and to
19
- # permit persons to whom the Software is furnished to do so, subject to
20
- # the following conditions:
21
- #
22
- # The above copyright notice and this permission notice shall be
23
- # included in all copies or substantial portions of the Software.
24
- #
25
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32
- #
33
- # =========================================================================
34
- #
35
- # The goal is to provide a random number generator in Ruby versions that do
36
- # not have one. This was added to support localization of random spec
37
- # ordering.
38
- #
39
- # These were in multiple files in backports, but merged into one here.
40
- module Backports
41
- # Helper method to coerce a value into a specific class.
42
- # Raises a TypeError if the coercion fails or the returned value
43
- # is not of the right class.
44
- # (from Rubinius)
45
- def self.coerce_to(obj, cls, meth)
46
- return obj if obj.kind_of?(cls)
47
-
48
- begin
49
- ret = obj.__send__(meth)
50
- rescue Exception => e
51
- raise TypeError, "Coercion error: #{obj.inspect}.#{meth} => #{cls} failed:\n" \
52
- "(#{e.message})"
53
- end
54
- raise TypeError, "Coercion error: obj.#{meth} did NOT return a #{cls} (was #{ret.class})" unless ret.kind_of? cls
55
- ret
56
- end
57
-
58
- # @private
59
- def self.coerce_to_int(obj)
60
- coerce_to(obj, Integer, :to_int)
61
- end
62
-
63
- # Used internally to make it easy to deal with optional arguments
64
- # (from Rubinius)
65
- Undefined = Object.new
66
-
67
- # @private
68
- class Random
69
- # @private
70
- # An implementation of Mersenne Twister MT19937 in Ruby
71
- class MT19937
72
- STATE_SIZE = 624
73
- LAST_STATE = STATE_SIZE - 1
74
- PAD_32_BITS = 0xffffffff
75
-
76
- # See seed=
77
- def initialize(seed)
78
- self.seed = seed
79
- end
80
-
81
- LAST_31_BITS = 0x7fffffff
82
- OFFSET = 397
83
-
84
- # Generates a completely new state out of the previous one.
85
- def next_state
86
- STATE_SIZE.times do |i|
87
- mix = @state[i] & 0x80000000 | @state[i+1 - STATE_SIZE] & 0x7fffffff
88
- @state[i] = @state[i+OFFSET - STATE_SIZE] ^ (mix >> 1)
89
- @state[i] ^= 0x9908b0df if mix.odd?
90
- end
91
- @last_read = -1
92
- end
93
-
94
- # Seed must be either an Integer (only the first 32 bits will be used)
95
- # or an Array of Integers (of which only the first 32 bits will be used)
96
- #
97
- # No conversion or type checking is done at this level
98
- def seed=(seed)
99
- case seed
100
- when Integer
101
- @state = Array.new(STATE_SIZE)
102
- @state[0] = seed & PAD_32_BITS
103
- (1..LAST_STATE).each do |i|
104
- @state[i] = (1812433253 * (@state[i-1] ^ @state[i-1]>>30) + i)& PAD_32_BITS
105
- end
106
- @last_read = LAST_STATE
107
- when Array
108
- self.seed = 19650218
109
- i=1
110
- j=0
111
- [STATE_SIZE, seed.size].max.times do
112
- @state[i] = (@state[i] ^ (@state[i-1] ^ @state[i-1]>>30) * 1664525) + j + seed[j] & PAD_32_BITS
113
- if (i+=1) >= STATE_SIZE
114
- @state[0] = @state[-1]
115
- i = 1
116
- end
117
- j = 0 if (j+=1) >= seed.size
118
- end
119
- (STATE_SIZE-1).times do
120
- @state[i] = (@state[i] ^ (@state[i-1] ^ @state[i-1]>>30) * 1566083941) - i & PAD_32_BITS
121
- if (i+=1) >= STATE_SIZE
122
- @state[0] = @state[-1]
123
- i = 1
124
- end
125
- end
126
- @state[0] = 0x80000000
127
- else
128
- raise ArgumentError, "Seed must be an Integer or an Array"
129
- end
130
- end
131
-
132
- # Returns a random Integer from the range 0 ... (1 << 32)
133
- def random_32_bits
134
- next_state if @last_read >= LAST_STATE
135
- @last_read += 1
136
- y = @state[@last_read]
137
- # Tempering
138
- y ^= (y >> 11)
139
- y ^= (y << 7) & 0x9d2c5680
140
- y ^= (y << 15) & 0xefc60000
141
- y ^= (y >> 18)
142
- end
143
-
144
- # Supplement the MT19937 class with methods to do
145
- # conversions the same way as MRI.
146
- # No argument checking is done here either.
147
-
148
- FLOAT_FACTOR = 1.0/9007199254740992.0
149
- # generates a random number on [0,1) with 53-bit resolution
150
- def random_float
151
- ((random_32_bits >> 5) * 67108864.0 + (random_32_bits >> 6)) * FLOAT_FACTOR;
152
- end
153
-
154
- # Returns an integer within 0...upto
155
- def random_integer(upto)
156
- n = upto - 1
157
- nb_full_32 = 0
158
- while n > PAD_32_BITS
159
- n >>= 32
160
- nb_full_32 += 1
161
- end
162
- mask = mask_32_bits(n)
163
- begin
164
- rand = random_32_bits & mask
165
- nb_full_32.times do
166
- rand <<= 32
167
- rand |= random_32_bits
168
- end
169
- end until rand < upto
170
- rand
171
- end
172
-
173
- def random_bytes(nb)
174
- nb_32_bits = (nb + 3) / 4
175
- random = nb_32_bits.times.map { random_32_bits }
176
- random.pack("L" * nb_32_bits)[0, nb]
177
- end
178
-
179
- def state_as_bignum
180
- b = 0
181
- @state.each_with_index do |val, i|
182
- b |= val << (32 * i)
183
- end
184
- b
185
- end
186
-
187
- def left # It's actually the number of words left + 1, as per MRI...
188
- MT19937::STATE_SIZE - @last_read
189
- end
190
-
191
- def marshal_dump
192
- [state_as_bignum, left]
193
- end
194
-
195
- def marshal_load(ary)
196
- b, left = ary
197
- @last_read = MT19937::STATE_SIZE - left
198
- @state = Array.new(STATE_SIZE)
199
- STATE_SIZE.times do |i|
200
- @state[i] = b & PAD_32_BITS
201
- b >>= 32
202
- end
203
- end
204
-
205
- # Convert an Integer seed of arbitrary size to either a single 32 bit integer, or an Array of 32 bit integers
206
- def self.convert_seed(seed)
207
- seed = seed.abs
208
- long_values = []
209
- begin
210
- long_values << (seed & PAD_32_BITS)
211
- seed >>= 32
212
- end until seed == 0
213
-
214
- long_values.pop if long_values[-1] == 1 && long_values.size > 1 # Done to allow any kind of sequence of integers
215
-
216
- long_values.size > 1 ? long_values : long_values.first
217
- end
218
-
219
- def self.[](seed)
220
- new(convert_seed(seed))
221
- end
222
-
223
- private
224
-
225
- MASK_BY = [1,2,4,8,16]
226
- def mask_32_bits(n)
227
- MASK_BY.each do |shift|
228
- n |= n >> shift
229
- end
230
- n
231
- end
232
- end
233
-
234
- # @private
235
- # Implementation corresponding to the actual Random class of Ruby
236
- # The actual random generator (mersenne twister) is in MT19937.
237
- # Ruby specific conversions are handled in bits_and_bytes.
238
- # The high level stuff (argument checking) is done here.
239
- module Implementation
240
- attr_reader :seed
241
-
242
- def initialize(seed = 0)
243
- super()
244
- seed_rand seed
245
- end
246
-
247
- def seed_rand(new_seed = 0)
248
- new_seed = Backports.coerce_to_int(new_seed)
249
- @seed = nil unless defined?(@seed)
250
- old, @seed = @seed, new_seed.nonzero? || Random.new_seed
251
- @mt = MT19937[ @seed ]
252
- old
253
- end
254
-
255
- def rand(limit = Backports::Undefined)
256
- case limit
257
- when Backports::Undefined
258
- @mt.random_float
259
- when Float
260
- limit * @mt.random_float unless limit <= 0
261
- when Range
262
- _rand_range(limit)
263
- else
264
- limit = Backports.coerce_to_int(limit)
265
- @mt.random_integer(limit) unless limit <= 0
266
- end || raise(ArgumentError, "invalid argument #{limit}")
267
- end
268
-
269
- def bytes(nb)
270
- nb = Backports.coerce_to_int(nb)
271
- raise ArgumentError, "negative size" if nb < 0
272
- @mt.random_bytes(nb)
273
- end
274
-
275
- def ==(other)
276
- other.is_a?(Random) &&
277
- seed == other.seed &&
278
- left == other.send(:left) &&
279
- state == other.send(:state)
280
- end
281
-
282
- def marshal_dump
283
- @mt.marshal_dump << @seed
284
- end
285
-
286
- def marshal_load(ary)
287
- @seed = ary.pop
288
- @mt = MT19937.allocate
289
- @mt.marshal_load(ary)
290
- end
291
-
292
- private
293
-
294
- def state
295
- @mt.state_as_bignum
296
- end
297
-
298
- def left
299
- @mt.left
300
- end
301
-
302
- def _rand_range(limit)
303
- range = limit.end - limit.begin
304
- if (!range.is_a?(Float)) && range.respond_to?(:to_int) && range = Backports.coerce_to_int(range)
305
- range += 1 unless limit.exclude_end?
306
- limit.begin + @mt.random_integer(range) unless range <= 0
307
- elsif range = Backports.coerce_to(range, Float, :to_f)
308
- if range < 0
309
- nil
310
- elsif limit.exclude_end?
311
- limit.begin + @mt.random_float * range unless range <= 0
312
- else
313
- # cheat a bit... this will reduce the nb of random bits
314
- loop do
315
- r = @mt.random_float * range * 1.0001
316
- break limit.begin + r unless r > range
317
- end
318
- end
319
- end
320
- end
321
- end
322
-
323
- def self.new_seed
324
- (2 ** 62) + Kernel.rand(2 ** 62)
325
- end
326
- end
327
-
328
- class Random
329
- include Implementation
330
- class << self
331
- include Implementation
332
- end
333
- end
334
- end
335
- end
336
- end