clintegracon 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +11 -0
- data/lib/CLIntegracon/adapter/bacon.rb +5 -3
- data/lib/CLIntegracon/formatter.rb +85 -0
- data/lib/CLIntegracon/version.rb +1 -1
- data/spec/unit/adapter/bacon_spec.rb +1 -2
- data/spec/unit/configuration_spec.rb +1 -2
- data/spec/unit/formatter_spec.rb +124 -0
- data/spec/unit/spec_helper.rb +2 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd5f7726a433dc1feba13bbe11a573bffd341122
|
4
|
+
data.tar.gz: 75ff10a192573273b4a09d0d5052c1510f4b51bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d49ed2a50832e23ba62d59d96bc96b18d1d22e9b8af5d95ad35e3bd446cbd171d8a7a71385cb5d235bea5ded61573889f19732e3d88519bc7257f588526d0bc2
|
7
|
+
data.tar.gz: ac8a342022a0f022ff1c35feea8459be9560ade8b5f3e5175933bb2b57723d43f3504d351c6d8fd98148bad01e71c9d7be6e2ebf1fd60d72f4276a6a7b4581f6
|
data/README.md
CHANGED
@@ -146,6 +146,14 @@ This is not fixed, but if yours differ, you have to change paths accordingly.
|
|
146
146
|

