Commit graph

142 commits

Author SHA1 Message Date
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
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
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
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
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
Michael Miller
9091b8d027
Literally inject stubs from double block 2022-03-19 12:28:00 -06:00
Michael Miller
f1daecd25f
Initial spec for double DSL 2022-03-19 11:41:29 -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
332ab1cebc
Smarter handling of stub fallback 2022-03-15 22:46:43 -06: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
ea46af00a6
Add method to define stubs 2022-03-12 14:31:19 -07:00
Michael Miller
5b1a5cd49d
Update tests to use new Double usage 2022-03-12 13:54:40 -07:00
Michael Miller
76c1d6a096
Some rework of stubs and doubles 2022-03-12 09:39:32 -07:00
Michael Miller
7c8db07eda
Test ValueStub 2022-03-05 20:57:43 -07:00
Michael Miller
ae14a47329
Rename Response to Stub 2022-03-05 20:09:56 -07:00
Michael Miller
ced98778a4
Document and test MethodCall 2022-03-05 16:15:42 -07:00
Michael Miller
13f185b801
Capture and report arguments in exception message 2022-03-05 16:06:01 -07:00
Michael Miller
75ccda0a86
Test responses on inherited methods 2022-03-05 15:39:35 -07:00
Michael Miller
ac007f8565
Test response constraints 2022-03-05 15:00:11 -07:00
Michael Miller
2adc867843
Initial work on response constraints 2022-03-05 10:41:39 -07:00
Michael Miller
de7cd90d11
Add type capturing arguments 2022-03-04 17:16:45 -07:00
Michael Miller
5644d54470
Support double names 2022-03-03 22:31:40 -07:00
Michael Miller
26deea3d20
Initial work on Double 2022-03-03 22:10:09 -07:00
Michael Miller
9d4a5886e5
Reorganize some specs 2021-10-09 13:39:44 -06:00
Michael Miller
f53ffabf6b
Support label for aggregate_failures block 2021-07-31 12:04:43 -06:00
Michael Miller
4c125d98d4
Implement aggregate_failures 2021-07-31 11:56:53 -06:00
Michael Miller
9a97596b84
Allow named arguments in provided block 2021-07-31 10:15:16 -06:00
Michael Miller
79d6ad93b3
Avoid using subject with structs 2021-02-13 17:33:52 -07:00
Michael Miller
4af23751bc
Add specs for value types 2021-02-13 13:30:05 -07:00
Michael Miller
7d5c9edab7
Use cast as workaround 2021-02-13 11:44:51 -07:00
Michael Miller
35946dc993
Test value types 2021-02-09 22:50:21 -07:00
Michael Miller
7a5f7adfc2
Change Anything to only use case equality 2021-02-09 21:18:20 -07:00
Michael Miller
a20f2d4f98
Test and improve "Anything" 2021-02-09 19:10:11 -07:00