test/data_sources/test_filesystem.rb in nanoc-4.1.6 vs test/data_sources/test_filesystem.rb in nanoc-4.2.0b1

- old
+ new

@@ -1,31 +1,567 @@ class Nanoc::DataSources::FilesystemTest < Nanoc::TestCase - class SampleFilesystemDataSource < Nanoc::DataSource - include Nanoc::DataSources::Filesystem + def new_data_source(params = nil) + # Mock site + site = Nanoc::Int::SiteLoader.new.new_empty + + # Create data source + data_source = Nanoc::DataSources::Filesystem.new(site.config, nil, nil, params) + + # Done + data_source end - def test_items + def test_load_objects # Create data source - data_source = SampleFilesystemDataSource.new(nil, nil, nil, nil) + data_source = new_data_source + # Create a fake class + klass = Class.new do + attr_reader :stuff + def initialize(*stuff) + @stuff = stuff + end + + def ==(other) + @stuff == other.stuff + end + end + + # Create sample files + FileUtils.mkdir_p('foo') + FileUtils.mkdir_p('foo/a/b') + File.open('foo/bar.html', 'w') { |io| io.write("---\nnum: 1\n---\ntest 1") } + File.open('foo/b.c.html', 'w') { |io| io.write("---\nnum: 2\n---\ntest 2") } + File.open('foo/a/b/c.html', 'w') { |io| io.write("---\nnum: 3\n---\ntest 3") } + File.open('foo/ugly.html~', 'w') { |io| io.write("---\nnum: 4\n---\ntest 4") } + File.open('foo/ugly.html.orig', 'w') { |io| io.write("---\nnum: 5\n---\ntest 5") } + File.open('foo/ugly.html.rej', 'w') { |io| io.write("---\nnum: 6\n---\ntest 6") } + File.open('foo/ugly.html.bak', 'w') { |io| io.write("---\nnum: 7\n---\ntest 7") } + + # Get expected and actual output + expected_out = [ + klass.new( + 'test 1', + { 'num' => 1, :filename => 'foo/bar.html', :extension => 'html', mtime: File.mtime('foo/bar.html') }, + '/bar/', + ), + klass.new( + 'test 2', + { 'num' => 2, :filename => 'foo/b.c.html', :extension => 'c.html', mtime: File.mtime('foo/b.c.html') }, + '/b/', + ), + klass.new( + 'test 3', + { 'num' => 3, :filename => 'foo/a/b/c.html', :extension => 'html', mtime: File.mtime('foo/a/b/c.html') }, + '/a/b/c/', + ), + ] + actual_out = data_source.send(:load_objects, 'foo', klass).sort_by { |i| i.stuff[0].string } + # Check - data_source.expects(:load_objects).with('content', 'item', Nanoc::Int::Item) - data_source.items + (0..expected_out.size - 1).each do |i| + assert_equal expected_out[i].stuff[0], actual_out[i].stuff[0].string, 'content must match' + assert_equal expected_out[i].stuff[2], actual_out[i].stuff[2], 'identifier must match' + ['num', :filename, :extension, :mtime].each do |key| + assert_equal expected_out[i].stuff[1][key], actual_out[i].stuff[1][key], "attribute key #{key} must match" + end + end end - def test_layouts + def test_load_objects_with_same_extensions # Create data source - data_source = SampleFilesystemDataSource.new(nil, nil, nil, nil) + data_source = new_data_source({ identifier_type: 'full' }) + # Create a fake class + klass = Class.new do + attr_reader :stuff + def initialize(*stuff) + @stuff = stuff + end + + def ==(other) + @stuff == other.stuff + end + end + + # Create sample files + FileUtils.mkdir_p('foo') + File.open('foo/bar.html', 'w') { |io| io.write("---\nnum: 1\n---\ntest 1") } + File.open('foo/bar.md', 'w') { |io| io.write("---\nnum: 1\n---\ntest 1") } + # Check - data_source.expects(:load_objects).with('layouts', 'layout', Nanoc::Int::Layout) - data_source.layouts + actual_out = data_source.send(:load_objects, 'foo', klass) + assert_equal 2, actual_out.size end + def test_load_binary_objects + # Create data source + data_source = new_data_source + + # Create sample files + FileUtils.mkdir_p('foo') + File.open('foo/stuff.dat', 'w') { |io| io.write('random binary data') } + + # Load + items = data_source.send(:load_objects, 'foo', Nanoc::Int::Item) + + # Check + assert_equal 1, items.size + assert items[0].content.binary? + assert_equal "#{Dir.getwd}/foo/stuff.dat", items[0].content.filename + assert_equal Nanoc::Int::BinaryContent, items[0].content.class + end + + def test_load_layouts_with_nil_dir_name + # Create data source + data_source = new_data_source(layouts_dir: nil) + + # Create sample files + FileUtils.mkdir_p('layouts') + File.write('layouts/stuff.txt', 'blah blah') + + # Load + layouts = data_source.layouts + + # Check + assert_empty(layouts) + end + + def test_load_binary_layouts + # Create data source + data_source = new_data_source + + # Create sample files + FileUtils.mkdir_p('foo') + File.open('foo/stuff.dat', 'w') { |io| io.write('random binary data') } + + # Load + assert_raises(RuntimeError) do + data_source.send(:load_objects, 'foo', Nanoc::Int::Layout) + end + end + + def test_identifier_for_filename_with_full_style_identifier + # Create data source + data_source = new_data_source({ identifier_type: 'full' }) + + # Get input and expected output + expected = { + '/foo' => Nanoc::Identifier.new('/foo', type: :full), + '/foo.html' => Nanoc::Identifier.new('/foo.html', type: :full), + '/foo/index.html' => Nanoc::Identifier.new('/foo/index.html', type: :full), + '/foo.html.erb' => Nanoc::Identifier.new('/foo.html.erb', type: :full), + } + + # Check + expected.each_pair do |input, expected_output| + actual_output = data_source.send(:identifier_for_filename, input) + assert_equal( + expected_output, actual_output, + "identifier_for_filename(#{input.inspect}) should equal #{expected_output.inspect}, not #{actual_output.inspect}" + ) + end + end + + def test_identifier_for_filename_allowing_periods_in_identifiers + # Create data source + data_source = new_data_source(allow_periods_in_identifiers: true) + + # Get input and expected output + expected = { + '/foo' => '/foo/', + '/foo.html' => '/foo/', + '/foo/index.html' => '/foo/', + '/foo.entry.html' => '/foo.entry/', + } + + # Check + expected.each_pair do |input, expected_output| + actual_output = data_source.send(:identifier_for_filename, input) + assert_equal( + expected_output, actual_output, + "identifier_for_filename(#{input.inspect}) should equal #{expected_output.inspect}, not #{actual_output.inspect}" + ) + end + end + + def test_identifier_for_filename_disallowing_periods_in_identifiers + # Create data source + data_source = new_data_source + + # Get input and expected output + expected = { + '/foo' => '/foo/', + '/foo.html' => '/foo/', + '/foo/index.html' => '/foo/', + '/foo.html.erb' => '/foo/', + } + + # Check + expected.each_pair do |input, expected_output| + actual_output = data_source.send(:identifier_for_filename, input) + assert_equal( + expected_output, actual_output, + "identifier_for_filename(#{input.inspect}) should equal #{expected_output.inspect}, not #{actual_output.inspect}" + ) + end + end + + def test_identifier_for_filename_with_subfilename_allowing_periods_in_identifiers + expectations = { + 'foo/bar.yaml' => '/foo/bar/', + 'foo/quxbar.yaml' => '/foo/quxbar/', + 'foo/barqux.yaml' => '/foo/barqux/', + 'foo/quxbarqux.yaml' => '/foo/quxbarqux/', + 'foo/qux.bar.yaml' => '/foo/qux.bar/', + 'foo/bar.qux.yaml' => '/foo/bar.qux/', + 'foo/qux.bar.qux.yaml' => '/foo/qux.bar.qux/', + 'foo/index.yaml' => '/foo/', + 'index.yaml' => '/', + 'foo/blah_index.yaml' => '/foo/blah_index/', + } + + data_source = new_data_source(allow_periods_in_identifiers: true) + expectations.each_pair do |meta_filename, expected_identifier| + content_filename = meta_filename.sub(/yaml$/, 'html') + [meta_filename, content_filename].each do |filename| + assert_equal( + expected_identifier, + data_source.instance_eval { identifier_for_filename(filename) }, + ) + end + end + end + + def test_identifier_for_filename_with_subfilename_disallowing_periods_in_identifiers + expectations = { + 'foo/bar.yaml' => '/foo/bar/', + 'foo/quxbar.yaml' => '/foo/quxbar/', + 'foo/barqux.yaml' => '/foo/barqux/', + 'foo/quxbarqux.yaml' => '/foo/quxbarqux/', + 'foo/qux.bar.yaml' => '/foo/qux/', + 'foo/bar.qux.yaml' => '/foo/bar/', + 'foo/qux.bar.qux.yaml' => '/foo/qux/', + 'foo/index.yaml' => '/foo/', + 'index.yaml' => '/', + 'foo/blah_index.yaml' => '/foo/blah_index/', + } + + data_source = new_data_source + expectations.each_pair do |meta_filename, expected_identifier| + content_filename = meta_filename.sub(/yaml$/, 'html') + [meta_filename, content_filename].each do |filename| + assert_equal( + expected_identifier, + data_source.instance_eval { identifier_for_filename(filename) }, + ) + end + end + end + + def test_identifier_for_filename_with_index_filenames_allowing_periods_in_identifier + expected = { + '/index.html.erb' => '/index.html/', + '/index.html' => '/', + '/index' => '/', + '/foo/index.html.erb' => '/foo/index.html/', + '/foo/index.html' => '/foo/', + '/foo/index' => '/foo/', + } + + data_source = new_data_source(allow_periods_in_identifiers: true) + expected.each_pair do |input, expected_output| + actual_output = data_source.send(:identifier_for_filename, input) + assert_equal( + expected_output, actual_output, + "identifier_for_filename(#{input.inspect}) should equal #{expected_output.inspect}, not #{actual_output.inspect}" + ) + end + end + + def test_identifier_for_filename_with_index_filenames_disallowing_periods_in_identifier + expected = { + '/index.html.erb' => '/', + '/index.html' => '/', + '/index' => '/', + '/foo/index.html.erb' => '/foo/', + '/foo/index.html' => '/foo/', + '/foo/index' => '/foo/', + } + + data_source = new_data_source + expected.each_pair do |input, expected_output| + actual_output = data_source.send(:identifier_for_filename, input) + assert_equal( + expected_output, actual_output, + "identifier_for_filename(#{input.inspect}) should equal #{expected_output.inspect}, not #{actual_output.inspect}" + ) + end + end + + def test_load_objects_allowing_periods_in_identifiers + # Create data source + data_source = new_data_source(allow_periods_in_identifiers: true) + + # Create a fake class + klass = Class.new do + attr_reader :stuff + def initialize(*stuff) + @stuff = stuff + end + + def ==(other) + @stuff == other.stuff + end + end + + # Create sample files + FileUtils.mkdir_p('foo') + FileUtils.mkdir_p('foo/a/b') + File.open('foo/a/b/c.yaml', 'w') { |io| io.write("---\nnum: 1\n") } + File.open('foo/b.c.yaml', 'w') { |io| io.write("---\nnum: 2\n") } + File.open('foo/b.c.html', 'w') { |io| io.write('test 2') } + File.open('foo/car.html', 'w') { |io| io.write('test 3') } + File.open('foo/ugly.yaml~', 'w') { |io| io.write('blah') } + File.open('foo/ugly.html~', 'w') { |io| io.write('blah') } + File.open('foo/ugly.html.orig', 'w') { |io| io.write('blah') } + File.open('foo/ugly.html.rej', 'w') { |io| io.write('blah') } + File.open('foo/ugly.html.bak', 'w') { |io| io.write('blah') } + + # Get expected output + expected_out = [ + klass.new( + '', + { + 'num' => 1, + :content_filename => nil, + :meta_filename => 'foo/a/b/c.yaml', + :extension => nil, + :file => nil, + mtime: File.mtime('foo/a/b/c.yaml'), + }, + '/a/b/c/', + ), + klass.new( + 'test 2', + { + 'num' => 2, + :content_filename => 'foo/b.c.html', + :meta_filename => 'foo/b.c.yaml', + :extension => 'html', + :file => File.open('foo/b.c.html'), + mtime: File.mtime('foo/b.c.html') > File.mtime('foo/b.c.yaml') ? File.mtime('foo/b.c.html') : File.mtime('foo/b.c.yaml'), + }, + '/b.c/', + ), + klass.new( + 'test 3', + { + content_filename: 'foo/car.html', + meta_filename: nil, + extension: 'html', + file: File.open('foo/car.html'), + mtime: File.mtime('foo/car.html'), + }, + '/car/', + ), + ] + + # Get actual output ordered by identifier + actual_out = data_source.send(:load_objects, 'foo', klass).sort_by { |i| i.stuff[2] } + + # Check + (0..expected_out.size - 1).each do |i| + assert_equal expected_out[i].stuff[0], actual_out[i].stuff[0].string, 'content must match' + assert_equal expected_out[i].stuff[2], actual_out[i].stuff[2], 'identifier must match' + + ['num', :content_filename, :meta_filename, :extension, :mtime].each do |key| + assert_equal expected_out[i].stuff[1][key], actual_out[i].stuff[1][key], "attribute key #{key} must match" + end + end + end + + def test_load_objects_disallowing_periods_in_identifiers + # Create data source + data_source = new_data_source + + # Create a fake class + klass = Class.new do + attr_reader :stuff + def initialize(*stuff) + @stuff = stuff + end + + def ==(other) + @stuff == other.stuff + end + end + + # Create sample files + FileUtils.mkdir_p('foo') + FileUtils.mkdir_p('foo/a/b') + File.open('foo/a/b/c.yaml', 'w') { |io| io.write("---\nnum: 1\n") } + File.open('foo/b.yaml', 'w') { |io| io.write("---\nnum: 2\n") } + File.open('foo/b.html.erb', 'w') { |io| io.write('test 2') } + File.open('foo/car.html', 'w') { |io| io.write('test 3') } + File.open('foo/ugly.yaml~', 'w') { |io| io.write('blah') } + File.open('foo/ugly.html~', 'w') { |io| io.write('blah') } + File.open('foo/ugly.html.orig', 'w') { |io| io.write('blah') } + File.open('foo/ugly.html.rej', 'w') { |io| io.write('blah') } + File.open('foo/ugly.html.bak', 'w') { |io| io.write('blah') } + + # Get expected output + expected_out = [ + klass.new( + '', + { + 'num' => 1, + :content_filename => nil, + :meta_filename => 'foo/a/b/c.yaml', + :extension => nil, + :file => nil, + mtime: File.mtime('foo/a/b/c.yaml'), + }, + '/a/b/c/', + ), + klass.new( + 'test 2', + { + 'num' => 2, + :content_filename => 'foo/b.html.erb', + :meta_filename => 'foo/b.yaml', + :extension => 'html.erb', + :file => File.open('foo/b.html.erb'), + mtime: File.mtime('foo/b.html.erb') > File.mtime('foo/b.yaml') ? File.mtime('foo/b.html.erb') : File.mtime('foo/b.yaml'), + }, + '/b/', + ), + klass.new( + 'test 3', + { + content_filename: 'foo/car.html', + meta_filename: nil, + extension: 'html', + file: File.open('foo/car.html'), + mtime: File.mtime('foo/car.html'), + }, + '/car/', + ), + ] + + # Get actual output ordered by identifier + actual_out = data_source.send(:load_objects, 'foo', klass).sort_by { |i| i.stuff[2] } + + # Check + (0..expected_out.size - 1).each do |i| + assert_equal expected_out[i].stuff[0], actual_out[i].stuff[0].string, 'content must match' + assert_equal expected_out[i].stuff[2], actual_out[i].stuff[2], 'identifier must match' + + ['num', :content_filename, :meta_filename, :extension, :mtime].each do |key| + assert_equal expected_out[i].stuff[1][key], actual_out[i].stuff[1][key], "attribute key #{key} must match" + end + end + end + + def test_load_objects_correct_identifier_with_separate_yaml_file + data_source = new_data_source({ identifier_type: 'full' }) + + FileUtils.mkdir_p('foo') + File.write('foo/donkey.jpeg', 'data') + File.write('foo/donkey.yaml', "---\nalt: Donkey\n") + + objects = data_source.send(:load_objects, 'foo', Nanoc::Int::Item) + assert_equal 1, objects.size + assert_equal '/donkey.jpeg', objects.first.identifier.to_s + end + + def test_filename_for + data_source = new_data_source + + assert_equal '/foo.bar', data_source.send(:filename_for, '/foo', 'bar') + assert_equal '/foo.bar.baz', data_source.send(:filename_for, '/foo', 'bar.baz') + assert_equal '/foo', data_source.send(:filename_for, '/foo', '') + assert_equal nil, data_source.send(:filename_for, '/foo', nil) + end + + def test_compile_huge_site + if_implemented do + # Create data source + data_source = new_data_source + + # Create a lot of items + count = Process.getrlimit(Process::RLIMIT_NOFILE)[0] + 5 + count.times do |i| + FileUtils.mkdir_p("content/#{i}") + File.open("content/#{i}/#{i}.html", 'w') { |io| io << "This is item #{i}." } + File.open("content/#{i}/#{i}.yaml", 'w') { |io| io << "title: Item #{i}" } + end + + # Read all items + data_source.items + end + end + + def test_compile_iso_8859_1_site + # Check encoding + unless ''.respond_to?(:encode) + skip 'Test only works on 1.9.x' + return + end + + # Create data source + data_source = new_data_source + + # Create item + FileUtils.mkdir_p('content') + File.open('content/foo.md', 'w') { |io| io << 'Hëllö' } + + # Parse + begin + original_default_external_encoding = Encoding.default_external + Encoding.default_external = 'ISO-8859-1' + + items = data_source.items + + assert_equal 1, items.size + assert_equal Encoding.find('UTF-8'), items[0].content.string.encoding + ensure + Encoding.default_external = original_default_external_encoding + end + end + + def test_compile_iso_8859_1_site_with_explicit_encoding + # Check encoding + unless ''.respond_to?(:encode) + skip 'Test only works on 1.9.x' + return + end + + # Create data source + data_source = new_data_source({}) + data_source.config[:encoding] = 'ISO-8859-1' + + # Create item + begin + original_default_external_encoding = Encoding.default_external + Encoding.default_external = 'ISO-8859-1' + + FileUtils.mkdir_p('content') + File.open('content/foo.md', 'w') { |io| io << 'Hëllö' } + ensure + Encoding.default_external = original_default_external_encoding + end + + # Parse + items = data_source.items + assert_equal 1, items.size + assert_equal Encoding.find('UTF-8'), items[0].content.string.encoding + end + def test_all_split_files_in_allowing_periods_in_identifiers # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, { allow_periods_in_identifiers: true }) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, { allow_periods_in_identifiers: true }) # Write sample files FileUtils.mkdir_p('foo') %w( foo.html foo.yaml bar.entry.html foo/qux.yaml ).each do |filename| File.open(filename, 'w') { |io| io.write('test') } @@ -48,11 +584,11 @@ assert_equal output_expected, output_actual end def test_all_split_files_in_disallowing_periods_in_identifiers # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Write sample files FileUtils.mkdir_p('foo') %w( foo.html foo.yaml bar.html.erb foo/qux.yaml ).each do |filename| File.open(filename, 'w') { |io| io.write('test') } @@ -75,11 +611,11 @@ assert_equal output_expected, output_actual end def test_all_split_files_in_with_multiple_dirs # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Write sample files %w( aaa/foo.html bbb/foo.html ccc/foo.html ).each do |filename| FileUtils.mkdir_p(File.dirname(filename)) File.open(filename, 'w') { |io| io.write('test') } @@ -95,11 +631,11 @@ end def test_all_split_files_in_with_same_extensions # Create data source config = { identifier_type: 'full' } - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, config) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, config) # Write sample files %w( stuff/foo.html stuff/foo.md stuff/foo.yaml ).each do |filename| FileUtils.mkdir_p(File.dirname(filename)) File.open(filename, 'w') { |io| io.write('test') } @@ -114,11 +650,11 @@ assert_equal %w(html md), res.values[0][1].sort end def test_all_split_files_in_with_multiple_content_files # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Write sample files %w( foo.html foo.xhtml foo.txt foo.yaml bar.html qux.yaml ).each do |filename| File.open(filename, 'w') { |io| io.write('test') } end @@ -129,11 +665,11 @@ end end def test_basename_of_allowing_periods_in_identifiers # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, { allow_periods_in_identifiers: true }) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, { allow_periods_in_identifiers: true }) # Get input and expected output expected = { '/' => '/', '/foo' => '/foo', @@ -159,11 +695,11 @@ end end def test_basename_of_disallowing_periods_in_identifiers # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Get input and expected output expected = { '/' => '/', '/foo' => '/foo', @@ -189,11 +725,11 @@ end end def test_ext_of_allowing_periods_in_identifiers # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, { allow_periods_in_identifiers: true }) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, { allow_periods_in_identifiers: true }) # Get input and expected output expected = { '/' => '', '/foo' => '', @@ -219,11 +755,11 @@ end end def test_ext_of_disallowing_periods_in_identifiers # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Get input and expected output expected = { '/' => '', '/foo' => '', @@ -256,16 +792,16 @@ io.write "foo: bar\n" io.write "-----\n" end # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Parse it - result = data_source.instance_eval { parse('test.html', nil, 'foobar') } - assert_equal({ 'foo' => 'bar' }, result[0]) - assert_equal('', result[1]) + result = data_source.instance_eval { parse('test.html', nil) } + assert_equal({ 'foo' => 'bar' }, result.attributes) + assert_equal('', result.content) end def test_parse_embedded_meta_only_2 # Create a file File.open('test.html', 'w') do |io| @@ -273,16 +809,16 @@ io.write "foo: bar\r\n" io.write "-----\r" end # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Parse it - result = data_source.instance_eval { parse('test.html', nil, 'foobar') } - assert_equal({ 'foo' => 'bar' }, result[0]) - assert_equal('', result[1]) + result = data_source.instance_eval { parse('test.html', nil) } + assert_equal({ 'foo' => 'bar' }, result.attributes) + assert_equal('', result.content) end def test_parse_embedded_meta_only_3 # Create a file File.open('test.html', 'w') do |io| @@ -290,31 +826,31 @@ io.write "foo: bar\n" io.write '-----' end # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Parse it - result = data_source.instance_eval { parse('test.html', nil, 'foobar') } - assert_equal({ 'foo' => 'bar' }, result[0]) - assert_equal('', result[1]) + result = data_source.instance_eval { parse('test.html', nil) } + assert_equal({ 'foo' => 'bar' }, result.attributes) + assert_equal('', result.content) end def test_parse_embedded_invalid_2 # Create a file File.open('test.html', 'w') do |io| io.write "-----\n" io.write "blah blah\n" end # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Parse it assert_raises(RuntimeError) do - data_source.instance_eval { parse('test.html', nil, 'foobar') } + data_source.instance_eval { parse('test.html', nil) } end end def test_parse_embedded_separators_but_not_metadata # Create a file @@ -323,16 +859,16 @@ io.write "-----\n" io.write "blah blah\n" end # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Parse it - result = data_source.instance_eval { parse('test.html', nil, 'foobar') } - assert_equal(File.read('test.html'), result[1]) - assert_equal({}, result[0]) + result = data_source.instance_eval { parse('test.html', nil) } + assert_equal(File.read('test.html'), result.content) + assert_equal({}, result.attributes) end def test_parse_embedded_full_meta # Create a file File.open('test.html', 'w') do |io| @@ -341,16 +877,16 @@ io.write "-----\n" io.write " \t\n blah blah\n" end # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Parse it - result = data_source.instance_eval { parse('test.html', nil, 'foobar') } - assert_equal({ 'foo' => 'bar' }, result[0]) - assert_equal(" \t\n blah blah\n", result[1]) + result = data_source.instance_eval { parse('test.html', nil) } + assert_equal({ 'foo' => 'bar' }, result.attributes) + assert_equal(" \t\n blah blah\n", result.content) end def test_parse_embedded_with_extra_spaces # Create a file File.open('test.html', 'w') do |io| @@ -359,16 +895,16 @@ io.write "-----\t\t\t\t\t\n" io.write " blah blah\n" end # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Parse it - result = data_source.instance_eval { parse('test.html', nil, 'foobar') } - assert_equal({ 'foo' => 'bar' }, result[0]) - assert_equal(" blah blah\n", result[1]) + result = data_source.instance_eval { parse('test.html', nil) } + assert_equal({ 'foo' => 'bar' }, result.attributes) + assert_equal(" blah blah\n", result.content) end def test_parse_embedded_empty_meta # Create a file File.open('test.html', 'w') do |io| @@ -377,16 +913,16 @@ io.write "\nblah blah\n" io.write '-----' end # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Parse it - result = data_source.instance_eval { parse('test.html', nil, 'foobar') } - assert_equal({}, result[0]) - assert_equal("\nblah blah\n-----", result[1]) + result = data_source.instance_eval { parse('test.html', nil) } + assert_equal({}, result.attributes) + assert_equal("\nblah blah\n-----", result.content) end def test_parse_utf8_bom File.open('test.html', 'w') do |io| io.write [0xEF, 0xBB, 0xBF].map(&:chr).join @@ -394,15 +930,15 @@ io.write "utf8bomawareness: high\n" io.write "-----\n" io.write "content goes here\n" end - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, encoding: 'utf-8') + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, encoding: 'utf-8') - result = data_source.instance_eval { parse('test.html', nil, 'foobar') } - assert_equal({ 'utf8bomawareness' => 'high' }, result[0]) - assert_equal("content goes here\n", result[1]) + result = data_source.instance_eval { parse('test.html', nil) } + assert_equal({ 'utf8bomawareness' => 'high' }, result.attributes) + assert_equal("content goes here\n", result.content) end def test_parse_embedded_no_meta content = "blah\n" \ "blah blah blah\n" \ @@ -410,16 +946,16 @@ # Create a file File.open('test.html', 'w') { |io| io.write(content) } # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Parse it - result = data_source.instance_eval { parse('test.html', nil, 'foobar') } - assert_equal({}, result[0]) - assert_equal(content, result[1]) + result = data_source.instance_eval { parse('test.html', nil) } + assert_equal({}, result.attributes) + assert_equal(content, result.content) end def test_parse_embedded_diff content = \ "--- a/foo\n" \ @@ -428,30 +964,30 @@ # Create a file File.open('test.html', 'w') { |io| io.write(content) } # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Parse it - result = data_source.instance_eval { parse('test.html', nil, 'foobar') } - assert_equal({}, result[0]) - assert_equal(content, result[1]) + result = data_source.instance_eval { parse('test.html', nil) } + assert_equal({}, result.attributes) + assert_equal(content, result.content) end def test_parse_external # Create a file File.open('test.html', 'w') { |io| io.write('blah blah') } File.open('test.yaml', 'w') { |io| io.write('foo: bar') } # Create data source - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) # Parse it - result = data_source.instance_eval { parse('test.html', 'test.yaml', 'foobar') } - assert_equal({ 'foo' => 'bar' }, result[0]) - assert_equal('blah blah', result[1]) + result = data_source.instance_eval { parse('test.html', 'test.yaml') } + assert_equal({ 'foo' => 'bar' }, result.attributes) + assert_equal('blah blah', result.content) end def test_parse_internal_bad_metadata content = \ "---\n" \ @@ -459,23 +995,23 @@ "---\n" \ "blah blah\n" File.open('test.html', 'w') { |io| io.write(content) } - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) assert_raises(Nanoc::DataSources::Filesystem::InvalidMetadataError) do - data_source.instance_eval { parse('test.html', nil, 'foobar') } + data_source.instance_eval { parse('test.html', nil) } end end def test_parse_external_bad_metadata File.open('test.html', 'w') { |io| io.write('blah blah') } File.open('test.yaml', 'w') { |io| io.write('Hello world!') } - data_source = Nanoc::DataSources::FilesystemUnified.new(nil, nil, nil, nil) + data_source = Nanoc::DataSources::Filesystem.new(nil, nil, nil, nil) assert_raises(Nanoc::DataSources::Filesystem::InvalidMetadataError) do - data_source.instance_eval { parse('test.html', 'test.yaml', 'foobar') } + data_source.instance_eval { parse('test.html', 'test.yaml') } end end end