Commit graph

578 commits

Author SHA1 Message Date
Michael Miller
0b06e72f7e Simplify method chains by using #compact_map 2019-02-17 13:40:10 -07:00
Michael Miller
3a508cae26 Update Report class to not use result predicates 2019-02-17 13:36:10 -07:00
Michael Miller
8dd8db74b9 Remove predicate methods from Result types 2019-02-17 13:15:40 -07:00
Michael Miller
ed01a95e67 Replace source file and line with source struct 2019-02-17 12:40:16 -07:00
Michael Miller
dc66b184e2 Add source class 2019-02-17 12:25:23 -07:00
Michael Miller
04bccd162e Use @io instead of STDOUT 2019-02-15 23:10:08 -07:00
Michael Miller
49175e56ac Initial code for summary output 2019-02-15 23:05:48 -07:00
Michael Miller
e8ca350152 Allow output to be printed to other streams 2019-02-15 22:12:18 -07:00
Michael Miller
2012db85c5 Initial code for refactoring formatters 2019-02-15 22:09:53 -07:00
Michael Miller
ac5c2bbe47 Reorder source arguments and simplify 2019-02-14 16:19:49 -07:00
Michael Miller
61e92951ae Add source file and line number to expectations 2019-02-14 16:04:09 -07:00
Michael Miller
5913a4c18f Add source file and line number
The issue with nested macros losing their source location has been
fixed!
2019-02-14 15:41:26 -07:00
Michael Miller
f19b33d7a2 Add spec for Report and fix some bugs 2019-02-14 14:25:46 -07:00
Michael Miller
600c9fbde1 Reorder methods 2019-02-12 23:43:43 -07:00
Michael Miller
d0a8a1deae Cast failure and error results 2019-02-12 23:34:56 -07:00
Michael Miller
8c5760e8dd Rename methods for clarity 2019-02-12 23:18:04 -07:00
Michael Miller
6f08101828 Add docs to Report class 2019-02-12 23:13:03 -07:00
Michael Miller
493e30acee Remove elapsed time from pending results 2019-02-12 16:36:06 -07:00
Michael Miller
142011a763 Add a silent formatter 2019-02-12 13:48:51 -07:00
Michael Miller
ff7fcc6a68 Utility method for getting default config 2019-02-12 13:45:48 -07:00
Michael Miller
5af9799df0 Pass test suite instance to #start_suite 2019-02-12 12:58:54 -07:00
Michael Miller
56c5d7c888 Add docs 2019-02-12 12:55:32 -07:00
Michael Miller
eef1062775 Rename TestSuiteResults to Report 2019-02-11 13:50:57 -07:00
Michael Miller
3d67c45a22 Add docs 2019-02-10 23:05:16 -07:00
Michael Miller
55b655e90a Update naming and fresh variables 2019-02-10 01:20:30 -07:00
Michael Miller
fc3a7285a0 Rename "wrapper" to test code/instance 2019-02-10 01:03:32 -07:00
Michael Miller
e14e86a5f3 Add have_value matcher 2019-02-05 19:37:25 -07:00
Michael Miller
7698724241 Update old naming to new matcher name 2019-02-05 19:30:44 -07:00
Michael Miller
c6b4e22666 Add have_key matcher 2019-02-05 12:47:50 -07:00
Michael Miller
6bfd15b7f9 Parameterless initializer that generates the label 2019-02-05 10:36:37 -07:00
Michael Miller
0e0b8f4ae2 Base PredicateMatcher off of Matcher
No need to store an expected value.
Matcher's initializer must be public.
2019-02-05 10:14:33 -07:00
Michael Miller
89208b8ed1 Implement predicate matcher
Took a trick I learned from `have_attributes` and applied it here.
2019-02-04 22:52:09 -07:00
Michael Miller
1c9cb41fa2 Add have_attributes matcher
This one is kind of magical.
2019-02-01 22:24:06 -07:00
Michael Miller
0c4ffdf587 Allow have matcher to take multiple values 2019-02-01 20:27:51 -07:00
Michael Miller
6d90966f93 Update doc 2019-02-01 20:17:46 -07:00
Michael Miller
85b4e6894b Allow contain matcher to take multiple values 2019-02-01 19:43:42 -07:00
Michael Miller
5389a39231 Add DSL for be_close matcher 2019-02-01 19:10:28 -07:00
Michael Miller
4ea439622d Implement have matcher
This is very similar to the `contain` matcher.
I would have used `include` for the matcher name, but it is a keyword
that can't be used in this syntax.
2019-02-01 16:25:45 -07:00
Michael Miller
f4ac7a3405 Add contain matcher 2019-01-31 23:06:00 -07:00
Michael Miller
d0711f940d Add end_with matcher 2019-01-31 22:05:27 -07:00
Michael Miller
0a310cb243 Add start_with matcher 2019-01-31 16:43:43 -07:00
Michael Miller
5c219195e1 Formatting 2019-01-31 13:55:36 -07:00
Michael Miller
e2779822b5 Remove unecessary type restrictions 2019-01-31 13:52:41 -07:00
Michael Miller
a53bafe333 Remove (now pointless) ConditionMatcher 2019-01-31 13:42:24 -07:00
Michael Miller
5ac9020f25 Move abstract #match?, #message, and #negated_message to base class 2019-01-31 13:40:32 -07:00
Michael Miller
a633d41fae Move #eval to base class
Code is identical across sub-classes.
2019-01-31 13:34:09 -07:00
Michael Miller
3731b6d785 Remove BlockExpectation 2019-01-31 13:32:34 -07:00
Michael Miller
1ce594051c Remove sub-class and abstract base for Expectation
This was over-engineered and only the base class is needed.
2019-01-31 13:29:26 -07:00
Michael Miller
46a6a4e51e Remove reference to short-hand for non-block macro 2019-01-28 16:58:36 -07:00
Michael Miller
61200765c0 Add block expectation and partial 2019-01-28 15:56:04 -07:00
Michael Miller
69ffaa3796 Update doc 2019-01-28 15:47:01 -07:00
Michael Miller
61a3e6b113 Remove unecessary type restrictions 2019-01-28 10:04:17 -07:00
Michael Miller
592d13d0d4 Move #to and #to_not to base type
Remove some explicit type restrictions.
2019-01-28 01:09:22 -07:00
Michael Miller
5231f0fd39 Copy/paste fail 2019-01-26 17:07:21 -07:00
Michael Miller
30582f9a89 Add empty matcher to DSL 2019-01-26 17:04:46 -07:00
Michael Miller
ed3f524f8d Add empty matcher 2019-01-26 17:02:42 -07:00
Michael Miller
028065ad26 Add #be_nil to DSL 2019-01-26 16:42:58 -07:00
Michael Miller
5c68e7eb52 Create parameter-less initializer 2019-01-26 16:40:51 -07:00
Michael Miller
840da3a8b7 Derive type matcher from condition matcher 2019-01-26 16:26:26 -07:00
Michael Miller
69d0856256 Add nil matcher 2019-01-26 16:24:17 -07:00
Michael Miller
90de8c312d Create abstract conditional matcher 2019-01-26 16:23:16 -07:00
Michael Miller
90c5364946 Can't use "new" by itself like in Ruby 2019-01-25 13:25:40 -07:00
Michael Miller
abc321130a Add DSL for range matching 2019-01-25 13:20:38 -07:00
Michael Miller
3be2302df9 Add range modifier methods 2019-01-25 13:20:17 -07:00
Michael Miller
bc45a3bf41 Add basic range matcher 2019-01-25 13:00:19 -07:00
Michael Miller
154832e5c4 Add be_an variation of be_a 2019-01-25 11:21:41 -07:00
Michael Miller
c31557e8ff Move everything in BeComparison to TruthyMatcher
This is to match RSpec's ability to use "be" by itself.
For instance: `expect(foo).to be`
2019-01-23 22:10:03 -07:00
Michael Miller
28c13cd175 Add xit to DSL 2019-01-23 21:57:16 -07:00
Michael Miller
e746ede287 Add specify to DSL 2019-01-23 21:56:02 -07:00
Michael Miller
0c284b6713 Add other comparison matchers to DSL 2019-01-23 21:45:16 -07:00
Michael Miller
d02e5d33b4 Add inequality matcher 2019-01-23 20:39:52 -07:00
Michael Miller
93801553b6 Implement equality method for BeComparison 2019-01-23 20:38:23 -07:00
Michael Miller
9ccba7570e Add greater-than-equal-to matcher 2019-01-23 20:37:33 -07:00
Michael Miller
ea6d7eac2a Add greater-than matcher 2019-01-23 20:34:53 -07:00
Michael Miller
52d0e6d55e Add less-than-equal-to matcher 2019-01-23 20:33:21 -07:00
Michael Miller
4ccc27321e Add less-than matcher 2019-01-23 20:31:28 -07:00
Michael Miller
f7d5c27e65 Should be ExpectedType instead of ActualType 2019-01-23 20:25:06 -07:00
Michael Miller
b93ef1fd2d Initial structure for "be OP value" syntax 2019-01-23 17:17:45 -07:00
Michael Miller
57c15b9088 Split #expects macro 2019-01-23 16:48:12 -07:00
Michael Miller
78698d2de9 Can't support multiple arguments (expected values)
The macro would only "attach" `.to` to the last partial.
2019-01-23 16:43:59 -07:00
Michael Miller
17c66dd732 Split #expect macro
TIL Crystal supports macro overloading, the argument count must be
different.
2019-01-23 16:42:17 -07:00
Michael Miller
046d946669 Handle case of missing block body for #given better 2019-01-23 16:31:54 -07:00
Michael Miller
3d4d8f67be Document truthy flag 2019-01-23 16:07:26 -07:00
Michael Miller
a827b191a1 Use #actual instead of #value 2019-01-23 16:05:59 -07:00
Michael Miller
8c6552a995 Add DSL for be_truthy and be_falsey 2019-01-23 15:51:52 -07:00
Michael Miller
9befd5ee4f Add truthy matcher 2019-01-23 15:51:36 -07:00
Michael Miller
429c2d7302 Add #be_true and #be_false to DSL 2019-01-23 15:35:32 -07:00
Michael Miller
0af3efea2a Document pre- and post-condition run methods
Mark pre- and post-condition functionality complete in README.
2019-01-23 15:15:01 -07:00
Michael Miller
2f5e59d88b Fix failing test
Pre-conditions with parent running out-of-order.
2019-01-23 15:13:27 -07:00
Michael Miller
ed8fad2c97 Add documentation for pre- and post-conditions 2019-01-23 14:37:43 -07:00
Michael Miller
260e1884ab Implement match (regex) matcher 2019-01-19 14:40:14 -07:00
Michael Miller
419b1322bf Create parameterless initializer for TypeMatcher 2019-01-19 14:28:52 -07:00
Michael Miller
e66c0abcfb Change described_class to a macro 2019-01-19 14:17:28 -07:00
Michael Miller
46875d7770 Implement be_a matcher 2019-01-19 14:08:50 -07:00
Michael Miller
4a7167597b Remove documentation for unsupported cases
Turns out the `case` keyword does some extra magic that isn't trivially 
implemented.
2019-01-19 13:44:38 -07:00
Michael Miller
45cdef021b Swap operands to get expected result 2019-01-19 13:42:45 -07:00
Michael Miller
4a1b646015 Fix type resolution issue, force to Result 2019-01-19 13:37:34 -07:00
Michael Miller
a3ee53ed33 Implement be matcher 2019-01-19 13:29:10 -07:00
Michael Miller
6c8ec7953a Add note about using pre- and post-conditions 2019-01-17 16:02:29 -07:00
Michael Miller
ec9416285b Add documentation to ExampleConditions 2019-01-17 15:42:58 -07:00
Michael Miller
38202ff605 Initial addition of pre- and post-conditions 2019-01-09 16:17:33 -07:00
Michael Miller
ab90f946d9 Allow "it" syntax in #given block 2019-01-09 15:08:01 -07:00
Michael Miller
17039d44f0 Initial implementation of #given macro 2019-01-09 14:58:10 -07:00
Michael Miller
950fcd250c Add other syntaxes for #expect method
Can now check multiple values in the same #expect call.
Can use method short-hand syntax (&.foo) in #expect call.
2019-01-09 13:59:42 -07:00
Michael Miller
d3bf5eb4b1 Add short-hand #is and #is_not macros
These can be used for the one-liner "it" syntax.
2019-01-09 11:28:31 -07:00
Michael Miller
033f753dca Initial implementation of one-liner "it" syntax 2019-01-02 13:24:30 -07:00
Michael Miller
0c3b3da2b3 Quickly implement #random_sample by copy-pasting
This should be DRY'd up in the future.
2019-01-02 12:45:46 -07:00
Michael Miller
b7d3648256 Clarify that #let can use expressions 2019-01-02 11:00:38 -07:00
Michael Miller
e6fd716586 Run around_each hooks in same context as example code 2019-01-01 17:58:54 -07:00
Michael Miller
050251b491 before_each and after_each hooks now run in example scope
The entire example hooks class hierarchy is no longer needed.
This is an easier implementation than originally planned.
However, this is probably slower than the other method because each hook 
has to cast and check the example instance.
2019-01-01 17:51:55 -07:00
Michael Miller
aee3ead578 Revert "Pass current example to before_each and after_each hooks"
This reverts commit b5edb1e9f3.
2019-01-01 17:48:07 -07:00
Michael Miller
b5edb1e9f3 Pass current example to before_each and after_each hooks 2019-01-01 16:56:23 -07:00
Michael Miller
abf7c8831c Add getter for wrapped instance 2019-01-01 16:40:04 -07:00
Michael Miller
b53e1b60d8 Add BaseExampleHooks class
This is the first part in enabling before_each and after_each hooks to 
access the example code's scope.
2019-01-01 16:33:07 -07:00
Michael Miller
e0273d660c Display cause of errors 2018-12-27 15:47:29 -07:00
Michael Miller
c0be260f98 Ability to limit number of items sampled 2018-12-27 15:11:28 -07:00
Michael Miller
c1b27bb672 Rename "given" to "sample"
This falls in line with the `SampleValues` type.
It also frees up the keyword "given" to be used for something else.
2018-12-27 11:15:44 -07:00
Michael Miller
62549aae88 Functionality to retrieve all sample values 2018-12-13 14:30:11 -07:00
Michael Miller
c73af72c7f Move formatter to config 2018-12-13 14:16:49 -07:00
Michael Miller
23368f6183 Structure for applying configuration 2018-12-13 13:50:59 -07:00
Michael Miller
9527427b45 Move error message output to another method 2018-12-12 15:33:54 -07:00
Michael Miller
38ec35dd29 Have the DSL builder produce a test suite 2018-12-12 15:27:40 -07:00
Michael Miller
6c5da5a703 Shuffle code around for runner 2018-12-12 15:22:56 -07:00
Michael Miller
c29748ede5 Restructuring how the test suite is driven 2018-12-12 11:48:08 -07:00
Michael Miller
6f5b03dc0f Add top-level namespace docs 2018-12-10 16:08:25 -07:00
Michael Miller
4e0c821b8f Add FinishedResult intermediary class 2018-12-10 14:07:14 -07:00
Michael Miller
9e004324c9 Remove shared elapsed time
Since PendingResult always returns zero, it's not necessary to store it.
2018-12-10 11:16:43 -07:00
Michael Miller
56e8f8978b Detect errors in around_each hooks 2018-12-07 23:28:30 -07:00
Michael Miller
4e57f6adca Don't run after hooks if an error occurs 2018-12-07 23:01:02 -07:00
Michael Miller
4222603fea Don't need reference to result anymore 2018-12-07 22:57:31 -07:00
Michael Miller
aeebbaa5b6 Raise error instead of failing test
If an error occurs in any hooks, raise it instead of failing the test.
2018-12-07 22:43:26 -07:00
Michael Miller
bd4d020d0f Condense visible hook methods 2018-12-05 19:57:14 -07:00
Michael Miller
bd8df38ecd Docs for RootExampleGroup 2018-11-23 23:54:54 -07:00
Michael Miller
fad3eba11f Add docs for NestedExampleGroup 2018-11-20 14:04:14 -07:00
Michael Miller
c7963b70a3 Add docs for ExampleIterator 2018-11-20 11:51:47 -07:00
Michael Miller
f3feabb6e0 Reduce nesting of conditionals 2018-11-19 23:46:14 -07:00
Michael Miller
ee274dbebd Add docs for ExampleGroup 2018-11-19 21:52:10 -07:00
Michael Miller
e79d8872ac Cleanup indexer code 2018-11-19 19:41:51 -07:00
Michael Miller
072055d947 Change test wrapper to a struct 2018-11-17 00:14:14 -07:00
Michael Miller
d52be1ec50 Add docs for ExampleHooks 2018-11-16 13:56:43 -07:00
Michael Miller
c045305bd2 Add docs for result types 2018-11-16 09:48:35 -07:00
Michael Miller
f0204a32ea Fix specs to work with new Expectation type 2018-11-14 02:15:55 -07:00
Michael Miller
35b59854ec Move #eval to partial 2018-11-13 21:44:56 -07:00
Michael Miller
a3ac50d661 Update harness to match recent changes 2018-11-13 21:44:25 -07:00
Michael Miller
a66262d197 Rename ExpectationResults to ExampleExpectations
Update to use new Expectation type.
2018-11-13 15:59:51 -07:00
Michael Miller
b625cb69cf Adopt partials to use new Expectation type 2018-11-13 14:17:37 -07:00
Michael Miller
718f24aef3 Adopt ValueMatcher to new Expectation type 2018-11-13 14:11:51 -07:00
Michael Miller
06ced9f799 Change Expectation to store the result
This removes Expectation::Result and uses Expectation and sub-types
instead.
Having two "Result" types is confusing.
2018-11-13 14:08:27 -07:00
Michael Miller
e38747eafd Formatting 2018-11-13 10:08:56 -07:00
Michael Miller
6c882f9cae Remove ExampleGroup#all_examples
Implement the same functionality with ExampleIterator.
2018-11-13 10:08:37 -07:00
Michael Miller
b5a18ad324 Implement example iterator 2018-11-13 10:06:43 -07:00
Michael Miller
0e1d87d8d4 Add docs for #it and #pending 2018-11-08 22:40:01 -07:00
Michael Miller
45230f3e67 Add docs for before, after, and around hooks 2018-11-08 13:31:50 -07:00
Michael Miller
cbfd14a88f Add docs for #subject, #let, and #let! 2018-11-08 11:29:51 -07:00
Michael Miller
e480901cdc Note about nested #given blocks
Remove unused and empty type method.
Crystal syntax doesn't allow methods where a generic type is expected.
2018-11-07 13:03:48 -07:00
Michael Miller
013f799c5e Remove #include_examples placeholder
Will be re-added when it is implemented.
2018-11-07 12:58:47 -07:00
Michael Miller
3abb48fe53 Allow implicit subject to take arbitrary arguments
This allows easy construction of the subject when it has an initializer
with parameters.
2018-11-07 12:55:38 -07:00
Michael Miller
4e690e7906 Merge described class and implicit subject macros
These macros are only called once.
2018-11-07 12:53:22 -07:00
Michael Miller
665c202848 Removes #it_behaves_like placeholder
Will re-add this when it is implemented.
2018-11-07 12:49:10 -07:00
Michael Miller
3571d9463a Remove #_spectator_given_collection macro
It is no longer needed since @type resolution isn't delayed.
2018-11-07 12:47:42 -07:00
Michael Miller
06743a181c Move collection class out of given module
The collection would incorrectly have access to the `given` block's
context,
instead of just the parent context, like it should.
2018-11-07 12:33:49 -07:00
Michael Miller
69905c01f3 Add docs for #given 2018-11-07 12:26:47 -07:00
Michael Miller
bf03cf03ce Add docs for #describe and #context 2018-11-06 14:05:41 -07:00
Michael Miller
0efaf9fa85 Formatting 2018-11-03 12:14:29 -06:00
Michael Miller
0a218b7e9f Some initial documentation for StructureDSL 2018-11-03 12:13:53 -06:00
Michael Miller
f6d6c859e6 Add docs for example and matcher DSL 2018-11-02 20:48:36 -06:00
Michael Miller
7c21f1e3eb Store user-friendly name of given variable 2018-11-02 18:11:46 -06:00
Michael Miller
61fe8e06d9 Change accessibility of children getter to public 2018-11-02 13:35:32 -06:00
Michael Miller
aea324a33b Add docs for group builders and example factory 2018-10-30 16:49:01 -06:00
Michael Miller
ee4623b471 Remove redundant #add_child method 2018-10-30 16:21:19 -06:00
Michael Miller
eb8ce6ff92 Add docs to DSL and builder 2018-10-28 18:27:54 -06:00
Michael Miller
746a5da107 Dummy example shouldn't be used 2018-10-23 11:15:22 -06:00
Michael Miller
4e9cf44c2c Add and update docs for internal module 2018-10-22 16:22:35 -06:00
Michael Miller
79392fbeff Add note about sample value names 2018-10-22 16:22:11 -06:00
Michael Miller
152ad5a5bf Change Entry to a private struct 2018-10-22 11:10:54 -06:00
Michael Miller
f8fa3e706d Add #get_value method to automatically cast 2018-10-22 11:08:55 -06:00
Michael Miller
532a314441 Add methods to force failure 2018-10-19 21:09:17 -06:00
Michael Miller
686304f31d Insert example failed exception 2018-10-19 20:58:14 -06:00
Michael Miller
9cf82928b7 Ensure harness is reset on error 2018-10-19 18:52:00 -06:00
Michael Miller
c48467f783 Slightly better wording and naming 2018-10-19 18:50:21 -06:00
Michael Miller
67e192edc6 Implement ExpectationResults specs and fix typo 2018-10-19 16:27:59 -06:00
Michael Miller
703a791f78 Formatting changes 2018-10-19 14:02:27 -06:00
Michael Miller
0892a073fe Change Result to a class
This is to get around a segfault.
I'm unable to reproduce this in a simpler example at this time.
However, this can be worked around by changing from a struct to a class.

