Commit Graph

2231 Commits

Author SHA1 Message Date
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 477e412ac6
Merge branch 'master' into mock-redesign 2022-04-10 10:18:43 -06:00
Michael Miller 9b2fd7e791
Update Ameba to 1.0 for compatibility with Crystal 1.4.0 2022-04-10 10:18:25 -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 f6f4f9dc1e
Test contexts and memoized values 2022-04-02 15:58:08 -06:00
Michael Miller a6fc2a4917
Test stub modifiers 2022-04-02 12:12:31 -06:00
Michael Miller be1c698836
Test stub location 2022-04-02 12:09:59 -06:00
Michael Miller 873b1abcae
Test null stub 2022-04-02 12:07:50 -06:00
Michael Miller 3299c94359
Test Allow 2022-04-02 12:07:39 -06:00
Michael Miller f1ce914b73
Better stub DSL tests 2022-04-02 12:07:30 -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 f00ea23c47
Rename stubs_spec.cr to stub_spec.cr 2022-03-31 23:07:08 -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 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