git_statistics 0.6.0 → 0.7.0

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.
@@ -0,0 +1,126 @@
1
+ require 'spec_helper'
2
+ include GitStatistics
3
+
4
+ describe CommitSummary do
5
+
6
+ let(:sha) { "bf09a64b0e0f801d3e7fe4e002cbd1bf517340a7" }
7
+ let(:repo) { GIT_REPO }
8
+ subject(:commit) { CommitSummary.new(repo, repo.lookup(sha)) }
9
+
10
+ its(:__getobj__) { should be_a Rugged::Commit }
11
+
12
+ context "understands its files and languages" do
13
+ its(:filenames) { should have(3).items }
14
+ its(:languages) { should have(1).items }
15
+ end
16
+
17
+ context "language-specific changes" do
18
+ let(:name) { "Ruby" }
19
+ subject(:language) { commit.languages.detect { |lang| lang.name == name } }
20
+ context "for commit 2aa45e4ff23c1a558b127c06e95d313a56cc6890" do
21
+ let(:sha) { "2aa45e4ff23c1a558b127c06e95d313a56cc6890" }
22
+ context "language count" do
23
+ subject { commit }
24
+ its(:languages) { should have(2).items }
25
+ end
26
+ context "Ruby" do
27
+ let(:name) { "Ruby" }
28
+ its(:additions) { should == 14 }
29
+ its(:deletions) { should == 13 }
30
+ its(:net) { should == 1 }
31
+ end
32
+ context "Text" do
33
+ let(:name) { "Text" }
34
+ its(:additions) { should == 7 }
35
+ its(:deletions) { should == 11 }
36
+ its(:net) { should == -4 }
37
+ end
38
+ end
39
+ context "for commit bf09a64b" do
40
+ subject { commit.languages.first }
41
+ its(:name) { should == "Ruby" }
42
+ its(:additions) { should == 10 }
43
+ its(:deletions) { should == 27 }
44
+ its(:net) { should == -17 }
45
+ end
46
+ end
47
+
48
+ context "file-specific changes" do
49
+ let(:name) { "lib/git_statistics/formatters/console.rb" }
50
+ subject(:file) { commit.file_stats.detect { |file| file.filename == name } }
51
+ context "for commit ef9292a92467430e0061e1b1ad4cbbc3ad7da6fd" do
52
+ let(:sha) { "ef9292a92467430e0061e1b1ad4cbbc3ad7da6fd" }
53
+ context "file count" do
54
+ subject { commit }
55
+ its(:filenames) { should have(12).items }
56
+ end
57
+ context "bin/git_statistics (new)" do
58
+ let(:name) { "bin/git_statistics" }
59
+ its(:language) { should == "Ruby" }
60
+ its(:additions) { should == 5 }
61
+ its(:deletions) { should == 0 }
62
+ its(:net) { should == 5 }
63
+ its(:status) { should == :added }
64
+ end
65
+ context "lib/initialize.rb (deleted)" do
66
+ let(:name) { "lib/initialize.rb" }
67
+ its(:language) { should == "Ruby" }
68
+ its(:additions) { should == 0 }
69
+ its(:deletions) { should == 4 }
70
+ its(:net) { should == -4 }
71
+ its(:status) { should == :deleted }
72
+ end
73
+ context "lib/git_statistics.rb (modified)" do
74
+ let(:name) { "lib/git_statistics.rb" }
75
+ its(:language) { should == "Ruby" }
76
+ its(:additions) { should == 37 }
77
+ its(:deletions) { should == 30 }
78
+ its(:net) { should == 7 }
79
+ its(:status) { should == :modified }
80
+ end
81
+ end
82
+ end
83
+
84
+ context "with a removed file" do
85
+ let(:sha) { "4ce86b844458a1fd77c6066c9297576b9520f97e" }
86
+ its(:deleted_files) { should == 2 }
87
+ end
88
+
89
+ context "without a removed file" do
90
+ let(:sha) { "b808b3a9d4ce2d8a1d850f2c24d2d1fb00e67727" }
91
+ its(:deleted_files) { should == 0 }
92
+ end
93
+
94
+ context "with a new file" do
95
+ let(:sha) { "8b1941437a0ff8cf6a35a46d4f5df8b6587c346f" }
96
+ its(:added_files) { should == 19 }
97
+ end
98
+
99
+ context "without a new file" do
100
+ let(:sha) { "52f9f38cbe4ba90edd607298cb2f9b1aec26bcf1" }
101
+ its(:added_files) { should == 0 }
102
+ end
103
+
104
+ context "with a merge" do
105
+ let(:sha) { "9d31467f6759c92f8535038c470d24a37ae93a9d" }
106
+ it { should be_a_merge }
107
+ context "statistics" do
108
+ its(:filenames) { should have(11).items }
109
+ its(:languages) { should have(1).items }
110
+ its(:additions) { should == 69 }
111
+ its(:deletions) { should == 68 }
112
+ its(:net) { should == 1 }
113
+ end
114
+ end
115
+
116
+ context "without a merge" do
117
+ it { should_not be_a_merge }
118
+ end
119
+
120
+ context "net, additions, and deletions" do
121
+ its(:additions) { should == 10 }
122
+ its(:deletions) { should == 27 }
123
+ its(:net) { should == -17 }
124
+ end
125
+
126
+ end
data/spec/commits_spec.rb CHANGED
@@ -6,7 +6,8 @@ describe Commits do
6
6
  let(:limit) {100}
