194 lines
7.6 KiB
Ruby
194 lines
7.6 KiB
Ruby
require 'spec_helper'
|
|
require 'middleman-core'
|
|
|
|
describe Middleman::Util do
|
|
|
|
describe "::path_match" do
|
|
it "matches a literal string" do
|
|
expect(Middleman::Util.path_match '/index.html', '/index.html').to be true
|
|
end
|
|
|
|
it "won't match a wrong string" do
|
|
expect(Middleman::Util.path_match '/foo.html', '/index.html').to be false
|
|
end
|
|
|
|
it "won't match a partial string" do
|
|
expect(Middleman::Util.path_match 'ind', '/index.html').to be false
|
|
end
|
|
|
|
it "works with a regex" do
|
|
expect(Middleman::Util.path_match /\.html$/, '/index.html').to be true
|
|
expect(Middleman::Util.path_match /\.js$/, '/index.html').to be false
|
|
end
|
|
|
|
it "works with a proc" do
|
|
matcher = lambda {|p| p.length > 5 }
|
|
|
|
expect(Middleman::Util.path_match matcher, '/index.html').to be true
|
|
expect(Middleman::Util.path_match matcher, '/i').to be false
|
|
end
|
|
|
|
it "works with globs" do
|
|
expect(Middleman::Util.path_match '/foo/*.html', '/foo/index.html').to be true
|
|
expect(Middleman::Util.path_match '/foo/*.html', '/foo/index.js').to be false
|
|
expect(Middleman::Util.path_match '/bar/*.html', '/foo/index.js').to be false
|
|
|
|
expect(Middleman::Util.path_match '/foo/*', '/foo/bar/index.html').to be true
|
|
expect(Middleman::Util.path_match '/foo/**/*', '/foo/bar/index.html').to be true
|
|
expect(Middleman::Util.path_match '/foo/**', '/foo/bar/index.html').to be true
|
|
end
|
|
end
|
|
|
|
describe "::binary?" do
|
|
%w(plain.txt unicode.txt unicode).each do |file|
|
|
it "recognizes #{file} as not binary" do
|
|
expect(Middleman::Util.binary?(File.join(File.dirname(__FILE__), "binary_spec/#{file}"))).to be false
|
|
end
|
|
end
|
|
|
|
%w(middleman.png middleman stars.svgz).each do |file|
|
|
it "recognizes #{file} as binary" do
|
|
expect(Middleman::Util.binary?(File.join(File.dirname(__FILE__), "binary_spec/#{file}"))).to be true
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "::recursively_enhance" do
|
|
it "returns Hashie extended Hash if given a hash" do
|
|
input = {test: "subject"}
|
|
subject = Middleman::Util.recursively_enhance input
|
|
|
|
expect( subject.test ).to eq "subject"
|
|
end
|
|
|
|
it "returns Array with strings, or IndifferentHash, true, false" do
|
|
indifferent_hash = {test: "subject"}
|
|
regular_hash = {regular: "hash"}
|
|
input = [ indifferent_hash, regular_hash, true, false ]
|
|
subject = Middleman::Util.recursively_enhance input
|
|
|
|
expect( subject[1].regular ).to eq "hash"
|
|
expect( subject[2] ).to eq true
|
|
expect( subject[3] ).to eq false
|
|
end
|
|
end
|
|
|
|
describe "::asset_url" do
|
|
|
|
after(:each) do
|
|
Given.cleanup!
|
|
end
|
|
|
|
context "when http_prefix is activated" do
|
|
|
|
before(:each) do
|
|
Given.fixture 'clean-dir-app'
|
|
Given.file 'source/images/blank.gif', ''
|
|
@mm = Middleman::Application.new do
|
|
config[:http_prefix] = 'http_prefix'
|
|
end
|
|
end
|
|
|
|
it "returns path with http_prefix pre-pended if resource is found" do
|
|
expect( Middleman::Util.asset_url( @mm, 'blank.gif', 'images', http_prefix: 'http_prefix' ) ).to eq 'http_prefix/images/blank.gif'
|
|
end
|
|
|
|
it "returns path with http_prefix pre-pended if resource is not found" do
|
|
expect( Middleman::Util.asset_url( @mm, 'missing.gif', 'images', http_prefix: 'http_prefix' ) ).to eq 'http_prefix/images/missing.gif'
|
|
end
|
|
end
|
|
|
|
it "returns path relative to the provided current_resource" do
|
|
Given.fixture 'clean-dir-app'
|
|
Given.file 'source/a-path/index.html', ''
|
|
Given.file 'source/a-path/images/blank.gif', ''
|
|
@mm = Middleman::Application.new
|
|
current_resource = @mm.sitemap.find_resource_by_path('a-path/index.html')
|
|
expect( Middleman::Util.asset_url( @mm, 'images/blank.gif', 'images', current_resource: current_resource ) ).to eq '/a-path/images/blank.gif'
|
|
end
|
|
|
|
context "when relative is true" do
|
|
|
|
before(:each) do
|
|
Given.fixture 'relative-assets-app'
|
|
@mm = Middleman::Application.new
|
|
end
|
|
|
|
it "returns path relative to the provided current_resource" do
|
|
current_resource = instance_double("Middleman::Sitemap::Resource", destination_path: 'a-path/index.html', path: 'a-path/index.html')
|
|
expect( Middleman::Util.asset_url( @mm, 'blank.gif', 'images', current_resource: current_resource,
|
|
relative: true ) ).to eq '../images/blank.gif'
|
|
end
|
|
|
|
it "raises error if not given a current_resource" do
|
|
expect{
|
|
Middleman::Util.asset_url( @mm, 'blank.gif', 'images', relative: true )
|
|
}.to raise_error ArgumentError
|
|
end
|
|
end
|
|
|
|
it "returns path if it is already a full path" do
|
|
expect( Middleman::Util.asset_url( @mm, 'http://example.com' ) ).to eq 'http://example.com'
|
|
expect( Middleman::Util.asset_url( @mm, 'data:example' ) ).to eq 'data:example'
|
|
end
|
|
|
|
it "returns a resource url if given a resource's destination path" do
|
|
Given.fixture 'clean-dir-app' # includes directory indexes extension
|
|
Given.file 'source/how/about/that.html', ''
|
|
@mm = Middleman::Application.new
|
|
|
|
expect( Middleman::Util.asset_url( @mm, '/how/about/that/index.html' ) ).to eq '/how/about/that/'
|
|
end
|
|
|
|
it "returns a resource url if given a resources path" do
|
|
Given.fixture 'clean-dir-app' # includes directory indexes extension
|
|
Given.file 'source/how/about/that.html', ''
|
|
@mm = Middleman::Application.new
|
|
|
|
expect( Middleman::Util.asset_url( @mm, '/how/about/that.html' ) ).to eq '/how/about/that/'
|
|
end
|
|
|
|
end
|
|
|
|
describe "::find_related_files" do
|
|
after(:each) do
|
|
Given.cleanup!
|
|
end
|
|
|
|
before(:each) do
|
|
Given.fixture 'related-files-app'
|
|
@mm = Middleman::Application.new
|
|
end
|
|
|
|
def source_file(path)
|
|
Pathname(File.expand_path("source/#{path}"))
|
|
end
|
|
|
|
it "Finds partials possibly related to ERb files" do
|
|
related = Middleman::Util.find_related_files(@mm, [source_file('partials/_test.erb')]).map { |f| f[:full_path].to_s }
|
|
expect(related).to include File.expand_path("source/index.html.erb")
|
|
|
|
related = Middleman::Util.find_related_files(@mm, [source_file('partials/_test2.haml')]).map { |f| f[:full_path].to_s }
|
|
expect(related).to include File.expand_path("source/index.html.erb")
|
|
end
|
|
|
|
it "Finds partials possible related to Scss files" do
|
|
related = Middleman::Util.find_related_files(@mm, [source_file('stylesheets/_include4.scss')]).map { |f| f[:full_path].to_s }
|
|
expect(related).to include File.expand_path("source/stylesheets/site.css.scss")
|
|
expect(related).to include File.expand_path("source/stylesheets/include2.css.scss")
|
|
|
|
related = Middleman::Util.find_related_files(@mm, [source_file('stylesheets/include2.css.scss')]).map { |f| f[:full_path].to_s }
|
|
expect(related).to include File.expand_path("source/stylesheets/site.css.scss")
|
|
expect(related).not_to include File.expand_path("source/stylesheets/include2.css.scss")
|
|
|
|
related = Middleman::Util.find_related_files(@mm, [source_file('stylesheets/include1.css')]).map { |f| f[:full_path].to_s }
|
|
expect(related).to include File.expand_path("source/stylesheets/site.css.scss")
|
|
expect(related).to include File.expand_path("source/stylesheets/include2.css.scss")
|
|
|
|
related = Middleman::Util.find_related_files(@mm, [source_file('stylesheets/_include3.sass')]).map { |f| f[:full_path].to_s }
|
|
expect(related).to include File.expand_path("source/stylesheets/site.css.scss")
|
|
expect(related).to include File.expand_path("source/stylesheets/include2.css.scss")
|
|
end
|
|
end
|
|
end
|