# encoding: utf-8 class Nanoc::Filters::RelativizePathsTest < Nanoc::TestCase def test_filter_html_with_double_quotes # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = %[foo] expected_content = %[foo] # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_equal(expected_content, actual_content) end def test_filter_html_with_single_quotes # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = %[foo] expected_content = %[foo] # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_equal(expected_content, actual_content) end def test_filter_html_without_quotes # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = %[foo] expected_content = %[foo] # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_equal(expected_content, actual_content) end def test_filter_html_with_boilerplate # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = < Hello foo EOS expected_match_0 = %r{foo} expected_match_1 = %r{^\s*\s*(.|\s)*Hello\s*\s*\s*foo\s*\s*\s*$} # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_match(expected_match_0, actual_content) assert_match(expected_match_1, actual_content) end def test_filter_html_multiple # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = %[foo bar] expected_content = %[foo bar] # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_equal(expected_content, actual_content) end def test_filter_html_nested # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = %[] expected_content = %[] # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_equal(expected_content, actual_content) end def test_filter_html_outside_tag # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = %[stuff href="/foo" more stuff] expected_content = %[stuff href="/foo" more stuff] # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_equal(expected_content, actual_content) end def test_filter_html_root # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/woof/meow/' end # Set content raw_content = %[foo] expected_content = %[foo] # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_equal(expected_content, actual_content) end def test_filter_html_network_path # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/woof/meow/' end # Set content raw_content = %[example.com] expected_content = %[example.com] # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_equal(expected_content, actual_content) end def test_filter_html_with_anchor # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/woof/meow/' end # Set content raw_content = %[Max Payne] expected_content = %[Max Payne] # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_equal(expected_content, actual_content) end def test_filter_html_with_url # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/woof/meow/' end # Set content raw_content = %[Example] expected_content = %[Example] # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_equal(expected_content, actual_content) end def test_filter_html_with_relative_path # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/woof/meow/' end # Set content raw_content = %[Example] expected_content = %[Example] # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_equal(expected_content, actual_content) end def test_filter_html_object_with_relative_path # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/woof/meow/' end # Set content raw_content = %[] expected_content = %[] # Test actual_content = filter.setup_and_run(raw_content, :type => :html) assert_equal(expected_content, actual_content) end def test_filter_implicit # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Test assert_raises(RuntimeError) do filter.setup_and_run("moo") end end def test_filter_css_with_double_quotes # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = %[background: url("/foo/bar/background.png");] expected_content = %[background: url("../background.png");] # Test actual_content = filter.setup_and_run(raw_content, :type => :css) assert_equal(expected_content, actual_content) end def test_filter_css_with_single_quotes # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = %[background: url('/foo/bar/background.png');] expected_content = %[background: url('../background.png');] # Test actual_content = filter.setup_and_run(raw_content, :type => :css) assert_equal(expected_content, actual_content) end def test_filter_css_without_quotes # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = %[background: url(/foo/bar/background.png);] expected_content = %[background: url(../background.png);] # Test actual_content = filter.setup_and_run(raw_content, :type => :css) assert_equal(expected_content, actual_content) end def test_filter_css_multiple # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = %[background: url(/foo/bar/a.png) url(/foo/bar/b.png);] expected_content = %[background: url(../a.png) url(../b.png);] # Test actual_content = filter.setup_and_run(raw_content, :type => :css) assert_equal(expected_content, actual_content) end def test_filter_css_root # It is probably a bit weird to have “url(/)” in CSS, but I’ve made a # test case for this situation anyway. Can’t hurt… # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/woof/meow/' end # Set content raw_content = %[background: url(/);] expected_content = %[background: url(../../);] # Test actual_content = filter.setup_and_run(raw_content, :type => :css) assert_equal(expected_content, actual_content) end def test_filter_css_network_path # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/woof/meow/' end # Set content raw_content = %[background: url(//example.com);] expected_content = %[background: url(//example.com);] # Test actual_content = filter.setup_and_run(raw_content, :type => :css) assert_equal(expected_content, actual_content) end def test_filter_xml if_have 'nokogiri' do # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = <<-XML baz XML expected_content = <<-XML baz XML # Test actual_content = filter.setup_and_run(raw_content, :type => :xml, :select => ['*/@boo']) assert_equal(expected_content, actual_content) end end def test_filter_fragment_xml if_have 'nokogiri' do # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = <<-XML baz XML expected_content = <<-XML baz XML # Test actual_content = filter.setup_and_run(raw_content, :type => :xml, :select => ['far/@href']) assert_equal(expected_content, actual_content) end end def test_filter_xml_with_namespaces if_have 'nokogiri' do # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = <<-XML baz XML expected_content = <<-XML baz XML # Test actual_content = filter.setup_and_run(raw_content, { :type => :xml, :namespaces => {:ex => 'http://example.org'}, :select => ['ex:a/@href'] }) assert_equal(expected_content, actual_content) end end def test_filter_xhtml if_have 'nokogiri' do # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = <<-XML bar XML expected_match = %r{^ .* bar } # Test actual_content = filter.setup_and_run(raw_content, :type => :xhtml) assert_match expected_match, actual_content end end def test_filter_fragment_xhtml if_have 'nokogiri' do # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/bar/baz/'), :blah) @item_rep.path = '/foo/bar/baz/' end # Set content raw_content = <<-XML bar

XML expected_content = <<-XML bar

XML # Test actual_content = filter.setup_and_run(raw_content.freeze, :type => :xhtml) assert_equal(expected_content, actual_content) end end def test_filter_fragment_xhtml_with_comments if_have 'nokogiri' do # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/baz/'), :blah) @item_rep.path = '/foo/baz/' end # Set content raw_content = %[ ] expected_content = %[ ] # Test actual_content = filter.setup_and_run(raw_content.freeze, :type => :xhtml) assert_equal(expected_content, actual_content) end end def test_filter_fragment_html_with_comments if_have 'nokogiri' do # Create filter with mock item filter = Nanoc::Filters::RelativizePaths.new # Mock item filter.instance_eval do @item_rep = Nanoc::ItemRep.new( Nanoc::Item.new( 'content', {}, '/foo/baz/'), :blah) @item_rep.path = '/foo/baz/' end # Set content raw_content = %[ ] # Test actual_content = filter.setup_and_run(raw_content.freeze, :type => :html) assert actual_content.include? %[