Commit graph

303 commits

Author SHA1 Message Date
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
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
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
Michael Miller
12eeb02a8d
Move method redefinition for stub to Stubable
Require stub or raise UnexpectedMessage for all double methods.
Expose abstract_stub macro to require a stub.
2022-03-12 11:11:22 -07:00
Michael Miller
9b94245bd8
Stub's type might not match return type (subclass or union) 2022-03-12 11:08:58 -07:00
Michael Miller
d891422b3a
Don't need to recreate method by hand 2022-03-12 11:08:29 -07:00
Michael Miller
76c1d6a096
Some rework of stubs and doubles 2022-03-12 09:39:32 -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
d16c55984c
Fixup macros 2022-03-05 15:39:19 -07:00
Michael Miller
2e15686d2d
Use internal arg name 2022-03-05 12:31:00 -07:00
Michael Miller
ec57105afd
Support response constraints
Reduce union expansion by casting at key points.
2022-03-05 12:21:31 -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
d7f8c2b958
Cleanup and document double 2022-03-03 23:12:35 -07:00
Michael Miller
7e65d94cee
Match RSpec double name string 2022-03-03 22:41:18 -07:00
Michael Miller
9594604770
Obscure and disallow double name method 2022-03-03 22:34:57 -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
d6112bd2dd
Rip out mocks 2022-01-26 12:41:41 -07:00
Michael Miller
f1f1659836
Fix adding stubs to class methods on mocked types 2021-10-11 23:03:50 -06:00
Michael Miller
5692a77a1b
Update naming from partial to target 2021-10-11 23:03:12 -06:00
Michael Miller
36354082c7
Pass arguments to original/fallback for stubbed top-level methods
Addresses https://github.com/icy-arctic-fox/spectator/issues/36
2021-09-28 19:02:42 -06:00
Michael Miller
6c55301d0b
Merge remote-tracking branch 'origin/master' into release/0.10 2021-07-11 00:16:25 -06:00
Michael Miller
4d030fb85a
Fix no_args being passed incorrectly 2021-07-10 22:43:54 -06:00
Michael Miller
d9bb8e33fe
Fix finding stubs on types (static methods) 2021-07-10 22:41:10 -06:00
Michael Miller
23fd075d51
Add stub when using expect().to receive()
This appears to match RSpec's behavior.
2021-07-10 20:28:51 -06:00
Michael Miller
384fb3093f
Allow stubs returning nil to be used on NoReturn calls 2021-07-10 20:19:10 -06:00
Michael Miller
e47ae613a5
Check for and allow expected exits 2021-07-10 19:27:01 -06:00
Michael Miller
294bd61a25
Don't force top-level namespace 2021-07-10 14:17:14 -06:00
Michael Miller
b07e13aeb4
Remove custom handling of NoReturn 2021-07-10 13:57:23 -06:00
Michael Miller
a395e26bae
Revert "Fix methods not being stubbed with expect().to receive syntax"
This reverts commit 1c865d1f4b.
2021-07-10 13:21:21 -06:00
Michael Miller
06f9f380c9
Workaround for stubbing NoReturn method with Nil
Fixes spec/issues/github_issue_29_spec.cr:15
2021-07-10 12:54:09 -06:00
Michael Miller
82f26dbb91
Don't return nil for NoReturn stubs
Raise instead, which prevents making the method's return type nilable.
2021-07-08 11:36:07 -06:00
Michael Miller
6a01ab3531
Merge master into release/0.10 2021-07-05 11:32:45 -06:00
Michael Miller
92dbfc2a8e
Avoid calling NoReturn methods 2021-07-02 21:52:56 -06:00
Michael Miller
1c865d1f4b
Fix methods not being stubbed with expect().to receive syntax 2021-07-02 21:45:16 -06:00
Michael Miller
83ab5f56f0
Use previous_def if method was defined in class 2021-07-02 21:01:41 -06:00
Michael Miller
e3f6fb3c7c
Add no_args support for stubs
Fixes https://github.com/icy-arctic-fox/spectator/issues/28
2021-07-02 18:43:39 -06:00
Michael Miller
e30d5c1981
Use multiple << on a single line 2021-05-30 14:21:42 -06:00
Michael Miller
74b78b7ca8
Rename Source to Location 2021-02-12 22:46:22 -07:00
Michael Miller
0f44403053
Fix namespaces preventing structs from being mocked 2021-01-30 21:11:51 -07:00
Michael Miller
b07dca697e
Remove seemingly unused context stubs code 2021-01-30 17:27:17 -07:00
Michael Miller
4500ebcddc
Update old references to Value and Block 2021-01-16 11:02:29 -07:00
Michael Miller
b91103b40a
Handle case where block is provided with return type 2020-11-07 11:04:03 -07:00
Michael Miller
8966c0976b
Allow manual specification of return type 2020-11-07 10:56:33 -07:00
Michael Miller
9ac6121201
New stub syntax to support operator methods
Works like:
  stub :[], index : Int32 { 42 }