|
147
147
|
|
148
148
|
|
149
|
+
## Acknowledgement
|
150
|
+
|
151
|
+
This gem was inspired by the idea behind the integration tests of the
|
152
|
+
[CocoaPods](cp-main)'s main project and was integrated there.
|
153
|
+
See [the integration in CocoaPods][cp-integration] for a real-world example with
|
154
|
+
very extensive usage of all features.
|
155
|
+
|
156
|
+
|
149
157
|
## Contributing
|
150
158
|
|
151
159
|
1. Fork it
|
@@ -153,3 +161,6 @@ This is not fixed, but if yours differ, you have to change paths accordingly.
|
|
153
161
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
154
162
|
4. Push to the branch (`git push origin my-new-feature`)
|
155
163
|
5. Create new Pull Request
|
164
|
+
|
165
|
+
[cp-main]: https://github.com/CocoaPods/CocoaPods
|
166
|
+
[cp-integration]: https://github.com/CocoaPods/CocoaPods/blob/master/spec/integration.rb
|
@@ -119,13 +119,15 @@ module CLIntegracon::Adapter::Bacon
|
|
119
119
|
file_tree_spec_context.spec(spec_dir).run do |spec|
|
120
120
|
instance_eval &block
|
121
121
|
|
122
|
+
formatter = spec.formatter.lazy
|
123
|
+
|
122
124
|
spec.compare do |diff|
|
123
125
|
it diff.relative_path.to_s do
|
124
|
-
diff.produced.should.satisfy(
|
126
|
+
diff.produced.should.satisfy(formatter.describe_missing_file(diff.relative_path)) do
|
125
127
|
diff.produced.exist?
|
126
128
|
end
|
127
129
|
|
128
|
-
diff.produced.should.satisfy(
|
130
|
+
diff.produced.should.satisfy(formatter.describe_file_diff(diff)) do
|
129
131
|
diff.is_equal?
|
130
132
|
end
|
131
133
|
end
|
@@ -133,7 +135,7 @@ module CLIntegracon::Adapter::Bacon
|
|
133
135
|
|
134
136
|
spec.check_unexpected_files do |files|
|
135
137
|
it "should not produce unexpected files" do
|
136
|
-
files.should.satisfy(
|
138
|
+
files.should.satisfy(formatter.describe_unexpected_files(files)) do
|
137
139
|
files.size == 0
|
138
140
|
end
|
139
141
|
end
|
@@ -1,6 +1,82 @@
|
|
1
1
|
require 'colored'
|
2
2
|
|
3
3
|
module CLIntegracon
|
4
|
+
|
5
|
+
# A LazyString is constructed by a block, but only evaluated when needed
|
6
|
+
class LazyString
|
7
|
+
|
8
|
+
# @return [Proc]
|
9
|
+
# the closure which will be used to build the string
|
10
|
+
attr_reader :proc
|
11
|
+
|
12
|
+
# Initialize a LazyString
|
13
|
+
#
|
14
|
+
# @param [Block () -> (String)] block
|
15
|
+
# the block which returns a string, called by #to_s
|
16
|
+
#
|
17
|
+
def initialize(&block)
|
18
|
+
@proc = block
|
19
|
+
end
|
20
|
+
|
21
|
+
# Calls the underlying proc to build the string. The result will be
|
22
|
+
# memorized, so subsequent calls of this method will not cause that the
|
23
|
+
# proc will be called again.
|
24
|
+
#
|
25
|
+
# @return [String]
|
26
|
+
#
|
27
|
+
def to_str
|
28
|
+
@string ||= proc.call().to_s
|
29
|
+
end
|
30
|
+
|
31
|
+
alias :to_s :to_str
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
# A LazyStringProxy returns a LazyString for each call, which delegates the
|
36
|
+
# call as soon as the result is needed to the underlying formatter.
|
37
|
+
class LazyStringProxy
|
38
|
+
|
39
|
+
# @return [Formatter]
|
40
|
+
# the formatter used to build the string
|
41
|
+
attr_reader :formatter
|
42
|
+
|
43
|
+
# Initialize a LazyStringProxy, which returns for each call to an
|
44
|
+
# underlying formatter a new LazyString, whose #to_s method will evaluate
|
45
|
+
# to the result of the original call delegated to the formatter.
|
46
|
+
#
|
47
|
+
# @param [Formatter] formatter
|
48
|
+
# the formatter
|
49
|
+
#
|
50
|
+
def initialize(formatter)
|
51
|
+
@formatter = formatter
|
52
|
+
end
|
53
|
+
|
54
|
+
# Remember the call delegated to #formatter in a closure on an anonymous
|
55
|
+
# object, defined as method :to_s.
|
56
|
+
#
|
57
|
+
# @return [#to_s]
|
58
|
+
#
|
59
|
+
def method_missing(method, *args, &block)
|
60
|
+
return LazyString.new do
|
61
|
+
@formatter.send(method, *args, &block)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Respond to all methods, which are beginning with `describe_` to
|
66
|
+
# which the #formatter also responds.
|
67
|
+
#
|
68
|
+
# @return [Bool]
|
69
|
+
#
|
70
|
+
def respond_to?(method)
|
71
|
+
if /^describe_/.match(method) && @formatter.respond_to?(method)
|
72
|
+
true
|
73
|
+
else
|
74
|
+
super
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
4
80
|
class Formatter
|
5
81
|
|
6
82
|
# @return [FileTreeSpec]
|
@@ -17,6 +93,15 @@ module CLIntegracon
|
|
17
93
|
@spec = spec
|
18
94
|
end
|
19
95
|
|
96
|
+
# Return a proxy, which returns formatted string, evaluated first
|
97
|
+
# if #to_s is called on this instance.
|
98
|
+
#
|
99
|
+
# @return [LazyStringProxy]
|
100
|
+
#
|
101
|
+
def lazy
|
102
|
+
LazyStringProxy.new(self)
|
103
|
+
end
|
104
|
+
|
20
105
|
# Return a description text for an expectation that a file path
|
21
106
|
# was expected to exist, but is missing.
|
22
107
|
#
|
data/lib/CLIntegracon/version.rb
CHANGED
@@ -0,0 +1,124 @@
|
|
1
|
+
require File.expand_path('../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe CLIntegracon::Formatter do
|
4
|
+
|
5
|
+
def subject
|
6
|
+
CLIntegracon::Formatter
|
7
|
+
end
|
8
|
+
|
9
|
+
before do
|
10
|
+
@spec = stub('Spec', spec_folder: '$spec_folder')
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#initialize" do
|
14
|
+
it 'should set given spec as attribute' do
|
15
|
+
@formatter = subject.new(@spec)
|
16
|
+
@formatter.spec.should.should.eql?(@spec)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
shared 'has_formatting_methods' do
|
21
|
+
describe '#respond_to?' do
|
22
|
+
it 'should respond to #describe_missing_file' do
|
23
|
+
@formatter.respond_to?(:describe_missing_file).should.be.true?
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should respond to #describe_unexpected_files' do
|
27
|
+
@formatter.respond_to?(:describe_unexpected_files).should.be.true?
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should respond to #describe_file_diff' do
|
31
|
+
@formatter.respond_to?(:describe_file_diff).should.be.true?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#describe_missing_file" do
|
36
|
+
it 'should match the expected return value' do
|
37
|
+
@formatter.describe_missing_file('$missing').to_s.should.be.eql? <<-EOS.chomp
|
38
|
+
Missing file for $spec_folder:
|
39
|
+
* \e[31m$missing\e[0m
|
40
|
+
EOS
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#describe_unexpected_files" do
|
45
|
+
it 'should match the expected return value' do
|
46
|
+
@formatter.describe_unexpected_files(['$a', '$b']).to_s.should.be.eql? <<-EOS.chomp
|
47
|
+
Unexpected files for $spec_folder:
|
48
|
+
* \e[32m$a\e[0m
|
49
|
+
* \e[32m$b\e[0m
|
50
|
+
EOS
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#describe_file_diff" do
|
55
|
+
it 'should match the expected return value' do
|
56
|
+
diff = ['$before', '+ $add', '- $removed', '$after']
|
57
|
+
diff.stubs(relative_path: '$relative_path')
|
58
|
+
@formatter.describe_file_diff(diff, 20).to_s.should.be.eql? <<-EOS
|
59
|
+
File comparison error `$relative_path` for $spec_folder:
|
60
|
+
--- DIFF -----------
|
61
|
+
$before
|
62
|
+
\e[32m+ $add\e[0m
|
63
|
+
\e[31m- $removed\e[0m
|
64
|
+
$after
|
65
|
+
--- END ------------
|
66
|
+
EOS
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'has formatting methods' do
|
72
|
+
before do
|
73
|
+
@formatter = subject.new(@spec)
|
74
|
+
end
|
75
|
+
|
76
|
+
behaves_like 'has_formatting_methods'
|
77
|
+
end
|
78
|
+
|
79
|
+
describe "#lazy" do
|
80
|
+
before do
|
81
|
+
@formatter = subject.new(@spec)
|
82
|
+
end
|
83
|
+
|
84
|
+
describe '#respond_to?' do
|
85
|
+
it 'should not respond to additional methods' do
|
86
|
+
@formatter.lazy.respond_to?(:describe_foo).should.be.false?
|
87
|
+
@formatter.lazy.respond_to?(:lazy).should.be.false?
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe 'delegates to formatting methods' do
|
92
|
+
before do
|
93
|
+
@formatter = subject.new(@spec).lazy
|
94
|
+
end
|
95
|
+
|
96
|
+
behaves_like 'has_formatting_methods'
|
97
|
+
end
|
98
|
+
|
99
|
+
describe '#describe_missing_file' do
|
100
|
+
it 'should not call the method immediately' do
|
101
|
+
@formatter.expects(:describe_missing_file).never
|
102
|
+
@formatter.lazy.describe_missing_file('a')
|
103
|
+
.should.be.an.instance_of?(CLIntegracon::LazyString)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
describe "#describe_unexpected_files" do
|
108
|
+
it 'should not call the method immediately' do
|
109
|
+
@formatter.expects(:describe_unexpected_files).never
|
110
|
+
@formatter.lazy.describe_unexpected_files(['a', 'b'])
|
111
|
+
.should.be.an.instance_of?(CLIntegracon::LazyString)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "#describe_file_diff" do
|
116
|
+
it 'should not call the method immediately' do
|
117
|
+
@formatter.expects(:describe_missing_file).never
|
118
|
+
@formatter.lazy.describe_file_diff(stub('Diff'))
|
119
|
+
.should.be.an.instance_of?(CLIntegracon::LazyString)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clintegracon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marius Rackwitz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -166,6 +166,8 @@ files:
|
|
166
166
|
- spec/integration/coffeemaker_sweetner_honey/before/Coffeemakerfile.yml
|
167
167
|
- spec/unit/adapter/bacon_spec.rb
|
168
168
|
- spec/unit/configuration_spec.rb
|
169
|
+
- spec/unit/formatter_spec.rb
|
170
|
+
- spec/unit/spec_helper.rb
|
169
171
|
homepage: https://github.com/mrackwitz/CLIntegracon
|
170
172
|
licenses:
|
171
173
|
- MIT
|
@@ -210,3 +212,5 @@ test_files:
|
|
210
212
|
- spec/integration/coffeemaker_sweetner_honey/before/Coffeemakerfile.yml
|
211
213
|
- spec/unit/adapter/bacon_spec.rb
|
212
214
|
- spec/unit/configuration_spec.rb
|
215
|
+
- spec/unit/formatter_spec.rb
|
216
|
+
- spec/unit/spec_helper.rb
|