spec/cc/workspace_spec.rb (200 lines of code) (raw):
require "spec_helper"
module CC
describe Workspace do
include FileSystemHelpers
it "responds with added paths, if unfiltered" do
within_temp_dir do
make_tree <<-EOM
foo/thing.rb
foo/other.rb
bar/baz.rb
nope/also_nope.rb
EOM
workspace = Workspace.new
workspace.add(%w[foo bar/baz.rb])
expect(workspace.paths).to eq %w[foo/ bar/baz.rb]
end
end
it "responds with \"./\", if unfiltered" do
workspace = Workspace.new
expect(workspace.paths).to eq ["./"]
end
it "doesn't remove if given nil or empty exclude_paths" do
workspace = Workspace.new
workspace.remove(nil)
workspace.remove([])
expect(workspace.paths).to eq ["./"]
end
it "filters to a minimized set of paths in the current directory" do
within_temp_dir do
make_tree <<-EOM
.bundle/vendor/dependency.rb
.bundle/vendor/dependency/inner.rb
.git/FETCH_HEAD
.git/refs/heads/master
.gitignore
.node_modules/crazy/stuff
.node_modules/other/crazy/stuff
Gemfile
Gemfile.lock
app/assets/vendor/javascripts/ouch.js
app/assets/vendor/stylesheets/ouch.css
lib/foo.rb
lib/foo/bar.rb
lib/foo/baz.rb
lib/quix/a.rb
lib/quix/b.rb
spec/foo/bar_spec.rb
spec/foo/baz_spec.rb
spec/foo_spec.rb
vendor/assets/jquery.js
vendor/assets/underscore.js
EOM
workspace = Workspace.new
workspace.remove(%w[
.bundle
.git
.gitignore
.node_modules/**/*
app/assets/vendor
spec/foo/baz_spec.rb
vendor/**
])
expect(workspace.paths.sort).to eq %w[
Gemfile
Gemfile.lock
lib/
spec/foo/bar_spec.rb
spec/foo_spec.rb
]
end
end
it "can be filtered again, e.g. per engine" do
within_temp_dir do
make_tree <<-EOM
.node_modules/crazy/stuff
.node_modules/other/crazy/stuff
Gemfile
Gemfile.lock
lib/foo.rb
lib/foo/bar.rb
lib/foo/baz.rb
lib/quix/a.rb
lib/quix/b.rb
skeleton/torso/ribcage/heart.rb
skeleton/torso/belly/liver.rb
spec/foo/bar_spec.rb
spec/foo/baz_spec.rb
spec/foo_spec.rb
vendor/assets/jquery.js
vendor/assets/underscore.js
EOM
workspace = Workspace.new
workspace.remove(%w[.node_modules])
workspace2 = workspace.clone
workspace2.remove(%w[vendor **/ribcage/**])
expect(workspace.paths.sort).to eq %w[
Gemfile
Gemfile.lock
lib/
skeleton/
spec/
vendor/
]
expect(workspace2.paths.sort).to eq %w[
Gemfile
Gemfile.lock
lib/
skeleton/torso/belly/
spec/
]
end
end
it "supports patterns" do
within_temp_dir do
make_tree <<-EOM
lib/foo.py
lib/foo.pyc
EOM
workspace = Workspace.new
workspace.remove(%w[**/*.pyc])
expect(workspace.paths.sort).to eq %w[lib/foo.py]
end
end
it "supports negated exclude patterns" do
within_temp_dir do
make_tree <<-EOM
lib/foo.py
lib/foo.pyc
lib/fafa.pyc
EOM
workspace = Workspace.new
workspace.remove(%w[**/*.pyc !lib/fafa.pyc])
expect(workspace.paths.sort).to eq %w[lib/fafa.pyc lib/foo.py]
end
end
it "supports negated exclude patterns and also this respects globs" do
within_temp_dir do
make_tree <<-EOM
test/dog.rb
test/test_helper.rb
test/dog_helper.rb
test/something_else_helper.rb
EOM
workspace = Workspace.new
workspace.remove(%w[test/*.rb !test/*_helper.rb test/dog_helper.rb])
expect(workspace.paths.sort).to eq %w[test/something_else_helper.rb test/test_helper.rb]
end
end
it "can be given an explicit set of initial paths" do
within_temp_dir do
make_tree <<-EOM
.bundle/vendored/bar.rb
.bundle/vendored/foo.rb
Gemfile
Gemfile.lock
lib/foo.rb
lib/foo/bar.rb
lib/foo/baz.rb
spec/foo/bar_spec.rb
spec/foo/baz_spec.rb
spec/foo_spec.rb
vendor/foo.js
vendor/foo/bar.css
EOM
workspace = Workspace.new
workspace.add(%w[lib/foo spec/foo/bar_spec.rb])
workspace.remove(%w[lib/foo/bar.rb])
expect(workspace.paths.sort).to eq %w[
lib/foo/baz.rb
spec/foo/bar_spec.rb
]
end
end
describe "relative path arguments" do
it "supports adding the current path" do
within_temp_dir do
make_tree <<-EOM
foo.txt
foo/bar.rb
EOM
workspace = Workspace.new
workspace.add(%w[./])
expect(workspace.paths).to eq ["./"]
end
end
it "supports adding the current path" do
within_temp_dir do
make_tree <<-EOM
foo.rb
bar.rb
other/stuff.txt
EOM
workspace = Workspace.new
workspace.add(%w[./foo.rb])
expect(workspace.paths).to eq ["foo.rb"]
end
end
end
end
end