ruber 0.0.7 → 0.0.8
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/CHANGES +54 -0
- data/bin/ruber +12 -1
- data/data/share/apps/ruber/ruberui.rc +5 -0
- data/data/share/icons/pin.png +0 -0
- data/lib/ruber/application/application.rb +1 -1
- data/lib/ruber/documents/document_list.rb +1 -1
- data/lib/ruber/editor/document.rb +26 -6
- data/lib/ruber/editor/editor_view.rb +21 -2
- data/lib/ruber/filtered_output_widget.rb +1 -1
- data/lib/ruber/ktexteditor_sugar.rb +124 -0
- data/lib/ruber/main_window/main_window.rb +34 -16
- data/lib/ruber/main_window/main_window_actions.rb +98 -5
- data/lib/ruber/main_window/main_window_internal.rb +1 -1
- data/lib/ruber/main_window/plugin.yaml +5 -0
- data/lib/ruber/main_window/ui/choose_plugins_widget.rb +2 -2
- data/lib/ruber/main_window/ui/main_window_settings_widget.rb +67 -34
- data/lib/ruber/main_window/ui/main_window_settings_widget.ui +77 -30
- data/lib/ruber/main_window/ui/new_project_widget.rb +2 -2
- data/lib/ruber/main_window/ui/open_file_in_project_dlg.rb +2 -2
- data/lib/ruber/main_window/ui/output_color_widget.rb +2 -2
- data/lib/ruber/main_window/ui/workspace_settings_widget.rb +1 -1
- data/lib/ruber/main_window/view_manager.rb +14 -1
- data/lib/ruber/output_widget.rb +409 -288
- data/lib/ruber/pane.rb +22 -0
- 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/qt_sugar.rb +11 -0
- data/lib/ruber/version.rb +1 -1
- data/plugins/auto_end/auto_end.rb +122 -0
- data/plugins/auto_end/plugin.yaml +11 -0
- data/plugins/autosave/ui/autosave_config_widget.rb +2 -2
- data/plugins/command/command.rb +71 -12
- data/plugins/command/output.rb +592 -0
- data/plugins/command/ui/tool_widget.rb +143 -0
- data/plugins/command/ui/tool_widget.ui +147 -0
- data/plugins/find_in_files/ui/config_widget.rb +2 -2
- data/plugins/find_in_files/ui/find_in_files_widget.rb +2 -2
- data/plugins/rake/ui/add_quick_task_widget.rb +2 -2
- data/plugins/rake/ui/choose_task_widget.rb +2 -2
- data/plugins/rake/ui/config_widget.rb +2 -2
- data/plugins/rake/ui/project_widget.rb +2 -2
- data/plugins/rspec/plugin.yaml +7 -2
- data/plugins/rspec/rspec.rb +178 -53
- data/plugins/rspec/rspecui.rc +2 -3
- data/plugins/rspec/ui/config_widget.rb +79 -0
- data/plugins/rspec/ui/config_widget.ui +89 -0
- data/plugins/rspec/ui/rspec_project_widget.rb +2 -2
- data/plugins/ruby_development/ruby_development.rb +1 -1
- data/plugins/ruby_development/ui/config_widget.rb +1 -1
- data/plugins/ruby_development/ui/project_widget.rb +2 -2
- data/plugins/ruby_runner/ruby_runner.rb +13 -12
- data/plugins/ruby_runner/ui/config_widget.rb +2 -2
- data/plugins/ruby_runner/ui/project_widget.rb +2 -2
- data/plugins/ruby_runner/ui/ruby_runnner_plugin_option_widget.rb +2 -2
- data/plugins/state/ui/config_widget.rb +2 -2
- data/plugins/syntax_checker/syntax_checker.rb +1 -1
- data/spec/auto_end_spec.rb +272 -0
- data/spec/common.rb +1 -0
- data/spec/document_spec.rb +83 -0
- data/spec/editor_view_spec.rb +41 -0
- data/spec/filtered_output_widget_spec.rb +2 -2
- data/spec/ktexteditor_sugar_spec.rb +190 -0
- data/spec/output_widget_spec.rb +120 -11
- data/spec/pane_spec.rb +1 -1
- data/spec/qt_sugar_spec.rb +14 -0
- data/spec/state_spec.rb +0 -26
- metadata +14 -3
data/spec/common.rb
CHANGED
data/spec/document_spec.rb
CHANGED
@@ -802,4 +802,87 @@ describe Ruber::Document do
|
|
802
802
|
|
803
803
|
end
|
804
804
|
|
805
|
+
describe '#text' do
|
806
|
+
|
807
|
+
before do
|
808
|
+
@doc = Ruber::Document.new
|
809
|
+
end
|
810
|
+
|
811
|
+
context 'when called with no arguments' do
|
812
|
+
|
813
|
+
it 'returns an empty string if the document is empty' do
|
814
|
+
@doc.text.should == ''
|
815
|
+
end
|
816
|
+
|
817
|
+
it 'returns the text of the document if the document is not empty' do
|
818
|
+
@doc.text = 'xyz'
|
819
|
+
@doc.text.should == 'xyz'
|
820
|
+
end
|
821
|
+
|
822
|
+
end
|
823
|
+
|
824
|
+
context 'when called with a KTextEditor::Range argument' do
|
825
|
+
|
826
|
+
it 'returns an empty string if the document is empty' do
|
827
|
+
@doc.text(KTextEditor::Range.new(2,3, 4, 5)).should == ''
|
828
|
+
end
|
829
|
+
|
830
|
+
it 'returns the text contained in the given range if the document is not empty' do
|
831
|
+
@doc.text = "abc\ndef\nghi"
|
832
|
+
@doc.text(KTextEditor::Range.new(0,1,1,2)).should == "bc\nde"
|
833
|
+
end
|
834
|
+
|
835
|
+
it 'returns an empty string if the range is invalid' do
|
836
|
+
@doc.text = "abc\ndef\nghi"
|
837
|
+
@doc.text(KTextEditor::Range.new(-5,0,0,2)).should == ''
|
838
|
+
end
|
839
|
+
|
840
|
+
end
|
841
|
+
|
842
|
+
context 'when the second argument is true' do
|
843
|
+
|
844
|
+
it 'returns an empty string if the document is empty' do
|
845
|
+
@doc.text(KTextEditor::Range.new(2,3, 4, 5), true).should == ''
|
846
|
+
end
|
847
|
+
|
848
|
+
it 'returns the text contained in the given range, considered as a block selection, if the document is not empty' do
|
849
|
+
@doc.text = "abc\ndef\nghi"
|
850
|
+
@doc.text(KTextEditor::Range.new(0,1,1,2), true).should == "b\ne"
|
851
|
+
end
|
852
|
+
|
853
|
+
it 'returns an empty string if the range is invalid' do
|
854
|
+
@doc.text = "abc\ndef\nghi"
|
855
|
+
@doc.text(KTextEditor::Range.new(-5,0,0,2), true).should == ''
|
856
|
+
end
|
857
|
+
|
858
|
+
end
|
859
|
+
|
860
|
+
end
|
861
|
+
|
862
|
+
describe '#line' do
|
863
|
+
|
864
|
+
before do
|
865
|
+
@doc = Ruber::Document.new
|
866
|
+
end
|
867
|
+
|
868
|
+
it 'returns the text in the line given as argument' do
|
869
|
+
@doc.text = "abc\ndef\nghi"
|
870
|
+
lines = %w[abc def ghi]
|
871
|
+
lines.each_with_index do |str, i|
|
872
|
+
@doc.line(i).should == str
|
873
|
+
end
|
874
|
+
end
|
875
|
+
|
876
|
+
it 'returns an empty string if the line is empty' do
|
877
|
+
@doc.text = "abc\n\nxyz"
|
878
|
+
@doc.line(1).should == ''
|
879
|
+
end
|
880
|
+
|
881
|
+
it 'returns an empty string if the line number corresponds to a nonexisting line' do
|
882
|
+
@doc.text = "abc\ndef\nghi"
|
883
|
+
@doc.line(10).should == ''
|
884
|
+
end
|
885
|
+
|
886
|
+
end
|
887
|
+
|
805
888
|
end
|
data/spec/editor_view_spec.rb
CHANGED
@@ -148,6 +148,47 @@ describe Ruber::EditorView do
|
|
148
148
|
end
|
149
149
|
|
150
150
|
end
|
151
|
+
|
152
|
+
describe '#move_cursor_by' do
|
153
|
+
|
154
|
+
before do
|
155
|
+
@doc.text = 20.times.map{'x'*20}.join("\n")
|
156
|
+
@view.go_to 10, 8
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'moves the cursor by the specified amount from the current position' do
|
160
|
+
exp = KTextEditor::Cursor.new 14, 9
|
161
|
+
@view.move_cursor_by 4, 1
|
162
|
+
res = @view.cursor_position
|
163
|
+
res.line.should == exp.line
|
164
|
+
res.column.should == exp.column
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'moves the cursor upwards if the row argument is negative' do
|
168
|
+
exp = KTextEditor::Cursor.new 6, 9
|
169
|
+
@view.move_cursor_by -4, 1
|
170
|
+
res = @view.cursor_position
|
171
|
+
res.line.should == exp.line
|
172
|
+
res.column.should == exp.column
|
173
|
+
end
|
174
|
+
|
175
|
+
it 'moves the cursor to the left if the column argument is negative' do
|
176
|
+
exp = KTextEditor::Cursor.new 14, 5
|
177
|
+
@view.move_cursor_by 4, -3
|
178
|
+
res = @view.cursor_position
|
179
|
+
res.line.should == exp.line
|
180
|
+
res.column.should == exp.column
|
181
|
+
end
|
182
|
+
|
183
|
+
it 'doesn\'t move the cursor and returns false if the new cursor position is out of range' do
|
184
|
+
exp = KTextEditor::Cursor.new 10, 8
|
185
|
+
@view.move_cursor_by(100, -300).should be_false
|
186
|
+
res = @view.cursor_position
|
187
|
+
res.line.should == exp.line
|
188
|
+
res.column.should == exp.column
|
189
|
+
end
|
190
|
+
|
191
|
+
end
|
151
192
|
|
152
193
|
end
|
153
194
|
|
@@ -60,13 +60,13 @@ describe Ruber::FilteredOutputWidget do
|
|
60
60
|
flexmock(editor).should_receive(:hide).once
|
61
61
|
flexmock(KDE::LineEdit).should_receive(:new).once.with(Ruber::FilteredOutputWidget).and_return editor
|
62
62
|
ow = Ruber::FilteredOutputWidget.new
|
63
|
-
ow.layout.item_at_position(
|
63
|
+
ow.layout.item_at_position(2,0).widget.should be_the_same_as(editor)
|
64
64
|
end
|
65
65
|
|
66
66
|
it 'overrides the editor\'s keyReleasedEvent method so that it hides the editor itself if the ESC key (without modifiers) is pressed' do
|
67
67
|
ow = Ruber::FilteredOutputWidget.new
|
68
68
|
ed = ow.instance_variable_get(:@editor)
|
69
|
-
flexmock(ed).should_receive(:hide)
|
69
|
+
flexmock(ed).should_receive(:hide) #.once
|
70
70
|
ev = Qt::KeyEvent.new Qt::KeyEvent::KeyRelease, Qt::Key_Escape, 0
|
71
71
|
ed.send :keyReleaseEvent, ev
|
72
72
|
ev = Qt::KeyEvent.new Qt::KeyEvent::KeyRelease, Qt::Key_A, 0, 'A'
|
@@ -0,0 +1,190 @@
|
|
1
|
+
require './spec/common'
|
2
|
+
require 'ruber/ktexteditor_sugar'
|
3
|
+
|
4
|
+
describe KTextEditor::Cursor do
|
5
|
+
|
6
|
+
describe '#inspect' do
|
7
|
+
|
8
|
+
it 'returns a string containing the class, the object id and the line and column associated with the cursor' do
|
9
|
+
line = 12
|
10
|
+
col = 38
|
11
|
+
cur = KTextEditor::Cursor.new line, col
|
12
|
+
exp = "<KTextEditor::Cursor:#{cur.object_id} line=#{line} column=#{col}>"
|
13
|
+
cur.inspect.should == exp
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'returns a string containing the class, the object id and the string DISPOSED if the Cursor has been disposed' do
|
17
|
+
range = KTextEditor::Cursor.new 1,2
|
18
|
+
range.dispose
|
19
|
+
range.inspect.should == "<KTextEditor::Cursor:#{range.object_id} DISPOSED>"
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#==' do
|
26
|
+
|
27
|
+
it 'returns true if the argument is a Cursor with the same line and column' do
|
28
|
+
line = 10
|
29
|
+
col = 24
|
30
|
+
c1, c2 = 2.times.map{KTextEditor::Cursor.new line, col}
|
31
|
+
c1.should == c2
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns false if the argument is a Cursor with a different line or column number' do
|
35
|
+
cursor = KTextEditor::Cursor.new 10, 34
|
36
|
+
cursors =
|
37
|
+
[
|
38
|
+
KTextEditor::Cursor.new(10, 21),
|
39
|
+
KTextEditor::Cursor.new(2, 34),
|
40
|
+
KTextEditor::Cursor.new(1, 9)
|
41
|
+
]
|
42
|
+
cursors.each{|c| cursor.should_not == c}
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns false if the other object is not a Cursor' do
|
46
|
+
cursor = KTextEditor::Cursor.new(10, 34).should_not == "x"
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#dup' do
|
52
|
+
|
53
|
+
before do
|
54
|
+
@cur = KTextEditor::Cursor.new 23, 57
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'returns a copy of self' do
|
58
|
+
res = @cur.dup
|
59
|
+
res.should == @cur
|
60
|
+
res.should_not equal(@cur)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'doesn\'t copy the frozen state of self' do
|
64
|
+
res = @cur.dup
|
65
|
+
res.should_not be_frozen
|
66
|
+
@cur.freeze
|
67
|
+
res = @cur.dup
|
68
|
+
res.should_not be_frozen
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#clone' do
|
74
|
+
|
75
|
+
before do
|
76
|
+
@cur = KTextEditor::Cursor.new 23, 57
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'returns a copy of self' do
|
80
|
+
res = @cur.clone
|
81
|
+
res.should == @cur
|
82
|
+
res.should_not equal(@cur)
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'copies the frozen state of self' do
|
86
|
+
res = @cur.clone
|
87
|
+
res.should_not be_frozen
|
88
|
+
@cur.freeze
|
89
|
+
res = @cur.clone
|
90
|
+
res.should be_frozen
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
describe KTextEditor::Range do
|
98
|
+
|
99
|
+
describe '#inspect' do
|
100
|
+
|
101
|
+
it 'returns a string containing the class, the object id and the starting and ending line and column' do
|
102
|
+
start_line = 12
|
103
|
+
start_col = 38
|
104
|
+
end_line = 15
|
105
|
+
end_col = 20
|
106
|
+
range = KTextEditor::Range.new start_line, start_col, end_line, end_col
|
107
|
+
exp = "<KTextEditor::Range:#{range.object_id} start=(#{start_line};#{start_col}) end=(#{end_line};#{end_col})>"
|
108
|
+
range.inspect.should == exp
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'returns a string containing the class, the object id and the string DISPOSED if the Range has been disposed' do
|
112
|
+
range = KTextEditor::Range.new 1,2,3,4
|
113
|
+
range.dispose
|
114
|
+
range.inspect.should == "<KTextEditor::Range:#{range.object_id} DISPOSED>"
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
describe '==' do
|
120
|
+
|
121
|
+
it 'returns true if the argument is a Range with the same start and end' do
|
122
|
+
r1 = KTextEditor::Range.new 12, 4, 13, 5
|
123
|
+
r2 = KTextEditor::Range.new 12, 4, 13, 5
|
124
|
+
r1.should == r2
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'returns false if the argument is not a Range' do
|
128
|
+
r = KTextEditor::Range.new 12, 4, 13, 5
|
129
|
+
r.should_not == 'x'
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'returns false if the argument is a range with different start or end' do
|
133
|
+
range = KTextEditor::Range.new 12, 4, 13, 5
|
134
|
+
ranges = [
|
135
|
+
KTextEditor::Range.new(11,4,13,5),
|
136
|
+
KTextEditor::Range.new(12,4,13,9),
|
137
|
+
KTextEditor::Range.new(13,2,15,6)
|
138
|
+
]
|
139
|
+
ranges.each{|r| r.should_not == range}
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
describe '#dup' do
|
145
|
+
|
146
|
+
before do
|
147
|
+
@range = KTextEditor::Range.new 23, 57, 46, 23
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'returns a copy of self' do
|
151
|
+
res = @range.dup
|
152
|
+
res.should == @range
|
153
|
+
res.should_not equal(@range)
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'doesn\'t copy the frozen state of self' do
|
157
|
+
res = @range.dup
|
158
|
+
res.should_not be_frozen
|
159
|
+
@range.freeze
|
160
|
+
res = @range.dup
|
161
|
+
res.should_not be_frozen
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
describe '#clone' do
|
167
|
+
|
168
|
+
before do
|
169
|
+
@range = KTextEditor::Range.new 23, 57, 46, 23
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'returns a copy of self' do
|
173
|
+
res = @range.clone
|
174
|
+
res.should == @range
|
175
|
+
res.should_not equal(@range)
|
176
|
+
end
|
177
|
+
|
178
|
+
it 'copies the frozen state of self' do
|
179
|
+
res = @range.clone
|
180
|
+
res.should_not be_frozen
|
181
|
+
@range.freeze
|
182
|
+
res = @range.clone
|
183
|
+
res.should be_frozen
|
184
|
+
end
|
185
|
+
|
186
|
+
end
|
187
|
+
|
188
|
+
|
189
|
+
|
190
|
+
end
|
data/spec/output_widget_spec.rb
CHANGED
@@ -152,9 +152,17 @@ describe Ruber::OutputWidget do
|
|
152
152
|
w.view.parent.should equal(w)
|
153
153
|
end
|
154
154
|
|
155
|
-
it 'inserts the view in the layout at position (
|
155
|
+
it 'inserts the view in the layout at position (1,0)' do
|
156
156
|
w = Ruber::OutputWidget.new
|
157
|
-
w.layout.item_at_position(
|
157
|
+
w.layout.item_at_position(1,0).widget.should be_a(Ruber::OutputWidget::ListView)
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'has a checkable Qt::ToolButton in the first line, aligned to the right' do
|
161
|
+
w = Ruber::OutputWidget.new
|
162
|
+
it = w.layout.item_at_position(0,0)
|
163
|
+
it.widget.should be_a(Qt::ToolButton)
|
164
|
+
it.alignment.should == Qt::AlignRight | Qt::AlignVCenter
|
165
|
+
it.widget.should be_checkable
|
158
166
|
end
|
159
167
|
|
160
168
|
it 'sets the selection mode to Extended' do
|
@@ -587,6 +595,14 @@ describe Ruber::OutputWidget do
|
|
587
595
|
@ow.send :do_auto_scroll, Qt::ModelIndex.new, 1, 3
|
588
596
|
end
|
589
597
|
|
598
|
+
it 'does nothing if the slider is not at the maximum value' do
|
599
|
+
flexmock(@ow).should_receive(:scroll_to).never
|
600
|
+
scroll = @ow.view.vertical_scroll_bar
|
601
|
+
scroll.maximum = 100
|
602
|
+
scroll.value = 30
|
603
|
+
@ow.send :do_auto_scroll, Qt::ModelIndex.new, 1, 3
|
604
|
+
end
|
605
|
+
|
590
606
|
end
|
591
607
|
|
592
608
|
describe '#with_auto_scrolling' do
|
@@ -885,6 +901,25 @@ describe Ruber::OutputWidget do
|
|
885
901
|
|
886
902
|
end
|
887
903
|
|
904
|
+
describe '#pinned_down?' do
|
905
|
+
|
906
|
+
before do
|
907
|
+
@ow = Ruber::OutputWidget.new
|
908
|
+
end
|
909
|
+
|
910
|
+
it 'returns true if the pinned tool button is on' do
|
911
|
+
@ow.instance_variable_get(:@pin_button).checked = true
|
912
|
+
@ow.should be_pinned_down
|
913
|
+
end
|
914
|
+
|
915
|
+
it 'returns false if the pinned tool button is off' do
|
916
|
+
@ow.instance_variable_get(:@pin_button).checked = false
|
917
|
+
@ow.should_not be_pinned_down
|
918
|
+
end
|
919
|
+
|
920
|
+
end
|
921
|
+
|
922
|
+
|
888
923
|
describe '#maybe_open_file' do
|
889
924
|
|
890
925
|
before do
|
@@ -897,7 +932,9 @@ describe Ruber::OutputWidget do
|
|
897
932
|
@mod = @ow.model
|
898
933
|
@mod.append_row Qt::StandardItem.new ''
|
899
934
|
@mw = flexmock{|m| m.should_ignore_missing}
|
935
|
+
@cfg = flexmock{|m| m.should_receive(:[]).with(:general, :tool_open_files).and_return(:new_tab).by_default}
|
900
936
|
flexmock(Ruber).should_receive(:[]).with(:main_window).and_return(@mw).by_default
|
937
|
+
flexmock(Ruber).should_receive(:[]).with(:config).and_return(@cfg).by_default
|
901
938
|
end
|
902
939
|
|
903
940
|
after do
|
@@ -908,31 +945,56 @@ describe Ruber::OutputWidget do
|
|
908
945
|
flexmock(@ow).should_receive(:find_filename_in_index).once.with @mod.index(0,0)
|
909
946
|
@ow.send :maybe_open_file, @mod.index(0,0)
|
910
947
|
end
|
911
|
-
|
948
|
+
|
912
949
|
describe ', when the find_filename_in_index methods returns an array' do
|
913
950
|
|
914
951
|
before do
|
915
952
|
flexmock(@ow).should_receive(:find_filename_in_index).with(@mod.index(0,0)).and_return([__FILE__, 10]).by_default
|
916
953
|
end
|
917
954
|
|
918
|
-
|
919
|
-
|
955
|
+
context 'when the Meta key is not pressed' do
|
956
|
+
|
957
|
+
it 'calls the display_document method of the main window using the hints returned by hints but with the :existing key set to always' do
|
958
|
+
hints = {:existing => :never, :new => :current, :split => :horizontal}
|
959
|
+
flexmock(@ow).should_receive(:hints).and_return(hints)
|
960
|
+
exp = hints.merge :existing => :always, :line => 9
|
961
|
+
@mw.should_receive(:display_document).once.with(__FILE__, exp)
|
962
|
+
@ow.send :maybe_open_file, @mod.index(0,0)
|
963
|
+
end
|
964
|
+
|
965
|
+
end
|
966
|
+
|
967
|
+
context 'when the Meta key is pressed' do
|
968
|
+
it 'calls the display_document method of the main window using the hints returned by hints but with the :existing key set to :never' do
|
969
|
+
flexmock(Ruber::Application).should_receive(:keyboard_modifiers).and_return(Qt::MetaModifier)
|
970
|
+
hints = {:existing => :always, :new => :current, :split => :horizontal}
|
971
|
+
flexmock(@ow).should_receive(:hints).and_return(hints)
|
972
|
+
exp = hints.merge :existing => :never, :line => 9
|
973
|
+
@mw.should_receive(:display_document).once.with(__FILE__, exp)
|
974
|
+
@ow.send :maybe_open_file, @mod.index(0,0)
|
975
|
+
end
|
976
|
+
|
977
|
+
end
|
978
|
+
|
979
|
+
it 'decreases line numbers by one' do
|
980
|
+
@mw.should_receive(:display_document).once.with(__FILE__, FlexMock.on{|h| h[:line].should == 9})
|
920
981
|
@ow.send :maybe_open_file, @mod.index(0,0)
|
921
982
|
end
|
922
983
|
|
923
|
-
it 'doesn\'t
|
924
|
-
@
|
925
|
-
@
|
984
|
+
it 'doesn\'t decrease the line number if it\'s 0' do
|
985
|
+
flexmock(@ow).should_receive(:find_filename_in_index).with(@mod.index(0,0)).and_return([__FILE__, 0])
|
986
|
+
@mw.should_receive(:display_document).once.with(__FILE__, FlexMock.on{|h| h[:line].should == 0})
|
926
987
|
@ow.send :maybe_open_file, @mod.index(0,0)
|
927
988
|
end
|
928
989
|
|
929
|
-
it 'hides the tool widget if
|
990
|
+
it 'hides the tool widget if #pinned_down? returns false' do
|
991
|
+
flexmock(@ow).should_receive(:pinned_down?).and_return false
|
930
992
|
@mw.should_receive(:hide_tool).with(@ow).once
|
931
993
|
@ow.send :maybe_open_file, @mod.index(0,0)
|
932
994
|
end
|
933
995
|
|
934
|
-
it 'doesn\'t hide the tool widget if
|
935
|
-
flexmock(
|
996
|
+
it 'doesn\'t hide the tool widget if #pinned_down? returns true' do
|
997
|
+
flexmock(@ow).should_receive(:pinned_down?).and_return true
|
936
998
|
@mw.should_receive(:hide_tool).with(@ow).never
|
937
999
|
@ow.send :maybe_open_file, @mod.index(0,0)
|
938
1000
|
end
|
@@ -972,6 +1034,53 @@ describe Ruber::OutputWidget do
|
|
972
1034
|
|
973
1035
|
end
|
974
1036
|
|
1037
|
+
describe '#hints' do
|
1038
|
+
|
1039
|
+
before do
|
1040
|
+
@ow = Ruber::OutputWidget.new
|
1041
|
+
@cfg = flexmock{|m| m.should_ignore_missing}
|
1042
|
+
flexmock(Ruber).should_receive(:[]).with(:config).and_return(@cfg).by_default
|
1043
|
+
end
|
1044
|
+
|
1045
|
+
context 'when the general/tool_open_files setting is :split_horizontally' do
|
1046
|
+
|
1047
|
+
it 'returns {:new => :current_tab, :split => :horizontal}' do
|
1048
|
+
@cfg.should_receive(:[]).with(:general, :tool_open_files).and_return(:split_horizontally)
|
1049
|
+
@ow.send(:hints).should == {:new => :current_tab, :split => :horizontal}
|
1050
|
+
end
|
1051
|
+
|
1052
|
+
end
|
1053
|
+
|
1054
|
+
context 'when the general/tool_open_files setting is :split_vertically' do
|
1055
|
+
|
1056
|
+
it 'returns {:new => :current_tab, :split => :vertical}' do
|
1057
|
+
@cfg.should_receive(:[]).with(:general, :tool_open_files).and_return(:split_vertically)
|
1058
|
+
@ow.send(:hints).should == {:new => :current_tab, :split => :vertical}
|
1059
|
+
end
|
1060
|
+
|
1061
|
+
end
|
1062
|
+
|
1063
|
+
context 'when the general/tool_open_files setting is :new_tab' do
|
1064
|
+
|
1065
|
+
it 'returns {:new => :new_tab}' do
|
1066
|
+
@cfg.should_receive(:[]).with(:general, :tool_open_files).and_return(:new_tab)
|
1067
|
+
@ow.send(:hints).should == {:new => :new_tab}
|
1068
|
+
end
|
1069
|
+
|
1070
|
+
end
|
1071
|
+
|
1072
|
+
context 'when the general/tool_open_files setting contains an invalid value' do
|
1073
|
+
|
1074
|
+
it 'returns {:new => :new_tab}' do
|
1075
|
+
@cfg.should_receive(:[]).with(:general, :tool_open_files).and_return(:xyz)
|
1076
|
+
@ow.send(:hints).should == {:new => :new_tab}
|
1077
|
+
end
|
1078
|
+
|
1079
|
+
end
|
1080
|
+
|
1081
|
+
end
|
1082
|
+
|
1083
|
+
|
975
1084
|
describe '#find_filename_in_index' do
|
976
1085
|
|
977
1086
|
before do
|