From 85f76e312a6171dceab69b1163dede2f903092fa Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Mon, 16 Jul 2018 20:56:41 +0200 Subject: [PATCH] Add spec for nested directories. --- Library/Homebrew/test/unpack_strategy_spec.rb | 47 ++++++++++++++----- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/Library/Homebrew/test/unpack_strategy_spec.rb b/Library/Homebrew/test/unpack_strategy_spec.rb index 69efd7d886..4d31c76045 100644 --- a/Library/Homebrew/test/unpack_strategy_spec.rb +++ b/Library/Homebrew/test/unpack_strategy_spec.rb @@ -17,23 +17,44 @@ end describe UnpackStrategy do describe "#extract_nestedly" do - let(:file_name) { "file" } - let(:nested_archive) { - dir = mktmpdir + subject(:strategy) { described_class.detect(path) } - (dir/"file").write "This file was inside a GZIP inside a BZIP2." - system "gzip", dir.children.first - system "bzip2", dir.children.first - - dir.children.first - } let(:unpack_dir) { mktmpdir } - subject(:strategy) { described_class.detect(nested_archive) } - it "can extract nested archives" do - strategy.extract_nestedly(to: unpack_dir) + context "when extracting a GZIP nested in a BZIP2" do + let(:file_name) { "file" } + let(:path) { + dir = mktmpdir - expect(File.read(unpack_dir/file_name)).to eq("This file was inside a GZIP inside a BZIP2.") + (dir/"file").write "This file was inside a GZIP inside a BZIP2." + system "gzip", dir.children.first + system "bzip2", dir.children.first + + dir.children.first + } + + it "can extract nested archives" do + strategy.extract_nestedly(to: unpack_dir) + + expect(File.read(unpack_dir/file_name)).to eq("This file was inside a GZIP inside a BZIP2.") + end + end + + context "when extracting a directory with nested directories" do + let(:directories) { "A/B/C" } + let(:path) { + (mktmpdir/"file.tar").tap do |path| + mktmpdir do |dir| + (dir/directories).mkpath + system "tar", "-c", "-f", path, "-C", dir, "A/" + end + end + } + + it "does not recurse into nested directories" do + strategy.extract_nestedly(to: unpack_dir) + expect(Pathname.glob(unpack_dir/"**/*")).to include unpack_dir/directories + end end end end