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