tmuxinator 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +1 -1
- data/.travis.yml +5 -0
- data/CHANGELOG.md +36 -0
- data/CONTRIBUTING.md +29 -0
- data/Gemfile +4 -7
- data/{LICENSE.txt → LICENSE} +1 -1
- data/README.md +128 -118
- data/Rakefile +1 -72
- data/bin/mux +8 -3
- data/bin/tmuxinator +8 -3
- data/completion/tmuxinator.bash +18 -0
- data/completion/tmuxinator.zsh +20 -0
- data/lib/tmuxinator.rb +13 -7
- data/lib/tmuxinator/assets/sample.yml +24 -11
- data/lib/tmuxinator/assets/template.erb +47 -0
- data/lib/tmuxinator/cli.rb +121 -145
- data/lib/tmuxinator/config.rb +92 -0
- data/lib/tmuxinator/deprecations.rb +19 -0
- data/lib/tmuxinator/pane.rb +36 -0
- data/lib/tmuxinator/project.rb +142 -0
- data/lib/tmuxinator/util.rb +14 -0
- data/lib/tmuxinator/version.rb +3 -0
- data/lib/tmuxinator/window.rb +76 -0
- data/spec/factories/projects.rb +17 -0
- data/spec/fixtures/sample.deprecations.yml +35 -0
- data/spec/fixtures/sample.yml +35 -0
- data/spec/lib/tmuxinator/cli_spec.rb +230 -0
- data/spec/lib/tmuxinator/config_spec.rb +121 -0
- data/spec/lib/tmuxinator/pane_spec.rb +7 -0
- data/spec/lib/tmuxinator/project_spec.rb +209 -0
- data/spec/lib/tmuxinator/util_spec.rb +4 -0
- data/spec/lib/tmuxinator/window_spec.rb +62 -0
- data/spec/spec_helper.rb +28 -8
- data/tmuxinator.gemspec +47 -65
- metadata +186 -62
- data/.document +0 -5
- data/Gemfile.lock +0 -28
- data/TODO +0 -4
- data/VERSION +0 -1
- data/bin/tmuxinator_completion +0 -29
- data/lib/tmuxinator/assets/tmux_config.tmux +0 -37
- data/lib/tmuxinator/config_writer.rb +0 -104
- data/lib/tmuxinator/helper.rb +0 -19
- data/spec/tmuxinator_spec.rb +0 -54
@@ -0,0 +1,35 @@
|
|
1
|
+
# ~/.tmuxinator/sample.yml
|
2
|
+
# you can make as many tabs as you wish...
|
3
|
+
|
4
|
+
name: sample
|
5
|
+
root: ~/test
|
6
|
+
socket_name: foo # Remove to use default socket
|
7
|
+
pre: sudo /etc/rc.d/mysqld start # Runs before everything
|
8
|
+
pre_window: rbenv shell 2.0.0-p247 # Runs in each tab and pane
|
9
|
+
tmux_options: -v -2 # Pass arguments to tmux
|
10
|
+
windows:
|
11
|
+
- editor:
|
12
|
+
pre:
|
13
|
+
- echo "I get run in each pane, before each pane command!"
|
14
|
+
-
|
15
|
+
layout: main-vertical
|
16
|
+
panes:
|
17
|
+
- vim
|
18
|
+
- #empty, will just run plain bash
|
19
|
+
- top
|
20
|
+
- shell: git pull
|
21
|
+
- guard:
|
22
|
+
layout: tiled
|
23
|
+
pre:
|
24
|
+
- echo "I get run in each pane."
|
25
|
+
- echo "Before each pane command!"
|
26
|
+
panes:
|
27
|
+
-
|
28
|
+
- #empty, will just run plain bash
|
29
|
+
-
|
30
|
+
- database: bundle exec rails db
|
31
|
+
- server: bundle exec rails s
|
32
|
+
- logs: tail -f log/development.log
|
33
|
+
- console: bundle exec rails c
|
34
|
+
- capistrano:
|
35
|
+
- server: ssh user@example.com
|
@@ -0,0 +1,230 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
describe Tmuxinator::Cli do
|
3
|
+
let(:cli) { Tmuxinator::Cli }
|
4
|
+
|
5
|
+
before do
|
6
|
+
ARGV.clear
|
7
|
+
Kernel.stub(:system)
|
8
|
+
FileUtils.stub(:copy_file)
|
9
|
+
FileUtils.stub(:rm)
|
10
|
+
FileUtils.stub(:remove_dir)
|
11
|
+
end
|
12
|
+
|
13
|
+
context "no arguments" do
|
14
|
+
it "runs without error" do
|
15
|
+
_, err = capture_io { cli.start }
|
16
|
+
expect(err).to be_empty
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#completions" do
|
21
|
+
before do
|
22
|
+
ARGV.replace(["completions", "start"])
|
23
|
+
Tmuxinator::Config.stub(:configs => ["test.yml"])
|
24
|
+
end
|
25
|
+
|
26
|
+
it "gets completions" do
|
27
|
+
out, _ = capture_io { cli.start }
|
28
|
+
expect(out).to include("test.yml")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#commands" do
|
33
|
+
before do
|
34
|
+
ARGV.replace(["commands"])
|
35
|
+
end
|
36
|
+
|
37
|
+
it "lists the commands" do
|
38
|
+
out, _ = capture_io { cli.start }
|
39
|
+
expect(out).to eq "#{%w(commands copy debug delete doctor help implode list start version).join("\n")}\n"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#start" do
|
44
|
+
before do
|
45
|
+
ARGV.replace(["start", "foo"])
|
46
|
+
Tmuxinator::Config.stub(:validate => project)
|
47
|
+
Kernel.stub(:exec)
|
48
|
+
end
|
49
|
+
|
50
|
+
context "no deprecations" do
|
51
|
+
let(:project) { FactoryGirl.build(:project) }
|
52
|
+
|
53
|
+
it "starts the project" do
|
54
|
+
expect(Kernel).to receive(:exec)
|
55
|
+
capture_io { cli.start }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "deprecations" do
|
60
|
+
before do
|
61
|
+
$stdin.stub(:getc => "y")
|
62
|
+
end
|
63
|
+
|
64
|
+
let(:project) { FactoryGirl.build(:project_with_deprecations) }
|
65
|
+
|
66
|
+
it "prints the deprecations" do
|
67
|
+
out, _ = capture_io { cli.start }
|
68
|
+
expect(out).to include "DEPRECATION"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "#new" do
|
74
|
+
let(:file) { StringIO.new }
|
75
|
+
|
76
|
+
before do
|
77
|
+
ARGV.replace(["new", "test"])
|
78
|
+
File.stub(:open) { |&block| block.yield file }
|
79
|
+
end
|
80
|
+
|
81
|
+
context "existing project doesn't exist" do
|
82
|
+
before do
|
83
|
+
Tmuxinator::Config.stub(:exists? => false)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "creates a new tmuxinator project file" do
|
87
|
+
capture_io { cli.start }
|
88
|
+
expect(file.string).to_not be_empty
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "files exists" do
|
93
|
+
before do
|
94
|
+
File.stub(:exists? => true)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "just opens the file" do
|
98
|
+
expect(Kernel).to receive(:system)
|
99
|
+
capture_io { cli.start }
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "#copy" do
|
105
|
+
before do
|
106
|
+
ARGV.replace(["copy", "foo", "bar"])
|
107
|
+
Tmuxinator::Config.stub(:exists?) { true }
|
108
|
+
end
|
109
|
+
|
110
|
+
context "new project already exists" do
|
111
|
+
before do
|
112
|
+
$stdin.stub(:gets => "y")
|
113
|
+
end
|
114
|
+
|
115
|
+
it "prompts user to confirm overwrite" do
|
116
|
+
expect(FileUtils).to receive(:rm)
|
117
|
+
capture_io { cli.start }
|
118
|
+
end
|
119
|
+
|
120
|
+
it "copies the config" do
|
121
|
+
expect(FileUtils).to receive(:copy_file)
|
122
|
+
capture_io { cli.start }
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context "existing project doens't exist" do
|
127
|
+
before do
|
128
|
+
Tmuxinator::Config.stub(:exists?) { false }
|
129
|
+
end
|
130
|
+
|
131
|
+
it "exit with error code" do
|
132
|
+
expect { capture_io { cli.start } }.to raise_error SystemExit
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
describe "#debug" do
|
138
|
+
let(:project) { FactoryGirl.build(:project) }
|
139
|
+
|
140
|
+
before do
|
141
|
+
ARGV.replace(["debug", "foo"])
|
142
|
+
Tmuxinator::Config.stub(:validate => project)
|
143
|
+
end
|
144
|
+
|
145
|
+
it "renders the project" do
|
146
|
+
expect(project).to receive(:render)
|
147
|
+
capture_io { cli.start }
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
describe "#delete" do
|
152
|
+
before do
|
153
|
+
ARGV.replace(["delete", "foo"])
|
154
|
+
end
|
155
|
+
|
156
|
+
context "project exists" do
|
157
|
+
before do
|
158
|
+
$stdin.stub(:gets => "y")
|
159
|
+
Tmuxinator::Config.stub(:exists?) { true }
|
160
|
+
end
|
161
|
+
|
162
|
+
it "confirms deletion" do
|
163
|
+
capture_io { cli.start }
|
164
|
+
end
|
165
|
+
|
166
|
+
it "deletes the project" do
|
167
|
+
expect(FileUtils).to receive(:rm)
|
168
|
+
capture_io { cli.start }
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
context "project doesn't exist" do
|
173
|
+
it "exits with error message" do
|
174
|
+
expect { capture_io { cli.start } }.to raise_error SystemExit
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
describe "#implode" do
|
180
|
+
before do
|
181
|
+
ARGV.replace(["implode"])
|
182
|
+
$stdin.stub(:gets => "y")
|
183
|
+
end
|
184
|
+
|
185
|
+
it "confirms deletion of all projects" do
|
186
|
+
expect($stdin).to receive(:gets).and_return("y")
|
187
|
+
capture_io { cli.start }
|
188
|
+
end
|
189
|
+
|
190
|
+
it "deletes all projects" do
|
191
|
+
expect(FileUtils).to receive(:remove_dir)
|
192
|
+
capture_io { cli.start }
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
describe "#list" do
|
197
|
+
before do
|
198
|
+
ARGV.replace(["list"])
|
199
|
+
Dir.stub(:[] => ["/path/to/project.yml"])
|
200
|
+
end
|
201
|
+
|
202
|
+
it "lists all projects" do
|
203
|
+
expect { capture_io { cli.start } }.to_not raise_error
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
describe "#version" do
|
208
|
+
before do
|
209
|
+
ARGV.replace(["version"])
|
210
|
+
end
|
211
|
+
|
212
|
+
it "prints the current version" do
|
213
|
+
out, _ = capture_io { cli.start }
|
214
|
+
expect(out).to eq "tmuxinator #{Tmuxinator::VERSION}\n"
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
218
|
+
describe "#doctor" do
|
219
|
+
before do
|
220
|
+
ARGV.replace(["doctor"])
|
221
|
+
end
|
222
|
+
|
223
|
+
it "checks requirements" do
|
224
|
+
Tmuxinator::Config.should_receive(:installed?)
|
225
|
+
Tmuxinator::Config.should_receive(:editor?)
|
226
|
+
Tmuxinator::Config.should_receive(:shell?)
|
227
|
+
capture_io { cli.start }
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Tmuxinator::Config do
|
4
|
+
describe "#root" do
|
5
|
+
it "is ~/.tmuxintaor" do
|
6
|
+
expect(Tmuxinator::Config.root).to eq "#{ENV["HOME"]}/.tmuxinator"
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#sample" do
|
11
|
+
it "gets the path of the sample project" do
|
12
|
+
expect(Tmuxinator::Config.sample).to include("sample.yml")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#default" do
|
17
|
+
it "gets the path of the default config" do
|
18
|
+
expect(Tmuxinator::Config.default).to include("default.yml")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#configs" do
|
23
|
+
before do
|
24
|
+
Dir.stub(:[] => ["test.yml"])
|
25
|
+
end
|
26
|
+
|
27
|
+
it "gets a list of all projects" do
|
28
|
+
expect(Tmuxinator::Config.configs).to include("test")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#installed?" do
|
33
|
+
context "tmux is installed" do
|
34
|
+
before do
|
35
|
+
Kernel.stub(:system) { true }
|
36
|
+
end
|
37
|
+
|
38
|
+
it "returns true" do
|
39
|
+
expect(Tmuxinator::Config.installed?).to be_true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "tmux is not installed" do
|
44
|
+
before do
|
45
|
+
Kernel.stub(:system) { false }
|
46
|
+
end
|
47
|
+
|
48
|
+
it "returns true" do
|
49
|
+
expect(Tmuxinator::Config.installed?).to be_false
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#editor?" do
|
55
|
+
context "$EDITOR is set" do
|
56
|
+
before do
|
57
|
+
ENV.stub(:[]).with("EDITOR") { "vim" }
|
58
|
+
end
|
59
|
+
|
60
|
+
it "returns true" do
|
61
|
+
expect(Tmuxinator::Config.editor?).to be_true
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "$EDITOR is not set" do
|
66
|
+
before do
|
67
|
+
ENV.stub(:[]).with("EDITOR") { nil }
|
68
|
+
end
|
69
|
+
|
70
|
+
it "returns false" do
|
71
|
+
expect(Tmuxinator::Config.editor?).to be_false
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "#shell?" do
|
77
|
+
context "$SHELL is set" do
|
78
|
+
before do
|
79
|
+
ENV.stub(:[]).with("SHELL") { "vim" }
|
80
|
+
end
|
81
|
+
|
82
|
+
it "returns true" do
|
83
|
+
expect(Tmuxinator::Config.shell?).to be_true
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context "$SHELL is not set" do
|
88
|
+
before do
|
89
|
+
ENV.stub(:[]).with("SHELL") { nil }
|
90
|
+
end
|
91
|
+
|
92
|
+
it "returns false" do
|
93
|
+
expect(Tmuxinator::Config.shell?).to be_false
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe "#exists?" do
|
99
|
+
before do
|
100
|
+
File.stub(:exists? => true)
|
101
|
+
Tmuxinator::Config.stub(:project => "")
|
102
|
+
end
|
103
|
+
|
104
|
+
it "checks if the given project exists" do
|
105
|
+
expect(Tmuxinator::Config.exists?("test")).to be_true
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "#project" do
|
110
|
+
before do
|
111
|
+
Dir.stub(:glob => ["#{Tmuxinator::Config.root}/test.yml"])
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
let(:root) { Tmuxinator::Config.root }
|
116
|
+
|
117
|
+
it "gets the project as path to the yml file" do
|
118
|
+
expect(Tmuxinator::Config.project("test")).to eq "#{root}/test.yml"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,209 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Tmuxinator::Project do
|
4
|
+
let(:project) { FactoryGirl.build(:project) }
|
5
|
+
let(:project_with_deprecations) { FactoryGirl.build(:project_with_deprecations) }
|
6
|
+
|
7
|
+
describe "#initialize" do
|
8
|
+
context "valid yaml" do
|
9
|
+
it "creates an instance" do
|
10
|
+
expect(project).to be_a(Tmuxinator::Project)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#render" do
|
16
|
+
it "renders the tmux config" do
|
17
|
+
expect(project.render).to_not be_empty
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#windows" do
|
22
|
+
context "without deprecations" do
|
23
|
+
it "gets the list of windows" do
|
24
|
+
expect(project.windows).to_not be_empty
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "with deprecations" do
|
29
|
+
it "still gets the list of windows" do
|
30
|
+
expect(project_with_deprecations.windows).to_not be_empty
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#root" do
|
36
|
+
context "without deprecations" do
|
37
|
+
it "gets the root" do
|
38
|
+
expect(project.root).to eq "~/test"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "with deprecations" do
|
43
|
+
it "still gets the root" do
|
44
|
+
expect(project_with_deprecations.root).to eq "~/test"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "#name" do
|
50
|
+
context "without deprecations" do
|
51
|
+
it "gets the name" do
|
52
|
+
expect(project.name).to eq "sample"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "with deprecations" do
|
57
|
+
it "still gets the name" do
|
58
|
+
expect(project_with_deprecations.name).to eq "sample"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "#pre_window" do
|
64
|
+
it "gets the pre_window command" do
|
65
|
+
expect(project.pre_window).to eq "rbenv shell 2.0.0-p247"
|
66
|
+
end
|
67
|
+
|
68
|
+
context "with deprecations" do
|
69
|
+
context "rbenv option is present" do
|
70
|
+
before do
|
71
|
+
project.stub(:rbenv? => true)
|
72
|
+
project.stub_chain(:yaml, :[]).and_return("2.0.0-p247")
|
73
|
+
end
|
74
|
+
|
75
|
+
it "still gets the correct pre_window command" do
|
76
|
+
expect(project.pre_window).to eq "rbenv shell 2.0.0-p247"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "rvm option is present" do
|
81
|
+
before do
|
82
|
+
project.stub(:rbenv? => false)
|
83
|
+
project.stub_chain(:yaml, :[]).and_return("ruby-2.0.0-p247")
|
84
|
+
end
|
85
|
+
|
86
|
+
it "still gets the correct pre_window command" do
|
87
|
+
expect(project.pre_window).to eq "rvm use ruby-2.0.0-p247"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context "pre_tab is present" do
|
92
|
+
before do
|
93
|
+
project.stub(:rbenv? => false)
|
94
|
+
project.stub(:pre_tab? => true)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "still gets the correct pre_window command" do
|
98
|
+
expect(project.pre_window).to be_nil
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "#socket" do
|
105
|
+
context "socket path is present" do
|
106
|
+
before do
|
107
|
+
project.stub(:socket_path => "/tmp")
|
108
|
+
end
|
109
|
+
|
110
|
+
it "gets the socket path" do
|
111
|
+
expect(project.socket).to eq " -S /tmp"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "#tmux_options" do
|
117
|
+
context "no tmux options" do
|
118
|
+
before do
|
119
|
+
project.stub(:tmux_options? => false)
|
120
|
+
end
|
121
|
+
|
122
|
+
it "returns nothing" do
|
123
|
+
expect(project.tmux_options).to eq ""
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
context "with deprecations" do
|
128
|
+
before do
|
129
|
+
project_with_deprecations.stub(:cli_args? => true)
|
130
|
+
end
|
131
|
+
|
132
|
+
it "still gets the tmux options" do
|
133
|
+
expect(project_with_deprecations.tmux_options).to eq " -v -2"
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe "#window" do
|
139
|
+
it "gets the window and index for tmux" do
|
140
|
+
expect(project.window(1)).to eq "sample:1"
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
describe "#name?" do
|
145
|
+
context "name is present" do
|
146
|
+
it "returns true" do
|
147
|
+
expect(project.name?).to be_true
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
describe "#windows?" do
|
153
|
+
context "windows are present" do
|
154
|
+
it "returns true" do
|
155
|
+
expect(project.windows?).to be_true
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe "#root?" do
|
161
|
+
context "root are present" do
|
162
|
+
it "returns true" do
|
163
|
+
expect(project.root?).to be_true
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
describe "#send_keys" do
|
169
|
+
context "no command for window" do
|
170
|
+
it "returns empty string" do
|
171
|
+
expect(project.send_keys("", 1)).to be_empty
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context "command for window is not empty" do
|
176
|
+
it "returns the tmux command" do
|
177
|
+
expect(project.send_keys("vim", 1)).to eq "tmux -v -2 -L foo send-keys -t sample:1 vim C-m"
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
describe "#send_pane_command" do
|
183
|
+
context "no command for pane" do
|
184
|
+
it "returns empty string" do
|
185
|
+
expect(project.send_pane_command("", 0, 0)).to be_empty
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
context "command for pane is not empty" do
|
190
|
+
it "returns the tmux command" do
|
191
|
+
expect(project.send_pane_command("vim", 1, 0)).to eq "tmux -v -2 -L foo send-keys -t sample:1 vim C-m"
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
describe "#deprecations" do
|
197
|
+
context "without deprecations" do
|
198
|
+
it "is empty" do
|
199
|
+
expect(project.deprecations).to be_empty
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
context "with deprecations" do
|
204
|
+
it "is not empty" do
|
205
|
+
expect(project_with_deprecations.deprecations).to_not be_empty
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|