Relevant backtrace:

Invalid memory access (signal 11) at address 0x4
[0x4829f6] *CallStack::print_backtrace:Int32 +118
[0x46de7d] __crystal_sigfault_handler +61
[0x7fe6ec64b390] ???
[0x486df5] *String#==<String>:Bool +37
[0x509ac4] *Spectator::Expectations::ValueExpectationPartial(Int32) +52
[0x50a52e] *Spectator::Expectations::ValueExpectation(Int32, Int32) +94
[0x50acb2] *Spectator::Expectations::Expectation::Result +210
[0x4fcd9b] *Spectator::Expectations::ExpectationResults +635
[0x50c9eb]*Spec::ContainExpectation(Spectator::Expectations::Expectation::Result)+43
[0x4fcaea] *Spectator::Expectations::ExpectationResults +138
...
2018-10-19 13:04:51 -06:00
Michael Miller
7f4690b042 Secondary initializer for missing label
Label is set to actual/expected stringified value if omitted.
2018-10-18 21:52:00 -06:00
Michael Miller
9a77f8b7fd Add specs for value expectation
Fix bug in expectation result actual message.
2018-10-18 17:54:43 -06:00
Michael Miller
df36331132 Workaround for Crystal compiler bug
See: https://github.com/crystal-lang/crystal/issues/4225
If there are no concrete implementations of a class, an "undefined
method" error is given for abstract methods.
2018-10-15 15:27:05 -06:00
Michael Miller
c77a85c97a Flag to disable running tests
This is needed for testing Spectator.
2018-10-15 00:32:29 -06:00
Michael Miller
cd86687dfb Handle negative indices 2018-10-14 19:33:38 -06:00
Michael Miller
155e9ec81a Store example count instead of recalculating 2018-10-14 19:08:07 -06:00
Michael Miller
bcb68a5856 Implement example lookup by index
This will be used later for executing tests in random order.
2018-10-14 19:06:02 -06:00
Michael Miller
eade6873e4 Implement ExampleComponent#example_count 2018-10-14 18:37:54 -06:00
Michael Miller
467afd053c Implement iterator version of ExampleGroup#each 2018-10-14 18:29:01 -06:00
Michael Miller
1a2cba79fc Parent group can't be nil for nested group 2018-10-14 18:00:55 -06:00
Michael Miller
ab146c88c2 Bit of code cleanup 2018-10-14 17:43:33 -06:00
Michael Miller
bff6d463df Root group builder should not inherit from nested 2018-10-14 17:40:37 -06:00
Michael Miller
30a45a24d3 Restructure to use a composite design pattern
Examples and example groups now have a common ancestor.
2018-10-14 17:10:12 -06:00
Michael Miller
2070d7816b Root example group specialization 2018-10-14 14:28:05 -06:00
Michael Miller
3facf3af9d Change "description" to "what" for consistency 2018-10-14 11:50:08 -06:00
Michael Miller
68412daec0 Remove unused code 2018-10-14 01:02:52 -06:00
Michael Miller
77f631205e Break apart runnable example and document it 2018-10-11 10:16:48 -06:00
Michael Miller
34dce28663 Initial documentation and rework on runnable example 2018-10-10 16:57:43 -06:00
Michael Miller
81dce3df9a Cleanup and document some example classes 2018-10-10 13:05:17 -06:00
Michael Miller
53831ab36a Fix hook flags being nullable 2018-10-10 13:03:47 -06:00
Michael Miller
3e78f48d39 Pending examples weren't marked as finished 2018-10-09 14:53:51 -06:00
Michael Miller
d8223297af Treat harness more like a facade 2018-10-09 14:41:22 -06:00
Michael Miller
f5317ecbd3 Rig up the harness 2018-10-09 14:25:52 -06:00
Michael Miller
bfb133f44d Create example harness 2018-10-09 14:25:39 -06:00
Michael Miller
7b8f47f327 Implement expectation results 2018-10-08 11:25:22 -06:00
Michael Miller
c27f72c83e Add enum for example status 2018-10-07 16:13:17 -06:00
Michael Miller
64a233a9e1 Rename ExpectationRegistry to ExpectationReporter
Some initial implementation for the class.
2018-10-07 13:46:51 -06:00
Michael Miller
e14babc014 ExpectationFailed exception takes a result 2018-10-07 13:45:36 -06:00
Michael Miller
73a0d51c1b Rename message methods and add #failure? 2018-10-07 13:05:32 -06:00
Michael Miller
7277b3caaf Display actual value if label is empty 2018-10-07 12:49:10 -06:00
Michael Miller
38da6615bf Documentation for expectations and matchers 2018-10-07 12:42:09 -06:00
Michael Miller
d98bc05b88 Switch to structs to reduce memory allocations 2018-10-06 10:09:39 -06:00
Michael Miller
f11031f113 Upcast to fix type error 2018-10-06 09:58:58 -06:00
Michael Miller
79886e9efb More structure around exceptions and matching 2018-10-05 16:30:19 -06:00
Michael Miller
4c2f6157af Define some Expectation methods 2018-10-01 20:34:26 -06:00
Michael Miller
3035273e9a Rework how expectations and matchers work together 2018-09-28 11:47:42 -06:00
Michael Miller
4948fe0c6f Short-hand syntax for blocks with yield 2018-09-27 18:49:01 -06:00
Michael Miller
d670d96045 Remove extra assignment operations 2018-09-27 18:47:54 -06:00
Michael Miller
7484b92db9 Formatting 2018-09-27 17:50:50 -06:00
Michael Miller
b9abdb86ff Use actual value if label is empty
This will show a value instead of nothing if the should-syntax is used.
2018-09-27 16:28:47 -06:00
Michael Miller
77b4c71c2a Reduce nesting by collapsing modules with :: 2018-09-27 16:20:55 -06:00
Michael Miller
0d282d3d50 Wording - should-syntax instead of #should 2018-09-27 16:15:31 -06:00
Michael Miller
e9b8992130 Implemented should-syntax 2018-09-27 16:11:45 -06:00
Michael Miller
83a2a8e238 Manually include all sub-modules and top-level types
This is needed so that `spectator/should` is not included by default.
2018-09-27 15:49:34 -06:00
Michael Miller
1c9decaa41 Add documentation for top-level module 2018-09-27 15:41:18 -06:00
Michael Miller
1a61235cdc Simplify #examples and #groups methods 2018-09-27 13:51:19 -06:00
Michael Miller
f63f8b15a0 Use label (expression string) instead of value 2018-09-24 22:58:35 -06:00
Michael Miller
371fe680c2 Pass matcher messages to failure results 2018-09-24 22:57:37 -06:00
Michael Miller
8fb051d61e Add custom messages for matchers
This gives users natural, easier to understand text for expectations.
2018-09-24 22:56:48 -06:00
Michael Miller
562b544223 Capture expression string from expectations
This allows a string that the user had in source code instead of a resolved value.

