libdolt 0.15.0 → 0.16.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.
@@ -29,30 +29,18 @@ class StubRepository
29
29
  end
30
30
  end
31
31
 
32
- class StubProcessStatus
33
- attr_reader :exitstatus
34
- def initialize(code)
35
- @exitstatus = code
36
- end
37
- end
38
-
39
32
  describe Dolt::Git::Archiver do
40
- include EM::MiniTest::Spec
41
-
42
33
  describe "archive" do
43
34
  before do
44
35
  @archiver = Dolt::Git::Archiver.new("/work", "/cache")
45
36
  end
46
37
 
47
- it "resolves with existing cached file" do
38
+ it "returns existing cached file" do
48
39
  File.stubs(:exists?).with("/cache/gts-mainline-master.tar.gz").returns(true)
49
40
  repo = StubRepository.new("gts/mainline")
50
41
 
51
- @archiver.archive(repo, "master", :tar).then do |filename|
52
- assert_equal "/cache/gts-mainline-master.tar.gz", filename
53
- done!
54
- end
55
- wait!
42
+ filename = @archiver.archive(repo, "master", :tar)
43
+ assert_equal "/cache/gts-mainline-master.tar.gz", filename
56
44
  end
57
45
 
58
46
  it "generates tarball" do
@@ -60,19 +48,30 @@ describe Dolt::Git::Archiver do
60
48
 
61
49
  cmd = "sh -c 'git --git-dir /repos/gts/mainline.git archive --prefix='gts-mainline/' " +
62
50
  "--format=tar master | gzip -m > /work/gts-mainline-master.tar.gz'"
63
- d = EM::DefaultDeferrable.new
64
- EMPessimistic::DeferrableChildProcess.expects(:open).with(cmd).returns(d)
51
+ Dolt::Git.expects(:shell).with(cmd).returns(Dolt::FakeProcess.new(0))
52
+ FileUtils.stubs(:mv)
65
53
 
66
54
  @archiver.archive(repo, "master", :tar)
67
55
  end
68
56
 
57
+ it "does not allow arbitrary commands" do
58
+ repo = StubRepository.new("gts/mainline")
59
+
60
+ cmd = "sh -c 'git --git-dir /repos/gts/mainline.git archive --prefix='gts-mainline/' " +
61
+ "--format=tar master\\;\\ rm\\ -fr\\ / | gzip -m > /work/gts-mainline-master\\;\\ rm\\ -fr\\ -.tar.gz'"
62
+ Dolt::Git.expects(:shell).with(cmd).returns(Dolt::FakeProcess.new(0))
63
+ FileUtils.stubs(:mv)
64
+
65
+ @archiver.archive(repo, "master; rm -fr /", :tar)
66
+ end
67
+
69
68
  it "uses gzip format from string" do
70
69
  repo = StubRepository.new("gts/mainline")
71
70
 
72
71
  cmd = "sh -c 'git --git-dir /repos/gts/mainline.git archive --prefix='gts-mainline/' " +
73
72
  "--format=tar master | gzip -m > /work/gts-mainline-master.tar.gz'"
74
- d = EM::DefaultDeferrable.new
75
- EMPessimistic::DeferrableChildProcess.expects(:open).with(cmd).returns(d)
73
+ Dolt::Git.expects(:shell).with(cmd).returns(Dolt::FakeProcess.new(0))
74
+ FileUtils.stubs(:mv)
76
75
 
77
76
  @archiver.archive(repo, "master", "tar")
78
77
  end
@@ -82,8 +81,8 @@ describe Dolt::Git::Archiver do
82
81
 
83
82
  cmd = "sh -c 'git --git-dir /repos/gts/mainline.git archive --prefix='gts-mainline/' " +
84
83
  "--format=zip master > /work/gts-mainline-master.zip'"
85
- d = EM::DefaultDeferrable.new
86
- EMPessimistic::DeferrableChildProcess.expects(:open).with(cmd).returns(d)
84
+ Dolt::Git.expects(:shell).with(cmd).returns(Dolt::FakeProcess.new(0))
85
+ FileUtils.stubs(:mv)
87
86
 
88
87
  @archiver.archive(repo, "master", "zip")
89
88
  end
@@ -92,9 +91,7 @@ describe Dolt::Git::Archiver do
92
91
  FileUtils.expects(:mv).with("/work/gts-mainline-master.tar.gz",
93
92
  "/cache/gts-mainline-master.tar.gz")
