rbuilder 0.0.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.
- 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
|