Commit graph

1572 commits

Author SHA1 Message Date
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
Michael Miller
9091b8d027
Literally inject stubs from double block 2022-03-19 12:28:00 -06:00
Michael Miller
5a4e95e8a2
Split double macro into def_double and new_double 2022-03-19 11:41:53 -06:00
Michael Miller
4dff018330
Pass along block only if it exists 2022-03-19 11:28:36 -06:00
Michael Miller
a508aeb4a3
Use a shared macro to handle stub type cast 2022-03-17 02:45:50 -06:00
Michael Miller
751ea77172
Add docs explaining how stub macros work 2022-03-17 02:18:32 -06:00
Michael Miller
4f7a4a3453
Avoid issue with TypeCastError message
For some reason, attempting to get the class of the stubbed value causes a segfault.
This appears to get swallowed in some cases.
Trying to inspect the value was difficult without triggering some error.
In the failing case, the value is 42 (returned by a stubbed foo method).
The method is supposed to return a String, and this error checking should be triggered (line 119).
The value is a union, and inspecting the bytes contained in it looks like it's prefixed with the Crystal type ID for Int32.
However it looks like Crystal tries to treat it as a Bool? I'm not sure.
Very weird behavior and instead of wasting more time on it, I'm omitting the returned type from the error.
This type of casting error shouldn't be common.
This seems like a Crystal bug, but I'm having a hard time distilling the issue.
2022-03-16 22:40:24 -06:00
Michael Miller
280f117e23
Use TypedStub instead of ValueStub
Test possible issues around stub returning nil
2022-03-16 21:07:20 -06:00
Michael Miller
8e38d3b054
Add intermediate TypedStub 2022-03-16 21:05:43 -06:00
Michael Miller
dc74a741cf
Bit of method cleanup 2022-03-15 22:55:24 -06:00
Michael Miller
332ab1cebc
Smarter handling of stub fallback 2022-03-15 22:46:43 -06:00
Michael Miller
01fc91e854
Add stubs for primitive methods 2022-03-14 21:53:09 -06:00
Michael Miller
64cd921a7e
Add block arguments and yield 2022-03-12 23:50:30 -07:00
Michael Miller
03aa282512
Don't stub primitive methods 2022-03-12 23:02:55 -07:00
Michael Miller
291b4c75a8
Compiler error if stub defined in a method 2022-03-12 23:02:33 -07:00
Michael Miller
94872a498d
Better string representation of method call 2022-03-12 19:26:18 -07:00
Michael Miller
20087f1c57
Treat any tokens starting with _spectator as reserved 2022-03-12 19:17:38 -07:00
Michael Miller
5ad29f486f
Better formatting for empty arguments 2022-03-12 17:49:07 -07:00
Michael Miller
ca827a3c52
Initial work on null (object) double 2022-03-12 17:07:34 -07:00