rbuilder 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +47 -0
- data/bin/rbuilder +65 -0
- data/conf/example.conf +2 -0
- data/rbuilder/build.rb +50 -0
- data/rbuilder/build_command.rb +33 -0
- data/rbuilder/build_configuration.rb +21 -0
- data/rbuilder/build_description.rb +46 -0
- data/rbuilder/build_report.rb +40 -0
- data/rbuilder/build_status.rb +39 -0
- data/rbuilder/builder.rb +45 -0
- data/rbuilder/gui.rb +6 -0
- data/rbuilder/gui/build_details_pane.rb +105 -0
- data/rbuilder/gui/build_list_view_entry.rb +33 -0
- data/rbuilder/gui/builder_list_view.rb +92 -0
- data/rbuilder/gui/builder_monitor_window.rb +112 -0
- data/rbuilder/gui/images.rb +5 -0
- data/rbuilder/gui/images/broken_builder.gif +0 -0
- data/rbuilder/gui/images/building.gif +0 -0
- data/rbuilder/gui/images/failed.gif +0 -0
- data/rbuilder/gui/images/ok.gif +0 -0
- data/rbuilder/gui/images/ok_builder.gif +0 -0
- data/rbuilder/lib/observer.rb +7 -0
- data/rbuilder/libs.rb +4 -0
- data/rbuilder/revision_committed.rb +21 -0
- data/rbuilder/source_control.rb +3 -0
- data/rbuilder/source_control/status.rb +23 -0
- data/rbuilder/source_control/svn.rb +64 -0
- data/rbuilder/source_control/tracker.rb +36 -0
- data/tests/gui/test_build_details_pane.rb +118 -0
- data/tests/gui/test_builder_list_view.rb +202 -0
- data/tests/gui/test_builder_list_view_entry.rb +79 -0
- data/tests/gui/test_builder_monitor_window.rb +81 -0
- data/tests/source_control/test_source_control.rb +52 -0
- data/tests/source_control/test_svn.rb +60 -0
- data/tests/test_build.rb +111 -0
- data/tests/test_build_command.rb +57 -0
- data/tests/test_build_configuration.rb +31 -0
- data/tests/test_build_description.rb +106 -0
- data/tests/test_build_report.rb +56 -0
- data/tests/test_builder.rb +54 -0
- data/tests/test_revision_comitted.rb +30 -0
- metadata +104 -0
@@ -0,0 +1,202 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'mocha'
|
4
|
+
require File.join(File.dirname(__FILE__), '..', 'builder_test_env')
|
5
|
+
require 'rbuilder/gui'
|
6
|
+
|
7
|
+
module Gui
|
8
|
+
|
9
|
+
class TestBuilderListViewCreation < Test::Unit::TestCase
|
10
|
+
def test_creates_builder_list_view_and_build_description_list_view_for_each_build_description
|
11
|
+
builder = mock
|
12
|
+
build_description1 = mock('build_description1')
|
13
|
+
build_description2 = mock('build_description2')
|
14
|
+
build_description1.expects(:add_observer).with(instance_of(BuildDescriptionListView))
|
15
|
+
build_description2.expects(:add_observer).with(instance_of(BuildDescriptionListView))
|
16
|
+
builder.expects(:each_description).multiple_yields([build_description1], [build_description2])
|
17
|
+
builder_list_view = BuilderListView.new(builder)
|
18
|
+
|
19
|
+
end
|
20
|
+
def test_setting_monitor_window_sets_the_monitor_window_attribute
|
21
|
+
builder_list_view = BuilderListView.new(builder = stub_everything)
|
22
|
+
monitor_window = stub
|
23
|
+
builder_list_view.monitor_window = monitor_window
|
24
|
+
assert_equal(monitor_window, builder_list_view.monitor_window)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class TestBuilderListView < Test::Unit::TestCase
|
29
|
+
attr_reader :builder_list_view, :builder
|
30
|
+
def setup
|
31
|
+
builder = stub_everything
|
32
|
+
|
33
|
+
@builder_list_view = BuilderListView.new(builder)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_has_tree_store_and_tree_view
|
37
|
+
assert_equal Gtk::TreeStore, builder_list_view.tree_store.class
|
38
|
+
assert_equal Gtk::TreeView, builder_list_view.tree_view.class
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_tree_views_model_is_tree_store
|
42
|
+
assert_same(builder_list_view.tree_store, builder_list_view.tree_view.model)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_tree_models_column_types
|
46
|
+
assert_equal(String, builder_list_view.tree_store.get_column_type(1))
|
47
|
+
assert_equal(String, builder_list_view.tree_store.get_column_type(2))
|
48
|
+
assert_equal(String, builder_list_view.tree_store.get_column_type(3))
|
49
|
+
assert_equal(String, builder_list_view.tree_store.get_column_type(4))
|
50
|
+
assert_equal(String, builder_list_view.tree_store.get_column_type(5))
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_create_build_description_list_view_creates_one_with_the_store_and_build_description
|
54
|
+
build_description = stub_everything
|
55
|
+
|
56
|
+
build_description_list_view = builder_list_view.create_build_description_list_view(build_description)
|
57
|
+
|
58
|
+
assert_same builder_list_view, build_description_list_view.builder_list_view
|
59
|
+
assert_same builder_list_view.tree_store, build_description_list_view.tree_store
|
60
|
+
assert_same build_description, build_description_list_view.build_description
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_has_scrolled_window_as_gtk_container
|
64
|
+
assert builder_list_view.gtk_container.instance_of?(Gtk::ScrolledWindow)
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
def test_build_for_iterator
|
69
|
+
expected_build = Object.new
|
70
|
+
iterator = [buildlist_entry = mock]
|
71
|
+
buildlist_entry.stubs(:build).returns expected_build
|
72
|
+
assert_same expected_build, builder_list_view.build_for_iterator(iterator)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
class TestBuilderListView_BuildSelection_when_no_build_is_selected < Test::Unit::TestCase
|
77
|
+
attr_reader :builder_list_view, :monitor_window, :new_selected_build
|
78
|
+
def setup
|
79
|
+
@monitor_window = mock
|
80
|
+
@builder_list_view = BuilderListView.new(builder = stub_everything)
|
81
|
+
builder_list_view.monitor_window = monitor_window
|
82
|
+
@new_selected_build = Object.new
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_select_build_notifies_monitor_window
|
86
|
+
monitor_window.expects(:build_selected).with(new_selected_build)
|
87
|
+
builder_list_view.select_build(new_selected_build)
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_replace_build_selection_selects_new_build_if_no_build_was_selected
|
91
|
+
current_selected_build = Object.new
|
92
|
+
monitor_window.expects(:build_selected).with(new_selected_build)
|
93
|
+
builder_list_view.replace_build_selection(new_selected_build, current_selected_build)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
class TestBuilderListView_BuildSelection_when_a_build_is_selected < Test::Unit::TestCase
|
98
|
+
attr_reader :builder_list_view, :monitor_window, :new_selected_build, :current_selected_build
|
99
|
+
def setup
|
100
|
+
@new_selected_build = Object.new
|
101
|
+
@current_selected_build = Object.new
|
102
|
+
@monitor_window = mock
|
103
|
+
monitor_window.stubs(:build_selected).with(current_selected_build)
|
104
|
+
@builder_list_view = BuilderListView.new(builder = stub_everything)
|
105
|
+
builder_list_view.monitor_window = monitor_window
|
106
|
+
builder_list_view.select_build(current_selected_build)
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_select_build_notifies_monitor_window
|
110
|
+
monitor_window.expects(:build_selected).with(new_selected_build)
|
111
|
+
builder_list_view.select_build(new_selected_build)
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_replace_build_selection_selects_new_build_if_selection_to_replace_matches_current_selection
|
115
|
+
monitor_window.expects(:build_selected).with(new_selected_build)
|
116
|
+
builder_list_view.replace_build_selection(new_selected_build, current_selected_build)
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_replace_build_selection_selects_nothing_if_selection_to_replace_does_not_match_current_selection
|
120
|
+
not_currently_selected_build = Object.new
|
121
|
+
monitor_window.expects(:build_selected).with(new_selected_build).never
|
122
|
+
builder_list_view.replace_build_selection(new_selected_build, not_currently_selected_build)
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|
126
|
+
|
127
|
+
class TestBuildDescriptionListViewCreation < Test::Unit::TestCase
|
128
|
+
attr_reader :build_description
|
129
|
+
def setup
|
130
|
+
@build_description = stub_everything
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_observes_build_description
|
134
|
+
build_description.expects(:add_observer).with(instance_of(BuildDescriptionListView))
|
135
|
+
BuildDescriptionListView.new(build_description, nil)
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
class TestBuildDescriptionListView_EntryCreation < Test::Unit::TestCase
|
141
|
+
attr_reader :view, :build, :tree_store, :root_of_tree, :on_top_below_root
|
142
|
+
|
143
|
+
def setup
|
144
|
+
build_description = stub_everything
|
145
|
+
@build = stub_everything
|
146
|
+
@root_of_tree = []
|
147
|
+
@on_top_below_root = []
|
148
|
+
@tree_store = stub(:append => root_of_tree, :prepend => on_top_below_root)
|
149
|
+
@view = BuildDescriptionListView.new(build_description, nil, tree_store)
|
150
|
+
end
|
151
|
+
|
152
|
+
def test_update_with_new_build_creates_new_entry_if_none_exists
|
153
|
+
build_list_view_entry = stub
|
154
|
+
BuildListViewEntry.expects(:create).with(build,root_of_tree).returns build_list_view_entry
|
155
|
+
view.update :new_build => build
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_update_with_new_build_creates_new_entry_and_current_entry_attaches_to_new_iterator
|
159
|
+
build_list_view_entry1 = stub(:iterator => root_of_tree, :build => build)
|
160
|
+
BuildListViewEntry.expects(:create).with(build, root_of_tree).returns build_list_view_entry1
|
161
|
+
view.update :new_build => build
|
162
|
+
|
163
|
+
|
164
|
+
build2 = stub_everything('build2')
|
165
|
+
build_list_view_entry2 = stub(:build => build)
|
166
|
+
|
167
|
+
build_list_view_entry1.expects(:attach_to).with(on_top_below_root)
|
168
|
+
BuildListViewEntry.expects(:create).with(build2, root_of_tree).returns build_list_view_entry2
|
169
|
+
|
170
|
+
view.update :new_build => build2
|
171
|
+
end
|
172
|
+
|
173
|
+
|
174
|
+
end
|
175
|
+
|
176
|
+
class TestBuildDescriptionListViewSelectionHandling < Test::Unit::TestCase
|
177
|
+
attr_reader :build_description, :view, :builder_view, :build1
|
178
|
+
def setup
|
179
|
+
@build1 = stub_everything('build1')
|
180
|
+
@build_description = stub_everything
|
181
|
+
tree_store = stub(:append => [], :prepend => [])
|
182
|
+
@builder_view = mock
|
183
|
+
@view = BuildDescriptionListView.new(build_description, builder_view, tree_store)
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_auto_selects_build_when_no_row_selected
|
187
|
+
builder_view.expects(:replace_build_selection).with(build1, nil)
|
188
|
+
view.update(:new_build => build1)
|
189
|
+
end
|
190
|
+
|
191
|
+
def test_update_replace_previous_build_selection_if_previous_build_present
|
192
|
+
build2 = stub_everything('build2')
|
193
|
+
builder_view.expects(:replace_build_selection).with(build1, nil)
|
194
|
+
view.update(:new_build => build1)
|
195
|
+
builder_view.expects(:replace_build_selection).with(build2, build1)
|
196
|
+
view.update(:new_build => build2)
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
200
|
+
|
201
|
+
|
202
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'mocha'
|
4
|
+
require File.join(File.dirname(__FILE__), '..', 'builder_test_env')
|
5
|
+
require 'rbuilder/gui'
|
6
|
+
|
7
|
+
module Gui
|
8
|
+
class TestBuilderListViewEntryCreation < Test::Unit::TestCase
|
9
|
+
attr_reader :build
|
10
|
+
def setup
|
11
|
+
@build = stub_everything
|
12
|
+
end
|
13
|
+
def test_observes_build
|
14
|
+
build.expects(:add_observer).with(instance_of(BuildListViewEntry))
|
15
|
+
BuildListViewEntry.new(build)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_attaches_to_tree_view_iterator
|
19
|
+
tree_view_iterator = []
|
20
|
+
entry = BuildListViewEntry.create(build, tree_view_iterator)
|
21
|
+
assert_same tree_view_iterator, entry.iterator
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
class TestBuilderListViewEntry < Test::Unit::TestCase
|
26
|
+
attr_reader :build, :entry, :tree_view_iterator
|
27
|
+
def setup
|
28
|
+
@build = stub(:add_observer => nil, :archive => 'the_archive', :revision => 123, :status => BuildStatus.building, :summary => nil, :committer => 'westgeer')
|
29
|
+
@entry = BuildListViewEntry.new(build)
|
30
|
+
@tree_view_iterator = []
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_attach_to_tree_view_iterator_sets_revision_and_status_values
|
34
|
+
entry.attach_to(tree_view_iterator)
|
35
|
+
assert_equal [entry, 'the_archive', '123', 'westgeer', 'building', ''], tree_view_iterator
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_update_updates_tree_view_iterator
|
39
|
+
entry.attach_to(tree_view_iterator)
|
40
|
+
build.stubs(:archive => 'some_archive', :revision => 300, :status => BuildStatus.ok,:summary => 'done', :committer => 'westgeer')
|
41
|
+
entry.update
|
42
|
+
assert_equal [entry, 'some_archive', '300', 'westgeer', 'ok', 'done'], tree_view_iterator
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class TestRendererAttributesUpdate < Test::Unit::TestCase
|
47
|
+
attr_reader :build, :entry, :renderer
|
48
|
+
def setup
|
49
|
+
@renderer = mock('renderer')
|
50
|
+
@build = stub_everything
|
51
|
+
@entry = BuildListViewEntry.new(build)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_renderer_background_is_red_when_builder_status_is_failed
|
55
|
+
build.stubs(:status).returns BuildStatus.failed
|
56
|
+
renderer.expects(:background=).with('red')
|
57
|
+
entry.update_renderer_style(renderer)
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_renderer_background_is_green_when_builder_status_is_ok
|
61
|
+
build.stubs(:status).returns BuildStatus.ok
|
62
|
+
renderer.expects(:background=).with('green')
|
63
|
+
entry.update_renderer_style(renderer)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_renderer_background_is_yellow_when_builder_status_is_building
|
67
|
+
build.stubs(:status).returns BuildStatus.building
|
68
|
+
renderer.expects(:background=).with('yellow')
|
69
|
+
entry.update_renderer_style(renderer)
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_renderer_background_is_not_changed_when_status_is_invalid
|
73
|
+
build.stubs(:status).returns 'bogus'
|
74
|
+
renderer.expects(:background=).never
|
75
|
+
entry.update_renderer_style(renderer)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'mocha'
|
4
|
+
require File.join(File.dirname(__FILE__), '..', 'builder_test_env')
|
5
|
+
require 'rbuilder/gui'
|
6
|
+
|
7
|
+
module Gui
|
8
|
+
class TestBuilderMonitorWindowCreation < Test::Unit::TestCase
|
9
|
+
attr_reader :builder_list_view, :build_details_pane
|
10
|
+
def setup
|
11
|
+
@builder_list_view = stub_everything('builder_list_view')
|
12
|
+
builder_list_view.stubs(:gtk_container).returns(Gtk::Label.new)
|
13
|
+
@build_details_pane = stub('build_details_pane',:gtk_container => Gtk::Label.new)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_sets_monitor_window_on_builder_list_view
|
17
|
+
builder = stub(:status => BuilderState.ok)
|
18
|
+
builder.expects(:add_observer).with(instance_of(BuilderMonitorWindow))
|
19
|
+
builder_list_view.expects(:monitor_window=).with(instance_of(BuilderMonitorWindow))
|
20
|
+
window = BuilderMonitorWindow.new(builder, builder_list_view, build_details_pane)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class TestBuilderMonitorWindow < Test::Unit::TestCase
|
25
|
+
attr_reader :builder_list_view, :build_details_pane, :window, :builder
|
26
|
+
def setup
|
27
|
+
@builder = stub(:status => BuilderState.ok, :add_observer => nil)
|
28
|
+
@builder_list_view = stub_everything('builder_list_view')
|
29
|
+
builder_list_view.stubs(:gtk_container).returns(Gtk::Label.new)
|
30
|
+
@build_details_pane = stub('build_details_pane',:gtk_container => Gtk::Label.new)
|
31
|
+
@window = BuilderMonitorWindow.new(builder, builder_list_view, build_details_pane)
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_attaches_builder_details_view_on_selecting_a_build
|
36
|
+
build = Object
|
37
|
+
build_details_pane.expects(:attach_to).with(build)
|
38
|
+
window.build_selected(build)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_show_shows_all
|
42
|
+
window.window.expects :show_all
|
43
|
+
window.show
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_hide_hides_all
|
47
|
+
window.window.expects :hide_all
|
48
|
+
window.hide
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_toggle_hides_if_shown
|
52
|
+
window.window.stubs(:visible?).returns true
|
53
|
+
window.window.expects :hide_all
|
54
|
+
window.toggle
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_toggle_shows_if_hidden
|
58
|
+
window.hide
|
59
|
+
window.window.expects :show_all
|
60
|
+
window.toggle
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_status_of_icon_initially_set_to_ok
|
64
|
+
assert_equal 'ok_builder', window.status_icon.status
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_update_sets_status_icon_to_broken_if_status_is_broken
|
68
|
+
builder.stubs(:status => BuilderState.broken)
|
69
|
+
window.update
|
70
|
+
assert_equal 'broken_builder', window.status_icon.status
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_update_sets_status_icon_to_ok_if_status_is_broken
|
74
|
+
window.update
|
75
|
+
assert_equal 'ok_builder', window.status_icon.status
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
|
81
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'mocha'
|
4
|
+
require File.join(File.dirname(__FILE__), '..', 'builder_test_env')
|
5
|
+
require 'rbuilder/source_control'
|
6
|
+
|
7
|
+
|
8
|
+
class TestSourceControlCheck < Test::Unit::TestCase
|
9
|
+
attr_reader :svn, :source_control, :builder
|
10
|
+
|
11
|
+
def setup
|
12
|
+
@svn = stub(:working_dir => 'the_working_dir', :archive => 'the_archive_name')
|
13
|
+
@source_control = SourceControl.new(svn)
|
14
|
+
@builder = mock
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def expect_new_revision_committed_on_builder(last_commit)
|
19
|
+
svn.stubs(:get_info).returns(last_commit)
|
20
|
+
builder.expects(:new_revision_committed).with(last_commit)
|
21
|
+
end
|
22
|
+
|
23
|
+
def expect_no_new_revision_committed_on_builder(last_commit)
|
24
|
+
svn.stubs(:get_info).returns(last_commit)
|
25
|
+
builder.expects(:new_revision_committed).with(last_commit).never
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_working_dir
|
29
|
+
assert_equal 'the_working_dir', source_control.working_dir
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_archive
|
33
|
+
assert_equal 'the_archive_name', source_control.archive
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_generates_new_revision_committed_when_source_control_status_has_changed
|
38
|
+
expect_new_revision_committed_on_builder(SourceControl::Status.new(35, 'westgeest'))
|
39
|
+
source_control.report_change_to(builder)
|
40
|
+
|
41
|
+
expect_new_revision_committed_on_builder(SourceControl::Status.new(36, 'harry'))
|
42
|
+
source_control.report_change_to(builder)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_generates_nothing_when_source_control_revision_was_not_changed
|
46
|
+
expect_new_revision_committed_on_builder(SourceControl::Status.new(35, 'westgeest'))
|
47
|
+
source_control.report_change_to(builder)
|
48
|
+
|
49
|
+
expect_no_new_revision_committed_on_builder(SourceControl::Status.new(35, 'westgeest'))
|
50
|
+
source_control.report_change_to(builder)
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'mocha'
|
4
|
+
require File.join(File.dirname(__FILE__), '..', 'builder_test_env')
|
5
|
+
require 'rbuilder/source_control'
|
6
|
+
|
7
|
+
module SourceControl
|
8
|
+
class TestSvnBackEndTrackerFactory < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_svn_factory_method_returns_tracker_with_svn_backend
|
11
|
+
svn_tracker = SourceControl.svn('.')
|
12
|
+
assert_equal Svn, svn_tracker.backend.class
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class TestSvnBackEnd < Test::Unit::TestCase
|
17
|
+
attr_reader :svn
|
18
|
+
def setup
|
19
|
+
@svn = SourceControl.svn_backend('.')
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_working_dir_returns_working_dir
|
23
|
+
assert_equal '.', svn.working_dir
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_archive_returns_name_of_archive
|
27
|
+
svn.stubs(:run_info).returns svn_output_for(:repo_root => 'the_repo_root')
|
28
|
+
assert_equal 'the_repo_root', svn.archive
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_archive_strips_server_and_trunk_if_possible
|
32
|
+
svn.stubs(:run_info).returns svn_output_for(:repo_root => 'svn+ssh://yosemite/home/svn/rbuilder/trunk')
|
33
|
+
assert_equal 'home/svn/rbuilder', svn.archive
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_info_returns_info_struct_with_revision_and_committer
|
37
|
+
svn.stubs(:run_info).returns svn_output_for(:author => 'westgeest', :revision => '1')
|
38
|
+
assert_equal Status.new(1, 'westgeest'), svn.get_info
|
39
|
+
svn.stubs(:run_info).returns svn_output_for(:author => 'harry', :revision => '2')
|
40
|
+
assert_equal Status.new(2, 'harry'), svn.get_info
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
def svn_output_for(args = {})
|
45
|
+
args = {:repo_root => 'svn+ssh://yosemite/home/svn/rbuilder', :author => 'harry', :revision => '2'}.merge args
|
46
|
+
%Q{
|
47
|
+
Path: .
|
48
|
+
URL: svn+ssh://yosemite/home/svn/rbuilder/trunk
|
49
|
+
Repository Root: #{args[:repo_root]}
|
50
|
+
Repository UUID: f125cab9-89fe-4a65-988d-b833e1c403a1
|
51
|
+
Revision: #{args[:revision]}
|
52
|
+
Node Kind: directory
|
53
|
+
Schedule: normal
|
54
|
+
Last Changed Author: #{args[:author]}
|
55
|
+
Last Changed Rev: #{args[:revision]}
|
56
|
+
Last Changed Date: 2007-12-21 23:31:23 +0100 (Fri, 21 Dec 2007)
|
57
|
+
}.gsub(/^ +/,'')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|