spec/cc/workspace/path_tree_spec.rb (83 lines of code) (raw):

require "spec_helper" class CC::Workspace describe PathTree do include FileSystemHelpers it "doesn't needlessly descend if nothing excluded" do within_temp_dir do make_fixture_tree tree = PathTree.for_path(".") expect(tree.all_paths).to eq ["./"] end end it "excludes files, descending as needed" do within_temp_dir do make_fixture_tree tree = PathTree.for_path(".") tree.exclude_paths([".git/refs", "code/a/bar.rb"]) expect(tree.all_paths.sort).to eq [".git/FETCH_HEAD", "code/a/baz.rb", "code/foo.rb", "foo.txt", "lib/"] end end it "includes files, descending as needed" do within_temp_dir do make_fixture_tree tree = PathTree.for_path(".") tree.include_paths([".git/refs/", "code/foo.rb", "code/a/bar.rb"]) expect(tree.all_paths.sort).to eq [".git/refs/", "code/a/bar.rb", "code/foo.rb"] end end it "excludes files after explicit includes" do within_temp_dir do make_fixture_tree tree = PathTree.for_path(".") tree.include_paths([".git/refs/", "code/"]) tree.exclude_paths([".git/refs/heads/master", "code/a/bar.rb"]) expect(tree.all_paths.sort).to eq ["code/a/baz.rb", "code/foo.rb"] end end it "excludes directory after excluding only part of it" do within_temp_dir do make_fixture_tree tree = PathTree.for_path(".") tree.exclude_paths(["code/a/bar.rb"]) tree.exclude_paths(["code/"]) expect(tree.all_paths.sort).to eq [".git/", "foo.txt", "lib/"] end end it "excludes directory after excluding all children" do within_temp_dir do make_fixture_tree tree = PathTree.for_path(".") tree.exclude_paths(["code/a/bar.rb"]) tree.exclude_paths(["code/a/baz.rb"]) expect(tree.all_paths.sort).to eq [".git/", "code/foo.rb", "foo.txt", "lib/"] end end it "handles including nonexistent files" do within_temp_dir do make_fixture_tree tree = PathTree.for_path(".") tree.include_paths(["does-not-exist"]) expect(tree.all_paths.sort).to eq ["./"] end end it "handles excluding nonexistent files" do within_temp_dir do make_fixture_tree tree = PathTree.for_path(".") tree.exclude_paths(["code/does-not-exist"]) expect(tree.all_paths.sort).to eq [".git/", "code/a/", "code/foo.rb", "foo.txt", "lib/"] end end def make_fixture_tree make_tree <<-EOM .git/FETCH_HEAD .git/refs/heads/master code/a/bar.rb code/a/baz.rb code/foo.rb foo.txt lib/thing.rb EOM end end end