diff options
Diffstat (limited to 'spec/unit/chef_fs/file_pattern_spec.rb')
-rw-r--r-- | spec/unit/chef_fs/file_pattern_spec.rb | 732 |
1 files changed, 366 insertions, 366 deletions
diff --git a/spec/unit/chef_fs/file_pattern_spec.rb b/spec/unit/chef_fs/file_pattern_spec.rb index ed5f314605..91970cd23c 100644 --- a/spec/unit/chef_fs/file_pattern_spec.rb +++ b/spec/unit/chef_fs/file_pattern_spec.rb @@ -16,8 +16,8 @@ # limitations under the License. # -require 'spec_helper' -require 'chef/chef_fs/file_pattern' +require "spec_helper" +require "chef/chef_fs/file_pattern" describe Chef::ChefFS::FilePattern do def p(str) @@ -26,455 +26,455 @@ describe Chef::ChefFS::FilePattern do # Different kinds of patterns context 'with empty pattern ""' do - let(:pattern) { Chef::ChefFS::FilePattern.new('') } - it 'match?' do - expect(pattern.match?('')).to be_truthy - expect(pattern.match?('/')).to be_falsey - expect(pattern.match?('a')).to be_falsey - expect(pattern.match?('a/b')).to be_falsey + let(:pattern) { Chef::ChefFS::FilePattern.new("") } + it "match?" do + expect(pattern.match?("")).to be_truthy + expect(pattern.match?("/")).to be_falsey + expect(pattern.match?("a")).to be_falsey + expect(pattern.match?("a/b")).to be_falsey end - it 'exact_path' do - expect(pattern.exact_path).to eq('') + it "exact_path" do + expect(pattern.exact_path).to eq("") end - it 'could_match_children?' do - expect(pattern.could_match_children?('')).to be_falsey - expect(pattern.could_match_children?('a/b')).to be_falsey + it "could_match_children?" do + expect(pattern.could_match_children?("")).to be_falsey + expect(pattern.could_match_children?("a/b")).to be_falsey end end context 'with root pattern "/"' do - let(:pattern) { Chef::ChefFS::FilePattern.new('/') } - it 'match?' do - expect(pattern.match?('/')).to be_truthy - expect(pattern.match?('')).to be_falsey - expect(pattern.match?('a')).to be_falsey - expect(pattern.match?('/a')).to be_falsey - end - it 'exact_path' do - expect(pattern.exact_path).to eq('/') - end - it 'could_match_children?' do - expect(pattern.could_match_children?('')).to be_falsey - expect(pattern.could_match_children?('/')).to be_falsey - expect(pattern.could_match_children?('a')).to be_falsey - expect(pattern.could_match_children?('a/b')).to be_falsey - expect(pattern.could_match_children?('/a')).to be_falsey + let(:pattern) { Chef::ChefFS::FilePattern.new("/") } + it "match?" do + expect(pattern.match?("/")).to be_truthy + expect(pattern.match?("")).to be_falsey + expect(pattern.match?("a")).to be_falsey + expect(pattern.match?("/a")).to be_falsey + end + it "exact_path" do + expect(pattern.exact_path).to eq("/") + end + it "could_match_children?" do + expect(pattern.could_match_children?("")).to be_falsey + expect(pattern.could_match_children?("/")).to be_falsey + expect(pattern.could_match_children?("a")).to be_falsey + expect(pattern.could_match_children?("a/b")).to be_falsey + expect(pattern.could_match_children?("/a")).to be_falsey end end context 'with simple pattern "abc"' do - let(:pattern) { Chef::ChefFS::FilePattern.new('abc') } - it 'match?' do - expect(pattern.match?('abc')).to be_truthy - expect(pattern.match?('a')).to be_falsey - expect(pattern.match?('abcd')).to be_falsey - expect(pattern.match?('/abc')).to be_falsey - expect(pattern.match?('')).to be_falsey - expect(pattern.match?('/')).to be_falsey - end - it 'exact_path' do - expect(pattern.exact_path).to eq('abc') - end - it 'could_match_children?' do - expect(pattern.could_match_children?('')).to be_falsey - expect(pattern.could_match_children?('abc')).to be_falsey - expect(pattern.could_match_children?('/abc')).to be_falsey + let(:pattern) { Chef::ChefFS::FilePattern.new("abc") } + it "match?" do + expect(pattern.match?("abc")).to be_truthy + expect(pattern.match?("a")).to be_falsey + expect(pattern.match?("abcd")).to be_falsey + expect(pattern.match?("/abc")).to be_falsey + expect(pattern.match?("")).to be_falsey + expect(pattern.match?("/")).to be_falsey + end + it "exact_path" do + expect(pattern.exact_path).to eq("abc") + end + it "could_match_children?" do + expect(pattern.could_match_children?("")).to be_falsey + expect(pattern.could_match_children?("abc")).to be_falsey + expect(pattern.could_match_children?("/abc")).to be_falsey end end context 'with simple pattern "/abc"' do - let(:pattern) { Chef::ChefFS::FilePattern.new('/abc') } - it 'match?' do - expect(pattern.match?('/abc')).to be_truthy - expect(pattern.match?('abc')).to be_falsey - expect(pattern.match?('a')).to be_falsey - expect(pattern.match?('abcd')).to be_falsey - expect(pattern.match?('')).to be_falsey - expect(pattern.match?('/')).to be_falsey - end - it 'exact_path' do - expect(pattern.exact_path).to eq('/abc') - end - it 'could_match_children?' do - expect(pattern.could_match_children?('abc')).to be_falsey - expect(pattern.could_match_children?('/abc')).to be_falsey - expect(pattern.could_match_children?('/')).to be_truthy - expect(pattern.could_match_children?('')).to be_falsey - end - it 'exact_child_name_under' do - expect(pattern.exact_child_name_under('/')).to eq('abc') + let(:pattern) { Chef::ChefFS::FilePattern.new("/abc") } + it "match?" do + expect(pattern.match?("/abc")).to be_truthy + expect(pattern.match?("abc")).to be_falsey + expect(pattern.match?("a")).to be_falsey + expect(pattern.match?("abcd")).to be_falsey + expect(pattern.match?("")).to be_falsey + expect(pattern.match?("/")).to be_falsey + end + it "exact_path" do + expect(pattern.exact_path).to eq("/abc") + end + it "could_match_children?" do + expect(pattern.could_match_children?("abc")).to be_falsey + expect(pattern.could_match_children?("/abc")).to be_falsey + expect(pattern.could_match_children?("/")).to be_truthy + expect(pattern.could_match_children?("")).to be_falsey + end + it "exact_child_name_under" do + expect(pattern.exact_child_name_under("/")).to eq("abc") end end context 'with simple pattern "abc/def/ghi"' do - let(:pattern) { Chef::ChefFS::FilePattern.new('abc/def/ghi') } - it 'match?' do - expect(pattern.match?('abc/def/ghi')).to be_truthy - expect(pattern.match?('/abc/def/ghi')).to be_falsey - expect(pattern.match?('abc')).to be_falsey - expect(pattern.match?('abc/def')).to be_falsey - end - it 'exact_path' do - expect(pattern.exact_path).to eq('abc/def/ghi') - end - it 'could_match_children?' do - expect(pattern.could_match_children?('abc')).to be_truthy - expect(pattern.could_match_children?('xyz')).to be_falsey - expect(pattern.could_match_children?('/abc')).to be_falsey - expect(pattern.could_match_children?('abc/def')).to be_truthy - expect(pattern.could_match_children?('abc/xyz')).to be_falsey - expect(pattern.could_match_children?('abc/def/ghi')).to be_falsey - end - it 'exact_child_name_under' do - expect(pattern.exact_child_name_under('abc')).to eq('def') - expect(pattern.exact_child_name_under('abc/def')).to eq('ghi') + let(:pattern) { Chef::ChefFS::FilePattern.new("abc/def/ghi") } + it "match?" do + expect(pattern.match?("abc/def/ghi")).to be_truthy + expect(pattern.match?("/abc/def/ghi")).to be_falsey + expect(pattern.match?("abc")).to be_falsey + expect(pattern.match?("abc/def")).to be_falsey + end + it "exact_path" do + expect(pattern.exact_path).to eq("abc/def/ghi") + end + it "could_match_children?" do + expect(pattern.could_match_children?("abc")).to be_truthy + expect(pattern.could_match_children?("xyz")).to be_falsey + expect(pattern.could_match_children?("/abc")).to be_falsey + expect(pattern.could_match_children?("abc/def")).to be_truthy + expect(pattern.could_match_children?("abc/xyz")).to be_falsey + expect(pattern.could_match_children?("abc/def/ghi")).to be_falsey + end + it "exact_child_name_under" do + expect(pattern.exact_child_name_under("abc")).to eq("def") + expect(pattern.exact_child_name_under("abc/def")).to eq("ghi") end end context 'with simple pattern "/abc/def/ghi"' do - let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/def/ghi') } - it 'match?' do - expect(pattern.match?('/abc/def/ghi')).to be_truthy - expect(pattern.match?('abc/def/ghi')).to be_falsey - expect(pattern.match?('/abc')).to be_falsey - expect(pattern.match?('/abc/def')).to be_falsey - end - it 'exact_path' do - expect(pattern.exact_path).to eq('/abc/def/ghi') - end - it 'could_match_children?' do - expect(pattern.could_match_children?('/abc')).to be_truthy - expect(pattern.could_match_children?('/xyz')).to be_falsey - expect(pattern.could_match_children?('abc')).to be_falsey - expect(pattern.could_match_children?('/abc/def')).to be_truthy - expect(pattern.could_match_children?('/abc/xyz')).to be_falsey - expect(pattern.could_match_children?('/abc/def/ghi')).to be_falsey - end - it 'exact_child_name_under' do - expect(pattern.exact_child_name_under('/')).to eq('abc') - expect(pattern.exact_child_name_under('/abc')).to eq('def') - expect(pattern.exact_child_name_under('/abc/def')).to eq('ghi') + let(:pattern) { Chef::ChefFS::FilePattern.new("/abc/def/ghi") } + it "match?" do + expect(pattern.match?("/abc/def/ghi")).to be_truthy + expect(pattern.match?("abc/def/ghi")).to be_falsey + expect(pattern.match?("/abc")).to be_falsey + expect(pattern.match?("/abc/def")).to be_falsey + end + it "exact_path" do + expect(pattern.exact_path).to eq("/abc/def/ghi") + end + it "could_match_children?" do + expect(pattern.could_match_children?("/abc")).to be_truthy + expect(pattern.could_match_children?("/xyz")).to be_falsey + expect(pattern.could_match_children?("abc")).to be_falsey + expect(pattern.could_match_children?("/abc/def")).to be_truthy + expect(pattern.could_match_children?("/abc/xyz")).to be_falsey + expect(pattern.could_match_children?("/abc/def/ghi")).to be_falsey + end + it "exact_child_name_under" do + expect(pattern.exact_child_name_under("/")).to eq("abc") + expect(pattern.exact_child_name_under("/abc")).to eq("def") + expect(pattern.exact_child_name_under("/abc/def")).to eq("ghi") end end context 'with simple pattern "a\*\b"', :skip => (Chef::Platform.windows?) do let(:pattern) { Chef::ChefFS::FilePattern.new('a\*\b') } - it 'match?' do - expect(pattern.match?('a*b')).to be_truthy - expect(pattern.match?('ab')).to be_falsey - expect(pattern.match?('acb')).to be_falsey - expect(pattern.match?('ab')).to be_falsey + it "match?" do + expect(pattern.match?("a*b")).to be_truthy + expect(pattern.match?("ab")).to be_falsey + expect(pattern.match?("acb")).to be_falsey + expect(pattern.match?("ab")).to be_falsey end - it 'exact_path' do - expect(pattern.exact_path).to eq('a*b') + it "exact_path" do + expect(pattern.exact_path).to eq("a*b") end - it 'could_match_children?' do - expect(pattern.could_match_children?('a/*b')).to be_falsey + it "could_match_children?" do + expect(pattern.could_match_children?("a/*b")).to be_falsey end end context 'with star pattern "/abc/*/ghi"' do - let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/*/ghi') } - it 'match?' do - expect(pattern.match?('/abc/def/ghi')).to be_truthy - expect(pattern.match?('/abc/ghi')).to be_falsey + let(:pattern) { Chef::ChefFS::FilePattern.new("/abc/*/ghi") } + it "match?" do + expect(pattern.match?("/abc/def/ghi")).to be_truthy + expect(pattern.match?("/abc/ghi")).to be_falsey end - it 'exact_path' do + it "exact_path" do expect(pattern.exact_path).to be_nil end - it 'could_match_children?' do - expect(pattern.could_match_children?('/abc')).to be_truthy - expect(pattern.could_match_children?('/xyz')).to be_falsey - expect(pattern.could_match_children?('abc')).to be_falsey - expect(pattern.could_match_children?('/abc/def')).to be_truthy - expect(pattern.could_match_children?('/abc/xyz')).to be_truthy - expect(pattern.could_match_children?('/abc/def/ghi')).to be_falsey + it "could_match_children?" do + expect(pattern.could_match_children?("/abc")).to be_truthy + expect(pattern.could_match_children?("/xyz")).to be_falsey + expect(pattern.could_match_children?("abc")).to be_falsey + expect(pattern.could_match_children?("/abc/def")).to be_truthy + expect(pattern.could_match_children?("/abc/xyz")).to be_truthy + expect(pattern.could_match_children?("/abc/def/ghi")).to be_falsey end - it 'exact_child_name_under' do - expect(pattern.exact_child_name_under('/')).to eq('abc') - expect(pattern.exact_child_name_under('/abc')).to eq(nil) - expect(pattern.exact_child_name_under('/abc/def')).to eq('ghi') + it "exact_child_name_under" do + expect(pattern.exact_child_name_under("/")).to eq("abc") + expect(pattern.exact_child_name_under("/abc")).to eq(nil) + expect(pattern.exact_child_name_under("/abc/def")).to eq("ghi") end end context 'with star pattern "/abc/d*f/ghi"' do - let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/d*f/ghi') } - it 'match?' do - expect(pattern.match?('/abc/def/ghi')).to be_truthy - expect(pattern.match?('/abc/dxf/ghi')).to be_truthy - expect(pattern.match?('/abc/df/ghi')).to be_truthy - expect(pattern.match?('/abc/dxyzf/ghi')).to be_truthy - expect(pattern.match?('/abc/d/ghi')).to be_falsey - expect(pattern.match?('/abc/f/ghi')).to be_falsey - expect(pattern.match?('/abc/ghi')).to be_falsey - expect(pattern.match?('/abc/xyz/ghi')).to be_falsey - end - it 'exact_path' do + let(:pattern) { Chef::ChefFS::FilePattern.new("/abc/d*f/ghi") } + it "match?" do + expect(pattern.match?("/abc/def/ghi")).to be_truthy + expect(pattern.match?("/abc/dxf/ghi")).to be_truthy + expect(pattern.match?("/abc/df/ghi")).to be_truthy + expect(pattern.match?("/abc/dxyzf/ghi")).to be_truthy + expect(pattern.match?("/abc/d/ghi")).to be_falsey + expect(pattern.match?("/abc/f/ghi")).to be_falsey + expect(pattern.match?("/abc/ghi")).to be_falsey + expect(pattern.match?("/abc/xyz/ghi")).to be_falsey + end + it "exact_path" do expect(pattern.exact_path).to be_nil end - it 'could_match_children?' do - expect(pattern.could_match_children?('/abc')).to be_truthy - expect(pattern.could_match_children?('/xyz')).to be_falsey - expect(pattern.could_match_children?('abc')).to be_falsey - expect(pattern.could_match_children?('/abc/def')).to be_truthy - expect(pattern.could_match_children?('/abc/xyz')).to be_falsey - expect(pattern.could_match_children?('/abc/dxyzf')).to be_truthy - expect(pattern.could_match_children?('/abc/df')).to be_truthy - expect(pattern.could_match_children?('/abc/d')).to be_falsey - expect(pattern.could_match_children?('/abc/f')).to be_falsey - expect(pattern.could_match_children?('/abc/def/ghi')).to be_falsey - end - it 'exact_child_name_under' do - expect(pattern.exact_child_name_under('/')).to eq('abc') - expect(pattern.exact_child_name_under('/abc')).to eq(nil) - expect(pattern.exact_child_name_under('/abc/def')).to eq('ghi') + it "could_match_children?" do + expect(pattern.could_match_children?("/abc")).to be_truthy + expect(pattern.could_match_children?("/xyz")).to be_falsey + expect(pattern.could_match_children?("abc")).to be_falsey + expect(pattern.could_match_children?("/abc/def")).to be_truthy + expect(pattern.could_match_children?("/abc/xyz")).to be_falsey + expect(pattern.could_match_children?("/abc/dxyzf")).to be_truthy + expect(pattern.could_match_children?("/abc/df")).to be_truthy + expect(pattern.could_match_children?("/abc/d")).to be_falsey + expect(pattern.could_match_children?("/abc/f")).to be_falsey + expect(pattern.could_match_children?("/abc/def/ghi")).to be_falsey + end + it "exact_child_name_under" do + expect(pattern.exact_child_name_under("/")).to eq("abc") + expect(pattern.exact_child_name_under("/abc")).to eq(nil) + expect(pattern.exact_child_name_under("/abc/def")).to eq("ghi") end end context 'with star pattern "/abc/d??f/ghi"' do - let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/d??f/ghi') } - it 'match?' do - expect(pattern.match?('/abc/deef/ghi')).to be_truthy - expect(pattern.match?('/abc/deeef/ghi')).to be_falsey - expect(pattern.match?('/abc/def/ghi')).to be_falsey - expect(pattern.match?('/abc/df/ghi')).to be_falsey - expect(pattern.match?('/abc/d/ghi')).to be_falsey - expect(pattern.match?('/abc/f/ghi')).to be_falsey - expect(pattern.match?('/abc/ghi')).to be_falsey - end - it 'exact_path' do + let(:pattern) { Chef::ChefFS::FilePattern.new("/abc/d??f/ghi") } + it "match?" do + expect(pattern.match?("/abc/deef/ghi")).to be_truthy + expect(pattern.match?("/abc/deeef/ghi")).to be_falsey + expect(pattern.match?("/abc/def/ghi")).to be_falsey + expect(pattern.match?("/abc/df/ghi")).to be_falsey + expect(pattern.match?("/abc/d/ghi")).to be_falsey + expect(pattern.match?("/abc/f/ghi")).to be_falsey + expect(pattern.match?("/abc/ghi")).to be_falsey + end + it "exact_path" do expect(pattern.exact_path).to be_nil end - it 'could_match_children?' do - expect(pattern.could_match_children?('/abc')).to be_truthy - expect(pattern.could_match_children?('/xyz')).to be_falsey - expect(pattern.could_match_children?('abc')).to be_falsey - expect(pattern.could_match_children?('/abc/deef')).to be_truthy - expect(pattern.could_match_children?('/abc/deeef')).to be_falsey - expect(pattern.could_match_children?('/abc/def')).to be_falsey - expect(pattern.could_match_children?('/abc/df')).to be_falsey - expect(pattern.could_match_children?('/abc/d')).to be_falsey - expect(pattern.could_match_children?('/abc/f')).to be_falsey - expect(pattern.could_match_children?('/abc/deef/ghi')).to be_falsey - end - it 'exact_child_name_under' do - expect(pattern.exact_child_name_under('/')).to eq('abc') - expect(pattern.exact_child_name_under('/abc')).to eq(nil) - expect(pattern.exact_child_name_under('/abc/deef')).to eq('ghi') + it "could_match_children?" do + expect(pattern.could_match_children?("/abc")).to be_truthy + expect(pattern.could_match_children?("/xyz")).to be_falsey + expect(pattern.could_match_children?("abc")).to be_falsey + expect(pattern.could_match_children?("/abc/deef")).to be_truthy + expect(pattern.could_match_children?("/abc/deeef")).to be_falsey + expect(pattern.could_match_children?("/abc/def")).to be_falsey + expect(pattern.could_match_children?("/abc/df")).to be_falsey + expect(pattern.could_match_children?("/abc/d")).to be_falsey + expect(pattern.could_match_children?("/abc/f")).to be_falsey + expect(pattern.could_match_children?("/abc/deef/ghi")).to be_falsey + end + it "exact_child_name_under" do + expect(pattern.exact_child_name_under("/")).to eq("abc") + expect(pattern.exact_child_name_under("/abc")).to eq(nil) + expect(pattern.exact_child_name_under("/abc/deef")).to eq("ghi") end end context 'with star pattern "/abc/d[a-z][0-9]f/ghi"', :skip => (Chef::Platform.windows?) do - let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/d[a-z][0-9]f/ghi') } - it 'match?' do - expect(pattern.match?('/abc/de1f/ghi')).to be_truthy - expect(pattern.match?('/abc/deef/ghi')).to be_falsey - expect(pattern.match?('/abc/d11f/ghi')).to be_falsey - expect(pattern.match?('/abc/de11f/ghi')).to be_falsey - expect(pattern.match?('/abc/dee1f/ghi')).to be_falsey - expect(pattern.match?('/abc/df/ghi')).to be_falsey - expect(pattern.match?('/abc/d/ghi')).to be_falsey - expect(pattern.match?('/abc/f/ghi')).to be_falsey - expect(pattern.match?('/abc/ghi')).to be_falsey - end - it 'exact_path' do + let(:pattern) { Chef::ChefFS::FilePattern.new("/abc/d[a-z][0-9]f/ghi") } + it "match?" do + expect(pattern.match?("/abc/de1f/ghi")).to be_truthy + expect(pattern.match?("/abc/deef/ghi")).to be_falsey + expect(pattern.match?("/abc/d11f/ghi")).to be_falsey + expect(pattern.match?("/abc/de11f/ghi")).to be_falsey + expect(pattern.match?("/abc/dee1f/ghi")).to be_falsey + expect(pattern.match?("/abc/df/ghi")).to be_falsey + expect(pattern.match?("/abc/d/ghi")).to be_falsey + expect(pattern.match?("/abc/f/ghi")).to be_falsey + expect(pattern.match?("/abc/ghi")).to be_falsey + end + it "exact_path" do expect(pattern.exact_path).to be_nil end - it 'could_match_children?' do - expect(pattern.could_match_children?('/abc')).to be_truthy - expect(pattern.could_match_children?('/xyz')).to be_falsey - expect(pattern.could_match_children?('abc')).to be_falsey - expect(pattern.could_match_children?('/abc/de1f')).to be_truthy - expect(pattern.could_match_children?('/abc/deef')).to be_falsey - expect(pattern.could_match_children?('/abc/d11f')).to be_falsey - expect(pattern.could_match_children?('/abc/de11f')).to be_falsey - expect(pattern.could_match_children?('/abc/dee1f')).to be_falsey - expect(pattern.could_match_children?('/abc/def')).to be_falsey - expect(pattern.could_match_children?('/abc/df')).to be_falsey - expect(pattern.could_match_children?('/abc/d')).to be_falsey - expect(pattern.could_match_children?('/abc/f')).to be_falsey - expect(pattern.could_match_children?('/abc/de1f/ghi')).to be_falsey - end - it 'exact_child_name_under' do - expect(pattern.exact_child_name_under('/')).to eq('abc') - expect(pattern.exact_child_name_under('/abc')).to eq(nil) - expect(pattern.exact_child_name_under('/abc/de1f')).to eq('ghi') + it "could_match_children?" do + expect(pattern.could_match_children?("/abc")).to be_truthy + expect(pattern.could_match_children?("/xyz")).to be_falsey + expect(pattern.could_match_children?("abc")).to be_falsey + expect(pattern.could_match_children?("/abc/de1f")).to be_truthy + expect(pattern.could_match_children?("/abc/deef")).to be_falsey + expect(pattern.could_match_children?("/abc/d11f")).to be_falsey + expect(pattern.could_match_children?("/abc/de11f")).to be_falsey + expect(pattern.could_match_children?("/abc/dee1f")).to be_falsey + expect(pattern.could_match_children?("/abc/def")).to be_falsey + expect(pattern.could_match_children?("/abc/df")).to be_falsey + expect(pattern.could_match_children?("/abc/d")).to be_falsey + expect(pattern.could_match_children?("/abc/f")).to be_falsey + expect(pattern.could_match_children?("/abc/de1f/ghi")).to be_falsey + end + it "exact_child_name_under" do + expect(pattern.exact_child_name_under("/")).to eq("abc") + expect(pattern.exact_child_name_under("/abc")).to eq(nil) + expect(pattern.exact_child_name_under("/abc/de1f")).to eq("ghi") end end context 'with star pattern "/abc/**/ghi"' do - let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/**/ghi') } - it 'match?' do - expect(pattern.match?('/abc/def/ghi')).to be_truthy - expect(pattern.match?('/abc/d/e/f/ghi')).to be_truthy - expect(pattern.match?('/abc/ghi')).to be_falsey - expect(pattern.match?('/abcdef/d/ghi')).to be_falsey - expect(pattern.match?('/abc/d/defghi')).to be_falsey - expect(pattern.match?('/xyz')).to be_falsey - end - it 'exact_path' do + let(:pattern) { Chef::ChefFS::FilePattern.new("/abc/**/ghi") } + it "match?" do + expect(pattern.match?("/abc/def/ghi")).to be_truthy + expect(pattern.match?("/abc/d/e/f/ghi")).to be_truthy + expect(pattern.match?("/abc/ghi")).to be_falsey + expect(pattern.match?("/abcdef/d/ghi")).to be_falsey + expect(pattern.match?("/abc/d/defghi")).to be_falsey + expect(pattern.match?("/xyz")).to be_falsey + end + it "exact_path" do expect(pattern.exact_path).to be_nil end - it 'could_match_children?' do - expect(pattern.could_match_children?('/abc')).to be_truthy - expect(pattern.could_match_children?('/abc/d')).to be_truthy - expect(pattern.could_match_children?('/abc/d/e')).to be_truthy - expect(pattern.could_match_children?('/abc/d/e/f')).to be_truthy - expect(pattern.could_match_children?('/abc/def/ghi')).to be_truthy - expect(pattern.could_match_children?('abc')).to be_falsey - expect(pattern.could_match_children?('/xyz')).to be_falsey + it "could_match_children?" do + expect(pattern.could_match_children?("/abc")).to be_truthy + expect(pattern.could_match_children?("/abc/d")).to be_truthy + expect(pattern.could_match_children?("/abc/d/e")).to be_truthy + expect(pattern.could_match_children?("/abc/d/e/f")).to be_truthy + expect(pattern.could_match_children?("/abc/def/ghi")).to be_truthy + expect(pattern.could_match_children?("abc")).to be_falsey + expect(pattern.could_match_children?("/xyz")).to be_falsey end - it 'exact_child_name_under' do - expect(pattern.exact_child_name_under('/')).to eq('abc') - expect(pattern.exact_child_name_under('/abc')).to eq(nil) - expect(pattern.exact_child_name_under('/abc/def')).to eq(nil) + it "exact_child_name_under" do + expect(pattern.exact_child_name_under("/")).to eq("abc") + expect(pattern.exact_child_name_under("/abc")).to eq(nil) + expect(pattern.exact_child_name_under("/abc/def")).to eq(nil) end end context 'with star pattern "/abc**/ghi"' do - let(:pattern) { Chef::ChefFS::FilePattern.new('/abc**/ghi') } - it 'match?' do - expect(pattern.match?('/abc/def/ghi')).to be_truthy - expect(pattern.match?('/abc/d/e/f/ghi')).to be_truthy - expect(pattern.match?('/abc/ghi')).to be_truthy - expect(pattern.match?('/abcdef/ghi')).to be_truthy - expect(pattern.match?('/abc/defghi')).to be_falsey - expect(pattern.match?('/xyz')).to be_falsey - end - it 'exact_path' do + let(:pattern) { Chef::ChefFS::FilePattern.new("/abc**/ghi") } + it "match?" do + expect(pattern.match?("/abc/def/ghi")).to be_truthy + expect(pattern.match?("/abc/d/e/f/ghi")).to be_truthy + expect(pattern.match?("/abc/ghi")).to be_truthy + expect(pattern.match?("/abcdef/ghi")).to be_truthy + expect(pattern.match?("/abc/defghi")).to be_falsey + expect(pattern.match?("/xyz")).to be_falsey + end + it "exact_path" do expect(pattern.exact_path).to be_nil end - it 'could_match_children?' do - expect(pattern.could_match_children?('/abc')).to be_truthy - expect(pattern.could_match_children?('/abcdef')).to be_truthy - expect(pattern.could_match_children?('/abc/d/e')).to be_truthy - expect(pattern.could_match_children?('/abc/d/e/f')).to be_truthy - expect(pattern.could_match_children?('/abc/def/ghi')).to be_truthy - expect(pattern.could_match_children?('abc')).to be_falsey + it "could_match_children?" do + expect(pattern.could_match_children?("/abc")).to be_truthy + expect(pattern.could_match_children?("/abcdef")).to be_truthy + expect(pattern.could_match_children?("/abc/d/e")).to be_truthy + expect(pattern.could_match_children?("/abc/d/e/f")).to be_truthy + expect(pattern.could_match_children?("/abc/def/ghi")).to be_truthy + expect(pattern.could_match_children?("abc")).to be_falsey end - it 'exact_child_name_under' do - expect(pattern.exact_child_name_under('/')).to eq(nil) - expect(pattern.exact_child_name_under('/abc')).to eq(nil) - expect(pattern.exact_child_name_under('/abc/def')).to eq(nil) + it "exact_child_name_under" do + expect(pattern.exact_child_name_under("/")).to eq(nil) + expect(pattern.exact_child_name_under("/abc")).to eq(nil) + expect(pattern.exact_child_name_under("/abc/def")).to eq(nil) end end context 'with star pattern "/abc/**ghi"' do - let(:pattern) { Chef::ChefFS::FilePattern.new('/abc/**ghi') } - it 'match?' do - expect(pattern.match?('/abc/def/ghi')).to be_truthy - expect(pattern.match?('/abc/def/ghi/ghi')).to be_truthy - expect(pattern.match?('/abc/def/ghi/jkl')).to be_falsey - expect(pattern.match?('/abc/d/e/f/ghi')).to be_truthy - expect(pattern.match?('/abc/ghi')).to be_truthy - expect(pattern.match?('/abcdef/ghi')).to be_falsey - expect(pattern.match?('/abc/defghi')).to be_truthy - expect(pattern.match?('/xyz')).to be_falsey - end - it 'exact_path' do + let(:pattern) { Chef::ChefFS::FilePattern.new("/abc/**ghi") } + it "match?" do + expect(pattern.match?("/abc/def/ghi")).to be_truthy + expect(pattern.match?("/abc/def/ghi/ghi")).to be_truthy + expect(pattern.match?("/abc/def/ghi/jkl")).to be_falsey + expect(pattern.match?("/abc/d/e/f/ghi")).to be_truthy + expect(pattern.match?("/abc/ghi")).to be_truthy + expect(pattern.match?("/abcdef/ghi")).to be_falsey + expect(pattern.match?("/abc/defghi")).to be_truthy + expect(pattern.match?("/xyz")).to be_falsey + end + it "exact_path" do expect(pattern.exact_path).to be_nil end - it 'could_match_children?' do - expect(pattern.could_match_children?('/abc')).to be_truthy - expect(pattern.could_match_children?('/abcdef')).to be_falsey - expect(pattern.could_match_children?('/abc/d/e')).to be_truthy - expect(pattern.could_match_children?('/abc/d/e/f')).to be_truthy - expect(pattern.could_match_children?('/abc/def/ghi')).to be_truthy - expect(pattern.could_match_children?('abc')).to be_falsey - expect(pattern.could_match_children?('/xyz')).to be_falsey + it "could_match_children?" do + expect(pattern.could_match_children?("/abc")).to be_truthy + expect(pattern.could_match_children?("/abcdef")).to be_falsey + expect(pattern.could_match_children?("/abc/d/e")).to be_truthy + expect(pattern.could_match_children?("/abc/d/e/f")).to be_truthy + expect(pattern.could_match_children?("/abc/def/ghi")).to be_truthy + expect(pattern.could_match_children?("abc")).to be_falsey + expect(pattern.could_match_children?("/xyz")).to be_falsey end - it 'exact_child_name_under' do - expect(pattern.exact_child_name_under('/')).to eq('abc') - expect(pattern.exact_child_name_under('/abc')).to eq(nil) - expect(pattern.exact_child_name_under('/abc/def')).to eq(nil) + it "exact_child_name_under" do + expect(pattern.exact_child_name_under("/")).to eq("abc") + expect(pattern.exact_child_name_under("/abc")).to eq(nil) + expect(pattern.exact_child_name_under("/abc/def")).to eq(nil) end end context 'with star pattern "a**b**c"' do - let(:pattern) { Chef::ChefFS::FilePattern.new('a**b**c') } - it 'match?' do - expect(pattern.match?('axybzwc')).to be_truthy - expect(pattern.match?('abc')).to be_truthy - expect(pattern.match?('axyzwc')).to be_falsey - expect(pattern.match?('ac')).to be_falsey - expect(pattern.match?('a/x/y/b/z/w/c')).to be_truthy - end - it 'exact_path' do + let(:pattern) { Chef::ChefFS::FilePattern.new("a**b**c") } + it "match?" do + expect(pattern.match?("axybzwc")).to be_truthy + expect(pattern.match?("abc")).to be_truthy + expect(pattern.match?("axyzwc")).to be_falsey + expect(pattern.match?("ac")).to be_falsey + expect(pattern.match?("a/x/y/b/z/w/c")).to be_truthy + end + it "exact_path" do expect(pattern.exact_path).to be_nil end end - context 'normalization tests' do - it 'handles trailing slashes' do - expect(p('abc/').normalized_pattern).to eq('abc') - expect(p('abc/').exact_path).to eq('abc') - expect(p('abc/').match?('abc')).to be_truthy - expect(p('//').normalized_pattern).to eq('/') - expect(p('//').exact_path).to eq('/') - expect(p('//').match?('/')).to be_truthy - expect(p('/./').normalized_pattern).to eq('/') - expect(p('/./').exact_path).to eq('/') - expect(p('/./').match?('/')).to be_truthy - end - it 'handles multiple slashes' do - expect(p('abc//def').normalized_pattern).to eq('abc/def') - expect(p('abc//def').exact_path).to eq('abc/def') - expect(p('abc//def').match?('abc/def')).to be_truthy - expect(p('abc//').normalized_pattern).to eq('abc') - expect(p('abc//').exact_path).to eq('abc') - expect(p('abc//').match?('abc')).to be_truthy - end - it 'handles dot' do - expect(p('abc/./def').normalized_pattern).to eq('abc/def') - expect(p('abc/./def').exact_path).to eq('abc/def') - expect(p('abc/./def').match?('abc/def')).to be_truthy - expect(p('./abc/def').normalized_pattern).to eq('abc/def') - expect(p('./abc/def').exact_path).to eq('abc/def') - expect(p('./abc/def').match?('abc/def')).to be_truthy - expect(p('/.').normalized_pattern).to eq('/') - expect(p('/.').exact_path).to eq('/') - expect(p('/.').match?('/')).to be_truthy - end - it 'handles dotdot' do - expect(p('abc/../def').normalized_pattern).to eq('def') - expect(p('abc/../def').exact_path).to eq('def') - expect(p('abc/../def').match?('def')).to be_truthy - expect(p('abc/def/../..').normalized_pattern).to eq('') - expect(p('abc/def/../..').exact_path).to eq('') - expect(p('abc/def/../..').match?('')).to be_truthy - expect(p('/*/../def').normalized_pattern).to eq('/def') - expect(p('/*/../def').exact_path).to eq('/def') - expect(p('/*/../def').match?('/def')).to be_truthy - expect(p('/*/*/../def').normalized_pattern).to eq('/*/def') - expect(p('/*/*/../def').exact_path).to be_nil - expect(p('/*/*/../def').match?('/abc/def')).to be_truthy - expect(p('/abc/def/../..').normalized_pattern).to eq('/') - expect(p('/abc/def/../..').exact_path).to eq('/') - expect(p('/abc/def/../..').match?('/')).to be_truthy - expect(p('abc/../../def').normalized_pattern).to eq('../def') - expect(p('abc/../../def').exact_path).to eq('../def') - expect(p('abc/../../def').match?('../def')).to be_truthy - end - it 'handles dotdot with double star' do - expect(p('abc**/def/../ghi').exact_path).to be_nil - expect(p('abc**/def/../ghi').match?('abc/ghi')).to be_truthy - expect(p('abc**/def/../ghi').match?('abc/x/y/z/ghi')).to be_truthy - expect(p('abc**/def/../ghi').match?('ghi')).to be_falsey - end - it 'raises error on dotdot with overlapping double star' do - expect { Chef::ChefFS::FilePattern.new('abc/**/../def').exact_path }.to raise_error(ArgumentError) - expect { Chef::ChefFS::FilePattern.new('abc/**/abc/../../def').exact_path }.to raise_error(ArgumentError) - end - it 'handles leading dotdot' do - expect(p('../abc/def').exact_path).to eq('../abc/def') - expect(p('../abc/def').match?('../abc/def')).to be_truthy - expect(p('/../abc/def').exact_path).to eq('/abc/def') - expect(p('/../abc/def').match?('/abc/def')).to be_truthy - expect(p('..').exact_path).to eq('..') - expect(p('..').match?('..')).to be_truthy - expect(p('/..').exact_path).to eq('/') - expect(p('/..').match?('/')).to be_truthy + context "normalization tests" do + it "handles trailing slashes" do + expect(p("abc/").normalized_pattern).to eq("abc") + expect(p("abc/").exact_path).to eq("abc") + expect(p("abc/").match?("abc")).to be_truthy + expect(p("//").normalized_pattern).to eq("/") + expect(p("//").exact_path).to eq("/") + expect(p("//").match?("/")).to be_truthy + expect(p("/./").normalized_pattern).to eq("/") + expect(p("/./").exact_path).to eq("/") + expect(p("/./").match?("/")).to be_truthy + end + it "handles multiple slashes" do + expect(p("abc//def").normalized_pattern).to eq("abc/def") + expect(p("abc//def").exact_path).to eq("abc/def") + expect(p("abc//def").match?("abc/def")).to be_truthy + expect(p("abc//").normalized_pattern).to eq("abc") + expect(p("abc//").exact_path).to eq("abc") + expect(p("abc//").match?("abc")).to be_truthy + end + it "handles dot" do + expect(p("abc/./def").normalized_pattern).to eq("abc/def") + expect(p("abc/./def").exact_path).to eq("abc/def") + expect(p("abc/./def").match?("abc/def")).to be_truthy + expect(p("./abc/def").normalized_pattern).to eq("abc/def") + expect(p("./abc/def").exact_path).to eq("abc/def") + expect(p("./abc/def").match?("abc/def")).to be_truthy + expect(p("/.").normalized_pattern).to eq("/") + expect(p("/.").exact_path).to eq("/") + expect(p("/.").match?("/")).to be_truthy + end + it "handles dotdot" do + expect(p("abc/../def").normalized_pattern).to eq("def") + expect(p("abc/../def").exact_path).to eq("def") + expect(p("abc/../def").match?("def")).to be_truthy + expect(p("abc/def/../..").normalized_pattern).to eq("") + expect(p("abc/def/../..").exact_path).to eq("") + expect(p("abc/def/../..").match?("")).to be_truthy + expect(p("/*/../def").normalized_pattern).to eq("/def") + expect(p("/*/../def").exact_path).to eq("/def") + expect(p("/*/../def").match?("/def")).to be_truthy + expect(p("/*/*/../def").normalized_pattern).to eq("/*/def") + expect(p("/*/*/../def").exact_path).to be_nil + expect(p("/*/*/../def").match?("/abc/def")).to be_truthy + expect(p("/abc/def/../..").normalized_pattern).to eq("/") + expect(p("/abc/def/../..").exact_path).to eq("/") + expect(p("/abc/def/../..").match?("/")).to be_truthy + expect(p("abc/../../def").normalized_pattern).to eq("../def") + expect(p("abc/../../def").exact_path).to eq("../def") + expect(p("abc/../../def").match?("../def")).to be_truthy + end + it "handles dotdot with double star" do + expect(p("abc**/def/../ghi").exact_path).to be_nil + expect(p("abc**/def/../ghi").match?("abc/ghi")).to be_truthy + expect(p("abc**/def/../ghi").match?("abc/x/y/z/ghi")).to be_truthy + expect(p("abc**/def/../ghi").match?("ghi")).to be_falsey + end + it "raises error on dotdot with overlapping double star" do + expect { Chef::ChefFS::FilePattern.new("abc/**/../def").exact_path }.to raise_error(ArgumentError) + expect { Chef::ChefFS::FilePattern.new("abc/**/abc/../../def").exact_path }.to raise_error(ArgumentError) + end + it "handles leading dotdot" do + expect(p("../abc/def").exact_path).to eq("../abc/def") + expect(p("../abc/def").match?("../abc/def")).to be_truthy + expect(p("/../abc/def").exact_path).to eq("/abc/def") + expect(p("/../abc/def").match?("/abc/def")).to be_truthy + expect(p("..").exact_path).to eq("..") + expect(p("..").match?("..")).to be_truthy + expect(p("/..").exact_path).to eq("/") + expect(p("/..").match?("/")).to be_truthy end end |