This change requires storing a 'label' and changing expectation and matcher constructor methods to macros.
2018-09-24 22:51:26 -06:00
Michael Miller
ef7e0462cb GivenExampleGroupBuilder produces group of groups
Now a group is created for each element in the collection.
A group to contain the sub-groups is returned.
2018-09-24 00:25:15 -06:00
Michael Miller
1c7c6e5e90 Initial code for example names 2018-09-23 20:24:28 -06:00
Michael Miller
5e4f0f3bbc Initial formatting output for failures 2018-09-23 18:00:01 -06:00
Michael Miller
dcbca302dc Fix values being wrapped twice
This simplifies some code.
2018-09-23 17:13:30 -06:00
Michael Miller
cf0c438a5d Abstract away locals to SampleValues 2018-09-23 17:04:06 -06:00
Michael Miller
cddfe5591d Move ValueWrapper and TypedValueWrapper to Internals
Trying to hide from top-level some inner-workings.
2018-09-23 16:23:26 -06:00
Michael Miller
887a04a92a Remove unused classes 2018-09-23 16:13:48 -06:00
Michael Miller
7a6045a1f3 Change #it_behaves_like to a macro 2018-09-23 16:10:07 -06:00
Michael Miller
b3b8efdd59 Mark helper macros private 2018-09-23 16:07:58 -06:00
Michael Miller
70e37eeccf DRY up DSL 2018-09-23 16:07:03 -06:00
Michael Miller
0f323666a0 Fix methods for adding hooks 2018-09-23 15:41:58 -06:00
Michael Miller
855a5f2239 Move hook storage to their own class 2018-09-23 15:26:19 -06:00
Michael Miller
57c9f2c58e Copy/paste to reimplement pending examples 2018-09-23 14:53:32 -06:00
Michael Miller
56ae92a25d Add symbol for getting local from #given 2018-09-23 14:45:36 -06:00
Michael Miller
3c31783fd7 Pass arguments directly onto initializer with splat 2018-09-23 14:45:14 -06:00
Michael Miller
03a8efd7f8 Create test instance when example is created
This exposes errors in the framework
instead of delaying them until the test runs.
2018-09-23 14:39:05 -06:00
Michael Miller
94e2f54713 Implement building groups and examples 2018-09-23 14:34:42 -06:00