7
7
  let(:fresh) {true}
8
8
  let(:pretty) {false}
9
- let(:collector) {Collector.new(limit, fresh, pretty)}
9
+ let(:repo) { GIT_REPO }
10
+ let(:collector) {Collector.new(repo, limit, fresh, pretty)}
10
11
 
11
12
  let(:commits) {collector.commits}
12
13
 
@@ -24,16 +25,15 @@ describe Commits do
24
25
  describe "#files_in_path" do
25
26
  let(:path) { '/tmp/example' }
26
27
  subject { commits.files_in_path }
27
- before do
28
- FileUtils.mkdir_p(path)
29
- Dir.chdir(path) do
30
- FileUtils.touch '0.json'
31
- FileUtils.touch '1.json'
28
+ around do |example|
29
+ Dir.mktmpdir do |dir|
30
+ Dir.chdir(dir) do
31
+ FileUtils.touch '0.json'
32
+ FileUtils.touch '1.json'
33
+ commits.stub(:path) { dir }
34
+ example.run
35
+ end
32
36
  end
33
- commits.stub(:path) { path }
34
- end
35
- after do
36
- FileUtils.rm_rf(path)
37
37
  end
38
38
  its(:count) { should == 2 }
39
39
  it { should_not include '.' }
@@ -45,7 +45,7 @@ describe Commits do
45
45
 
46
46
  def commit_size_changes_from(beginning, opts = {})
47
47
  commits.size.should == beginning
48
- commits.flush_commits(opts[:force] || false)
48
+ commits.flush_commits
49
49
  commits.size.should == opts[:to]
50
50
  end
51
51
 
@@ -63,11 +63,6 @@ describe Commits do
63
63
  let(:limit) {5}
64
64
  it { commit_size_changes_from(3, to: 3) }
65
65
  end
66
-
67
- context "with commits less than limit but forced" do
68
- let(:limit) {5}
69
- it { commit_size_changes_from(3, to: 0, force: true) }
70
- end
71
66
  end
72
67
 
73
68
  describe "#process_commits" do
@@ -87,15 +82,15 @@ describe Commits do
87
82
  it {subject[:additions].should == 153}
88
83
  it {subject[:deletions].should == 5}
89
84
  it {subject[:commits].should == 2}
