Commit Graph

1956 Commits

Author SHA1 Message Date
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 7896a3496d
Remove unused objects 2022-03-30 21:11:38 -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 b3f98cd50c
Add return type annotation
Required for type resolution.
2022-03-30 20:51:38 -06:00
Michael Miller f1a68fee8c
Typo 2022-03-30 20:46:53 -06:00
Michael Miller ef64fa466b
Avoid type cast issues 2022-03-30 20:44:43 -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 a8e55e32d2
Works now due to lazy doubles 2022-03-30 19:13:14 -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 28ae03d56f
Remove expect_null_double
Workaround no longer needed.
2022-03-25 22:45:13 -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 5aceaf7d8c
Comment out problematic casts
Specs compile again.
2022-03-22 22:13:59 -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 0b6e44c227
Fix types of arguments given to common object methods 2022-03-20 15:39:19 -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 c9f91299fe
Merge branch 'master' into mock-redesign 2022-03-19 23:01:52 -06:00
Michael Miller 419e7c1b8d
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 23:00:32 -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 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