Michael Miller
1093571fbd
Add more info to stub.to_s
2022-11-04 20:34:52 -06:00
Michael Miller
4906dfae0d
Add short before/after hook name
2022-11-04 16:55:31 -06:00
Michael Miller
4dacaab6dc
Fix missing keyword arguments after splat
2022-10-23 22:36:20 -06:00
Michael Miller
a31ffe3fa3
Fix argument capture
...
Fix issue added by 8959d28b38
2022-10-23 22:04:28 -06:00
Michael Miller
c77da67341
Hide splat label in certain situations
...
Undefined double methods were reporting splat arguments, which is technically correct.
But for output in these cases, it makes more sense to show the exact calling args.
2022-10-23 21:56:37 -06:00
Michael Miller
8959d28b38
Cleaner call capture and logging for missing methods in doubles
2022-10-23 21:54:12 -06:00
Michael Miller
39e4f8e37a
Use build
instead of capture
for none
2022-10-23 21:53:24 -06:00
Michael Miller
e2130d12d3
Implement arguments case equality
...
Implements https://github.com/icy-arctic-fox/spectator/issues/47
Some specs are failing and need to be resolved before the new feature is considered done.
2022-10-23 20:42:08 -06:00
Michael Miller
0177a678f9
Avoid shadowing variable
2022-10-23 20:40:56 -06:00
Michael Miller
a728a037d4
Rename attributes
2022-10-23 15:37:55 -06:00
Michael Miller
163f94287e
Fix Arguments to_s
2022-10-23 15:27:39 -06:00
Michael Miller
e38e3ecc32
Initial rework of arguments to support named positionals
2022-10-23 15:22:50 -06:00
Michael Miller
11e227b29f
Simplify method receiver conditional
2022-10-09 16:24:28 -06:00
Michael Miller
8e83edcc35
Simpler conditional block inclusion
2022-10-09 16:04:07 -06:00
Michael Miller
090c95b162
Ensure stubs defined with allow syntax are cleared
2022-10-09 15:48:00 -06:00
Michael Miller
e9d3f31ac3
Use harness' cleanup instead of defer
2022-10-09 15:32:32 -06:00
Michael Miller
5c910e5a85
Clear stubs defined with expect().to receive()
syntax after test finishes
2022-10-09 13:57:28 -06:00
Michael Miller
25b9931002
Add ability to remove specific stubs
2022-10-09 13:38:29 -06:00
Michael Miller
4dfa5ccb6e
Prevent defining stubs on undefined methods in LazyDouble
...
In Crystal 1.6, a segfault would occur in the spec spec/spectator/mocks/lazy_double_spec.cr:238
I suspect this is a Crystal bug of some kind, but can't reduce it.
The methods produced by `method_missing` don't have a return type including Symbol.
Symbol is excluded from the union of return types (Int32 | String | Nil).
The program segfaults when calling a method on the actual value, which is a symbol.
It ultimately crashes when producing a failure message, which indicates the value it tested doesn't equal the expected value (a symbol of the same value).
Avoid this issue by preventing stubs on undefined/untyped methods.
2022-10-08 14:04:02 -06:00
Michael Miller
ccdf9f124b
Add require statements and namespace Value
...
When defining a matcher outside of the `Spectator` module (custom matcher), `Value(ExpectedType)` can't be resolved.
I suspect this is a Crystal compiler bug, since a derived class should not affect lookups of parent classes like this.
Require statements are added to (hopefully) ensure `Spectator::Value` is defined for the initializer.
Related to https://github.com/icy-arctic-fox/spectator/issues/46
2022-09-03 16:46:17 -06:00
Michael Miller
7549351cce
Match tense of failure block component
2022-08-29 21:13:58 -06:00
Michael Miller
9d6d8de72f
Show error block for forced failure - fail
...
Fixes https://gitlab.com/arctic-fox/spectator/-/issues/78
2022-08-29 20:53:48 -06:00
Michael Miller
027521a7bc
ErrorResultBlock only needs the exception, not an ErrorResult
2022-08-29 18:00:32 -06:00
Michael Miller
b5c61f9003
Change -e
to use partial instead of exact match
...
Fixes https://gitlab.com/arctic-fox/spectator/-/issues/71
Fixes https://github.com/icy-arctic-fox/spectator/issues/45
2022-08-07 15:20:17 -06:00
Michael Miller
17a3ca3ac7
Fix https://gitlab.com/arctic-fox/spectator/-/issues/77
2022-08-07 14:58:09 -06:00
Michael Miller
18e9c1c35d
Workaround issue with Box.unbox causing segfault
...
Using Box.unbox on a nil value with a union type causes:
Invalid memory access (signal 11) at address 0x8
Related Crystal issue: https://github.com/crystal-lang/crystal/issues/11839
Fixes: https://gitlab.com/arctic-fox/spectator/-/issues/76
2022-07-18 19:47:34 -06:00
Michael Miller
7e09016e5c
Add count modifiers for have_received matcher
2022-07-14 20:46:52 -06:00
Michael Miller
827b69483b
Disallow stubs for undefined methods in null double
...
Any method_missing invocation should return self.
2022-07-14 13:37:09 -06:00
Michael Miller
1d58824e6c
Support default stubs for class_double
2022-07-14 13:18:02 -06:00
Michael Miller
e29c732d0f
Add count to ReceiveMatcher
2022-07-13 16:48:38 -06:00
Michael Miller
9efb6c95dd
Workaround compiler bug introduced by aa9ca7a
...
BUG: trying to upcast Nil (Crystal::NilType) <- NoReturn (Crystal::NoReturnType) (Exception)
from /crystal/src/compiler/crystal/codegen/cast.cr:668:5 in 'upcast_distinct'
from /crystal/src/compiler/crystal/codegen/cast.cr:523:15 in 'upcast'
from /crystal/src/compiler/crystal/codegen/codegen.cr:1369:11 in 'accept'
from /crystal/src/compiler/crystal/codegen/codegen.cr:2274:9 in 'visit'
from /crystal/src/compiler/crystal/syntax/visitor.cr:27:12 in 'accept'
...
2022-07-13 15:40:22 -06:00
Michael Miller
aa9ca7a98e
Don't return nil for methods using NoReturn
2022-07-13 12:24:29 -06:00
Michael Miller
14d8c046f0
Workaround absolute path requirement for mock injection
2022-07-13 12:23:28 -06:00
Michael Miller
ac3b322900
Use absolute path for inject_mock
...
This is necessary to override the original type instead of creating a new one within the spec.
2022-07-13 11:29:19 -06:00
Michael Miller
70efa1ad78
Indent multi-line values in failure block output
2022-07-13 11:11:31 -06:00
Michael Miller
181a34a0b3
Display "None" when no methods are called
2022-07-13 10:53:57 -06:00
Michael Miller
754bfd6939
Intercept most exit calls and raise instead
2022-07-12 23:02:20 -06:00
Michael Miller
2e5f822e1d
Remove new
from reserved keywords
...
This effectively allows stubs to be placed on the `new` method for types.
A strange issue arose when the keyword was allowed.
The compiler failed to resolve the Stub type from the Double initializer.
The error trace goes through null_double_spec.cr.
Running just that spec file confirms the issue is there, but running other individual files doesn't produce the error.
As a workaround, I've put the full path of Stub in the initializer.
2022-07-12 22:30:04 -06:00
Michael Miller
fe88eefa86
Add inject_mock to DSL
2022-07-12 22:12:48 -06:00
Michael Miller
99fb47c6e9
Remove redundant block conditionals
2022-07-12 21:46:12 -06:00
Michael Miller
df5a4fa77c
Use tap to modify new mock
...
Without this, mocked structs were not getting their stubs applied.
An unintended side-effect is the tap shows up in recorded calls.
This seems to be harmless, but might need to be revisited.
2022-07-12 21:19:51 -06:00
Michael Miller
0e556c3d55
Clear stubs and recorded calls after example completes
2022-07-12 20:40:27 -06:00
Michael Miller
bb0c85d9ec
Fix possible shadowing of mock
2022-07-12 19:50:04 -06:00
Michael Miller
6e57a1c44a
Allow method calls with unconstrained arguments
...
Workaround for the expect-receive DSL syntax to allow methods to be called without matching arguments.
2022-07-12 19:23:13 -06:00
Michael Miller
c91e288f61
Add initial support for exect-receive syntax
2022-07-12 19:11:44 -06:00
Michael Miller
3d7655a5d1
Add support for any_args in DSL
2022-07-12 19:05:55 -06:00
Michael Miller
4aaa8db5e2
Rename Arguments.empty to Arguments.none
2022-07-12 18:59:23 -06:00
Michael Miller
4b2b37477e
Remove unused methods
2022-07-12 18:04:55 -06:00
Michael Miller
d7ea969f55
Pretify stub and call output
...
Fix some tests.
2022-07-12 17:47:05 -06:00
Michael Miller
00c7141d95
Re-add with
modifier with constraint
...
Fixes `no_args` in DSL.
2022-07-12 10:56:49 -06:00
Michael Miller
694e2e6259
Initial implementation of have_received
2022-07-11 20:25:15 -06:00
Michael Miller
4f46c98a86
Rename with
method to avoid recursive splat and ambiguity
2022-07-11 20:24:51 -06:00
Michael Miller
ecab2dd37e
Upcast to AbstractArguments to avoid instantiating methods
...
This reduced compilation times when using a large amount of Arguments types.
2022-07-10 21:54:25 -06:00
Michael Miller
32a9bfd356
Add no_args
2022-07-10 18:51:58 -06:00
Michael Miller
b9eaefb424
Add docs
2022-07-10 18:33:56 -06:00
Michael Miller
9eb2946be6
Change empty args to reusable readonly instance
2022-07-10 17:51:05 -06:00
Michael Miller
29389f1dbf
Add indexer methods for captured arguments
2022-07-10 17:38:17 -06:00
Michael Miller
4aaed186c3
Add with
stub modifier
2022-07-10 17:31:13 -06:00
Michael Miller
cd177dd2ae
Implement ProcStub
2022-07-10 11:54:51 -06:00
Michael Miller
4d5004ab4f
Add ExceptionStub
2022-07-09 22:12:24 -06:00
Michael Miller
9c705bf888
Add MultiValueStub
2022-07-09 20:52:01 -06:00
Michael Miller
813983de4b
Implement and test DSL for class mocks and doubles
2022-07-07 19:09:18 -06:00
Michael Miller
77096b76e9
Allow StubbedType alongside Stubbable for allow()
2022-07-07 19:01:02 -06:00
Michael Miller
55b2ac9f05
Fix macro for class double name
2022-07-07 19:00:22 -06:00
Michael Miller
70391b2d31
Fix warnings from Crystal 1.5.0 regarding positional parameters
2022-07-07 18:10:21 -06:00
Michael Miller
f7147299ab
Add stub support to class methods on mocks
2022-07-04 20:19:13 -06:00
Michael Miller
c76ead4065
Auto stub class methods
2022-07-04 20:16:07 -06:00
Michael Miller
fb5f44ef10
Add 'new' and 'allocate' to reserved keywords
2022-07-04 20:06:26 -06:00
Michael Miller
22a37d38f9
Don't automatically extend StubbedType
...
Mocked module includes StubbedType, which doesn't pass along functionality to mocks.
2022-07-04 16:43:37 -06:00
Michael Miller
989086c4fc
Add method to clear recorded calls
2022-07-04 15:35:12 -06:00
Michael Miller
056d5892fa
Indicate class double/mock in stubbed name
2022-07-04 15:34:38 -06:00
Michael Miller
cecd2464de
Initial code for StubbedType
2022-07-03 13:40:29 -06:00
Michael Miller
20c9da75a8
Add missing dot after method receiver (self)
2022-06-29 22:02:27 -06:00
Michael Miller
c8ec0ad02a
Record calls on injected mocks
2022-06-28 23:36:24 -06:00
Michael Miller
8aed5027aa
Remove _spectator_calls method with filter
2022-06-28 23:02:46 -06:00
Michael Miller
3589f23475
Store calls to mocks and doubles
2022-06-28 22:54:08 -06:00
Michael Miller
c98edcec5d
Add methods for recording calls to stubs
2022-06-08 08:18:31 -06:00
Michael Miller
cb93f4eee0
Document mock modules
2022-06-04 18:21:08 -06:00
Michael Miller
effad28559
Better compiler error for wrong argument type passed to mock
2022-06-01 22:23:39 -06:00
Michael Miller
3f4216a271
Allow passing default value stubs to mock initialization
2022-06-01 22:04:18 -06:00
Michael Miller
b6083f0e09
Fix passing along mock body
2022-05-28 10:10:20 -06:00
Michael Miller
03754321b5
Fix existing mock DSL macros
...
Initial code for mock DSL.
2022-05-28 09:18:49 -06:00
Michael Miller
5132ce7329
Don't define method body for abstract stub method
...
Test inheriting an abstract class with mocks.
2022-05-24 19:25:22 -06:00
Michael Miller
ddaed636c4
Remove type resolution
...
The `resolve` macro method operates in the scope of `@type`, not where the macro method was called.
This is why types could not be found within the spec.
Change `define_subclass` to `define_subtype` and accept base type keyword.
2022-05-18 20:56:04 -06:00
Michael Miller
4f0e2f6e46
Fix clearing stubs for mocks
...
Prevent reverting initial defaults set by mock macro.
2022-05-15 16:21:05 -06:00
Michael Miller
a39b27387c
Add delete method to clear stubs for a mock
2022-05-15 16:19:55 -06:00
Michael Miller
c98442e0ed
Add functionality to clear stubs
2022-05-15 15:56:32 -06:00
Michael Miller
37c6db250d
Add ValueMockRegistry
...
Support injecting mock functionality into concrete structs (value types).
2022-05-15 12:34:50 -06:00
Michael Miller
ac03bd439b
Address Ameba issues
2022-05-15 11:06:00 -06:00
Michael Miller
1adcf74c3f
Fix stub_type when used on a sub-type
...
previous_def should only be used if the type being stubbed matches the type stub methods are defined in.
Re-enable tests for define_subclass mocking.
2022-05-15 10:59:44 -06:00
Michael Miller
86b49dc20e
Add mock registry fetch method
...
Solves the issue of pre-populating a mock with stubs.
2022-05-15 00:36:29 -06:00
Michael Miller
7923eb3ad0
Fix detection of nullable return type from stubbed method
2022-05-15 00:19:03 -06:00
Michael Miller
380d721fad
Add ReferenceMockRegistry
2022-05-14 23:31:57 -06:00
Michael Miller
0704fd2a48
Adjust evaluation order of change matcher expressions
...
Handles reference types better and matches RSpec more closely.
2022-05-14 23:30:15 -06:00
Michael Miller
739629ef9d
Reintroduce nil type check for stub value cast
2022-04-30 12:10:02 -06:00
Michael Miller
9817b2948e
Add mock inject macro
...
Debugging some type resolution issues.
2022-04-30 11:40:54 -06:00
Michael Miller
95282e7510
Combine type stubbing macros
...
Prevent redefining stubbed methods multiple times.
2022-04-30 11:40:17 -06:00
Michael Miller
8d14be6c67
Move spectator stub retrieval to abstract getter
2022-04-28 23:04:22 -06:00
Michael Miller
978e6c3625
Cleanup and docs
2022-04-28 22:22:07 -06:00
Michael Miller
ad24515d58
Dumb fix for overriding stubbed methods with default in block
2022-04-28 22:11:34 -06:00