90
- it {subject[:create].should == 3}
85
+ it {subject[:added_files].should == 3}
91
86
  it {subject[:merges].should == 1}
92
87
 
93
88
  it {subject[:languages][:Markdown][:additions].should == 18}
94
89
  it {subject[:languages][:Markdown][:deletions].should == 1}
95
- it {subject[:languages][:Markdown][:create].should == 1}
90
+ it {subject[:languages][:Markdown][:added_files].should == 1}
96
91
  it {subject[:languages][:Ruby][:additions].should == 135}
97
92
  it {subject[:languages][:Ruby][:deletions].should == 4}
98
- it {subject[:languages][:Ruby][:create].should == 2}
93
+ it {subject[:languages][:Ruby][:added_files].should == 2}
99
94
  end
100
95
 
101
96
  context "on second author" do
@@ -106,7 +101,7 @@ describe Commits do
106
101
 
107
102
  it {subject[:languages][:Ruby][:additions].should == 64}
108
103
  it {subject[:languages][:Ruby][:deletions].should == 16}
109
- it {subject[:languages][:Ruby][:create].should == 0}
104
+ it {subject[:languages][:Ruby][:added_files].should == 0}
110
105
  end
111
106
  end
112
107
 
@@ -118,14 +113,14 @@ describe Commits do
118
113
  it {subject[:additions].should == 73}
119
114
  it {subject[:deletions].should == 0}
120
115
  it {subject[:commits].should == 1}
121
- it {subject[:create].should == 2}
116
+ it {subject[:added_files].should == 2}
122
117
 
123
118
  it {subject[:languages][:Markdown][:additions].should == 11}
124
119
  it {subject[:languages][:Markdown][:deletions].should == 0}
125
- it {subject[:languages][:Markdown][:create].should == 1}
120
+ it {subject[:languages][:Markdown][:added_files].should == 1}
126
121
  it {subject[:languages][:Ruby][:additions].should == 62}
127
122
  it {subject[:languages][:Ruby][:deletions].should == 0}
128
- it {subject[:languages][:Ruby][:create].should == 1}
123
+ it {subject[:languages][:Ruby][:added_files].should == 1}
129
124
  end
130
125
 
131
126
  context "on second author" do
@@ -162,14 +157,14 @@ describe Commits do
162
157
  it {subject[:commits].should == 1}
163
158
  it {subject[:additions].should == 73}
164
159
  it {subject[:deletions].should == 0}
165
- it {subject[:create].should == 2}
160
+ it {subject[:added_files].should == 2}
166
161
 
167
162
  it {subject[:languages][:Markdown][:additions].should == 11}
168
163
  it {subject[:languages][:Markdown][:deletions].should == 0}
169
- it {subject[:languages][:Markdown][:create].should== 1}
164
+ it {subject[:languages][:Markdown][:added_files].should== 1}
170
165
  it {subject[:languages][:Ruby][:additions].should == 62}
171
166
  it {subject[:languages][:Ruby][:deletions].should == 0}
172
- it {subject[:languages][:Ruby][:create].should == 1}
167
+ it {subject[:languages][:Ruby][:added_files].should == 1}
173
168
  end
174
169
  end
175
170
 
@@ -196,36 +191,35 @@ describe Commits do
196
191
  it {subject[:commits].should == 1}
197
192
  it {subject[:additions].should == 73}
198
193
  it {subject[:deletions].should == 0}
199
- it {subject[:create].should == 2}
194
+ it {subject[:added_files].should == 2}
200
195
 
201
196
  it {subject[:languages][:Markdown][:additions].should == 11}
202
197
  it {subject[:languages][:Markdown][:deletions].should == 0}
203
198
  it {subject[:languages][:Ruby][:additions].should == 62}
204
199
  it {subject[:languages][:Ruby][:deletions].should == 0}
205
- it {subject[:languages][:Ruby][:create].should == 1}
200
+ it {subject[:languages][:Ruby][:added_files].should == 1}
206
201
  end
