Commit Graph

466 Commits

Author SHA1 Message Date
Michael Miller 181a34a0b3
Display "None" when no methods are called 2022-07-13 10:53:57 -06:00
Michael Miller e52f187eb7
Show new mock and double system in README 2022-07-12 23:22:47 -06:00
Michael Miller 754bfd6939
Intercept most exit calls and raise instead 2022-07-12 23:02:20 -06:00
Michael Miller 3c9c7f88be
Reenable test relying on doubles 2022-07-12 22:32:09 -06:00
Michael Miller 2e5f822e1d
Remove `new` from reserved keywords
This effectively allows stubs to be placed on the `new` method for types.
A strange issue arose when the keyword was allowed.
The compiler failed to resolve the Stub type from the Double initializer.
The error trace goes through null_double_spec.cr.
Running just that spec file confirms the issue is there, but running other individual files doesn't produce the error.
As a workaround, I've put the full path of Stub in the initializer.
2022-07-12 22:30:04 -06:00
Michael Miller fe88eefa86
Add inject_mock to DSL 2022-07-12 22:12:48 -06:00
Michael Miller 193a476679
Update known issues to use new mock system 2022-07-12 21:50:45 -06:00
Michael Miller 24eec64d64
Check for leaks on class mocks and doubles 2022-07-12 20:09:18 -06:00
Michael Miller 6e57a1c44a
Allow method calls with unconstrained arguments
Workaround for the expect-receive DSL syntax to allow methods to be called without matching arguments.
2022-07-12 19:23:13 -06:00
Michael Miller c91e288f61
Add initial support for exect-receive syntax 2022-07-12 19:11:44 -06:00
Michael Miller 3d7655a5d1
Add support for any_args in DSL 2022-07-12 19:05:55 -06:00
Michael Miller 4aaa8db5e2
Rename Arguments.empty to Arguments.none 2022-07-12 18:59:23 -06:00
Michael Miller b137a8e742
Test matcher text 2022-07-12 18:04:51 -06:00
Michael Miller d7ea969f55
Pretify stub and call output
Fix some tests.
2022-07-12 17:47:05 -06:00
Michael Miller 36cc035417
Add tests for ReceiveMatcher 2022-07-12 17:19:42 -06:00
Michael Miller 694e2e6259
Initial implementation of `have_received` 2022-07-11 20:25:15 -06:00
Michael Miller 011ca37b50
Reenable pending tests 2022-07-11 02:59:29 -06:00
Michael Miller 32a9bfd356
Add no_args 2022-07-10 18:51:58 -06:00
Michael Miller ae8421c29e
Address Ameba issue 2022-07-10 17:59:49 -06:00
Michael Miller 29389f1dbf
Add indexer methods for captured arguments 2022-07-10 17:38:17 -06:00
Michael Miller 4aaed186c3
Add `with` stub modifier 2022-07-10 17:31:13 -06:00
Michael Miller cd177dd2ae
Implement ProcStub 2022-07-10 11:54:51 -06:00
Michael Miller 4d5004ab4f
Add ExceptionStub 2022-07-09 22:12:24 -06:00
Michael Miller f17cc73487
More multi value stub tests 2022-07-09 21:48:22 -06:00
Michael Miller 9c705bf888
Add MultiValueStub 2022-07-09 20:52:01 -06:00
Michael Miller 813983de4b
Implement and test DSL for class mocks and doubles 2022-07-07 19:09:18 -06:00
Michael Miller ccc8997cca
Test type restricted methods with class mocks 2022-07-07 19:00:07 -06:00
Michael Miller f7147299ab
Add stub support to class methods on mocks 2022-07-04 20:19:13 -06:00
Michael Miller aa87d124e4
Test class method stubs 2022-07-04 16:14:56 -06:00
Michael Miller cecd2464de
Initial code for StubbedType 2022-07-03 13:40:29 -06:00
Michael Miller c8ec0ad02a
Record calls on injected mocks 2022-06-28 23:36:24 -06:00
Michael Miller 8aed5027aa
Remove _spectator_calls method with filter 2022-06-28 23:02:46 -06:00
Michael Miller 3589f23475
Store calls to mocks and doubles 2022-06-28 22:54:08 -06:00
Michael Miller c70e4792af
Rename _spectator_calls to _spectator_invocations 2022-06-08 08:18:16 -06:00
Michael Miller 96c7c84275
Test mocked structs 2022-06-01 23:37:54 -06:00
Michael Miller d289cbff29
Add tests for abstract class mock 2022-06-01 23:13:16 -06:00
Michael Miller 0a710c831a
Test context handling with mocks 2022-06-01 22:23:49 -06:00
Michael Miller 8fbcbe8b73
Test mock scope 2022-06-01 22:11:32 -06:00
Michael Miller 3f4216a271
Allow passing default value stubs to mock initialization 2022-06-01 22:04:18 -06:00
Michael Miller 225553127d
More mock tests 2022-06-01 17:56:09 -06:00
Michael Miller 934c92aed1
More mock DSL tests 2022-05-29 00:28:38 -06:00
Michael Miller 03754321b5
Fix existing mock DSL macros
Initial code for mock DSL.
2022-05-28 09:18:49 -06:00
Michael Miller 6060b3cd10
Test type restrictions and ensure original methods aren't called 2022-05-28 09:18:03 -06:00
Michael Miller fa89fa5550
Remove problematic test and use be_a 2022-05-27 21:45:01 -06:00
Michael Miller 959139b1ee
Use be_a instead of be_lt for types
Remove problematic `be_lt(::Reference)`
This appears to drastically increase compilation time and resources.
2022-05-25 18:00:42 -06:00
Michael Miller d7c1c675ff
Add missing require for spec_helper 2022-05-25 17:28:11 -06:00
Michael Miller 670dd7f062
Run smoke test for nightly 2022-05-25 17:20:57 -06:00
Michael Miller d0e5f6ca35
Workaround struct pass by value with `let` 2022-05-24 19:41:16 -06:00
Michael Miller 1f6417bca5
Skip test producing Crystal compiler bug 2022-05-24 19:40:48 -06:00
Michael Miller 9f5b5d8576
Add tests for mock of abstract struct
Compilation causes a compiler bug in 1.4.1
BUG: {{ @type > T }} (Crystal::MacroExpression) at /usr/share/crystal/src/class.cr:89:5 should have been expanded (Exception)
2022-05-24 19:30:42 -06:00
Michael Miller be69018591
Test that a class is defined 2022-05-24 19:29:42 -06:00
Michael Miller 5132ce7329
Don't define method body for abstract stub method
Test inheriting an abstract class with mocks.
2022-05-24 19:25:22 -06:00
Michael Miller ddaed636c4
Remove type resolution
The `resolve` macro method operates in the scope of `@type`, not where the macro method was called.
This is why types could not be found within the spec.
Change `define_subclass` to `define_subtype` and accept base type keyword.
2022-05-18 20:56:04 -06:00
Michael Miller a39b27387c
Add delete method to clear stubs for a mock 2022-05-15 16:19:55 -06:00
Michael Miller 847fd38534
Test mock names 2022-05-15 15:59:08 -06:00
Michael Miller c98442e0ed
Add functionality to clear stubs 2022-05-15 15:56:32 -06:00
Michael Miller fdac99d122
Rename thing to mock 2022-05-15 13:44:45 -06:00
Michael Miller 37c6db250d
Add ValueMockRegistry
Support injecting mock functionality into concrete structs (value types).
2022-05-15 12:34:50 -06:00
Michael Miller 51f133eb61
Ensure mocking doesn't change the memory
This can be important for serialization.
Cleanup names.
2022-05-15 11:27:58 -06:00
Michael Miller ac03bd439b
Address Ameba issues 2022-05-15 11:06:00 -06:00
Michael Miller 1adcf74c3f
Fix stub_type when used on a sub-type
previous_def should only be used if the type being stubbed matches the type stub methods are defined in.
Re-enable tests for define_subclass mocking.
2022-05-15 10:59:44 -06:00
Michael Miller 86b49dc20e
Add mock registry fetch method
Solves the issue of pre-populating a mock with stubs.
2022-05-15 00:36:29 -06:00
Michael Miller 380d721fad
Add ReferenceMockRegistry 2022-05-14 23:31:57 -06:00
Michael Miller 0704fd2a48
Adjust evaluation order of change matcher expressions
Handles reference types better and matches RSpec more closely.
2022-05-14 23:30:15 -06:00
Michael Miller 9817b2948e
Add mock inject macro
Debugging some type resolution issues.
2022-04-30 11:40:54 -06:00
Michael Miller d74bc76687
Verify that initial stubs can be overridden 2022-04-28 22:32:34 -06:00
Michael Miller 3961662bf6
Experimental mock functionality 2022-04-10 20:01:54 -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 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 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 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 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 ef64fa466b
Avoid type cast issues 2022-03-30 20:44:43 -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 1199379833
Various fixes 2022-03-26 00:12:37 -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 5aceaf7d8c
Comment out problematic casts
Specs compile again.
2022-03-22 22:13:59 -06:00
Michael Miller 0b6e44c227
Fix types of arguments given to common object methods 2022-03-20 15:39:19 -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 bed84b315d
Add lazy double 2022-03-19 19:32:41 -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 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 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 3fa6baea4d
Test mixing block and keyword stubs 2022-03-19 12:52:23 -06:00