Addresses https://github.com/icy-arctic-fox/spectator/issues/14
2020-10-01 18:23:28 -06:00
Michael Miller
e68697a212
Fix stubbed yielding method calling original instead of stub 2020-09-27 10:30:51 -06:00
Michael Miller
0970f02465
Yield instead of forwarding block
Forwarding the block like this captures it, which prevents yield from 
being used.
Addresses https://gitlab.com/arctic-fox/spectator/-/issues/54
2020-09-27 10:14:30 -06:00
Michael Miller
e2c2ebafd3 No need to specify arguments to super and previous_def 2020-04-28 08:30:40 -06:00
Michael Miller
68bac59cab Hacky solution for https://gitlab.com/arctic-fox/spectator/-/issues/44
Don't use a proc stub, which doesn't support arguments.
2020-03-28 11:41:49 -06:00
Chris Watson
e53b1167b3 Make sure superclass isn't nil 2020-03-20 16:34:37 +00:00
Michael Miller
e343a97f37 Don't use a splat here 2020-03-07 17:05:52 -07:00
Michael Miller
2aba67edae Fix idiosyncrasies around class method stubs
The new method misbehaves here.
It always appeared as defined, even though it isn't explicitly defined 
in the class.
2020-02-14 18:14:32 -07:00
Michael Miller
a7db9ff0bb Don't force previous_def on class methods 2020-02-10 17:46:36 -07:00
Michael Miller
061028782b Workaround for what seems to be a Crystal macro bug
The syntax:
stub instance.==(other) { true }
effectively becomes:
stub instance.==(other { true })
2020-01-01 21:48:58 -07:00
Michael Miller
8ccc08b472 Fix reflection (verify double) on self arg type
There is still an issue with using _ for a placeholder.
2019-12-13 20:25:18 -07:00
Michael Miller
16625cf495 Registry#expect takes a stub 2019-12-13 19:56:43 -07:00
Michael Miller
a38625f8a7 Remove GenericMethodCall
This type isn't needed. MethodCall is suitable after moving arguments to
it.
2019-12-13 19:54:06 -07:00
Michael Miller
a6aa00eb38 Fix double default stub with type 2019-12-13 19:17:08 -07:00
Michael Miller
4c9bbbe07b Formatting 2019-12-08 15:11:23 -07:00
Michael Miller
0ae5cdc9ae Remove debug 2019-12-08 15:11:08 -07:00
Michael Miller
1a30a56f2a Better stringified call 2019-12-08 15:10:49 -07:00
Michael Miller
91696d490f Check if underlying type responds to method 2019-12-08 15:08:13 -07:00
Michael Miller
067c789019 Initial work on type reflection for verifying doubles 2019-12-08 14:52:54 -07:00
Michael Miller
07ce835724 VerifyingDouble should be abstract 2019-12-08 14:51:48 -07:00
Michael Miller
8b0f509689 Detect when to use a verifying double 2019-12-08 11:37:08 -07:00
Michael Miller
8197a82ace Expect stubs not method names
Needed for argument syntax:
`expect(dbl).to receive(:foo).with(:bar)`
2019-11-29 09:25:58 -07:00
Michael Miller
c710961be1 Fix returned type inferred to NoReturn 2019-11-29 08:53:36 -07:00
Michael Miller
5d84536e1e Implement and_call_original 2019-11-20 19:17:51 -07:00
Michael Miller
f8563e86c7 Pass along original block 2019-11-20 16:29:06 -07:00
Michael Miller
2dee50f19e Pass original (and type constraint) to stub via block 2019-11-20 15:43:45 -07:00
Michael Miller
51a47fec98 Remove unused RT parameter 2019-11-20 15:05:04 -07:00
Michael Miller
27acf7bced Allow receive block syntax 2019-11-19 17:28:00 -07:00
Michael Miller
b062472d98 Revert "Initial support for and_yield"
This reverts commit e49bd0d57a.