207
202
 
208
203
  context "with merge" do
209
204
  let(:merge) {true}
210
- let(:author) { 'Kevin Jalbert' }
205
+ let(:author) { "Kevin Jalbert" }
211
206
 
212
207
  it {stats.has_key?(author).should be_true}
213
208
  it {subject[:commits].should == 2}
214
209
  it {subject[:additions].should == 153}
215
210
  it {subject[:deletions].should == 5}
216
- it {subject[:create].should == 3}
211
+ it {subject[:added_files].should == 3}
217
212
  it {subject[:merges].should == 1}
218
213
 
219
214
  it {subject[:languages][:Markdown][:additions].should == 18}
220
215
  it {subject[:languages][:Markdown][:deletions].should == 1}
221
216
  it {subject[:languages][:Ruby][:additions].should == 135}
222
217
  it {subject[:languages][:Ruby][:deletions].should == 4}
223
- it {subject[:languages][:Ruby][:create].should == 2}
218
+ it {subject[:languages][:Ruby][:added_files].should == 2}
224
219
  end
225
220
  end
226
221
 
227
222
  describe "#add_language_stats" do
228
-
229
223
  context "with file language" do
230
224
  let(:data) {
231
225
  data = Hash.new(0)
@@ -276,6 +270,8 @@ describe Commits do
276
270
  let(:data) {
277
271
  commit = {:additions => 10,
278
272
  :deletions => 5,
273
+ :new_files => 0,
274
+ :removed_files => 0,
279
275
  :merge => false}
280
276
 
281
277
  data = Hash.new(0)
@@ -292,6 +288,8 @@ describe Commits do
292
288
  let(:data) {
293
289
  commit = {:additions => 10,
294
290
  :deletions => 5,
291
+ :new_files => 0,
292
+ :removed_files => 0,
295
293
  :merge => false}
296
294
 
297
295
  data = Hash.new(0)
@@ -312,10 +310,8 @@ describe Commits do
312
310
  let(:data) {
313
311
  commit = {:additions => 10,
314
312
  :deletions => 5,
315
- :create => 1,
316
- :delete => 2,
317
- :rename => 3,
318
- :copy => 4,
313
+ :added_files => 1,
314
+ :deleted_files => 2,
319
315
  :merge => false}
320
316
 
321
317
  data = Hash.new(0)
@@ -325,41 +321,39 @@ describe Commits do
325
321
  it {data[:commits].should == 1}
326
322
  it {data[:additions].should == 10}
327
323
  it {data[:deletions].should == 5}
328
- it {data[:create].should == 1}
329
- it {data[:delete].should == 2}
330
- it {data[:rename].should == 3}
331
- it {data[:copy].should == 4}
324
+ it {data[:added_files].should == 1}
325
+ it {data[:deleted_files].should == 2}
332
326
  end
333
327
  end
334
328
 
335
329
  describe "#save and #load" do
336
- context "with pretty" do
337
- let(:fixture_file) {"single_author_pretty.json"}
338
- let(:pretty) {true}
330
+ let(:fixture_contents) { fixture(fixture_file).io.join("\n") }
331
+ let(:tmpfile_contents) { File.read("tmp.json") }
339
332
 
340
- it do
341
- commits.load(fixture(fixture_file).file)
342
- commits.save("tmp.json", pretty)
333
+ before do
334
+ commits.load(fixture(fixture_file).file)
335
+ commits.save("tmp.json", pretty)
336
+ end
343
337
 
344
- same = FileUtils.compare_file("tmp.json", fixture(fixture_file).file)
345
- FileUtils.remove_file("tmp.json")
338
+ after do
339
+ FileUtils.remove_file("tmp.json")
340
+ end
346
341
 
347
- same.should be_true
342
+ context "with pretty" do
343
+ let(:fixture_file) { "single_author_pretty.json" }
344
+ let(:pretty) { true }
345
+
346
+ it do
347
+ JSON.parse(fixture_contents).should == JSON.parse(tmpfile_contents)
348
348
  end
349
349
  end
350
350
 
351
351
  context "with no pretty" do
352
- let(:fixture_file) {"multiple_authors.json"}
353
- let(:pretty) {false}
352
+ let(:fixture_file) { "multiple_authors.json" }
353
+ let(:pretty) { false }
354
354
 
355
355
  it do
356
- commits.load(fixture(fixture_file).file)
357
- commits.save("tmp.json", pretty)
358
-
359
- same = FileUtils.compare_file("tmp.json", fixture(fixture_file).file)
360
- FileUtils.remove_file("tmp.json")
361
-
362
- same.should be_true
356
+ JSON.parse(fixture_contents).should == JSON.parse(tmpfile_contents)
363
357
  end
364
358
  end
365
359
  end
@@ -6,7 +6,8 @@ describe Console do
6
6
  let(:limit) {100}
7
7
  let(:fresh) {true}
8
8
  let(:pretty) {false}
9
- let(:collector) {Collector.new(limit, fresh, pretty)}
9
+ let(:repo) { GIT_REPO }
10
+ let(:collector) {Collector.new(repo, limit, fresh, pretty)}
10
11
 
11
12
  let(:commits) {collector.commits}
12
13
 
@@ -42,14 +43,14 @@ describe Console do
42
43
  it {subject[:commits].should == 1}
43
44
  it {subject[:additions].should == 73}
44
45
  it {subject[:deletions].should == 0}
45
- it {subject[:create].should == 2}
46
+ it {subject[:added_files].should == 2}
46
47
 
47
48
  it {subject[:languages][:Ruby][:additions].should == 62}
48
49
  it {subject[:languages][:Ruby][:deletions].should == 0}
49
- it {subject[:languages][:Ruby][:create].should == 1}
50
+ it {subject[:languages][:Ruby][:added_files].should == 1}
50
51
  it {subject[:languages][:Markdown][:additions].should == 11}
51
52
  it {subject[:languages][:Markdown][:deletions].should == 0}
52
- it {subject[:languages][:Markdown][:create].should == 1}
53
+ it {subject[:languages][:Markdown][:added_files].should == 1}
53
54
  end
54
55
 
55
56
  context "on second author" do
@@ -86,14 +87,14 @@ describe Console do
86
87
  it {subject[:commits].should == 1}
87
88
  it {subject[:additions].should == 73}
88
89
  it {subject[:deletions].should == 0}
89
- it {subject[:create].should == 2}
90
+ it {subject[:added_files].should == 2}
90
91
 
91
92
  it {subject[:languages][:Ruby][:additions].should == 62}
92
93
  it {subject[:languages][:Ruby][:deletions].should == 0}
93
- it {subject[:languages][:Ruby][:create].should == 1}
94
+ it {subject[:languages][:Ruby][:added_files].should == 1}
94
95
  it {subject[:languages][:Markdown][:additions].should == 11}
95
96
  it {subject[:languages][:Markdown][:deletions].should == 0}
96
- it {subject[:languages][:Markdown][:create].should == 1}
97
+ it {subject[:languages][:Markdown][:added_files].should == 1}
97
98
  end
98
99
 
99
100
  context "on second author" do
@@ -128,14 +129,14 @@ describe Console do
128
129
  it {subject[:commits].should == 1}
129
130
  it {subject[:additions].should == 73}
130
131
  it {subject[:deletions].should == 0}
131
- it {subject[:create].should == 2}
132
+ it {subject[:added_files].should == 2}
132
133
 
133
134
  it {subject[:languages][:Ruby][:additions].should == 62}
134
135
  it {subject[:languages][:Ruby][:deletions].should == 0}
135
- it {subject[:languages][:Ruby][:create].should == 1}
136
+ it {subject[:languages][:Ruby][:added_files].should == 1}
136
137
  it {subject[:languages][:Markdown][:additions].should == 11}
137
138
  it {subject[:languages][:Markdown][:deletions].should == 0}
138
- it {subject[:languages][:Markdown][:create].should == 1}
139
+ it {subject[:languages][:Markdown][:added_files].should == 1}
139
140
 
140
141
  it {config[:sort].should == sort}
141
142
  it {config[:email].should == email}
@@ -3,38 +3,18 @@ include GitStatistics
3
3
 
4
4
  describe Utilities do
5
5
 
6
- describe "#get_repository" do
7
- subject { Utilities.get_repository(dir) }
8
-
9
- context "with root directory" do
10
- let(:dir) { Dir.pwd } # git_statistics/
11
- it { should be_a Grit::Repo }
12
- end
13
-
14
- context "with sub directory" do
15
- let(:dir) { File.dirname(__FILE__) } # git_statistics/spec/
16
- it { should be_a Grit::Repo }
17
- end
18
-
19
- context "when not in a repository directory" do
20
- before { Utilities.should_receive(:exit) }
21
- let(:dir) { Dir.home } # /Users/username/
22
- it { should be_nil }
23
- end
24
- end
25
-
26
6
  describe "#max_length_in_list" do
27
- let(:max) {nil}
28
- let(:list) {[]}
7
+ let(:max) { nil }
8
+ let(:list) { [] }
29
9
  subject(:results) {Utilities.max_length_in_list(list, max)}
30
10
 
31
11
  context "with empty list" do
32
- it { should be_nil }
12
+ it { should == 0 }
33
13
  end
34
14
 
35
15
  context "with nil list" do
36
- let(:list) {nil}
37
- it { should be_nil }
16
+ let(:list) { nil }
17
+ it { should == 0 }
38
18
  end
39
19
 
40
20
  context "with empty list and zero max" do
@@ -44,17 +24,17 @@ describe Utilities do
44
24
  end
45
25
 
46
26
  context "with preset minimum length" do
47
- let(:max) {10}
27
+ let(:max) { 10 }
48
28
  it { should == 10 }
49
29
  end
50
30
 
51
31
  context "with valid list" do
52
- let(:list) {["abc", "a", "ab"]}
32
+ let(:list) { ["abc", "a", "ab"] }
53
33
  it { should == 3 }
54
34
  end
55
35
 
56
36
  context "with valid hash" do
57
- let(:list) {{"a" => "word_a", "ab" => "word_b", "abc" => "word_c"}}
37
+ let(:list) { {"a" => "word_a", "ab" => "word_b", "abc" => "word_c"} }
58
38
  it { should == 3 }
59
39
  end
60
40
  end
@@ -76,125 +56,32 @@ describe Utilities do
76
56
  end
77
57
  end
78
58
 
79
- describe "#split_old_new_file" do
80
- let(:files) {Utilities.split_old_new_file(old, new)}
81
- context "with a change in middle" do
82
- let(:old) {"lib/{old_dir"}
83
- let(:new) {"new_dir}/file.rb"}
84
- it {files[:new_file].should == "lib/new_dir/file.rb"}
85
- end
86
-
87
- context "with a change at beginning" do
88
- let(:old) {"{src/dir/lib"}
89
- let(:new) {"lib/dir}/file.rb"}
90
- it {files[:old_file].should == "src/dir/lib/file.rb"}
91
- it {files[:new_file].should == "lib/dir/file.rb"}
92
- end
93
-
94
- context "with a change at beginning, alternative" do
95
- let(:old) {"src/{"}
96
- let(:new) {"dir}/file.rb"}
97
- it {files[:old_file].should == "src/file.rb"}
98
- it {files[:new_file].should == "src/dir/file.rb"}
99
- end
100
-
101
- context "with a change at ending" do
102
- let(:old) {"lib/dir/{old_file.rb"}
103
- let(:new) {"new_file.rb}"}
104
- it {files[:old_file].should == "lib/dir/old_file.rb"}
105
- it {files[:new_file].should == "lib/dir/new_file.rb"}
106
- end
107
-
108
- context "with a simple complete change" do
109
- let(:old) {"file.rb"}
110
- let(:new) {"lib/dir/file.rb}"}
111
- it {files[:old_file].should == "file.rb"}
112
- it {files[:new_file].should == "lib/dir/file.rb"}
113
- end
114
- end
115
-
116
- describe "#find_blob_in_tree" do
117
- let(:sha) {"7d6c29f0ad5860d3238debbaaf696e361bf8c541"} # Commit within repository
118
- let(:tree) {Utilities.get_repository(Dir.pwd).tree(sha)}
119
- let(:file) {nil}
120
- let(:blob) {Utilities.find_blob_in_tree(tree, file.split(File::Separator))}
121
- subject { blob }
122
-
123
- context "blob on root tree" do
124
- let(:file) {"Gemfile"}
125
- it { should be_instance_of Grit::Blob }
126
- its(:name) { should == file }
127
- end
128
-
129
- context "blob down tree" do
130
- let(:file) {"lib/git_statistics/collector.rb"}
131
- it { should be_instance_of Grit::Blob }
132
- its(:name) { should == File.basename(file) }
133
- end
134
-
135
- context "file is nil" do
136
- subject {Utilities.find_blob_in_tree(tree, nil)}
137
- it { should be_nil }
138
- end
139
-
140
- context "file is empty" do
141
- let(:file) {""}
142
- it { should be_nil }
143
- end
144
-
145
- context "file is submodule" do
146
- let(:sha) {"1940ef1c613a04f855d3867b874a4267d3e2c011"}
147
- let(:file) {"Spoon-Knife"}
148
- it { should be_instance_of Grit::Submodule }
149
- its(:name) { should == file }
150
- end
151
- end
152
-
153
59
  describe "#number_of_matching_files" do
154
- let(:directory) { File.join(Dir.pwd, "tmp_dir_for_spec") }
155
60
  let(:pattern) { (/\d+\.json/) }
156
- subject {Utilities.number_of_matching_files(directory, pattern)}
61
+ subject {Utilities.number_of_matching_files(Dir.pwd, pattern)}
157
62
 
158
63
  around do |example|
159
- FileUtils.mkdir_p(directory)
160
- Dir.chdir(directory) do
161
- example.run
64
+ Dir.mktmpdir do |dir|
65
+ Dir.chdir(dir) do
66
+ example.run
67
+ end
162
68
  end
163
- FileUtils.rmdir(directory)
164
69
  end
165
70
 
166
71
  context "with missing directory" do
167
- before do
168
- subject.class.stub(:warn)
169
- FileUtils.rmdir(directory)
170
- end
171
72
  it { should == 0 }
172
73
  end
173
74
 
174
75
  context "with valid files" do
175
76
  before do
176
- FileUtils.touch("0.json")
177
- FileUtils.touch("1.json")
178
- FileUtils.touch("2.json")
179
- end
180
- after do
181
- FileUtils.rm("0.json")
182
- FileUtils.rm("1.json")
183
- FileUtils.rm("2.json")
77
+ FileUtils.touch(["0.json", "1.json", "2.json"])
184
78
  end
185
79
  it { should == 3 }
186
80
  end
187
81
 
188
82
  context "with invalid files" do
189
83
  before do
190
- FileUtils.touch("0.json")
191
- FileUtils.touch("incorrect.json")
192
- FileUtils.touch("1.json")
193
- end
194
- after do
195
- FileUtils.rm("0.json")
196
- FileUtils.rm("incorrect.json")
197
- FileUtils.rm("1.json")
84
+ FileUtils.touch(["0.json", "incorrect.json", "1.json"])
198
85
  end
199
86
  it { should == 2 }
200
87
  end