94
93
  repo = StubRepository.new("gts/mainline")
95
- d = EM::DefaultDeferrable.new
96
- EMPessimistic::DeferrableChildProcess.expects(:open).returns(d)
97
- d.succeed("", StubProcessStatus.new(0))
94
+ Dolt::Git.stubs(:open).returns(Dolt::FakeProcess.new(0))
98
95
 
99
96
  @archiver.archive(repo, "master", :tar)
100
97
  end
@@ -103,80 +100,20 @@ describe Dolt::Git::Archiver do
103
100
  FileUtils.expects(:mv).with("/work/gts-mainline-master.tar.gz",
104
101
  "/cache/gts-mainline-master.tar.gz").never
105
102
  repo = StubRepository.new("gts/mainline")
106
- d = EM::DefaultDeferrable.new
107
- EMPessimistic::DeferrableChildProcess.expects(:open).returns(d)
108
- d.fail("", StubProcessStatus.new(1))
109
-
110
- @archiver.archive(repo, "master", :tar)
111
- end
112
-
113
- it "resolves promise with generated filename" do
114
- FileUtils.stubs(:mv)
115
- repo = StubRepository.new("gts/mainline")
116
- d = EM::DefaultDeferrable.new
117
- EMPessimistic::DeferrableChildProcess.expects(:open).returns(d)
118
- d.succeed("", StubProcessStatus.new(0))
119
-
120
- @archiver.archive(repo, "master", :tar).then do |filename|
121
- assert_equal "/cache/gts-mainline-master.tar.gz", filename
122
- done!
123
- end
124
- wait!
125
- end
126
-
127
- it "rejects promise when failing to archive" do
128
- repo = StubRepository.new("gts/mainline")
129
- d = EM::DefaultDeferrable.new
130
- EMPessimistic::DeferrableChildProcess.expects(:open).returns(d)
131
- d.fail("It done failed", StubProcessStatus.new(1))
132
-
133
- @archiver.archive(repo, "master", :tar).errback do |err|
134
- assert_match "It done failed", err.message
135
- done!
136
- end
137
- wait!
138
- end
103
+ Dolt::Git.expects(:shell).returns(Dolt::FakeProcess.new(1))
139
104
 
140
- it "does not spawn multiple identical processes" do
141
- FileUtils.stubs(:mv)
142
- repo = StubRepository.new("gts/mainline")
143
- d = EM::DefaultDeferrable.new
144
- EMPessimistic::DeferrableChildProcess.expects(:open).once.returns(d)
145
- callbacks = 0
146
- blk = lambda do |filename|
147
- assert_equal "/cache/gts-mainline-master.tar.gz", filename
148
- callbacks += 1
149
- done! if callbacks == 2
105
+ assert_raises Exception do
106
+ @archiver.archive(repo, "master", :tar)
150
107
  end
151
-
152
- @archiver.archive(repo, "master", :tar).then(&blk)
153
- @archiver.archive(repo, "master", :tar).then(&blk)
154
-
155
- wait!
156
- d.succeed("", StubProcessStatus.new(0))
157
108
  end
158
109
 
159
- it "spawns new process when format is different" do
110
+ it "returns generated filename" do
160
111
  FileUtils.stubs(:mv)
112
+ Dolt::Git.stubs(:open).returns(Dolt::FakeProcess.new(0))
161
113
  repo = StubRepository.new("gts/mainline")
162
- d = EM::DefaultDeferrable.new
163
- EMPessimistic::DeferrableChildProcess.expects(:open).twice.returns(d)
164
- callbacks = 0
165
-
166
- @archiver.archive(repo, "master", :tar).then do |filename|
167
- assert_equal "/cache/gts-mainline-master.tar.gz", filename
168
- callbacks += 1
169
- done! if callbacks == 2
170
- end
171
-
172
- @archiver.archive(repo, "master", :zip).then do |filename|
173
- assert_equal "/cache/gts-mainline-master.zip", filename
174
- callbacks += 1
175
- done! if callbacks == 2
176
- end
177
114
 
178
- wait!
179
- d.succeed("", StubProcessStatus.new(0))
115
+ filename = @archiver.archive(repo, "master", :tar)
116
+ assert_equal "/cache/gts-mainline-master.tar.gz", filename
180
117
  end
181
118
  end
182
119
  end
@@ -19,11 +19,9 @@ require "test_helper"
19
19
  require "libdolt/git/blame"
20
20
 
