# encoding: utf-8
class Nanoc::Filters::RelativizePathsTest < MiniTest::Unit::TestCase
include Nanoc::TestHelpers
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 = %[
]
expected_content = %[
]
# Test
actual_content = filter.setup_and_run(raw_content.freeze, :type => :html)
assert_equal(expected_content, actual_content)
end
end
end