Commit Graph

544 Commits

Author SHA1 Message Date
Michael Miller 9c16a5a53e Move characters to a named tuple 2019-02-17 21:35:17 -07:00
Michael Miller bd500b0799 Move color constants to a private named tuple 2019-02-17 21:32:42 -07:00
Michael Miller 1a998b6cb6 Add comment color 2019-02-17 21:30:41 -07:00
Michael Miller 2c7cd9b728 Add #path method
Update #to_s to use relative path if possible.
2019-02-17 21:23:57 -07:00
Michael Miller dc7d5fbe25 Lazy iterate over failures and errors
Return iterator from #failures and #errors methods in Report.
Update spec to reflect this.
2019-02-17 20:09:13 -07:00
Michael Miller 32a049d973 Colorize must be explicitly dragged in 2019-02-17 20:05:32 -07:00
Michael Miller 6601f5f9ee Remove DefaultFormatter
The default formatter is now DotsFormatter.
2019-02-17 17:39:04 -07:00
Michael Miller ace31973bc Whitespace 2019-02-17 17:05:59 -07:00
Michael Miller 1885ab0aa0 Fix leading space when group isn't symbolic 2019-02-17 17:05:10 -07:00
Michael Miller f6a4e6f558 Remove space in #to_s between symbolic items
This makes example names look more like documentation by changing names 
like "Array #size is zero" to "Array#size is zero".
2019-02-17 16:29:38 -07:00
Michael Miller 8339784492 Add symbolic attribute to example components
This is used to determine whether a type or method is referenced.
2019-02-17 16:27:41 -07:00
Michael Miller 968775a5c3 Some cleanup and docs for SuiteSummary 2019-02-17 15:13:24 -07:00
Michael Miller d63a480516 Initial cleanup and docs for FailureBlock 2019-02-17 15:02:07 -07:00
Michael Miller 0f5395d592 Remove call to source in failure block 2019-02-17 14:54:33 -07:00
Michael Miller 11c738b941 Use Result#call instead of case-statement
Color module is no longer mixed-in.
2019-02-17 14:48:54 -07:00
Michael Miller 75f9a5838b Add `#call` method to each result
This feels like a good middle-ground.
I didn't want this to be a factory method, or return an instance.
That seemed like overkill for formatting.
But I don't want to place if and case-statements everywhere in the 
formatters.
I hope this doesn't violate single-responsibility principle or any other 
guidelines.
2019-02-17 14:24:02 -07:00
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