Commit graph

872 commits

Author SHA1 Message Date
Michael Miller
cd60fae157 Add respond_to matcher 2019-03-28 23:20:32 -06:00
Michael Miller
e87314be58 Use block instead of yield to insert block
The "yield" method produces `begin...end`.
The "block" method produces `do...end`, which is needed for this syntax.
2019-03-26 21:45:31 -06:00
Michael Miller
2da1f9dbbf Missed one 2019-03-26 18:05:08 -06:00
Michael Miller
007c0c7950 Fix "missing" variables caused by wrong macro syntax 2019-03-26 17:59:15 -06:00
Michael Miller
44e681ae79 Change JSON timing values to seconds as a float 2019-03-25 16:56:38 -06:00
Michael Miller
4eb8eadd9e Add profile info to JSON output 2019-03-25 16:54:27 -06:00
Michael Miller
df6431f2d7 Add profile summary to TAP output 2019-03-25 16:49:57 -06:00
Michael Miller
291a927f1e Add profile information to suite summary 2019-03-25 16:44:20 -06:00
Michael Miller
34b0399654 Use example_runtime instead of total runtime
This fixes the issue where < 10 examples in profile showed less than 
100% total time.
2019-03-25 16:31:01 -06:00
Michael Miller
72aa72781a Move human time to its own type to share it 2019-03-25 16:15:00 -06:00
Michael Miller
aabc25ad4f Change formatters to take nillable profile 2019-03-25 16:05:38 -06:00
Michael Miller
6dd4c4bc2f Add Profile class 2019-03-25 15:54:51 -06:00
Michael Miller
a02e2ff701 Add profile config option 2019-03-25 12:26:45 -06:00
Michael Miller
35b887f8f0 Add placeholders for profile functionality 2019-03-25 12:13:11 -06:00
Michael Miller
2d88097c04 Re-implement filters in command-line arguments 2019-03-25 11:39:27 -06:00
Michael Miller
2ff9505766 Add filter to TestSuite 2019-03-25 11:35:39 -06:00
Michael Miller
49c396714e Revert 29279e1
Update Runner to not use Iterable#each
2019-03-25 11:29:20 -06:00
Michael Miller
3654b2473b Add example filter to config 2019-03-25 11:17:53 -06:00
Michael Miller
d1767ebb7a Add CompositeExampleFilter 2019-03-25 11:10:27 -06:00
Michael Miller
481319c097 Add NullExampleFilter 2019-03-25 10:58:49 -06:00
Michael Miller
a3c1892465 Move example filters from === to their own types 2019-03-25 10:51:50 -06:00
Michael Miller
b2ab579d8a Remove --pattern option
This can be handled by calling `crystal spec`.
2019-03-25 10:51:20 -06:00
Michael Miller
3787d4fc28 Cleanup cli arguments by breaking apart parser.on calls 2019-03-25 09:41:36 -06:00
Michael Miller
bf2c62b7e8 Initial work on filter criteria 2019-03-23 22:38:44 -06:00
Michael Miller
8c66f8df34 Add ExampleFilter class 2019-03-23 22:03:49 -06:00
Michael Miller
2f8b4761de Make Example comparable against names and sources
This will be needed for filtering examples.
2019-03-23 21:40:13 -06:00
Michael Miller
4f3ca20741 Parse source strings 2019-03-23 20:47:41 -06:00
Michael Miller
268db53bf8 Use more sensible label for non-labeled procs 2019-03-23 20:23:31 -06:00
Michael Miller
ac85fac968 Unprotect build method 2019-03-23 20:22:09 -06:00
Michael Miller
d04db7bf68 Add specialized should/should_not methods for procs 2019-03-23 20:20:15 -06:00
Michael Miller
102105911c Fix "should" syntax 2019-03-23 20:15:35 -06:00
Michael Miller
ebfec8058e Hide getters from external types 2019-03-23 20:01:42 -06:00
Michael Miller
bc8b608789 Perform in-place shuffle 2019-03-23 19:58:45 -06:00
Michael Miller
7b1b65f553 Implement --order flag to match RSpec 2019-03-23 19:56:00 -06:00
Michael Miller
b6453d135a Implement random test order execution 2019-03-23 19:43:41 -06:00
Michael Miller
29279e1812 Implement Iterable 2019-03-23 19:42:32 -06:00
Michael Miller
d0ba2c5400 Config stores the RNG instead of a seed 2019-03-23 19:42:19 -06:00
Michael Miller
21a0f78219 Implement random generator and seed 2019-03-23 19:18:29 -06:00
Michael Miller
5d95e1b5dd Save built-up config 2019-03-23 18:35:15 -06:00
Michael Miller
57271d5f4b Implement --no-color option 2019-03-23 18:24:11 -06:00
Michael Miller
a7d8d35a06 Implement option for JUnit test output 2019-03-23 17:01:03 -06:00
Michael Miller
ef8b773787 Support multiple formatters at once 2019-03-23 17:00:21 -06:00
Michael Miller
f1873238cd Add expectation values to failure 2019-03-23 16:42:53 -06:00
Michael Miller
50929c6666 Use standard status text 2019-03-23 16:34:54 -06:00
Michael Miller
ff20fbe232 Cleanup top-level formatting code 2019-03-23 16:28:36 -06:00
Michael Miller
3fbe6a2760 Implement Java naming 2019-03-23 16:27:51 -06:00
Michael Miller
93368503e6 Cleanup JUnit test case hierarchy 2019-03-23 16:07:40 -06:00
Michael Miller
3776cd917e Initial code for JUnit output 2019-03-23 15:31:53 -06:00
Michael Miller
4890cafefa Ability to enumerate each result in report 2019-03-23 14:44:00 -06:00
Michael Miller
4d38bf3ab2 Add secondary initializer 2019-03-23 14:38:51 -06:00
Michael Miller
edbcff03a5 Implement TAP formatter 2019-03-23 00:25:46 -06:00
Michael Miller
29dc833ea3 Add report stats, timing, and result 2019-03-22 21:48:00 -06:00
Michael Miller
dca2925461 Simplify to_json calls 2019-03-22 21:43:33 -06:00
Michael Miller
09b6dee004 Move the remaining to_json methods to their own types 2019-03-22 21:29:20 -06:00
Michael Miller
b12c1aba96 Move to_json builder methods into result classes 2019-03-22 21:23:14 -06:00
Michael Miller
c869e4fc9a Add to_s methods for result types 2019-03-22 20:12:36 -06:00
Michael Miller
82a4a15ba9 Initial work on JSON formatter 2019-03-22 20:11:58 -06:00
Michael Miller
ba0453c5ea Implement dry-run mode 2019-03-22 14:18:03 -06:00
Michael Miller
435f971c87 Add dry-run to config 2019-03-22 14:05:48 -06:00
Michael Miller
46e3246c5c Fix new lines with pending tests 2019-03-22 14:00:58 -06:00
Michael Miller
acfe9d2808 Conditionally remove blank lines 2019-03-22 13:53:06 -06:00
Michael Miller
caf19ffbd8 Formatting 2019-03-22 13:49:37 -06:00
Michael Miller
748b0223af Adjust output formatting for fail-blank mode 2019-03-22 13:48:47 -06:00
Michael Miller
209ef92d3d Implement "fail-blank" into runner and report 2019-03-22 13:41:46 -06:00
Michael Miller
165178237c Add dummy match data
Apparently the abstract bug pops up again when there are no tests.
2019-03-22 13:34:44 -06:00
Michael Miller
31d58fea25 Add "fail-blank" config option 2019-03-22 13:21:37 -06:00
Michael Miller
d22b628526 Stub remaining options from Crystal's default Spec 2019-03-22 13:15:17 -06:00
Michael Miller
a57e596a62 Add -h flag to show help 2019-03-22 13:08:32 -06:00
Michael Miller
66ac2eb080 Missing space between prefix and value 2019-03-22 13:03:33 -06:00
Michael Miller
c197f3236f Actual values should not be prefixed 2019-03-22 13:01:55 -06:00
Michael Miller
e7e1d0e084 Change how values are passed to helper
Working around a segfault (dunno why this fixes it).
2019-03-22 11:53:20 -06:00
Michael Miller
d705ef657c Update specs to handle new match data values 2019-03-22 11:41:39 -06:00
Michael Miller
31acc707dc Fix stringified inspection of generic match data value 2019-03-22 11:04:11 -06:00
Michael Miller
5e80b3835a MatchDataValue must be a class
Negatable value modifiers don't get updated when they're structs.
2019-03-22 11:01:47 -06:00
Michael Miller
a19d9f00aa Update formatters to handle new labeled values 2019-03-22 11:00:00 -06:00
Michael Miller
92b407380b Fix negation of values in Expectation 2019-03-22 10:57:53 -06:00
Michael Miller
33841e8888 Sub-type value modifier from MatchDataValue
This includes renaming the types.
2019-03-22 10:55:57 -06:00
Michael Miller
4f6309a032 Rename values to named_tuple in match data types 2019-03-22 10:41:23 -06:00
Michael Miller
8d3ab0d44c Transform named tuple match data to array
Trying to keep some of the existing code (and better syntax).
2019-03-22 10:38:09 -06:00
Michael Miller
66bd1555ac Use Symbol instead of String 2019-03-22 10:35:43 -06:00
Michael Miller
0b467012cb Initial work on match data values management 2019-03-22 10:30:03 -06:00
Michael Miller
dba047e1ec Formatting 2019-03-22 00:16:09 -06:00
Michael Miller
a804907f75 Add text to output for fail-fast 2019-03-22 00:14:36 -06:00
Michael Miller
a31d5c8b5b Implement fail-fast in runner
Report tracks number of omitted tests due to abort.
2019-03-22 00:05:53 -06:00
Michael Miller
9e63c20df2 Add fail-fast to config 2019-03-21 23:40:00 -06:00
Michael Miller
fe81586527 Pass builder instead of individual arguments
Config members will get large.
Preventing a large amount of arguments in advance.
2019-03-21 23:03:13 -06:00
Michael Miller
244947a81d Wrap stringified block with back-ticks 2019-03-21 21:21:05 -06:00
Michael Miller
4a887bb906 Add DSL for expect_raises 2019-03-21 21:18:36 -06:00
Michael Miller
f3ef2e561e Initial implementation of raise_error matcher 2019-03-21 21:10:16 -06:00
Michael Miller
72ccafb8b7 Pass subject to proc via partial 2019-03-21 21:09:46 -06:00
Michael Miller
e552cbffd2 Fix DSL usage of BlockExpectationPartial 2019-03-19 21:20:23 -06:00
Michael Miller
33e3b5a811 Use {{yield}} only in methods
The {{yield}} expression wraps the block with "begin ... end".
For some reason classes and modules can be defined in a "begin ... end"
block, but that might change.
2019-03-10 06:42:51 -06:00
Michael Miller
0ca0ba0a55 Fix tests to account for negation wrappers 2019-03-07 16:12:23 -07:00
Michael Miller
37f2ce99a3 Simplify negated usage and expose value 2019-03-07 15:34:55 -07:00
Michael Miller
ee7a91c3dd Add negation wrappers
Fixes the reported expected values when the expectation is negated.
2019-03-06 21:39:28 -07:00
Michael Miller
018e3232cd Update RangeMatcher to use MatchData
There is a compilation error.
It appears that since the last Matcher#match method has been
implemented,
Crystal is finally grouping all of the NamedTuples together.
2019-03-06 15:01:00 -07:00
Michael Miller
acf52e1553 Pass through prefixed value #inspect method 2019-03-06 14:30:46 -07:00
Michael Miller
fbee1d9461 Update RegexMatcher to use MatchData 2019-03-06 13:10:16 -07:00
Michael Miller
f29aba42d2 Update TruthyMatcher to use MatchData 2019-03-06 13:04:18 -07:00
Michael Miller
5fd1547ced Fix verbage around failure message 2019-03-06 12:01:32 -07:00
Michael Miller
6e62ccdfc5 Update TypeMatcher to use MatchData 2019-03-06 11:19:57 -07:00
Michael Miller
81e20b13ec Update PredicateMatcher to use MatchData 2019-03-06 11:05:13 -07:00
Michael Miller
6ab2aad532 Update HaveMatcher to use MatchData 2019-03-06 10:29:00 -07:00
Michael Miller
a78b80ed1f Update StartWithMatcher to use MatchData 2019-03-06 09:33:36 -07:00
Michael Miller
76d09a22ff Update HaveValueMatcher to use MatchData 2019-03-06 02:19:12 -07:00
Michael Miller
3f1d8751fe Update HaveKeyMatcher to use MatchData 2019-03-06 02:02:55 -07:00
Michael Miller
95b4a349da Update InequalityMatcher to use MatchData 2019-03-05 19:00:49 -07:00
Michael Miller
d35a739e60 Update LessThanMatcher to use MatchData 2019-03-05 16:53:15 -07:00
Michael Miller
f846408848 Update LessThanEqualMatcher to use MatchData 2019-03-05 16:37:51 -07:00
Michael Miller
36d3bd0a70 Update GreaterThanMatcher to use MatchData 2019-03-05 16:28:29 -07:00
Michael Miller
83d398465f Update GreaterThanEqualMatcher to use MatchData
Add PrefixedValue type to help convey values better (without string
concat).
2019-03-05 15:39:30 -07:00
Michael Miller
27409f4a92 Display last item and full list when #last is used
Only perform one check with #responds_to?.
2019-03-05 13:52:59 -07:00
Michael Miller
52f8c52a58 Fix EndWithMatcher compile errors 2019-03-04 21:43:26 -07:00
Michael Miller
7b0f607a6a Update EndWithMatcher to use MatchData 2019-03-04 20:16:21 -07:00
Michael Miller
1090a7f2f3 Fix botched copy/paste 2019-03-04 18:30:18 -07:00
Michael Miller
e7441df159 Update AttributesMatcher to use MatchData
This is a glorious mess.
2019-03-04 16:06:20 -07:00
Michael Miller
df663d30d9 Update EmptyMatcher to use MatchData 2019-03-03 20:21:39 -07:00
Michael Miller
be3218bcd8 Update ContainMatcher to use MatchData 2019-03-03 20:03:20 -07:00
Michael Miller
cdef7f9fa3 Use macro yield and remove &block when not needed 2019-03-03 19:24:56 -07:00
Michael Miller
51765c0c8b Fix strange compiler error
Compiler said there was an error, but not what it was.
The compiler wasn't clear where the issue was either.
2019-03-03 19:06:37 -07:00
Michael Miller
e38bcd544a Update CaseMatcher to use MatchData 2019-03-03 19:05:20 -07:00
Michael Miller
50a782b803 Minor adjustments to equality matcher 2019-03-03 12:26:31 -07:00
Michael Miller
ffed61b9e3 Implement condensed document output 2019-03-03 11:56:43 -07:00
Michael Miller
52a6a645b9 Display group names 2019-03-03 11:05:28 -07:00
Michael Miller
f338e9b99d Add -v argument to use document formatter 2019-03-03 10:52:15 -07:00
Michael Miller
a3c4d06e45 WIP code for document formatter (-v) 2019-03-03 10:51:52 -07:00
Michael Miller
ca92fbb29f Extend self in Spectator module 2019-03-03 10:49:28 -07:00
Michael Miller
5481c3d431 Formatting 2019-03-03 10:32:00 -07:00
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
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