Commit Graph

1690 Commits

Author SHA1 Message Date
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