21
21
  describe Dolt::Git::Blame do
22
- include EM::MiniTest::Spec
23
-
24
22
  describe "parse" do
25
23
  before do
26
- @blame = <<-GIT
24
+ blame = <<-GIT
27
25
  906d67b4f3e5de7364ba9b57d174d8998d53ced6 1 1 17
28
26
  author Christian Johansen
29
27
  author-mail <christian@cjohansen.no>
@@ -93,7 +91,7 @@ beb65bee5619c651532179b19421363ead2c2a44 22 22
93
91
  end
94
92
  GIT
95
93
 
96
- @blame = Dolt::Git::Blame.parse_porcelain(@blame)
94
+ @blame = Dolt::Git::Blame.parse_porcelain(blame)
97
95
  end
98
96
 
99
97
  it "has chunks" do
@@ -125,4 +123,42 @@ beb65bee5619c651532179b19421363ead2c2a44 22 22
125
123
  assert_equal @blame.chunks[2][:committer], @blame.chunks[0][:committer]
126
124
  end
127
125
  end
126
+
127
+ describe "parsing invalid data" do
128
+ before do
129
+ @blame = <<-EOF
130
+ usage: git blame [options] [rev-opts] [rev] [--] file
131
+ [rev-opts] are documented in git-rev-list(1)
132
+
133
+ --incremental Show blame entries as we find them, incrementally
134
+ -b Show blank SHA-1 for boundary commits (Default: off)
135
+ --root Do not treat root commits as boundaries (Default: off)
136
+ --show-stats Show work cost statistics
137
+ --score-debug Show output score for blame entries
138
+ -f, --show-name Show original filename (Default: auto)
139
+ -n, --show-number Show original linenumber (Default: off)
140
+ -p, --porcelain Show in a format designed for machine consumption
141
+ --line-porcelain Show porcelain format with per-line commit information
142
+ -c Use the same output mode as git-annotate (Default: off)
143
+ -t Show raw timestamp (Default: off)
144
+ -l Show long commit SHA1 (Default: off)
145
+ -s Suppress author name and timestamp (Default: off)
146
+ -e, --show-email Show author email instead of name (Default: off)
147
+ -w Ignore whitespace differences
148
+ --minimal Spend extra cycles to find better match
149
+ -S <file> Use revisions from <file> instead of calling git-rev-list
150
+ --contents <file> Use <file>'s contents as the final image
151
+ -C[<score>] Find line copies within and across files
152
+ -M[<score>] Find line movements within and across files
153
+ -L <n,m> Process only line range n,m, counting from 1
154
+ --abbrev[=<n>] use <n> digits to display SHA-1s
155
+ EOF
156
+ end
157
+
158
+ it "raises an error" do
159
+ assert_raises Dolt::Git::InvalidBlameFormat do
160
+ Dolt::Git::Blame.parse_porcelain(@blame)
161
+ end
162
+ end
163
+ end
128
164
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  #--
3
- # Copyright (C) 2012 Gitorious AS
3
+ # Copyright (C) 2012-2013 Gitorious AS
4
4
  #
5
5
  # This program is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Affero General Public License as published by
@@ -19,8 +19,6 @@ require "test_helper"
19
19
  require "libdolt/git/commit"
20
20
 
21
21
  describe Dolt::Git::Commit do
22
- include EM::MiniTest::Spec
23
-
24
22
  describe "parse" do
25
23
  before do
26
24
  @log = <<-GIT
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  #--
3
- # Copyright (C) 2012 Gitorious AS
3
+ # Copyright (C) 2012-2013 Gitorious AS
4
4
  #
5
5
  # This program is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU Affero General Public License as published by
@@ -19,274 +19,195 @@ require "test_helper"
19
19
  require "libdolt/git/repository"
20
20
  require "time"
21
21
  require "ostruct"
22
+ require "mocha/setup"
22
23
 
23
24
  describe Dolt::Git::Repository do
24
- include EM::MiniTest::Spec
25
25
  before { @repository = Dolt::Git::Repository.new(".") }
26
26
 
27
27
  describe "#submodules" do
28
- it "returns deferrable" do
29
- deferrable = @repository.submodules("master")
30
- assert deferrable.respond_to?(:callback)
31
- assert deferrable.respond_to?(:errback)
32
- end
28
+ it "returns list of submodules" do
29
+ submodules = @repository.submodules("c1f6cd9")
30
+ url = "git://gitorious.org/gitorious/ui3.git"
33
31
 
