Commit Graph

1919 Commits

Author SHA1 Message Date
Michael Miller 162ad4df33
Report call and args like other error messages 2022-03-19 18:58:06 -06:00
Michael Miller 1657d3577d
Fix test of double name 2022-03-19 18:57:39 -06:00
Michael Miller b3fa2e3bfe
Address Ameba issues 2022-03-19 17:22:13 -06:00
Michael Miller b83c6b7b1e
Remove or skip mock, double, and stub tests 2022-03-19 17:20:15 -06:00
Michael Miller 0c7f72dc78
Test handling of blocks in doubles 2022-03-19 17:04:51 -06:00
Michael Miller 043ebd818f
Fix argument order 2022-03-19 16:42:14 -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 5d21e4bb71
Remove double_dsl_spec 2022-03-19 14:27:00 -06:00
Michael Miller 70787ce2d4
Extend NullDouble from Double 2022-03-19 13:00:42 -06:00
Michael Miller 3fa6baea4d
Test mixing block and keyword stubs 2022-03-19 12:52:23 -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 f1daecd25f
Initial spec for double DSL 2022-03-19 11:41:29 -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 b68c75dda5
Add tests around problematic issues in NullDouble to Double 2022-03-16 21:10:47 -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
Michael Miller 1e7e31ff97
Use true instead of false
It's more obvious the stub worked when same? reports true for different objects.
2022-03-12 15:52:48 -07:00
Michael Miller f82719746d
Stubable -> Stubbable 2022-03-12 15:45:48 -07:00
Michael Miller 7931847164
Cleanup and docs 2022-03-12 15:43:12 -07:00
Michael Miller 151926fd25
Fix captured arguments not handling splat 2022-03-12 14:31:39 -07:00
Michael Miller ea46af00a6
Add method to define stubs 2022-03-12 14:31:19 -07:00
Michael Miller 123dd0efca
Obscure parameters to avoid accidental usage 2022-03-12 13:58:20 -07:00
Michael Miller 5b1a5cd49d
Update tests to use new Double usage 2022-03-12 13:54:40 -07:00
Michael Miller c8864b169e
Quick def methods should accept any args 2022-03-12 13:51:58 -07:00
Michael Miller f497aeb79d
Fix redefinition of method with splat argument 2022-03-12 13:15:26 -07:00
Michael Miller c1a14d1ad2
Add logging 2022-03-12 12:59:44 -07:00
Michael Miller 59f966d0e0
Fix missing double name
Rename internal method to _spectator_stubbed_name.
This is a better name for mocks and doubles.
Improve some handling around stubbed name.
2022-03-12 12:17:27 -07:00
Michael Miller 56f1c77a6c
Move method masking macro to Stubable
Rename to stub_all.
2022-03-12 11:56:54 -07:00
Michael Miller 85cc28c499
Utility method to define a method and a stub override 2022-03-12 11:41:47 -07:00
Michael Miller 8de457d80c
Handle previous_def and super - don't redefine method 2022-03-12 11:34:35 -07:00
Michael Miller 554e215898
Prevent ugly "has no type" errors 2022-03-12 11:33:56 -07:00