# -*- encoding: utf-8 -*- require 'webgen/test_helper' require 'webgen/node' class TestNode < MiniTest::Unit::TestCase include Webgen::TestHelper def setup setup_website end def test_initialize check_proc = proc do |node, parent, dest_path, cn, lcn, alcn, lang, mi| assert_equal(parent, node.parent) assert_equal(dest_path, node.dest_path) assert_equal(cn, node.cn) assert_equal(lcn, node.lcn) assert_equal(alcn, node.alcn) assert_equal(lang, node.lang) assert_kind_of(Webgen::Language, node.lang) if node.lang assert_equal(mi, node.meta_info) assert_equal({}, node.node_info) end node = Webgen::Node.new(@website.tree.dummy_root, '/', '/', {'lang' => 'de', :test => :value}) check_proc.call(node, @website.tree.dummy_root, '/', '/', '/', '/', nil, {:test => :value}) child = Webgen::Node.new(node, 'somename.html', '/somename.html', {'lang' => 'de'}) check_proc.call(child, node, '/somename.html', 'somename.html', 'somename.de.html', '/somename.de.html', 'de', {}) ['http://webgen.rubyforge.org', 'c:\\test'].each_with_index do |abspath, index| cn = "test#{index}.html" c = Webgen::Node.new(node, cn, abspath) check_proc.call(c, node, abspath, cn, cn, '/' + cn, nil, {}) end end def test_type_checkers setup_default_nodes(@website.tree) assert(@website.tree['/'].is_directory?) assert(@website.tree['/file.en.html'].is_file?) assert(@website.tree['/file.en.html#frag'].is_fragment?) assert(@website.tree['/'].is_root?) assert(!@website.tree['/file.en.html'].is_root?) assert(@website.tree['/file.en.html#nested'].is_fragment?) assert(!@website.tree['/file.en.html#nested'].is_directory?) end def test_is_ancestor_of setup_default_nodes(@website.tree) assert(@website.tree['/'].is_ancestor_of?(@website.tree['/file.en.html'])) assert(@website.tree['/'].is_ancestor_of?(@website.tree['/dir/'])) assert(@website.tree['/dir/'].is_ancestor_of?(@website.tree['/dir/subfile.html'])) assert(@website.tree['/'].is_ancestor_of?(@website.tree['/dir/subfile.html#frag'])) assert(@website.tree['/dir/'].is_ancestor_of?(@website.tree['/dir/subfile.html#frag'])) assert(@website.tree['/dir/subfile.html'].is_ancestor_of?(@website.tree['/dir/subfile.html#frag'])) refute(@website.tree['/dir/'].is_ancestor_of?(@website.tree['/dir2/index.en.html'])) refute(@website.tree['/dir/'].is_ancestor_of?(@website.tree['/file.en.html'])) refute(@website.tree['/dir/subfile.html'].is_ancestor_of?(@website.tree['/file.en.html'])) refute(@website.tree['/dir2/index.en.html'].is_ancestor_of?(@website.tree['/dir/subfile.html'])) end def test_to_s node = Webgen::Node.new(@website.tree.dummy_root, '/', '/', {'lang' => 'de', :test => :value}) assert_equal(node.alcn, node.to_s) end def test_matching root = Webgen::Node.new(@website.tree.dummy_root, '/', '/') node = Webgen::Node.new(root, 'somefile.html', 'somefile.de.html', {'lang' => 'de'}) assert(node =~ '**/*') assert(node =~ '**/somefile.de.HTML') assert(node =~ '/**/somefile.*.html') assert(node !~ '/somefile.html') assert(node !~ '**/*.test') end def test_route_to tree = @website.tree setup_default_nodes(tree) assert_equal('file.en.html', tree['/file.en.html'].route_to(tree['/file.en.html'])) assert_equal('file.de.html', tree['/file.en.html#frag'].route_to(tree['/file.de.html'])) assert_equal('subfile.html#frag', tree['/dir/'].route_to(tree['/dir/subfile.html#frag'])) assert_equal('#frag', tree['/dir/subfile.html'].route_to(tree['/dir/subfile.html#frag'])) assert_equal('../dir2/index.en.html', tree['/dir/subfile.html#frag'].route_to(tree['/dir2/index.en.html'])) assert_equal('../dir2/index.en.html', tree['/dir/subfile.html'].route_to(tree['/dir2/index.en.html'])) assert_equal('./', tree['/file.en.html'].route_to(tree['/'])) assert_equal('../', tree['/dir/'].route_to(tree['/'])) assert_equal('dir/', tree['/file.en.html'].route_to(tree['/dir/'])) n = Webgen::Node.new(tree['/'], 'testing', '../../.././dir2') assert_equal('../dir2', tree['/dir/subfile.html'].route_to(n)) end def test_proxy_node tree = @website.tree setup_default_nodes(tree) assert_equal(tree['/file.en.html'], tree['/file.en.html'].proxy_node('en')) assert_equal(tree['/dir2/index.en.html'], tree['/dir2/'].proxy_node('en')) assert_equal(tree['/dir2/index.en.html'], tree['/dir2/'].proxy_node('en')) @website.ext.item_tracker = MiniTest::Mock.new @website.ext.item_tracker.expect(:add, nil, [:a, :b, :c, :d]) tree['/dir/subfile.html'].meta_info['proxy_path'] = 'holla' assert_equal(tree['/dir/subfile.html'], tree['/dir/subfile.html'].proxy_node('pt')) end def test_level setup_default_nodes(@website.tree) assert_equal(0, @website.tree['/'].level) assert_equal(1, @website.tree['/dir/'].level) assert_equal(2, @website.tree['/dir/subfile.html'].level) assert_equal(3, @website.tree['/dir/dir/file.html'].level) end def test_link_to tree = @website.tree setup_default_nodes(tree) # general tests assert_equal('frag', tree['/file.en.html'].link_to(tree['/file.en.html#frag'])) assert_equal('link_text', tree['/file.en.html'].link_to(tree['/file.en.html#frag'], 'en', 'link_text' => 'link_text')) assert_equal('frag', tree['/file.en.html'].link_to(tree['/file.en.html#frag'], 'en', 'attr1' => 'val1')) assert_equal('frag', tree['/file.en.html'].link_to(tree['/file.en.html#frag'], 'en', :attr1 => 'val1')) assert_equal('index en', tree['/file.en.html'].link_to(tree['/dir2/index.en.html'])) # links to directories assert_equal('routed de', tree['/file.de.html'].link_to(tree['/dir2/'])) assert_equal('routed', tree['/file.en.html'].link_to(tree['/dir2/'])) assert_equal('routed de', tree['/file.en.html'].link_to(tree['/dir2/'], 'de')) end def test_versions root = Webgen::Node.new(Webgen::Tree.new('website').dummy_root, '/', '/') n1 = Webgen::Node.new(root, 'file.html', '/file.html', 'version' => 'html') n1.node_info[:path] = '/file.html' n2 = Webgen::Node.new(root, 'file.pdf', '/file.pdf', 'version' => 'pdf') n2.node_info[:path] = '/file.html' n3 = Webgen::Node.new(root, 'file.orig', '/file.orig', 'version' => 'html') n3.node_info[:path] = '/file.other' assert_equal({'html' => n1, 'pdf' => n2}, n1.versions) assert_equal({'html' => n1, 'pdf' => n2}, n2.versions) assert_equal({'html' => n3}, n3.versions) end end