nanoc 3.6.9 → 3.6.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +15 -8
- data/Gemfile.lock +27 -14
- data/NEWS.md +14 -0
- data/lib/nanoc/base.rb +2 -0
- data/lib/nanoc/base/checksummer.rb +82 -0
- data/lib/nanoc/base/compilation/compiler.rb +4 -3
- data/lib/nanoc/base/compilation/filter.rb +3 -10
- data/lib/nanoc/base/compilation/rules_collection.rb +6 -1
- data/lib/nanoc/base/core_ext/array.rb +1 -1
- data/lib/nanoc/base/core_ext/hash.rb +1 -2
- data/lib/nanoc/base/core_ext/pathname.rb +1 -2
- data/lib/nanoc/base/core_ext/string.rb +1 -3
- data/lib/nanoc/base/errors.rb +9 -0
- data/lib/nanoc/base/result_data/item_rep.rb +2 -7
- data/lib/nanoc/base/source_data/code_snippet.rb +1 -1
- data/lib/nanoc/base/source_data/item.rb +1 -16
- data/lib/nanoc/base/source_data/layout.rb +1 -3
- data/lib/nanoc/base/source_data/site.rb +14 -0
- data/lib/nanoc/base/temp_filename_factory.rb +53 -0
- data/lib/nanoc/cli/commands/compile.rb +6 -2
- data/lib/nanoc/cli/commands/create-site.rb +3 -0
- data/lib/nanoc/cli/error_handler.rb +9 -5
- data/lib/nanoc/extra.rb +9 -8
- data/lib/nanoc/extra/jruby_nokogiri_warner.rb +48 -0
- data/lib/nanoc/extra/link_collector.rb +2 -0
- data/lib/nanoc/extra/piper.rb +1 -1
- data/lib/nanoc/filters/colorize_syntax.rb +2 -0
- data/lib/nanoc/filters/pandoc.rb +2 -2
- data/lib/nanoc/filters/relativize_paths.rb +2 -0
- data/lib/nanoc/filters/xsl.rb +2 -0
- data/lib/nanoc/version.rb +1 -1
- data/tasks/rubocop.rake +7 -3
- data/test/base/checksummer_spec.rb +274 -0
- data/test/base/core_ext/array_spec.rb +2 -2
- data/test/base/core_ext/hash_spec.rb +7 -4
- data/test/base/core_ext/pathname_spec.rb +6 -6
- data/test/base/core_ext/string_spec.rb +2 -2
- data/test/base/temp_filename_factory_spec.rb +72 -0
- data/test/base/test_site.rb +26 -0
- data/test/cli/commands/test_prune.rb +4 -0
- data/test/extra/checking/checks/test_css.rb +28 -24
- data/test/extra/checking/checks/test_html.rb +28 -24
- data/test/extra/test_piper.rb +12 -0
- data/test/filters/test_colorize_syntax.rb +6 -6
- data/test/filters/test_erb.rb +4 -0
- data/test/filters/test_pandoc.rb +15 -0
- data/test/filters/test_relativize_paths.rb +27 -65
- data/test/filters/test_xsl.rb +7 -35
- data/test/fixtures/vcr_cassettes/css_run_error.yml +65 -0
- data/test/fixtures/vcr_cassettes/css_run_ok.yml +55 -0
- data/test/fixtures/vcr_cassettes/html_run_error.yml +94 -0
- data/test/fixtures/vcr_cassettes/html_run_ok.yml +56 -0
- data/test/helper.rb +19 -9
- metadata +11 -2
@@ -58,8 +58,8 @@ end
|
|
58
58
|
describe 'Array#checksum' do
|
59
59
|
|
60
60
|
it 'should work' do
|
61
|
-
expectation = '
|
62
|
-
[ [ :foo, 123 ]].checksum.must_equal expectation
|
61
|
+
expectation = 'CEUlNvu/3DUmlbtpFRiLHU8oHA0='
|
62
|
+
[ [ :foo, 123 ] ].checksum.must_equal expectation
|
63
63
|
end
|
64
64
|
|
65
65
|
end
|
@@ -82,15 +82,18 @@ end
|
|
82
82
|
describe 'Hash#checksum' do
|
83
83
|
|
84
84
|
it 'should work' do
|
85
|
-
expectation = '
|
85
|
+
expectation = 'wy7gHokc700tqJ/BmJ+EK6/F0bc='
|
86
86
|
{ :foo => 123 }.checksum.must_equal expectation
|
87
|
-
[ [ :foo, 123 ]].checksum.must_equal expectation
|
88
87
|
end
|
89
88
|
|
90
|
-
it 'should sort keys' do
|
89
|
+
it 'should not sort keys' do
|
90
|
+
if RUBY_VERSION =~ /\A1\.8./
|
91
|
+
skip "Ruby 1.8.x does not have ordered hashes"
|
92
|
+
end
|
93
|
+
|
91
94
|
a = { :a => 1, :c => 2, :b => 3 }.checksum
|
92
95
|
b = { :a => 1, :b => 3, :c => 2 }.checksum
|
93
|
-
a.
|
96
|
+
a.wont_equal b
|
94
97
|
end
|
95
98
|
|
96
99
|
end
|
@@ -7,12 +7,12 @@ describe 'Pathname#checksum' do
|
|
7
7
|
# Create file
|
8
8
|
FileUtils.mkdir_p('tmp')
|
9
9
|
File.open('tmp/myfile', 'w') { |io| io.write('') }
|
10
|
-
|
11
|
-
File.utime(
|
10
|
+
timestamp = Time.at(1234569)
|
11
|
+
File.utime(timestamp, timestamp, 'tmp/myfile')
|
12
12
|
|
13
13
|
# Create checksum
|
14
14
|
pathname = Pathname.new('tmp/myfile')
|
15
|
-
pathname.checksum.must_equal '
|
15
|
+
pathname.checksum.must_equal 'oU+0fYgGm4EDTl+uErBv8rB9YhU='
|
16
16
|
ensure
|
17
17
|
FileUtils.rm_rf('tmp')
|
18
18
|
end
|
@@ -23,12 +23,12 @@ describe 'Pathname#checksum' do
|
|
23
23
|
# Create file
|
24
24
|
FileUtils.mkdir_p('tmp')
|
25
25
|
File.open('tmp/myfile', 'w') { |io| io.write('abc') }
|
26
|
-
|
27
|
-
File.utime(
|
26
|
+
timestamp = Time.at(1234569)
|
27
|
+
File.utime(timestamp, timestamp, 'tmp/myfile')
|
28
28
|
|
29
29
|
# Create checksum
|
30
30
|
pathname = Pathname.new('tmp/myfile')
|
31
|
-
pathname.checksum.must_equal '
|
31
|
+
pathname.checksum.must_equal 'IAoqYXvcDheQjaYmZ8waPtEO8zU='
|
32
32
|
ensure
|
33
33
|
FileUtils.rm_rf('tmp')
|
34
34
|
end
|
@@ -27,11 +27,11 @@ end
|
|
27
27
|
describe 'String#checksum' do
|
28
28
|
|
29
29
|
it 'should work on empty strings' do
|
30
|
-
''.checksum.must_equal '
|
30
|
+
''.checksum.must_equal 'PfY7essFItpoXa1f6EuB/deyUmQ='
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'should work on all strings' do
|
34
|
-
'abc'.checksum.must_equal '
|
34
|
+
'abc'.checksum.must_equal 'NkkYRO+25f6psNSeCYykXKCg3C0='
|
35
35
|
end
|
36
36
|
|
37
37
|
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
describe Nanoc::TempFilenameFactory do
|
4
|
+
|
5
|
+
subject do
|
6
|
+
Nanoc::TempFilenameFactory.instance
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:prefix) { 'foo' }
|
10
|
+
|
11
|
+
before do
|
12
|
+
subject.cleanup(prefix)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#create' do
|
16
|
+
|
17
|
+
it 'should create unique paths' do
|
18
|
+
path_a = subject.create(prefix)
|
19
|
+
path_b = subject.create(prefix)
|
20
|
+
path_a.wont_equal(path_b)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should return absolute paths' do
|
24
|
+
path = subject.create(prefix)
|
25
|
+
path.must_match(/\A\//)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should create the containing directory' do
|
29
|
+
Dir[subject.root_dir + '/**/*'].must_equal([])
|
30
|
+
path = subject.create(prefix)
|
31
|
+
File.directory?(File.dirname(path)).must_equal(true)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should reuse the same path after cleanup' do
|
35
|
+
path_a = subject.create(prefix)
|
36
|
+
subject.cleanup(prefix)
|
37
|
+
path_b = subject.create(prefix)
|
38
|
+
path_a.must_equal(path_b)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#cleanup' do
|
44
|
+
|
45
|
+
it 'should remove generated files' do
|
46
|
+
path_a = subject.create(prefix)
|
47
|
+
File.file?(path_a).wont_equal(true) # not yet used
|
48
|
+
|
49
|
+
File.open(path_a, 'w') { |io| io << 'hi!' }
|
50
|
+
File.file?(path_a).must_equal(true)
|
51
|
+
|
52
|
+
subject.cleanup(prefix)
|
53
|
+
File.file?(path_a).wont_equal(true)
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'other instance' do
|
59
|
+
|
60
|
+
let(:other_instance) do
|
61
|
+
Nanoc::TempFilenameFactory.new
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should create unique paths across instances' do
|
65
|
+
path_a = subject.create(prefix)
|
66
|
+
path_b = other_instance.create(prefix)
|
67
|
+
path_a.wont_equal(path_b)
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
data/test/base/test_site.rb
CHANGED
@@ -113,6 +113,32 @@ EOF
|
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
116
|
+
def test_multiple_items_with_same_identifier
|
117
|
+
with_site do
|
118
|
+
File.open('content/sam.html', 'w') { |io| io.write('I am Sam!') }
|
119
|
+
FileUtils.mkdir_p('content/sam')
|
120
|
+
File.open('content/sam/index.html', 'w') { |io| io.write('I am Sam, too!') }
|
121
|
+
|
122
|
+
assert_raises(Nanoc::Errors::DuplicateIdentifier) do
|
123
|
+
site = Nanoc::Site.new('.')
|
124
|
+
site.load
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_multiple_layouts_with_same_identifier
|
130
|
+
with_site do
|
131
|
+
File.open('layouts/sam.html', 'w') { |io| io.write('I am Sam!') }
|
132
|
+
FileUtils.mkdir_p('layouts/sam')
|
133
|
+
File.open('layouts/sam/index.html', 'w') { |io| io.write('I am Sam, too!') }
|
134
|
+
|
135
|
+
assert_raises(Nanoc::Errors::DuplicateIdentifier) do
|
136
|
+
site = Nanoc::Site.new('.')
|
137
|
+
site.load
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
116
142
|
end
|
117
143
|
|
118
144
|
describe 'Nanoc::Site#initialize' do
|
@@ -94,6 +94,10 @@ class Nanoc::CLI::Commands::PruneTest < Nanoc::TestCase
|
|
94
94
|
|
95
95
|
def test_run_with_symlink_to_output_dir
|
96
96
|
skip_unless_have_symlink
|
97
|
+
if defined?(JRUBY_VERSION) && JRUBY_VERSION == '1.7.11'
|
98
|
+
skip "JRuby 1.7.11 has buggy File.find behavior (see https://github.com/jruby/jruby/issues/1647)"
|
99
|
+
end
|
100
|
+
|
97
101
|
with_site do |site|
|
98
102
|
# Set output dir
|
99
103
|
FileUtils.rm_rf('output')
|
@@ -3,34 +3,38 @@
|
|
3
3
|
class Nanoc::Extra::Checking::Checks::CSSTest < Nanoc::TestCase
|
4
4
|
|
5
5
|
def test_run_ok
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
VCR.use_cassette('css_run_ok') do
|
7
|
+
with_site do |site|
|
8
|
+
# Create files
|
9
|
+
FileUtils.mkdir_p('output')
|
10
|
+
File.open('output/blah.html', 'w') { |io| io.write('<h1>Hi!</h1>') }
|
11
|
+
File.open('output/style.css', 'w') { |io| io.write('h1 { color: red; }') }
|
12
|
+
|
13
|
+
# Run check
|
14
|
+
check = Nanoc::Extra::Checking::Checks::CSS.new(site)
|
15
|
+
check.run
|
16
|
+
|
17
|
+
# Check
|
18
|
+
assert check.issues.empty?
|
19
|
+
end
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
21
23
|
def test_run_error
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
24
|
+
VCR.use_cassette('css_run_error') do
|
25
|
+
with_site do |site|
|
26
|
+
# Create files
|
27
|
+
FileUtils.mkdir_p('output')
|
28
|
+
File.open('output/blah.html', 'w') { |io| io.write('<h1>Hi!</h1>') }
|
29
|
+
File.open('output/style.css', 'w') { |io| io.write('h1 { coxlor: rxed; }') }
|
30
|
+
|
31
|
+
# Run check
|
32
|
+
check = Nanoc::Extra::Checking::Checks::CSS.new(site)
|
33
|
+
check.run
|
34
|
+
|
35
|
+
# Check
|
36
|
+
refute check.issues.empty?
|
37
|
+
end
|
34
38
|
end
|
35
39
|
end
|
36
40
|
|
@@ -3,34 +3,38 @@
|
|
3
3
|
class Nanoc::Extra::Checking::Checks::HTMLTest < Nanoc::TestCase
|
4
4
|
|
5
5
|
def test_run_ok
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
VCR.use_cassette('html_run_ok') do
|
7
|
+
with_site do |site|
|
8
|
+
# Create files
|
9
|
+
FileUtils.mkdir_p('output')
|
10
|
+
File.open('output/blah.html', 'w') { |io| io.write('<!DOCTYPE html><html><head><meta charset="utf-8"><title>Hello</title></head><body><h1>Hi!</h1></body>') }
|
11
|
+
File.open('output/style.css', 'w') { |io| io.write('h1 { coxlor: rxed; }') }
|
12
|
+
|
13
|
+
# Run check
|
14
|
+
check = Nanoc::Extra::Checking::Checks::HTML.new(site)
|
15
|
+
check.run
|
16
|
+
|
17
|
+
# Check
|
18
|
+
assert check.issues.empty?
|
19
|
+
end
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
21
23
|
def test_run_error
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
24
|
+
VCR.use_cassette('html_run_error') do
|
25
|
+
with_site do |site|
|
26
|
+
# Create files
|
27
|
+
FileUtils.mkdir_p('output')
|
28
|
+
File.open('output/blah.html', 'w') { |io| io.write('<h2>Hi!</h1>') }
|
29
|
+
File.open('output/style.css', 'w') { |io| io.write('h1 { coxlor: rxed; }') }
|
30
|
+
|
31
|
+
# Run check
|
32
|
+
check = Nanoc::Extra::Checking::Checks::HTML.new(site)
|
33
|
+
check.run
|
34
|
+
|
35
|
+
# Check
|
36
|
+
refute check.issues.empty?
|
37
|
+
end
|
34
38
|
end
|
35
39
|
end
|
36
40
|
|
data/test/extra/test_piper.rb
CHANGED
@@ -33,4 +33,16 @@ class Nanoc::Extra::PiperTest < Nanoc::TestCase
|
|
33
33
|
assert_equal('', stderr.string)
|
34
34
|
end
|
35
35
|
|
36
|
+
def test_no_such_command
|
37
|
+
stdout = StringIO.new
|
38
|
+
stderr = StringIO.new
|
39
|
+
|
40
|
+
cmd = %w( cat kafhawilgoiwaejagoualjdsfilofiewaguihaifeowuiga )
|
41
|
+
|
42
|
+
piper = Nanoc::Extra::Piper.new(:stdout => stdout, :stderr => stderr)
|
43
|
+
assert_raises(Nanoc::Extra::Piper::Error) do
|
44
|
+
piper.run(cmd, nil)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
36
48
|
end
|
@@ -282,7 +282,7 @@ puts 'hi!'
|
|
282
282
|
</code></pre>
|
283
283
|
after
|
284
284
|
EOS
|
285
|
-
expected_output = <<EOS
|
285
|
+
expected_output = <<EOS.sub(/\s*\Z/m, '')
|
286
286
|
before
|
287
287
|
<pre><code>
|
288
288
|
#!/usr/bin/env ruby
|
@@ -292,7 +292,7 @@ after
|
|
292
292
|
EOS
|
293
293
|
|
294
294
|
# Run filter
|
295
|
-
actual_output = filter.setup_and_run(input)
|
295
|
+
actual_output = filter.setup_and_run(input).sub(/\s*\Z/m, '')
|
296
296
|
assert_equal(expected_output, actual_output)
|
297
297
|
end
|
298
298
|
end
|
@@ -312,7 +312,7 @@ puts 'hi!'
|
|
312
312
|
</code></pre>
|
313
313
|
after
|
314
314
|
EOS
|
315
|
-
expected_output = <<EOS
|
315
|
+
expected_output = <<EOS.sub(/\s*\Z/m, '')
|
316
316
|
before
|
317
317
|
#{CODERAY_PRE}<pre><code class=\"language-ruby\"><span class=\"doctype\">#!/usr/bin/env ruby</span>
|
318
318
|
puts <span class=\"string\"><span class=\"delimiter\">'</span><span class=\"content\">hi!</span><span class=\"delimiter\">'</span></span></code></pre>#{CODERAY_POST}
|
@@ -320,7 +320,7 @@ after
|
|
320
320
|
EOS
|
321
321
|
|
322
322
|
# Run filter
|
323
|
-
actual_output = filter.setup_and_run(input)
|
323
|
+
actual_output = filter.setup_and_run(input).sub(/\s*\Z/m, '')
|
324
324
|
assert_equal(expected_output, actual_output)
|
325
325
|
end
|
326
326
|
end
|
@@ -372,7 +372,7 @@ before
|
|
372
372
|
</code></pre>
|
373
373
|
after
|
374
374
|
EOS
|
375
|
-
expected_output = <<EOS
|
375
|
+
expected_output = <<EOS.sub(/\s*\Z/m, '')
|
376
376
|
before
|
377
377
|
#{CODERAY_PRE}<pre><code class="language-ruby"> <span class=\"keyword\">def</span> <span class=\"function\">foo</span>
|
378
378
|
<span class=\"keyword\">end</span></code></pre>#{CODERAY_POST}
|
@@ -380,7 +380,7 @@ after
|
|
380
380
|
EOS
|
381
381
|
|
382
382
|
# Run filter
|
383
|
-
actual_output = filter.setup_and_run(input)
|
383
|
+
actual_output = filter.setup_and_run(input).sub(/\s*\Z/m, '')
|
384
384
|
assert_equal(expected_output, actual_output)
|
385
385
|
end
|
386
386
|
end
|
data/test/filters/test_erb.rb
CHANGED
@@ -66,6 +66,10 @@ class Nanoc::Filters::ERBTest < Nanoc::TestCase
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def test_safe_level
|
69
|
+
if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
|
70
|
+
skip 'JRuby does not implement safe levels'
|
71
|
+
end
|
72
|
+
|
69
73
|
# Set up
|
70
74
|
filter = ::Nanoc::Filters::ERB.new
|
71
75
|
File.open('moo', 'w') { |io| io.write("one miiillion dollars") }
|
data/test/filters/test_pandoc.rb
CHANGED
@@ -15,4 +15,19 @@ class Nanoc::Filters::PandocTest < Nanoc::TestCase
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
def test_params
|
19
|
+
if_have 'pandoc-ruby' do
|
20
|
+
skip_unless_have_command "pandoc"
|
21
|
+
|
22
|
+
# Create filter
|
23
|
+
filter = ::Nanoc::Filters::Pandoc.new
|
24
|
+
|
25
|
+
# Run filter
|
26
|
+
opts = [ :s, {:f => :markdown, :to => :html}, 'no-wrap', :toc ]
|
27
|
+
result = filter.setup_and_run("# Heading\n", *opts)
|
28
|
+
assert_match '<div id="TOC">', result
|
29
|
+
assert_match(%r{<h1 id=\"heading\">Heading</h1>\s*}, result)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
18
33
|
end
|
@@ -103,7 +103,7 @@ class Nanoc::Filters::RelativizePathsTest < Nanoc::TestCase
|
|
103
103
|
</html>
|
104
104
|
EOS
|
105
105
|
expected_match_0 = %r{<a href="\.\./\.\.">foo</a>}
|
106
|
-
expected_match_1 = %r{
|
106
|
+
expected_match_1 = %r{\A\s*<!DOCTYPE html\s*>\s*<html>\s*<head>(.|\s)*<title>Hello</title>\s*</head>\s*<body>\s*<a href="../..">foo</a>\s*</body>\s*</html>\s*\Z}m
|
107
107
|
|
108
108
|
# Test
|
109
109
|
actual_content = filter.setup_and_run(raw_content, :type => :html)
|
@@ -303,7 +303,6 @@ EOS
|
|
303
303
|
assert_equal(expected_content, actual_content)
|
304
304
|
end
|
305
305
|
|
306
|
-
|
307
306
|
def test_filter_html_object_with_relative_path
|
308
307
|
# Create filter with mock item
|
309
308
|
filter = Nanoc::Filters::RelativizePaths.new
|
@@ -319,13 +318,11 @@ EOS
|
|
319
318
|
@item_rep.path = '/woof/meow/'
|
320
319
|
end
|
321
320
|
|
322
|
-
|
323
|
-
raw_content = %[<object data="/example"><param name="movie" content="/example"></object>]
|
324
|
-
expected_content = %[<object data="../../example"><param name="movie" content="../../example"></object>]
|
325
|
-
|
326
|
-
# Test
|
321
|
+
raw_content = %[<object data="/example"><param name="movie" content="/example"></object>]
|
327
322
|
actual_content = filter.setup_and_run(raw_content, :type => :html)
|
328
|
-
|
323
|
+
|
324
|
+
assert_match(/<object data="..\/..\/example">/, actual_content)
|
325
|
+
assert_match(/<param (name="movie" )?content="..\/..\/example"/, actual_content)
|
329
326
|
end
|
330
327
|
|
331
328
|
|
@@ -503,6 +500,7 @@ EOS
|
|
503
500
|
end
|
504
501
|
|
505
502
|
# Set content
|
503
|
+
expected = /<bar boo="\.\.\/\.\.">baz<\/bar>/
|
506
504
|
raw_content = <<-XML
|
507
505
|
<?xml version="1.0" encoding="utf-8"?>
|
508
506
|
<foo>
|
@@ -510,16 +508,9 @@ EOS
|
|
510
508
|
</foo>
|
511
509
|
XML
|
512
510
|
|
513
|
-
expected_content = <<-XML
|
514
|
-
<?xml version="1.0" encoding="utf-8"?>
|
515
|
-
<foo>
|
516
|
-
<bar boo="../..">baz</bar>
|
517
|
-
</foo>
|
518
|
-
XML
|
519
|
-
|
520
|
-
# Test
|
521
511
|
actual_content = filter.setup_and_run(raw_content, :type => :xml, :select => ['*/@boo'])
|
522
|
-
|
512
|
+
|
513
|
+
assert_match(expected, actual_content)
|
523
514
|
end
|
524
515
|
end
|
525
516
|
|
@@ -546,15 +537,10 @@ XML
|
|
546
537
|
</foo>
|
547
538
|
XML
|
548
539
|
|
549
|
-
expected_content = <<-XML
|
550
|
-
<foo>
|
551
|
-
<bar><far href="../..">baz</far></bar>
|
552
|
-
</foo>
|
553
|
-
XML
|
554
|
-
|
555
|
-
# Test
|
556
540
|
actual_content = filter.setup_and_run(raw_content, :type => :xml, :select => ['far/@href'])
|
557
|
-
|
541
|
+
|
542
|
+
assert_match(/<foo>/, actual_content)
|
543
|
+
assert_match(/<bar><far href="..\/..">baz<\/far><\/bar>/, actual_content)
|
558
544
|
end
|
559
545
|
end
|
560
546
|
|
@@ -581,19 +567,14 @@ XML
|
|
581
567
|
</foo>
|
582
568
|
XML
|
583
569
|
|
584
|
-
expected_content = <<-XML
|
585
|
-
<foo xmlns="http://example.org">
|
586
|
-
<bar><a href="../..">baz</a></bar>
|
587
|
-
</foo>
|
588
|
-
XML
|
589
|
-
|
590
|
-
# Test
|
591
570
|
actual_content = filter.setup_and_run(raw_content, {
|
592
|
-
:type => :xml,
|
593
|
-
:namespaces => {:ex => 'http://example.org'},
|
571
|
+
:type => :xml,
|
572
|
+
:namespaces => {:ex => 'http://example.org'},
|
594
573
|
:select => ['ex:a/@href']
|
595
574
|
})
|
596
|
-
|
575
|
+
|
576
|
+
assert_match(/<foo xmlns="http:\/\/example.org">/, actual_content)
|
577
|
+
assert_match(/<bar><a href="..\/..">baz<\/a><\/bar>/, actual_content)
|
597
578
|
end
|
598
579
|
end
|
599
580
|
|
@@ -628,21 +609,12 @@ XML
|
|
628
609
|
</html>
|
629
610
|
XML
|
630
611
|
|
631
|
-
expected_match = %r{^<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
632
|
-
<html xmlns="http://www.w3.org/1999/xhtml">
|
633
|
-
<head>.*<meta.*charset.*>
|
634
|
-
<link rel="stylesheet" href="../../../css" />
|
635
|
-
<script src="../../../js"></script>
|
636
|
-
</head>
|
637
|
-
<body>
|
638
|
-
<a href="../..">bar</a>
|
639
|
-
<img src="../../../img" />
|
640
|
-
</body>
|
641
|
-
</html>}
|
642
|
-
|
643
|
-
# Test
|
644
612
|
actual_content = filter.setup_and_run(raw_content, :type => :xhtml)
|
645
|
-
|
613
|
+
|
614
|
+
assert_match(/<link[^>]*href="..\/..\/..\/css"[^>]*\/>/, actual_content)
|
615
|
+
assert_match(/<script src="..\/..\/..\/js">/, actual_content)
|
616
|
+
assert_match(/<img src="..\/..\/..\/img"[^>]*\/>/, actual_content)
|
617
|
+
assert_match(/<a href="..\/..">bar<\/a>/, actual_content)
|
646
618
|
end
|
647
619
|
end
|
648
620
|
|
@@ -670,16 +642,12 @@ XML
|
|
670
642
|
</p>
|
671
643
|
XML
|
672
644
|
|
673
|
-
expected_content =
|
674
|
-
|
675
|
-
<p>
|
676
|
-
<img src="../../../img" />
|
677
|
-
</p>
|
678
|
-
XML
|
645
|
+
expected_content =
|
646
|
+
%r{\A\s*<a href="../..">bar</a>\s*<p>\s*<img src="../../../img" />\s*</p>\s*\Z}m
|
679
647
|
|
680
648
|
# Test
|
681
649
|
actual_content = filter.setup_and_run(raw_content.freeze, :type => :xhtml)
|
682
|
-
|
650
|
+
assert_match(expected_content, actual_content)
|
683
651
|
end
|
684
652
|
end
|
685
653
|
|
@@ -707,16 +675,10 @@ XML
|
|
707
675
|
<![endif]-->
|
708
676
|
]
|
709
677
|
|
710
|
-
expected_content = %[
|
711
|
-
<link rel="stylesheet" href="../../foo.css" />
|
712
|
-
<!--[if lt IE 9]>
|
713
|
-
<script src="../../js/lib/html5shiv.js"></script>
|
714
|
-
<![endif]-->
|
715
|
-
]
|
716
|
-
|
717
|
-
# Test
|
718
678
|
actual_content = filter.setup_and_run(raw_content.freeze, :type => :xhtml)
|
719
|
-
|
679
|
+
|
680
|
+
assert_match(/<link (rel="stylesheet" )?href="..\/..\/foo.css" /, actual_content)
|
681
|
+
assert_match(/<script src="..\/..\/js\/lib\/html5shiv.js"><\/script>/, actual_content)
|
720
682
|
end
|
721
683
|
end
|
722
684
|
|