Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# 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