Commit Graph

544 Commits

Author SHA1 Message Date
Michael Miller 8310ea2aa5 Label exception with type 2019-03-03 10:30:58 -07:00
Michael Miller 6307024af3 Colorize matcher values green and red 2019-03-03 10:26:03 -07:00
Michael Miller df71e56b3e Replace FailureMessage with LabeledText 2019-03-03 10:19:17 -07:00
Michael Miller 2c5da0c345 Move message line inside content
This allows for multiple message lines for multiple expectations.
2019-03-03 10:11:46 -07:00
Michael Miller 238dc38a36 Use Indent tracker type 2019-03-03 09:54:39 -07:00
Michael Miller 8cdc5f0b3f Fix indent and add empty line method 2019-03-03 09:54:09 -07:00
Michael Miller f73a51ae0c WIP display all expectations
Display the error stacktrace after expectations if the result is an 
ErroredResult.
2019-03-03 09:48:44 -07:00
Michael Miller 66c1dc3bce Create indentation guide type 2019-03-03 09:46:12 -07:00
Michael Miller e722cc4f1f Initial code for displaying errors 2019-02-28 22:16:33 -07:00
Michael Miller f37105af5e Add padding to pairs to right-align key 2019-02-28 20:14:03 -07:00
Michael Miller cc3392022e Move value enumeration to another type 2019-02-28 19:49:23 -07:00
Michael Miller 0fce18a610 Use inspect instead of to_s for values 2019-02-28 19:29:24 -07:00
Michael Miller daf2f43f25 Rename module from Formatters to Formatting 2019-02-28 19:14:03 -07:00
Michael Miller 80150f945b Change back to passing text as argument 2019-02-28 16:48:26 -07:00
Michael Miller 1610d6ebe3 Create a type to output a key-value pair 2019-02-28 16:46:50 -07:00
Michael Miller 4e3290ebfe Initial code to get match data values to output
Expose the match data values through the Expectation class.
2019-02-28 16:35:50 -07:00
Michael Miller 0a48b5f447 Use block with line method 2019-02-28 16:30:56 -07:00
Michael Miller d5bef6f1da Fix flipped expected and actual labels
NilMatcher output was correct, but variables were named incorrectly.
2019-02-28 16:08:22 -07:00
Michael Miller 1219b19d89 Support shorthand &.foo(ARGS) syntax 2019-02-28 15:40:04 -07:00
Michael Miller 619927b3e6 Forgot to swap label and expected in DSL 2019-02-28 15:22:14 -07:00
Michael Miller 5ba03a90ff Swap label and expected value parameters
This matches the partial initializer parameters.
Also cleaned up some code in the Expectation spec.
2019-02-28 15:17:12 -07:00
Michael Miller f3e50c6432 TruthyMatcher doesn't need to store a label
Extend from Matcher instead of ValueMatcher to bypass storing the label.
The "expected" value is still used, but is renamed to "truthy" and used
for the label.
2019-02-28 14:52:15 -07:00
Michael Miller 226708cb82 Abstract Matcher#label getter
There's no need to store a value for this.
Some matchers have a static label.
2019-02-28 14:48:46 -07:00
Michael Miller 8cc66b538f Condense the ExpectedActual initializer
Made label and expected value public.
2019-02-28 14:41:30 -07:00
Michael Miller 4c7e8a3225 Condense expected and actual values and labels
Created a new struct specifically to store expected and actual valuesand
their user labels.
2019-02-28 14:05:31 -07:00
Michael Miller 520901332e Remove dummy MatchData type
Also fix for undefined MatchData type in Matcher types.
2019-02-28 13:53:54 -07:00
Michael Miller e6ce54202d Remove Matcher methods moved to MatchData
Update spec for EqualityMatcher to reflect this.
2019-02-28 13:47:50 -07:00
Michael Miller b4502711cd Add MatchData for EqualityMatcher
crystal spec runs, but fails for this commit.
2019-02-28 13:32:38 -07:00
Michael Miller b855599ce6 Workaround for strange compiler error 2019-02-28 10:53:03 -07:00
Michael Miller c1f61d68bf Use MatchData 2019-02-26 20:29:04 -07:00
Michael Miller 0bf106ab2e Placeholders for #match method 2019-02-23 22:33:33 -07:00
Michael Miller 42d8eb6da3 Matched flag isn't needed (match data has it) 2019-02-23 22:26:49 -07:00
Michael Miller 1e1503331e Initial change to MatchData 2019-02-23 21:52:10 -07:00
Michael Miller 87ca825845 Return 1 on failure 2019-02-22 16:54:36 -07:00
Michael Miller 487726ea54 Move failure command it's own type 2019-02-22 16:43:25 -07:00
Michael Miller e92b1dc466 Add #failed? method to Report 2019-02-22 15:09:55 -07:00
Michael Miller dbffad837d Calculate each type of result once at initialization 2019-02-22 13:54:12 -07:00
Michael Miller 5c2747efc0 Move stats to their own types 2019-02-22 13:47:57 -07:00
Michael Miller 48a1e61949 Change FailueBlock to a private struct 2019-02-20 21:47:18 -07:00
Michael Miller 0ca300ba89 Move characters constant to sub-module 2019-02-20 21:38:23 -07:00
Michael Miller e752f901a5 Move more failure block chunks to their own structs 2019-02-20 21:28:11 -07:00
Michael Miller bef3243c6c Remove unecessary result parameter 2019-02-20 21:22:42 -07:00
Michael Miller 002c1d892b Adjust how Result#call works 2019-02-20 21:00:22 -07:00
Michael Miller 8f85a6436f Rewrite to use indentation methods 2019-02-20 20:09:23 -07:00
Michael Miller 1cd0f0249e Create struct for colorized comment 2019-02-19 19:56:07 -07:00
Michael Miller 4126ee3451 Some work on FailureBlock 2019-02-17 23:15:58 -07:00
Michael Miller f2c17189fc Adjust (mostly remove) explicit return types 2019-02-17 23:12:16 -07:00
Michael Miller b646b8bec5 Remove unused ExampleStatus enum 2019-02-17 23:09:23 -07:00
Michael Miller eaf1d19feb Move the expectations attribute up to FinishedResult 2019-02-17 23:03:43 -07:00
Michael Miller 847cc662bd Update docs
Mostly fixes around symbols for syntax.
Added some missing docs and updated incorrect or vague ones.
2019-02-17 23:01:43 -07:00
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