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
Michael Miller
307c679609
Rework stubbing type hierarchy
...
No longer need to "inject" stubs for new methods.
No weird lookup of super/previous_def.
Handle visibility modifier of def.
2022-04-28 22:07:12 -06:00
Michael Miller
8f5f3becb4
Some initial rework of stub macros
2022-04-16 23:37:00 -06:00
Michael Miller
0758c19a86
Remove need for nillable argument to cast macro
...
The `class` method cannot be stubbed as this causes the cast (via `as`) to fail at compile-time.
2022-04-16 16:33:37 -06:00
Michael Miller
23d2c014b4
Implement fallback for methods without a stub
2022-04-15 17:27:30 -06:00
Michael Miller
6f04e0b9da
Allow uninteresting messages through mocks
...
If they are stubbed, but don't match arguments, raise an error.
2022-04-15 17:17:34 -06:00
Michael Miller
4b21c9e6c1
Introduce _spectator_stub_for_method? utility method
2022-04-15 17:16:49 -06:00
Michael Miller
3961662bf6
Experimental mock functionality
2022-04-10 20:01:54 -06:00
Michael Miller
b0e27c69e8
Fix equality check
2022-04-10 15:24:45 -06:00
Michael Miller
e8bac86017
Ensure Stubbable can have stubs defined
...
Require implementation of _spectator_define_stub.
2022-04-10 11:11:36 -06:00
Michael Miller
0ad1ec11f3
Initial macros for defining and initializing mocks
2022-04-02 18:43:13 -06:00
Michael Miller
d97a62e601
Rename constant DOUBLES to TYPES
...
Will use for doubles and mocks.
2022-04-02 17:58:15 -06:00
Michael Miller
519836147e
Restructure stub modifiers
2022-04-02 10:50:27 -06:00
Michael Miller
318e4f3707
Store location information in stub
...
Allows tracking where a stub was originally defined.
2022-04-02 10:39:59 -06:00
Michael Miller
e61b31e47b
Add docs for allow and receive
2022-04-02 10:25:27 -06:00
Michael Miller
17592287ad
Replace stub value method with call method
...
Pass method call information to stub.
2022-03-31 23:07:55 -06:00
Michael Miller
2131967ba6
Workaround Crystal compiler bug
2022-03-31 22:54:03 -06:00
Michael Miller
e05ef94ef5
Initial work on stub DSL - found bug in Crystal compiler
...
```
Module validation failed: Invalid bitcast
%4 = bitcast i32* %3 to %"(Spectator::Arguments(T, NT) | Nil)", !dbg !16
(Exception)
from /crystal/src/int.cr:541:9 in 'finish'
from /crystal/src/compiler/crystal/codegen/codegen.cr:71:7 in 'codegen'
from /crystal/src/compiler/crystal/compiler.cr:173:16 in 'compile'
from /crystal/src/compiler/crystal/command/spec.cr:98:14 in 'spec'
from /crystal/src/hash.cr:901:11 in '__crystal_main'
from /crystal/src/crystal/main.cr:115:5 in 'main'
from src/env/__libc_start_main.c:94:2 in 'libc_start_main_stage2'
Error: you've found a bug in the Crystal compiler. ...
```
I haven't been able to reproduce this in a simplified form.
Passing the `constraint` argument in NullStub#and_return to ValueStub.new triggers the bug.
Removing the `constraint` argument fixes the issue.
2022-03-31 22:49:45 -06:00
Michael Miller
003be48591
Use responds_to? to ensure stub is cast correctly
2022-03-31 22:39:21 -06:00
Michael Miller
9c1357da3f
Allow passing predefined stubs in as keyword args
2022-03-31 18:55:12 -06:00
Michael Miller
c1195ef687
Simplify macro eval by returning a lazy double
2022-03-31 18:54:39 -06:00
Michael Miller
914def05e1
Add docs
2022-03-31 18:51:28 -06:00
Michael Miller
231323bbf1
Add return type restriction
...
This overrides the previous definition which doesn't have a restriction.
This is a workaround for the inability to infer a stub's return type.
2022-03-30 21:10:36 -06:00
Michael Miller
f1a68fee8c
Typo
2022-03-30 20:46:53 -06:00
Michael Miller
39f5ea34eb
Another place that needs a cast
2022-03-30 20:33:19 -06:00
Michael Miller
613c969fbb
Match RSpec behavior
2022-03-30 20:28:36 -06:00
Michael Miller
1327d74040
Fix handling of stubs with the same name
2022-03-26 00:13:24 -06:00
Michael Miller
1199379833
Various fixes
2022-03-26 00:12:37 -06:00
Michael Miller
bbaa8816b8
Weird segfault when inspecting value type is back.
...
Working around with a crude rescue block.
2022-03-25 23:54:44 -06:00
Michael Miller
b28437ccc4
Match RSpec behavior
2022-03-25 22:32:27 -06:00
Michael Miller
28488d308e
Don't invoke fallback if there are stubs for the method
2022-03-25 22:30:39 -06:00
Michael Miller
fc51c1d730
More logging
2022-03-24 02:39:15 -06:00
Michael Miller
b97a367be7
Method return type restriction takes precedence over original return type
...
Raise TypeCastError on ambiguous stub values.
2022-03-24 02:01:25 -06:00
Michael Miller
7dd2cffa8e
Inspecting the value's class seems to work now
2022-03-22 22:13:02 -06:00
Michael Miller
d6fcf128ba
Temporarily disable returning un-cast value
2022-03-22 22:11:34 -06:00
Michael Miller
78dea01abe
Manual method existence check
2022-03-20 21:49:21 -06:00
Michael Miller
0fb7be6722
Use stub instead of abstract_stub by default for stub_all
...
RSpec doesn't appear to raise unexpected message errors for standard object methods (like to_s).
There are also a lot of issues that arise when requiring a stub on common methods.
2022-03-20 15:38:26 -06:00
Michael Miller
e209fe3eb5
Use Box for Wrapper implementation
...
This won't raise on invalid casts.
It should reduce the amount of instantiated types and methods.
2022-03-19 22:53:50 -06:00
Michael Miller
18a03b02fe
Include reserved
2022-03-19 22:36:25 -06:00
Michael Miller
03a031ad38
Use absolute path to RESERVED_KEYWORDS
2022-03-19 22:00:12 -06:00
Michael Miller
b23a567ee3
Add require statements
2022-03-19 21:56:58 -06:00
Michael Miller
04cf211f24
Move reserved keywords to a separate file
...
Add finalize as a reserved keyword.
2022-03-19 21:56:18 -06:00
Michael Miller
04f3614ff7
Workaround issue with value
not being found
...
For some reason the `value` method isn't found.
Event casting to TypedStub doesn't work.
2022-03-19 20:00:50 -06:00
Michael Miller
bed84b315d
Add lazy double
2022-03-19 19:32:41 -06:00
Michael Miller
162ad4df33
Report call and args like other error messages
2022-03-19 18:58:06 -06:00
Michael Miller
b3fa2e3bfe
Address Ameba issues
2022-03-19 17:22:13 -06:00
Michael Miller
2f1999b377
Fix call expansion in debug log
...
Macro expansion somehow generated an error when calling a missing method with a block.
```
syntax error in :1
Error: unknown token: 'n'
```
It seems like 'n' is from the '\n' that was previously generated:
```
Log.debug { "Got undefined method " + "baz do\n yield\nend" }
```
2022-03-19 16:32:25 -06:00
Michael Miller
17e97cb39a
Explode method expansion
...
Somewhere along the way the block argument gets dropped.
Even though `method` is a `Def` that accepts a block, the `&block` portion is dropped.
Possible Crystal compiler bug.
2022-03-19 16:13:11 -06:00
Michael Miller
15dd2ea6f1
Inject stubbable method that accepts a block
2022-03-19 16:09:35 -06:00
Michael Miller
99aa8afdce
Add as_null_object method
2022-03-19 14:41:45 -06:00
Michael Miller
70787ce2d4
Extend NullDouble from Double
2022-03-19 13:00:42 -06:00
Michael Miller
d40040c8ee
Remove extra block body leftover from debug
...
Update docs to show example of default method implementation.
2022-03-19 12:37:46 -06:00
Michael Miller
25f546245a
Handle injecting stubbed abstract method
2022-03-19 12:33:09 -06:00