# encoding: utf-8
require 'test/helper'
class Nanoc3::DependencyTrackerTest < MiniTest::Unit::TestCase
include Nanoc3::TestHelpers
def test_initialize
# Mock items
items = [ mock, mock ]
# Create
tracker = Nanoc3::DependencyTracker.new(items)
# Verify no dependencies yet
assert_equal [], tracker.dependencies_for(items[0])
assert_equal [], tracker.dependencies_for(items[1])
end
def test_record_dependency
# Mock items
items = [ mock, mock ]
# Create
tracker = Nanoc3::DependencyTracker.new(items)
# Record some dependencies
tracker.record_dependency(items[0], items[1])
# Verify dependencies
assert_equal [ items[1] ], tracker.dependencies_for(items[0])
end
def test_start_and_stop
# Mock items
items = [ mock, mock ]
# Create
tracker = Nanoc3::DependencyTracker.new(items)
# Start, do something and stop
tracker.start
Nanoc3::NotificationCenter.post(:visit_started, items[0])
Nanoc3::NotificationCenter.post(:visit_started, items[1])
Nanoc3::NotificationCenter.post(:visit_ended, items[1])
Nanoc3::NotificationCenter.post(:visit_ended, items[0])
tracker.stop
# Verify dependencies
assert_equal [ items[1] ], tracker.dependencies_for(items[0])
assert_equal [], tracker.dependencies_for(items[1])
end
def test_store_graph_and_load_graph_simple
# Mock items
items = [ mock, mock, mock, mock ]
items[0].stubs(:path).returns('/aaa/')
items[1].stubs(:path).returns('/bbb/')
items[2].stubs(:path).returns('/ccc/')
items[3].stubs(:path).returns('/ddd/')
# Create
tracker = Nanoc3::DependencyTracker.new(items)
# Record some dependencies
tracker.record_dependency(items[0], items[1])
tracker.record_dependency(items[1], items[2])
tracker.record_dependency(items[1], items[3])
# Store
tracker.store_graph
assert File.file?(tracker.filename)
# Re-create
tracker = Nanoc3::DependencyTracker.new(items)
# Load
tracker.load_graph
# Check loaded graph
assert_equal [ items[1] ], tracker.dependencies_for(items[0])
assert_equal [ items[2], items[3] ], tracker.dependencies_for(items[1])
assert_equal [], tracker.dependencies_for(items[2])
assert_equal [], tracker.dependencies_for(items[3])
end
def test_store_graph_with_custom_filename
# Mock items
items = [ mock, mock, mock, mock ]
items[0].stubs(:path).returns('/aaa/')
items[1].stubs(:path).returns('/bbb/')
items[2].stubs(:path).returns('/ccc/')
items[3].stubs(:path).returns('/ddd/')
# Create
tracker = Nanoc3::DependencyTracker.new(items)
tracker.filename = 'tmp/bob/iguana/bits'
# Record some dependencies
tracker.record_dependency(items[0], items[1])
tracker.record_dependency(items[1], items[2])
tracker.record_dependency(items[1], items[3])
# Store
tracker.store_graph
assert File.file?(tracker.filename)
assert File.file?('tmp/bob/iguana/bits')
end
def test_store_graph_and_load_graph_with_removed_items
end
def test_store_graph_and_load_graph_with_added_items
end
def test_store_graph_and_load_graph_with_added_and_removed_items
end
def test_item_with_path
# Mock items
items = [ mock, mock, mock, mock ]
items[0].stubs(:path).returns('/aaa/')
items[1].stubs(:path).returns('/bbb/')
items[2].stubs(:path).returns('/ccc/')
items[3].stubs(:path).returns('/ddd/')
# Create
tracker = Nanoc3::DependencyTracker.new(items)
# Test
assert_equal items[0], tracker.send(:item_with_path, '/aaa/')
assert_equal items[1], tracker.send(:item_with_path, '/bbb/')
assert_equal items[2], tracker.send(:item_with_path, '/ccc/')
assert_equal items[3], tracker.send(:item_with_path, '/ddd/')
assert_equal nil, tracker.send(:item_with_path, '/123/')
end
end