34
- it "yields list of submodules" do
35
- @repository.submodules("c1f6cd9").callback do |submodules|
36
- url = "git://gitorious.org/gitorious/ui3.git"
37
- assert_equal [{ :path => "vendor/ui", :url => url }], submodules
38
- done!
39
- end
40
- wait!
32
+ assert_equal [{ :path => "vendor/ui", :url => url }], submodules
41
33
  end
42
34
 
43
- it "resolves with empty array if no submodules" do
44
- @repository.submodules("26139a3").callback do |submodules|
45
- assert_equal [], submodules
46
- done!
47
- end
48
- wait!
35
+ it "returns empty array if no submodules" do
36
+ submodules = @repository.submodules("26139a3")
37
+ assert_equal [], submodules
49
38
  end
50
39
  end
51
40
 
52
41
  describe "#tree" do
53
42
  it "includes submodule data for trees" do
54
- @repository.tree("3dc532f", "vendor").callback do |tree|
55
- assert_equal({
43
+ tree = @repository.tree("3dc532f", "vendor")
44
+
45
+ assert_equal({
56
46
  :type => :submodule,
57
47
  :filemode => 57344,
58
48
  :name => "ui",
59
49
  :oid => "d167e3e1c17a27e4cf459dd380670801b0659659",
60
50
  :url => "git://gitorious.org/gitorious/ui3.git"
61
51
  }, tree.entries.first)
62
- done!
63
- end
64
- wait!
65
52
  end
66
53
  end
67
54
 
68
55
  describe "#tree_entry" do
69
56
  it "includes submodule data for trees" do
70
- @repository.tree_entry("3dc532f", "vendor").callback do |tree|
71
- assert_equal({
57
+ tree = @repository.tree_entry("3dc532f", "vendor")
58
+
59
+ assert_equal({
72
60
  :type => :submodule,
73
61
  :filemode => 57344,
74
62
  :name => "ui",
75
63
  :oid => "d167e3e1c17a27e4cf459dd380670801b0659659",
76
64
  :url => "git://gitorious.org/gitorious/ui3.git"
77
65
  }, tree.entries.first)
78
- done!
79
- end
80
- wait!
81
66
  end
82
67
 
83
- it "yields blob" do
84
- @repository.tree_entry("3dc532f", "Gemfile").callback do |blob|
85
- assert blob.is_a?(Rugged::Blob)
86
- assert_equal "source \"http://rubygems.org\"\n\ngemspec\n", blob.content
87
- done!
88
- end
89
- wait!
68
+ it "returns blob" do
69
+ blob = @repository.tree_entry("3dc532f", "Gemfile")
70
+
71
+ assert blob.is_a?(Rugged::Blob)
72
+ assert_equal "source \"http://rubygems.org\"\n\ngemspec\n", blob.content
90
73
  end
91
74
  end
92
75
 
93
76
  describe "#blame" do
94
- it "returns deferrable" do
95
- deferrable = @repository.blame("master", "Gemfile")
96
- assert deferrable.respond_to?(:callback)
97
- assert deferrable.respond_to?(:errback)
98
- end
99
-
100
- it "yields blame" do
101
- @repository.blame("master", "Gemfile").callback do |blame|
102
- assert Dolt::Git::Blame === blame
103
- done!
104
- end
105
- wait!
77
+ it "returns blame" do
78
+ blame = @repository.blame("master", "Gemfile")
79
+ assert Dolt::Git::Blame === blame
106
80
  end
107
81
 
108
82
  it "separates tree-like and path" do
109
- def @repository.git(cmd); @cmd = cmd; end
110
- def @repository.cmd; @cmd; end
111
- @repository.blame("master", "Gemfile").callback
83
+ cmd = "git --git-dir #{@repository.path} blame -l -t -p master -- Gemfile"
84
+ Dolt::Git.expects(:shell).with(cmd).returns(Dolt::FakeProcess.new(0))
85
+ @repository.blame("master", "Gemfile")
86
+ end
112
87
 
113
- assert_equal "blame -l -t -p master -- Gemfile", @repository.cmd
88
+ it "does not allow injecting evil commands" do
89
+ cmd = "git --git-dir #{@repository.path} blame -l -t -p master -- Gemfile\\; rm -fr /tmp"
90
+ Dolt::Git.expects(:shell).with(cmd).returns(Dolt::FakeProcess.new(0))
91
+ @repository.blame("master", "Gemfile; rm -fr /tmp")
114
92
  end
115
93
  end
116
94
 
117
95
  describe "#log" do
118
- it "returns deferrable" do
119
- deferrable = @repository.log("master", "Gemfile", 1)
120
- assert deferrable.respond_to?(:callback)
121
- assert deferrable.respond_to?(:errback)
122
- end
123
-
124
- it "yields commits" do
125
- @repository.log("master", "dolt.gemspec", 2).callback do |log|
126
- assert_equal 2, log.length
127
- assert Hash === log[0]
128
- done!
129
- end
130
- wait!
96
+ it "returns commits" do
97
+ log = @repository.log("master", "dolt.gemspec", 2)
98
+ assert_equal 2, log.length
99
+ assert Hash === log[0]
131
100
  end
132
101
  end
133
102
 
134
103
  describe "#tree_history" do
135
- it "returns deferrable" do
136
- deferrable = @repository.tree_history("master", "")
137
- assert deferrable.respond_to?(:callback)
138
- assert deferrable.respond_to?(:errback)
139
- end
140
-
141
104
  it "fails if path is not a tree" do
142
- deferrable = @repository.tree_history("master", "Gemfile")
143
- deferrable.errback do |err|
105
+ assert_raises Exception do |err|
106
+ tree = @repository.tree_history("master", "Gemfile")
144
107
  assert_match /not a tree/, err.message
145
- done!
146
108
  end
147
- wait!
148
109
  end
149
110
 
150
111
  it "fails if path does not exist in ref" do
151
- deferrable = @repository.tree_history("26139a3", "test")
152
- deferrable.errback do |err|
112
+ assert_raises Rugged::IndexerError do |err|
113
+ tree = @repository.tree_history("26139a3", "test")
153
114
  assert_match /does not exist/, err.message
154
- done!
155
115
  end
156
- wait!
157
116
  end
158
117
 
159
- it "yields tree with history" do
160
- promise = @repository.tree_history("48ffbf7", "")
161
- promise.callback do |log|
162
- assert_equal 11, log.length
163
- expected = {
164
- :type => :blob,
165
- :oid => "e90021f89616ddf86855d05337c188408d3b417e",
166
- :filemode => 33188,
167
- :name => ".gitmodules",
168
- :history => [{
169
- :oid => "906d67b4f3e5de7364ba9b57d174d8998d53ced6",
170
- :author => { :name => "Christian Johansen",
171
- :email => "christian@cjohansen.no" },
172
- :summary => "Working Moron server for viewing blobs",
173
- :date => Time.parse("Mon Sep 10 15:07:39 +0200 2012"),
174
- :message => ""
175
- }]
176
- }
118
+ it "returns tree with history" do
119
+ log = @repository.tree_history("48ffbf7", "")
177
120
 
178
- assert_equal expected, log[0]
179
- done!
180
- end
121
+ assert_equal 11, log.length
122
+ expected = {
123
+ :type => :blob,
124
+ :oid => "e90021f89616ddf86855d05337c188408d3b417e",
125
+ :filemode => 33188,
126
+ :name => ".gitmodules",
127
+ :history => [{
128
+ :oid => "906d67b4f3e5de7364ba9b57d174d8998d53ced6",
129
+ :author => { :name => "Christian Johansen",
130
+ :email => "christian@cjohansen.no" },
131
+ :summary => "Working Moron server for viewing blobs",
132
+ :date => Time.parse("Mon Sep 10 15:07:39 +0200 2012"),
133
+ :message => ""
134
+ }]
135
+ }
181
136
 
182
- promise.errback do |err|
183
- puts "FAILED! #{err.inspect}"
184
- end
185
-
186
- wait!
137
+ assert_equal expected, log[0]
187
138
  end
188
139
 
189
- it "yields nested tree with history" do
190
- promise = @repository.tree_history("48ffbf7", "lib")
140
+ it "returns nested tree with history" do
141
+ log = @repository.tree_history("48ffbf7", "lib")
191
142
 
192
- promise.callback do |log|
193
- expected = [{
194
- :type => :tree,
195
- :oid => "58f84405b588699b24c619aa4cd83669c5623f88",
196
- :filemode => 16384,
197
- :name => "dolt",
198
- :history => [{
199
- :oid => "8ab4f8c42511f727244a02aeee04824891610bbd",
200
- :author => { :name => "Christian Johansen",
201
- :email => "christian@gitorious.com" },
202
- :summary => "New version",
203
- :date => Time.parse("Mon Oct 1 16:34:00 +0200 2012"),
204
- :message => ""
205
- }]
206
- }]
207
- assert_equal expected, log
208
- done!
209
- end
210
-
211
- promise.errback do |err|
212
- puts "FAILED! #{err.inspect}"
213
- end
214
-
215
- wait!
143
+ expected = [{
144
+ :type => :tree,
145
+ :oid => "58f84405b588699b24c619aa4cd83669c5623f88",
146
+ :filemode => 16384,
147
+ :name => "dolt",
148
+ :history => [{
149
+ :oid => "8ab4f8c42511f727244a02aeee04824891610bbd",
150
+ :author => { :name => "Christian Johansen",
151
+ :email => "christian@gitorious.com" },
152
+ :summary => "New version",
153
+ :date => Time.parse("Mon Oct 1 16:34:00 +0200 2012"),
154
+ :message => ""
155
+ }]
156
+ }]
157
+ assert_equal expected, log
216
158
  end
217
159
  end
218
160
 
219
161
  describe "#readme" do
220
- it "returns deferrable" do
221
- deferrable = @repository.readme("master")
222
- assert deferrable.respond_to?(:callback)
223
- assert deferrable.respond_to?(:errback)
224
- end
225
-
226
- it "yields single readme" do
162
+ it "returns single readme" do
227
163
  def @repository.tree(ref, path)
228
164
  entries = [{ :type => :blob, :name => "Readme" },
229
165
  { :type => :blob, :name => "file.txt" },
230
166
  { :type => :tree, :name => "dir" }]
231
167
  if ref == "master" && path == ""
232
- When.resolve(OpenStruct.new(:entries => entries))
168
+ OpenStruct.new(:entries => entries)
233
169
  else
234
- When.reject("Wrong ref/path")
170
+ raise Exception.new("Wrong ref/path")
235
171
  end
236
172
  end
237
173
 
238
- @repository.readme("master").callback do |readmes|
239
- assert_equal 1, readmes.length
240
- assert_equal "Readme", readmes.first[:name]
241
- done!
242
- end
174
+ readmes = @repository.readme("master")
243
175
 
244
- wait!
176
+ assert_equal 1, readmes.length
177
+ assert_equal "Readme", readmes.first[:name]
245
178
  end
246
179
 
247
- it "does not yield trees" do
180
+ it "does not return trees" do
248
181
  def @repository.tree(ref, path)
249
182
  entries = [{ :type => :tree, :name => "Readme" },
250
183
  { :type => :blob, :name => "file.txt" },
251
184
  { :type => :tree, :name => "dir" }]
252
- When.resolve(OpenStruct.new(:entries => entries))
253
- end
254
-
255
- @repository.readme("master").callback do |readmes|
256
- assert_equal 0, readmes.length
257
- done!
185
+ OpenStruct.new(:entries => entries)
258
186
  end
259
187
 
260
- wait!
188
+ readmes = @repository.readme("master")
189
+ assert_equal 0, readmes.length
261
190
  end
262
191
 
263
- it "yields all readmes" do
192
+ it "returns all readmes" do
264
193
  def @repository.tree(ref, path)
265
194
  entries = [{ :type => :blob, :name => "Readme.rdoc" },
266
195
  { :type => :blob, :name => "readme" },
267
196
  { :type => :blob, :name => "Readme.md" }]
268
- When.resolve(OpenStruct.new(:entries => entries))
197
+ OpenStruct.new(:entries => entries)
269
198
  end
270
199
 
271
- @repository.readme("master").callback do |readmes|
272
- assert_equal 3, readmes.length
273
- done!
274
- end
275
-
276
- wait!
200
+ readmes = @repository.readme("master")
201
+ assert_equal 3, readmes.length
277
202
  end
278
203
 
279
- it "yields empty array of readmes when promise rejects" do
204
+ it "returns empty array of readmes when looking up tree fails" do
280
205
  def @repository.tree(ref, path)
281
- When.reject(OpenStruct.new({ :message => "Unknown reason" }))
282
- end
283
-
284
- @repository.readme("master").callback do |readmes|
285
- assert_equal 0, readmes.length
286
- done!
206
+ raise Exception.new("Unknown reason")
287
207
  end
288
208
 
289
- wait!
209
+ readmes = @repository.readme("master")
210
+ assert_equal 0, readmes.length
290
211
  end
291
212
  end
292
213
  end