command-unit 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +55 -3
- data/changelog.md +8 -3
- data/command-unit.gemspec +1 -1
- data/examples/minimal_scenario.rb +20 -0
- data/lib/command-unit.rb +1 -8
- data/lib/command-unit/expectation_helpers.rb +52 -0
- data/test/scenarios/expectation_helper_tests.rb +123 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MGZkZDc0ZWNmMGYyODczMDBjMTNlN2YzYjhmMTk1NjQxMDA5ZGQ2Yg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZTlhYmIzYmFlNzg3YTkyOThlMzA3NTU3NDRlNzhmNGQ3OTc1NDhjOQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NGM2ZjE2OTEyYzgzYmQxMjJiNjU5MWY3YWNlYmY4NjlmNDZhODEyN2IxOTk2
|
10
|
+
OGI2ZWY5Mzc5ZWQ2ZmVjZmM0Zjg4MjliNGVhM2YzOTYwYTYzYWY1NDA4ZTI5
|
11
|
+
NmFlMWJiYjYyZGY3ZGZhYjliOGM4MDcxYmY0NzE3ZWFlYWMzMjQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YzNhZDlkMmRhNzkwZTFiZGFhN2Q0YWM0YWVjODk4YTE5Yjg1YmM3Y2Q5ZjQ3
|
14
|
+
YTYzMzczZWUyMjI1YzdhNmMwMzQyYTVhNjQzNzUzMmEyZGYwYjIxYjZlYjk0
|
15
|
+
MTUzZGE0YWJlYTU0NTQ0YTdiMTcxOGYwYzI5NjM3MmEzY2RmNzA=
|
data/README.md
CHANGED
@@ -11,7 +11,52 @@ Written in Ruby, designed to test command line apps, whether they're written in
|
|
11
11
|
Tests are written in Command Unit itself, so no need for any external dependencies yet. I might make this a fundamental requirement of future development, but I'll see how far the project can go on basic Ruby first.
|
12
12
|
|
13
13
|
## This is alpha software
|
14
|
-
So far I've only tested this on Ruby 1.9.3, others may work but I'm not considering support on any other platforms until I've got a stable/useful release out.
|
14
|
+
So far I've only tested this on Ruby 1.9.3, others may work but I'm not considering support on any other platforms until I've got a stable/useful release out. The code itself is very rough-and ready, and could benefit from quite a lot of refactoring, especially in [scenario.rb](/samsalisbury/command-unit/blob/master/lib/command-unit/scenario.rb).
|
15
|
+
|
16
|
+
## Features
|
17
|
+
- No dependencies apart from Ruby itself
|
18
|
+
- Assertion helpers (these need work)
|
19
|
+
- Clear, readable, colour console output
|
20
|
+
- All command-unit tests written using command-unit itself
|
21
|
+
- Expectations require a description, making test more useful as documentation
|
22
|
+
- Hooks, you can inject your own code easily to respond to tests running/passing/failing.
|
23
|
+
-
|
24
|
+
|
25
|
+
## Minimalist usage example
|
26
|
+
```ruby
|
27
|
+
require 'command-unit'
|
28
|
+
include CommandUnit
|
29
|
+
scenario 'Writing tests in Command Unit' do
|
30
|
+
|
31
|
+
when_i 'do something wacky' do |context|
|
32
|
+
context[:data] = 'call a method or something here'
|
33
|
+
end
|
34
|
+
|
35
|
+
i_expect "to receive a string containing 'or' do |context|
|
36
|
+
expect context[:data], &contains('or')
|
37
|
+
end
|
38
|
+
|
39
|
+
i_expect "the string to exactly equal 'or'" do |context|
|
40
|
+
expect context[:data], &is_equal_to('or')
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
run
|
46
|
+
```
|
47
|
+
Output:
|
48
|
+
```
|
49
|
+
Running 1 scenarios...
|
50
|
+
|
51
|
+
Running scenario 1: Writing tests in Command Unit
|
52
|
+
When I do something wacky
|
53
|
+
I expect to receive a string containing 'or'...Success!
|
54
|
+
I expect the string to exactly equal 'or'...Failure!
|
55
|
+
Expecting exactly 'or', but got 'call a method or something here'
|
56
|
+
Scenario 1 finished, 1 tests, 2 expectations with 1 successful and 1 failures.
|
57
|
+
|
58
|
+
Ran 1 scenarios, 0 passed, 1 failed (tests passed: 0, failed: 1) (expectations passed: 1, failed: 1)
|
59
|
+
```
|
15
60
|
|
16
61
|
## Installation
|
17
62
|
`gem install command-unit`
|
@@ -19,5 +64,12 @@ So far I've only tested this on Ruby 1.9.3, others may work but I'm not consider
|
|
19
64
|
## Development
|
20
65
|
Unpack the gem with `gem unpack command-unit`
|
21
66
|
Run tests:
|
22
|
-
|
23
|
-
$
|
67
|
+
```
|
68
|
+
$ cd command-unit-0.0.3
|
69
|
+
$ ruby test/test.rb
|
70
|
+
```
|
71
|
+
|
72
|
+
## More?
|
73
|
+
This is fairly experimental, and I know a lot of people probably won't like it, or will think it needless (why not just use rspec?!), but it satisfies a need I have right now, and I'm happy so far.
|
74
|
+
|
75
|
+
I'd really love to hear any constructive criticism on both the code and the conventions in test-writing that command-unit enforces, you can email me at samsalisbury@gmail.com
|
data/changelog.md
CHANGED
@@ -1,10 +1,15 @@
|
|
1
1
|
# Command Unit changelog
|
2
2
|
|
3
|
-
- 0.0.
|
3
|
+
- 0.0.3 2013-08-18
|
4
|
+
* Expectation helpers
|
5
|
+
- These need to be rethought, as they require too manu ugly ampersands in the tests
|
6
|
+
- 0.0.2 2013-08-18
|
4
7
|
* More useful output:
|
5
8
|
- Colours
|
6
9
|
- Totals
|
7
10
|
* Namespaces to help with splitting up tests
|
8
11
|
* More self-tests
|
9
|
-
- 0.0.1
|
10
|
-
|
12
|
+
- 0.0.1 2013-08-17
|
13
|
+
* some basic assertions
|
14
|
+
- 0.0.0 2013-08-17
|
15
|
+
* initial release, nothing much useful yet
|
data/command-unit.gemspec
CHANGED
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../lib/command-unit'
|
2
|
+
include CommandUnit
|
3
|
+
|
4
|
+
scenario 'Writing tests in Command Unit' do
|
5
|
+
|
6
|
+
when_i 'do something wacky' do |context|
|
7
|
+
context[:data] = 'call a method or something here'
|
8
|
+
end
|
9
|
+
|
10
|
+
i_expect "to receive a string containing 'or'" do |context|
|
11
|
+
expect context[:data], &contains('or')
|
12
|
+
end
|
13
|
+
|
14
|
+
i_expect "the string to exactly equal 'or'" do |context|
|
15
|
+
expect context[:data], &is_equal_to('or')
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
run
|
data/lib/command-unit.rb
CHANGED
@@ -4,6 +4,7 @@ require_relative 'command-unit/test'
|
|
4
4
|
require_relative 'command-unit/expectation'
|
5
5
|
require_relative 'command-unit/expectation_result'
|
6
6
|
require_relative 'command-unit/hooks'
|
7
|
+
require_relative 'command-unit/expectation_helpers'
|
7
8
|
|
8
9
|
module CommandUnit
|
9
10
|
|
@@ -101,12 +102,4 @@ module CommandUnit
|
|
101
102
|
@@current_scenario.current_test.add_expectation Expectation.new(desc, &i_expect_block)
|
102
103
|
end
|
103
104
|
|
104
|
-
def pass(desc = '')
|
105
|
-
ExpectationResult.new(desc, true)
|
106
|
-
end
|
107
|
-
|
108
|
-
def fail(desc = '')
|
109
|
-
ExpectationResult.new(desc, false)
|
110
|
-
end
|
111
|
-
|
112
105
|
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module CommandUnit
|
2
|
+
|
3
|
+
def pass(desc = '')
|
4
|
+
ExpectationResult.new(desc, true)
|
5
|
+
end
|
6
|
+
|
7
|
+
def fail(desc = '')
|
8
|
+
ExpectationResult.new(desc, false)
|
9
|
+
end
|
10
|
+
|
11
|
+
def expect(thing, &proc)
|
12
|
+
if proc.nil?
|
13
|
+
if thing == true
|
14
|
+
return ExpectationResult.new('', true)
|
15
|
+
elsif thing == false
|
16
|
+
return ExpectationResult.new('Expected true but was false.', false)
|
17
|
+
else
|
18
|
+
raise "CommandUnit::expect requires either true, false or any other value with a Proc"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
result = proc.call(thing)
|
23
|
+
if result.is_a? Array
|
24
|
+
return ExpectationResult.new(result[1], result[0])
|
25
|
+
else
|
26
|
+
return ExpectationResult.new('', result)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def is_equal_to(this_thing)
|
31
|
+
return Proc.new do |other_thing|
|
32
|
+
if other_thing == this_thing
|
33
|
+
true
|
34
|
+
else
|
35
|
+
[false, "Expecting exactly '#{this_thing}', but got '#{other_thing}'"]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def contains(this_thing)
|
41
|
+
return Proc.new do |collection|
|
42
|
+
if not collection.respond_to? :include?
|
43
|
+
[false, "Unable to test if '#{collection}' contains '#{this_thing}' as it has no include? method."]
|
44
|
+
elsif collection.include? this_thing
|
45
|
+
true
|
46
|
+
else
|
47
|
+
[false, "Expected '#{collection}' to contain '#{this_thing}'."]
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
include CommandUnit
|
2
|
+
|
3
|
+
def expect_passing(result)
|
4
|
+
if not result.is_a? ExpectationResult
|
5
|
+
fail 'Expecting an ExpectationResult'
|
6
|
+
elsif result.success? != true
|
7
|
+
fail 'Expecting a pass'
|
8
|
+
else
|
9
|
+
pass
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def expect_failing(result)
|
14
|
+
if not result.is_a? ExpectationResult
|
15
|
+
fail 'Expecting an ExpectationResult'
|
16
|
+
elsif result.success? != false
|
17
|
+
fail 'Expecting a failure'
|
18
|
+
else
|
19
|
+
pass
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def expect_failing_with_message(result, expected_message)
|
24
|
+
if not result.is_a? ExpectationResult
|
25
|
+
fail 'Expecting an ExpectationResult'
|
26
|
+
elsif result.success? != false
|
27
|
+
fail 'Expecting a failure'
|
28
|
+
elsif result.message != expected_message
|
29
|
+
fail "Expecting failure message '#{expected_message}', but got '#{result.message}'"
|
30
|
+
else
|
31
|
+
pass
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
scenario :command_unit, 'Using expectation helpers' do
|
36
|
+
|
37
|
+
when_i 'use the expect helper with a boolean true' do |context|
|
38
|
+
context[:result] = expect true
|
39
|
+
end
|
40
|
+
|
41
|
+
i_expect 'to get a passing result' do |context|
|
42
|
+
expect_passing context[:result]
|
43
|
+
end
|
44
|
+
|
45
|
+
when_i 'use the expect helper with a boolean false' do |context|
|
46
|
+
context[:result] = expect false
|
47
|
+
end
|
48
|
+
|
49
|
+
i_expect 'to get a failing result' do |context|
|
50
|
+
expect_failing context[:result]
|
51
|
+
end
|
52
|
+
|
53
|
+
i_expect 'to get a failing result with message saying "Expected true but was false."' do |context|
|
54
|
+
expect_failing_with_message context[:result], 'Expected true but was false.'
|
55
|
+
end
|
56
|
+
|
57
|
+
when_i 'use the expect helper with a value and a Proc returning true' do |context|
|
58
|
+
context[:result] = expect 'anything' do
|
59
|
+
true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
i_expect 'to get a passing result' do |context|
|
64
|
+
expect_passing context[:result]
|
65
|
+
end
|
66
|
+
|
67
|
+
when_i 'use the expect helper with a value and a Proc returning false' do |context|
|
68
|
+
context[:result] = expect 'anything' do
|
69
|
+
false
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
i_expect 'to get a failing result' do |context|
|
74
|
+
expect_failing context[:result]
|
75
|
+
end
|
76
|
+
|
77
|
+
when_i 'use the expect helper with a value and a Proc returning false and a message' do |context|
|
78
|
+
context[:result] = expect 'anything' do
|
79
|
+
[false, 'Failure message']
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
i_expect 'to get a failing result' do |context|
|
84
|
+
expect_failing_with_message context[:result], 'Failure message'
|
85
|
+
end
|
86
|
+
|
87
|
+
when_i 'use the expect helper with is_equal_to and the things are equal' do |context|
|
88
|
+
context[:result] = expect(123, &is_equal_to(123))
|
89
|
+
end
|
90
|
+
|
91
|
+
i_expect 'to get a passing result' do |context|
|
92
|
+
expect_passing context[:result]
|
93
|
+
end
|
94
|
+
|
95
|
+
when_i 'use the expect helper with is_equal_to and the things are not equal' do |context|
|
96
|
+
context[:result] = expect('my random string', &is_equal_to('my unequal string'))
|
97
|
+
end
|
98
|
+
|
99
|
+
i_expect 'to get a failing result' do |context|
|
100
|
+
expect_failing context[:result]
|
101
|
+
end
|
102
|
+
|
103
|
+
when_i 'use the expect helper with contains returns true when one string contains another' do |context|
|
104
|
+
context[:result] = expect "This is a string.", &contains('is a st')
|
105
|
+
end
|
106
|
+
|
107
|
+
i_expect 'to get a passing result' do |context|
|
108
|
+
expect_passing context[:result]
|
109
|
+
end
|
110
|
+
|
111
|
+
when_i 'use the expect helper with contains returns true when one string does not contain another' do |context|
|
112
|
+
context[:result] = expect "This is a string.", &contains('pancreas')
|
113
|
+
end
|
114
|
+
|
115
|
+
i_expect 'to get a failing result' do |context|
|
116
|
+
expect_failing context[:result]
|
117
|
+
end
|
118
|
+
|
119
|
+
i_expect 'to get a failing result with message saying "Expected \'This is a string.\' to contain \'pancreas\'."' do |context|
|
120
|
+
expect_failing_with_message context[:result], "Expected 'This is a string.' to contain 'pancreas'."
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: command-unit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel R. Salisbury
|
@@ -22,8 +22,10 @@ files:
|
|
22
22
|
- README.md
|
23
23
|
- changelog.md
|
24
24
|
- command-unit.gemspec
|
25
|
+
- examples/minimal_scenario.rb
|
25
26
|
- lib/command-unit.rb
|
26
27
|
- lib/command-unit/expectation.rb
|
28
|
+
- lib/command-unit/expectation_helpers.rb
|
27
29
|
- lib/command-unit/expectation_result.rb
|
28
30
|
- lib/command-unit/hooks
|
29
31
|
- lib/command-unit/hooks.rb
|
@@ -33,6 +35,7 @@ files:
|
|
33
35
|
- lib/string/console_colours.rb
|
34
36
|
- test/quick-test.rb
|
35
37
|
- test/scenarios/empty_scenario.rb
|
38
|
+
- test/scenarios/expectation_helper_tests.rb
|
36
39
|
- test/scenarios/one_test_one_failing_expectation.rb
|
37
40
|
- test/scenarios/one_test_one_passing_expectation.rb
|
38
41
|
- test/test.rb
|