Removing support for stubbed yield.
Attempting to yield with different a different arity or argument types causes compilation errors.
I don't see any easy fix for this.
I would rather have no yield support than broken support.
2019-11-17 13:30:09 -07:00
Michael Miller
e49bd0d57a Initial support for and_yield 2019-11-17 13:12:39 -07:00
Michael Miller
b896a7f1d5 Implement stub that raises 2019-11-17 12:53:18 -07:00
Michael Miller
6e287f864b Implement returning multiple values 2019-11-17 12:26:02 -07:00
Michael Miller
5da231a5e8 Check expectations for anonymous double 2019-11-17 10:14:03 -07:00
Michael Miller
ac9b3ad1fe Implement expect_any_instance_of 2019-11-16 21:27:18 -07:00
Michael Miller
201fe614d1 Expect messages on double, but don't stub them 2019-11-16 10:59:13 -07:00
Michael Miller
186fa15a1a Add method to check for stub 2019-11-16 10:06:11 -07:00
Michael Miller
72e4ac8fe9 Remove unnecessary free variables 2019-11-16 08:17:46 -07:00
Michael Miller
3c94d1f8fd Workaround for generic argument type issue 2019-11-15 21:18:51 -07:00
Michael Miller
98bfed2f83 Expose name and source 2019-11-14 19:17:55 -07:00
Michael Miller
ac3a5c8515 Store GenericArguments 2019-11-14 19:15:51 -07:00
Michael Miller
b40abe8057 Fix GenericArguments#to_s 2019-11-14 18:06:20 -07:00
Michael Miller
acad88204a Fix issues with creating anonymous null doubles 2019-11-14 17:55:56 -07:00
Michael Miller
e44f0229d6 Allow stubbing/overriding anonymous double methods 2019-11-14 17:12:27 -07:00
Michael Miller
b9fe1b6a60 Initial code to support anonymous doubles 2019-11-12 21:55:16 -07:00
Michael Miller
b0562981f7 Change double name to string 2019-11-12 21:54:55 -07:00
Michael Miller
94e210c306 Implement null doubles 2019-11-11 23:40:08 -07:00
Michael Miller
48ea53c2f5 Formatting 2019-11-11 23:30:36 -07:00
Michael Miller
c3cba6962c Get stubs on class methods (self.) working 2019-11-11 23:30:30 -07:00
Michael Miller
20f68e956d Add receive_messages macro to stub multiple methods 2019-11-11 22:27:53 -07:00
Michael Miller
73e3f8fd66 Raise on non-defined methods 2019-11-11 22:11:58 -07:00
Michael Miller
925af7908b Raise UnexpectedMessageError 2019-11-11 22:08:36 -07:00
Michael Miller
96aae8f6d5 Use harness variable 2019-11-10 13:49:10 -07:00
Michael Miller
6c0693f2a4 Add default stubs from parent contexts 2019-11-10 13:22:18 -07:00
Michael Miller
d2e27d1e6e Pass test context to registry 2019-11-10 13:08:43 -07:00
Michael Miller
4fea5ea435 Add ability to define default stub for mocks 2019-11-10 12:49:36 -07:00
Michael Miller
14876a8e9a Add default stubs to TestContext
Pass default stubs into mocks registry on example startup.
2019-11-10 12:35:03 -07:00
Michael Miller
a2b72eaa36 Implement allow_any_instance_of 2019-11-10 09:46:23 -07:00
Michael Miller
f816a64770 Resolve issue with harness trying to be used outside of test 2019-11-10 07:27:59 -07:00
Michael Miller
11ea7bf2ce Move mock containment to harness 2019-11-09 23:22:21 -07:00
Michael Miller
e4aae1f60a Change Registry to a class 2019-11-09 23:05:22 -07:00
Michael Miller
e0d12e9d0d Use class name instead of hash of type
Hash of type could collide, though unlikely.
2019-11-09 22:32:49 -07:00
Michael Miller
0471794814 Store stubs in reverse order 2019-11-09 22:13:02 -07:00
Michael Miller
17695d35cf Fix cast to nil when nil is expected
Resolves `TypeCastError: The return type of stub #... : Nil at ...:##
doesn't match the expected type Nil`
2019-11-09 21:30:59 -07:00
Michael Miller
e9f7e65ac9 Add mock registry prep 2019-11-09 10:49:29 -07:00
Michael Miller
74eb4fc11a Reset stubs after each test 2019-11-09 10:39:02 -07:00
Michael Miller
c03808dfce Handle super vs previous_def 2019-11-09 09:45:57 -07:00
Michael Miller
48363951c2 Update receive matchers to use registry 2019-11-09 09:23:01 -07:00
Michael Miller
9e8286f892 Move double info to registry 2019-11-09 09:18:34 -07:00
Michael Miller
5a072301af Don't require registration 2019-11-09 09:15:41 -07:00
Michael Miller
fc0b46caca Use Registry for storing stubs 2019-11-09 09:08:09 -07:00
Michael Miller
8262bb0316 Rename OpenMock to Allow 2019-11-09 09:05:17 -07:00
Michael Miller
0698ed655d Switch to using Registry for mocks and fix various issues 2019-11-09 09:03:36 -07:00
Michael Miller
875333cffe Initial mock registry code 2019-11-06 21:02:24 -07:00
Michael Miller
cf8e028bd9 Some updates to mocks
Not working correctly for some cases, specifically String.
The default stub can seriously mess up Crystal internals.
It looks like the stubs and spy information will need to be kept outside 
the instance.
2019-11-03 15:07:25 -07:00
Michael Miller
e3b9cef221 Remove type restriction
Not sure if this will blow up the type resolution, but seems to fix 
argument comparison from recorded calls.
2019-11-03 14:49:10 -07:00
Michael Miller
b107511c9e Include stub source in to_s 2019-11-03 13:13:54 -07:00
Michael Miller
59884f253f Better handling of casting with covariance and contravariance 2019-11-03 13:04:44 -07:00
Michael Miller
2a484d5816 Fix return type 2019-11-03 12:07:21 -07:00
Michael Miller
f1a7018718 Remove unnecessary initializer 2019-11-03 12:05:26 -07:00
Michael Miller
9294599440 Basic to_s for stubs 2019-11-03 11:59:12 -07:00
Michael Miller
d1b54ad48f Better error for when stubs don't match return type 2019-11-03 11:56:04 -07:00
Michael Miller
e6c1a6b2d2 Fix arg passing and implement arg matching 2019-11-03 11:42:31 -07:00
Michael Miller
1756670710 Add to_s method 2019-11-03 11:42:07 -07:00
Michael Miller
477271d297 Use NilMethodStub by default
Provides one place that #with can be defined and enforces ordering.
2019-11-03 11:23:04 -07:00
Michael Miller
af9104dfe4 Store arguments in method stub
Needed for matching arguments (setting constraints).
2019-11-03 11:18:46 -07:00
Michael Miller
cab9366fe8 Merge branch 'dev/mocks-and-doubles' of gitlab.com:arctic-fox/spectator into dev/mocks-and-doubles 2019-11-03 10:07:11 -07:00
Michael Miller
5b143cb72c Change structure around 2019-11-03 10:02:53 -07:00
Michael Miller
c95e228bde Move mocks to their own module 2019-11-03 09:44:32 -07:00