ruber 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +21 -0
- data/data/share/apps/ruber/ruberui.rc +3 -1
- data/lib/ruber/application/application.rb +22 -23
- data/lib/ruber/application/plugin.yaml +7 -2
- data/lib/ruber/{projects → application}/project_files_list.rb +0 -0
- data/lib/ruber/{projects → application}/project_files_widget.rb +0 -0
- data/lib/ruber/application/ui/project_files_rule_chooser_widget.rb +74 -0
- data/lib/ruber/{projects → application}/ui/project_files_rule_chooser_widget.ui +0 -0
- data/lib/ruber/application/ui/project_files_widget.rb +117 -0
- data/lib/ruber/{projects → application}/ui/project_files_widget.ui +0 -0
- data/lib/ruber/component_manager.rb +14 -9
- data/lib/ruber/editor/document.rb +35 -5
- data/lib/ruber/kde_sugar.rb +16 -0
- data/lib/ruber/main_window/choose_plugins_dlg.rb +7 -4
- data/lib/ruber/main_window/main_window.rb +131 -193
- data/lib/ruber/main_window/main_window_actions.rb +157 -58
- data/lib/ruber/main_window/main_window_internal.rb +145 -54
- data/lib/ruber/main_window/open_file_in_project_dlg.rb +4 -4
- data/lib/ruber/main_window/plugin.yaml +3 -6
- data/lib/ruber/main_window/ui/workspace_settings_widget.rb +2 -2
- data/lib/ruber/main_window/workspace.rb +62 -32
- data/lib/ruber/output_widget.rb +20 -16
- data/lib/ruber/pane.rb +11 -5
- data/lib/ruber/project.rb +27 -12
- data/lib/ruber/projects/ui/project_files_rule_chooser_widget.rb +2 -2
- data/lib/ruber/projects/ui/project_files_widget.rb +2 -2
- data/lib/ruber/utils.rb +37 -4
- data/lib/ruber/version.rb +1 -1
- data/lib/ruber/world/document_factory.rb +121 -0
- data/lib/ruber/world/document_list.rb +396 -0
- data/lib/ruber/world/environment.rb +470 -0
- data/lib/ruber/{main_window → world}/hint_solver.rb +1 -1
- data/lib/ruber/world/plugin.yaml +11 -0
- data/lib/ruber/world/project_factory.rb +131 -0
- data/lib/ruber/world/project_list.rb +265 -0
- data/lib/ruber/world/ui/workspace_settings_widget.rb +51 -0
- data/lib/ruber/{main_window → world}/ui/workspace_settings_widget.ui +0 -0
- data/lib/ruber/world/world.rb +307 -0
- data/plugins/auto_end/auto_end.rb +135 -9
- data/plugins/autosave/autosave.rb +4 -4
- data/plugins/find_in_files/find_in_files.rb +5 -5
- data/plugins/find_in_files/find_in_files_widgets.rb +1 -1
- data/plugins/project_browser/project_browser.rb +4 -4
- data/plugins/rake/rake.rb +4 -4
- data/plugins/rake/rake_extension.rb +1 -1
- data/plugins/rspec/rspec.rb +4 -4
- data/plugins/rspec/ruber_rspec_formatter.rb +2 -2
- data/plugins/ruby_development/ruby_development.rb +3 -3
- data/plugins/ruby_runner/ruby_runner.rb +2 -2
- data/plugins/state/plugin.yaml +6 -8
- data/plugins/state/state.rb +201 -391
- data/plugins/state/ui/config_widget.rb +5 -5
- data/plugins/state/ui/config_widget.ui +3 -3
- data/plugins/syntax_checker/syntax_checker.rb +4 -0
- data/spec/annotation_model_spec.rb +1 -1
- data/spec/auto_end_spec.rb +98 -47
- data/spec/component_manager_spec.rb +80 -21
- data/spec/document_factory_spec.rb +115 -0
- data/spec/document_list_spec.rb +560 -450
- data/spec/document_spec.rb +143 -55
- data/spec/editor_view_spec.rb +2 -2
- data/spec/environment_spec.rb +1900 -0
- data/spec/hint_solver_spec.rb +5 -5
- data/spec/kde_sugar_spec.rb +16 -0
- data/spec/output_widget_spec.rb +177 -51
- data/spec/pane_spec.rb +29 -5
- data/spec/plugin_spec.rb +1 -1
- data/spec/project_factory_spec.rb +104 -0
- data/spec/project_list_spec.rb +352 -447
- data/spec/project_spec.rb +34 -33
- data/spec/qt_sugar_spec.rb +2 -2
- data/spec/state_spec.rb +508 -811
- data/spec/utils_spec.rb +149 -98
- data/spec/workspace_spec.rb +120 -9
- data/spec/world_spec.rb +1219 -0
- metadata +23 -14
- data/lib/ruber/documents/document_list.rb +0 -412
- data/lib/ruber/documents/plugin.yaml +0 -4
- data/lib/ruber/main_window/view_manager.rb +0 -431
- data/lib/ruber/projects/plugin.yaml +0 -11
- data/lib/ruber/projects/project_list.rb +0 -314
@@ -1,8 +1,8 @@
|
|
1
1
|
=begin
|
2
2
|
** Form generated from reading ui file 'config_widget.ui'
|
3
3
|
**
|
4
|
-
** Created:
|
5
|
-
** by: Qt User Interface Compiler version 4.7.
|
4
|
+
** Created: gio apr 21 20:42:42 2011
|
5
|
+
** by: Qt User Interface Compiler version 4.7.2
|
6
6
|
**
|
7
7
|
** WARNING! All changes made in this file will be lost when recompiling ui file!
|
8
8
|
=end
|
@@ -72,9 +72,9 @@ class Ui_StateConfigWidget
|
|
72
72
|
@_state__restore_cursor_position.text = Qt::Application.translate("StateConfigWidget", "Restore cursor position when opening documents", nil, Qt::Application::UnicodeUTF8)
|
73
73
|
@_state__restore_project_files.text = Qt::Application.translate("StateConfigWidget", "Restore open files when opening a project", nil, Qt::Application::UnicodeUTF8)
|
74
74
|
@label_2.text = Qt::Application.translate("StateConfigWidget", "On startup", nil, Qt::Application::UnicodeUTF8)
|
75
|
-
@_state__startup_behaviour.insertItems(0, [Qt::Application.translate("StateConfigWidget", "Restore
|
76
|
-
Qt::Application.translate("StateConfigWidget", "Restore
|
77
|
-
Qt::Application.translate("StateConfigWidget", "Restore
|
75
|
+
@_state__startup_behaviour.insertItems(0, [Qt::Application.translate("StateConfigWidget", "Restore everything", nil, Qt::Application::UnicodeUTF8),
|
76
|
+
Qt::Application.translate("StateConfigWidget", "Restore projects", nil, Qt::Application::UnicodeUTF8),
|
77
|
+
Qt::Application.translate("StateConfigWidget", "Restore documents not associated with projects", nil, Qt::Application::UnicodeUTF8),
|
78
78
|
Qt::Application.translate("StateConfigWidget", "Keep empty workspace", nil, Qt::Application::UnicodeUTF8)])
|
79
79
|
@_state__startup_behaviour.setProperty("access", Qt::Variant.new(Qt::Application.translate("StateConfigWidget", "$startup_behaviour", nil, Qt::Application::UnicodeUTF8)))
|
80
80
|
end # retranslateUi
|
@@ -50,17 +50,17 @@
|
|
50
50
|
</property>
|
51
51
|
<item>
|
52
52
|
<property name="text">
|
53
|
-
<string>Restore
|
53
|
+
<string>Restore everything</string>
|
54
54
|
</property>
|
55
55
|
</item>
|
56
56
|
<item>
|
57
57
|
<property name="text">
|
58
|
-
<string>Restore
|
58
|
+
<string>Restore projects</string>
|
59
59
|
</property>
|
60
60
|
</item>
|
61
61
|
<item>
|
62
62
|
<property name="text">
|
63
|
-
<string>Restore
|
63
|
+
<string>Restore documents not associated with projects</string>
|
64
64
|
</property>
|
65
65
|
</item>
|
66
66
|
<item>
|
@@ -8,7 +8,7 @@ describe Ruber::AnnotationModel do
|
|
8
8
|
@components = flexmock{|m| m.should_ignore_missing}
|
9
9
|
@w = Qt::Widget.new
|
10
10
|
flexmock(Ruber).should_receive(:[]).with(:components).and_return(@components).by_default
|
11
|
-
@doc = Ruber::Document.new @app
|
11
|
+
@doc = Ruber::Document.new nil, @app
|
12
12
|
@model = Ruber::AnnotationModel.new @doc
|
13
13
|
end
|
14
14
|
|
data/spec/auto_end_spec.rb
CHANGED
@@ -71,7 +71,7 @@ describe Ruber::AutoEnd::Extension do
|
|
71
71
|
before do
|
72
72
|
Ruber[:components].load_plugin 'plugins/auto_end/'
|
73
73
|
@file = Tempfile.new ['auto_end_test', '.rb']
|
74
|
-
@doc = Ruber[:
|
74
|
+
@doc = Ruber[:world].document @file.path
|
75
75
|
@ext = @doc.extension(:auto_end)
|
76
76
|
end
|
77
77
|
|
@@ -148,7 +148,7 @@ describe Ruber::AutoEnd::Extension do
|
|
148
148
|
|
149
149
|
end
|
150
150
|
|
151
|
-
context "and the last line contains an if
|
151
|
+
context "and the last line contains an if" do
|
152
152
|
|
153
153
|
it_should_insert_end "if the if is at the beginning of the line", "if kkk\n", "class X\n%\nend", "class X\nif kkk\n\nend\nend", [2, 0]
|
154
154
|
|
@@ -161,6 +161,48 @@ describe Ruber::AutoEnd::Extension do
|
|
161
161
|
|
162
162
|
end
|
163
163
|
|
164
|
+
context "and the last line contains a for followed by an identifier, and in and some other characters" do
|
165
|
+
|
166
|
+
it_should_insert_end "if the for is at the beginning of the line", "for kkk in abc\n", "class X\n%\nend", "class X\nfor kkk in abc\n\nend\nend", [2, 0]
|
167
|
+
|
168
|
+
it_should_insert_end "if the for is preceded only by whitespaces", " for kkk in abc\n", "class X\n%\nend", "class X\n for kkk in abc\n\nend\nend", [2, 0]
|
169
|
+
|
170
|
+
it_should_insert_end 'if the for is preceded by an =', "x =for kkk in abc\n",
|
171
|
+
"class X\n%\nend", "class X\nx =for kkk in abc\n\nend\nend"
|
172
|
+
|
173
|
+
it_should_insert_end 'if the for is preceded by an = followed by spaces', "x = for kkk in abc\n", "class X\n%\nend", "class X\nx = for kkk in abc\n\nend\nend"
|
174
|
+
|
175
|
+
end
|
176
|
+
|
177
|
+
context "and the last line contains an unless" do
|
178
|
+
|
179
|
+
it_should_insert_end "if the unless is at the beginning of the line", "unless kkk\n", "class X\n%\nend", "class X\nunless kkk\n\nend\nend", [2, 0]
|
180
|
+
|
181
|
+
it_should_insert_end "if the unless is preceded only by whitespaces", " unless kkk\n", "class X\n%\nend", "class X\n unless kkk\n\nend\nend", [2, 0]
|
182
|
+
|
183
|
+
it_should_insert_end 'if the unless is preceded by an =', "x =unless kkk\n",
|
184
|
+
"class X\n%\nend", "class X\nx =unless kkk\n\nend\nend"
|
185
|
+
|
186
|
+
it_should_insert_end 'if the unless is preceded by an = followed by spaces', "x = unless kkk\n", "class X\n%\nend", "class X\nx = unless kkk\n\nend\nend"
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
context "and the last line contains a while" do
|
191
|
+
|
192
|
+
it_should_insert_end "if the while is at the beginning of the line", "while kkk\n", "class X\n%\nend", "class X\nwhile kkk\n\nend\nend", [2, 0]
|
193
|
+
|
194
|
+
it_should_insert_end "if the while is preceded only by whitespaces", " while kkk\n", "class X\n%\nend", "class X\n while kkk\n\nend\nend", [2, 0]
|
195
|
+
|
196
|
+
end
|
197
|
+
|
198
|
+
context "and the last line contains a until" do
|
199
|
+
|
200
|
+
it_should_insert_end "if the until is at the beginning of the line", "until kkk\n", "class X\n%\nend", "class X\nuntil kkk\n\nend\nend", [2, 0]
|
201
|
+
|
202
|
+
it_should_insert_end "if the until is preceded only by whitespaces", " until kkk\n", "class X\n%\nend", "class X\n until kkk\n\nend\nend", [2, 0]
|
203
|
+
|
204
|
+
end
|
205
|
+
|
164
206
|
context "and the line contains a do" do
|
165
207
|
|
166
208
|
it_should_insert_end "if the do is at the end of the line", "x.each do\n", "def y x\n%\nend", "def y x\nx.each do\n\nend\nend", [2, 0]
|
@@ -198,54 +240,63 @@ describe Ruber::AutoEnd::Extension do
|
|
198
240
|
|
199
241
|
it_should_insert_end 'if the begin is preceded by an = followed by spaces', "x = begin kkk\n", "class X\n%\nend", "class X\nx = begin kkk\n\nend\nend"
|
200
242
|
|
243
|
+
it 'does nothing if the line starts with =begin ' do
|
244
|
+
@doc.block_signals true
|
245
|
+
@doc.text = "def x\n\nend"
|
246
|
+
@doc.block_signals false
|
247
|
+
@doc.insert_text KTextEditor::Cursor.new(1,0), "=begin \n"
|
248
|
+
@doc.text.should == "def x\n=begin \n\nend"
|
249
|
+
end
|
250
|
+
|
251
|
+
|
201
252
|
end
|
202
253
|
|
203
254
|
context "and the last line starts with =begin" do
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
255
|
+
pending
|
256
|
+
# context "and the active view is associated with the document" do
|
257
|
+
#
|
258
|
+
# before do
|
259
|
+
# @view = @doc.create_view
|
260
|
+
# flexmock(@doc).should_receive(:active_view).and_return @view
|
261
|
+
# @doc.block_signals true
|
262
|
+
# @doc.text= "abc\n"
|
263
|
+
# @doc.block_signals false
|
264
|
+
# @insert_pos = KTextEditor::Cursor.new(1,0)
|
265
|
+
# #avoid messing up the text with indentation
|
266
|
+
# flexmock(@view).should_receive(:execute_action).with('tools_align').by_default
|
267
|
+
# end
|
268
|
+
#
|
269
|
+
# it "inserts an an empty line followed by a =end" do
|
270
|
+
# @doc.insert_text @insert_pos, "=begin xyz\n"
|
271
|
+
# @doc.text.should == "abc\n=begin xyz\n\n=end"
|
272
|
+
# end
|
273
|
+
#
|
274
|
+
# it 'indents the text' do
|
275
|
+
# flexmock(@view).should_receive(:execute_action).with('tools_align').once
|
276
|
+
# @doc.insert_text @insert_pos, "=begin xyz\n"
|
277
|
+
# end
|
278
|
+
#
|
279
|
+
# it 'moves the cursor to the line before the end' do
|
280
|
+
# @doc.insert_text @insert_pos, "=begin xyz\n"
|
281
|
+
# @view.cursor_position.should == KTextEditor::Cursor.new(2,0)
|
282
|
+
# end
|
283
|
+
#
|
284
|
+
# end
|
285
|
+
#
|
286
|
+
# context 'and the active view is not associated with the document' do
|
287
|
+
#
|
288
|
+
# it 'does nothing' do
|
289
|
+
# flexmock(@doc).should_receive(:active_view).and_return nil
|
290
|
+
# @doc.block_signals true
|
291
|
+
# old_text = "abc\n"
|
292
|
+
# @doc.text = old_text
|
293
|
+
# @doc.block_signals false
|
294
|
+
# @doc.insert_text KTextEditor::Cursor.new(1,0), "=begin xyz\n"
|
295
|
+
# @doc.text.should == "abc\n=begin xyz\n"
|
296
|
+
# end
|
297
|
+
#
|
298
|
+
# end
|
299
|
+
#
|
249
300
|
end
|
250
301
|
|
251
302
|
end
|
@@ -56,22 +56,45 @@ end
|
|
56
56
|
|
57
57
|
describe 'Ruber::ComponentManager#each_component' do
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
components.
|
59
|
+
context 'if the argument is :normal or missing' do
|
60
|
+
|
61
|
+
it 'calls the block passing each component in turn, in loading order' do
|
62
|
+
man = Ruber::ComponentManager.new
|
63
|
+
components = 5.times.map{|i| flexmock(i.to_s, :component_name => i.to_s, :plugin_description => OpenStruct.new({:features => []}))}
|
64
|
+
m = flexmock do |mk|
|
65
|
+
components.each{|c| mk.should_receive(:test).once.with(c).globally.ordered}
|
66
|
+
end
|
67
|
+
man.instance_variable_get(:@components).clear
|
68
|
+
components.each{|c| man.add c}
|
69
|
+
man.each_component(:normal){|i| m.test i}
|
70
|
+
m = flexmock do |mk|
|
71
|
+
components.each{|c| mk.should_receive(:test).once.with(c).globally.ordered}
|
72
|
+
end
|
73
|
+
man.each_component{|i| m.test i}
|
64
74
|
end
|
65
|
-
|
66
|
-
|
67
|
-
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'if the argument is :reverse' do
|
79
|
+
|
80
|
+
it 'should call the block passing each component in turn, in loading order' do
|
81
|
+
man = Ruber::ComponentManager.new
|
82
|
+
components = 5.times.map{|i| flexmock(i.to_s, :component_name => i.to_s, :plugin_description => OpenStruct.new({:features => []}))}
|
83
|
+
m = flexmock do |mk|
|
84
|
+
components.reverse_each{|c| mk.should_receive(:test).once.with(c).globally.ordered}
|
85
|
+
end
|
86
|
+
man.instance_variable_get(:@components).clear
|
87
|
+
components.each{|c| man.add c}
|
88
|
+
man.each_component(:reverse){|i| m.test i}
|
89
|
+
end
|
90
|
+
|
68
91
|
end
|
69
92
|
|
70
93
|
end
|
71
94
|
|
72
95
|
describe 'Ruber::ComponentManager#components' do
|
73
96
|
|
74
|
-
it '
|
97
|
+
it 'calls the block passing each component in turn, in reverse loading order' do
|
75
98
|
man = Ruber::ComponentManager.new
|
76
99
|
components = 5.times.map{|i| flexmock(i.to_s, :component_name => i.to_s, :plugin_description => OpenStruct.new({:features => []}))}
|
77
100
|
man.instance_variable_get(:@components).clear
|
@@ -83,22 +106,54 @@ end
|
|
83
106
|
|
84
107
|
describe 'Ruber::ComponentManager#each_plugin' do
|
85
108
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
109
|
+
context 'when the argument is :normal or missing' do
|
110
|
+
|
111
|
+
it 'calls the block passing each plugin in turn, in loading order' do
|
112
|
+
man = Ruber::ComponentManager.new
|
113
|
+
components = 5.times.map{|i| flexmock("component #{i}", :component_name => :"#{i}",:plugin_description => OpenStruct.new({:features => []}))}
|
114
|
+
m = flexmock("test")
|
115
|
+
plugins = [1, 3, 4]
|
116
|
+
components.each_with_index do |c, i|
|
117
|
+
is_plugin = plugins.include?(i)
|
118
|
+
c.should_receive(:is_a?).with(Ruber::Plugin).and_return( is_plugin)
|
119
|
+
if is_plugin then m.should_receive(:test).with(c).once.globally.ordered
|
120
|
+
else m.should_receive(:test).with(c).never
|
121
|
+
end
|
122
|
+
end
|
123
|
+
components.each{|c| man.add c}
|
124
|
+
man.each_plugin(:normal){|i| m.test i}
|
125
|
+
components.each_with_index do |c, i|
|
126
|
+
is_plugin = plugins.include?(i)
|
127
|
+
c.should_receive(:is_a?).with(Ruber::Plugin).and_return( is_plugin)
|
128
|
+
if is_plugin then m.should_receive(:test).with(c).once.globally.ordered
|
129
|
+
else m.should_receive(:test).with(c).never
|
130
|
+
end
|
96
131
|
end
|
132
|
+
man.each_plugin(:normal){|i| m.test i}
|
97
133
|
end
|
98
|
-
|
99
|
-
man.each_plugin{|i| m.test i}
|
134
|
+
|
100
135
|
end
|
101
136
|
|
137
|
+
context 'when the argument is :reverse' do
|
138
|
+
|
139
|
+
it 'should call the block passing each plugin in turn, in reverse loading order' do
|
140
|
+
man = Ruber::ComponentManager.new
|
141
|
+
components = 5.times.map{|i| flexmock("component #{i}", :component_name => :"#{i}",:plugin_description => OpenStruct.new({:features => []}))}
|
142
|
+
m = flexmock("test")
|
143
|
+
plugins = [1, 3, 4]
|
144
|
+
components.each_with_index do |c, i|
|
145
|
+
is_plugin = plugins.include?(i)
|
146
|
+
c.should_receive(:is_a?).with(Ruber::Plugin).and_return( is_plugin)
|
147
|
+
if is_plugin then m.should_receive(:test).with(c).once.globally.ordered
|
148
|
+
else m.should_receive(:test).with(c).never
|
149
|
+
end
|
150
|
+
end
|
151
|
+
components.reverse_each{|c| man.add c}
|
152
|
+
man.each_plugin(:reverse){|i| m.test i}
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
|
102
157
|
end
|
103
158
|
|
104
159
|
describe 'Ruber::ComponentManager#plugins' do
|
@@ -1038,6 +1093,10 @@ describe 'Ruber::ComponentManager#unload_plugin' do
|
|
1038
1093
|
@manager.instance_variable_get(:@components).keys.map(&:to_s).should =~ [:p0, :p2, :c0, :c1, :components].map(&:to_s)
|
1039
1094
|
end
|
1040
1095
|
|
1096
|
+
it 'raises ArgumentError if there\'s no plugin with that name' do
|
1097
|
+
lambda{@manager.unload_plugin(:xyz)}.should raise_error(ArgumentError, "No plugin with name xyz")
|
1098
|
+
end
|
1099
|
+
|
1041
1100
|
it 'should raise ArgumentError if the name corresponds to a component instead of a plugin' do
|
1042
1101
|
lambda{@manager.unload_plugin(:c1)}.should raise_error(ArgumentError, "A component can't be unloaded")
|
1043
1102
|
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require './spec/framework'
|
2
|
+
require './spec/common'
|
3
|
+
require 'ruber/world/document_factory'
|
4
|
+
|
5
|
+
describe Ruber::World::DocumentFactory do
|
6
|
+
|
7
|
+
it 'derives from Qt::Object' do
|
8
|
+
Ruber::World::DocumentFactory.ancestors.should include(Qt::Object)
|
9
|
+
end
|
10
|
+
|
11
|
+
before do
|
12
|
+
@factory = Ruber::World::DocumentFactory.new
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#document' do
|
16
|
+
|
17
|
+
it 'returns a document having the object passed as second argument as parent' do
|
18
|
+
obj = Qt::Object.new
|
19
|
+
doc = @factory.document nil, obj
|
20
|
+
doc.should be_a(Ruber::Document)
|
21
|
+
doc.parent.should == obj
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'when called with a file or URL as first argument' do
|
25
|
+
|
26
|
+
it 'returns a new document for the given file, if no other document for it exists' do
|
27
|
+
doc = @factory.document __FILE__
|
28
|
+
doc.path.should == __FILE__
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'returns an existing document for the same file, if it already exists' do
|
32
|
+
old = @factory.document __FILE__
|
33
|
+
new = @factory.document __FILE__
|
34
|
+
new.should == old
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'returns the existing file even if of the two calls to document one was passed a string and the other an URL' do
|
38
|
+
old = @factory.document KDE::Url.new(__FILE__)
|
39
|
+
new = @factory.document __FILE__
|
40
|
+
new.should == old
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'does not attempt to return a document which has been closed' do
|
44
|
+
old = @factory.document __FILE__
|
45
|
+
old.close
|
46
|
+
new = @factory.document __FILE__
|
47
|
+
new.should_not == old
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'returns an existing document even if it was created without a file and saved with the new name later' do
|
51
|
+
old = @factory.document nil
|
52
|
+
url = KDE::Url.new __FILE__
|
53
|
+
flexmock(old).should_receive(:url).and_return url
|
54
|
+
old.instance_eval{emit document_url_changed(self)}
|
55
|
+
new = @factory.document __FILE__
|
56
|
+
new.should == old
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'returns an existing document even if it was created for another file then
|
60
|
+
saved with the new name later' do
|
61
|
+
old = @factory.document File.join File.dirname(__FILE__), 'common.rb'
|
62
|
+
url = KDE::Url.new __FILE__
|
63
|
+
flexmock(old).should_receive(:url).and_return url
|
64
|
+
old.instance_eval{emit document_url_changed(self)}
|
65
|
+
new = @factory.document __FILE__
|
66
|
+
new.should == old
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'doesn\'t return a document which was created for the same file but was saved with another name later' do
|
70
|
+
old = @factory.document __FILE__
|
71
|
+
url = KDE::Url.new File.join(File.dirname(__FILE__), 'common.rb')
|
72
|
+
flexmock(old).should_receive(:url).and_return url
|
73
|
+
old.instance_eval{emit document_url_changed(self)}
|
74
|
+
new = @factory.document __FILE__
|
75
|
+
new.should_not == old
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'returns nil if the file is a local file and it doesn\'t exist' do
|
79
|
+
@factory.document('/xyz').should be_nil
|
80
|
+
@factory.document(KDE::Url.new('/xyz')).should be_nil
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'when called with nil as first argument' do
|
86
|
+
|
87
|
+
it 'always returns a new document' do
|
88
|
+
old = @factory.document nil
|
89
|
+
new = @factory.document nil
|
90
|
+
new.should_not == old
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'when creating a new document' do
|
96
|
+
|
97
|
+
it 'emits the document_created signal passing the document as argument' do
|
98
|
+
docs = [Ruber::Document.new(__FILE__), Ruber::Document.new]
|
99
|
+
flexmock(Ruber::Document).should_receive(:new).with(__FILE__,nil).once.and_return docs[0]
|
100
|
+
flexmock(Ruber::Document).should_receive(:new).with(nil,nil).once.and_return docs[1]
|
101
|
+
mk = flexmock do |m|
|
102
|
+
m.should_receive(:document_created).with(docs[0]).once
|
103
|
+
m.should_receive(:document_created).with(docs[1]).once
|
104
|
+
end
|
105
|
+
@factory.connect(SIGNAL('document_created(QObject*)')){|o| mk.document_created o}
|
106
|
+
doc = @factory.document __FILE__
|
107
|
+
@factory.document nil
|
108
|
+
@factory.document __FILE__
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|