nanoc3 3.1.7 → 3.1.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/.gemtest +0 -0
  2. data/LICENSE +1 -1
  3. data/NEWS.md +9 -0
  4. data/doc/yardoc_templates/default/layout/html/footer.erb +10 -0
  5. data/lib/nanoc3/base/item.rb +1 -1
  6. data/lib/nanoc3/base/item_rep.rb +1 -0
  7. data/lib/nanoc3/base/layout.rb +1 -1
  8. data/lib/nanoc3/cli/base.rb +4 -2
  9. data/lib/nanoc3/cli/commands/view.rb +1 -0
  10. data/lib/nanoc3/data_sources/filesystem.rb +25 -6
  11. data/lib/nanoc3/data_sources/filesystem_unified.rb +5 -5
  12. data/lib/nanoc3/extra/validators/links.rb +1 -1
  13. data/lib/nanoc3/filters/rdiscount.rb +2 -1
  14. data/lib/nanoc3/filters/sass.rb +20 -8
  15. data/lib/nanoc3/filters/sass.rb.orig +75 -0
  16. data/lib/nanoc3.rb +1 -1
  17. data/nanoc3.gemspec +41 -0
  18. data/tasks/clean.rake +11 -0
  19. data/tasks/doc.rake +14 -0
  20. data/tasks/gem.rake +13 -0
  21. data/tasks/test.rake +38 -0
  22. data/test/base/core_ext/array_spec.rb +23 -0
  23. data/test/base/core_ext/hash_spec.rb +41 -0
  24. data/test/base/core_ext/string_spec.rb +27 -0
  25. data/test/base/test_code_snippet.rb +33 -0
  26. data/test/base/test_compiler.rb +410 -0
  27. data/test/base/test_compiler_dsl.rb +121 -0
  28. data/test/base/test_context.rb +33 -0
  29. data/test/base/test_data_source.rb +48 -0
  30. data/test/base/test_dependency_tracker.rb +510 -0
  31. data/test/base/test_directed_graph.rb +91 -0
  32. data/test/base/test_filter.rb +85 -0
  33. data/test/base/test_item.rb +141 -0
  34. data/test/base/test_item_rep.rb +953 -0
  35. data/test/base/test_layout.rb +44 -0
  36. data/test/base/test_notification_center.rb +36 -0
  37. data/test/base/test_plugin.rb +32 -0
  38. data/test/base/test_rule.rb +21 -0
  39. data/test/base/test_rule_context.rb +63 -0
  40. data/test/base/test_site.rb +366 -0
  41. data/test/cli/commands/test_compile.rb +12 -0
  42. data/test/cli/commands/test_create_item.rb +12 -0
  43. data/test/cli/commands/test_create_layout.rb +28 -0
  44. data/test/cli/commands/test_create_site.rb +24 -0
  45. data/test/cli/commands/test_help.rb +12 -0
  46. data/test/cli/commands/test_info.rb +12 -0
  47. data/test/cli/commands/test_update.rb +12 -0
  48. data/test/cli/test_logger.rb +12 -0
  49. data/test/data_sources/test_filesystem.rb +420 -0
  50. data/test/data_sources/test_filesystem_unified.rb +538 -0
  51. data/test/data_sources/test_filesystem_verbose.rb +359 -0
  52. data/test/extra/core_ext/test_enumerable.rb +32 -0
  53. data/test/extra/core_ext/test_time.rb +17 -0
  54. data/test/extra/deployers/test_rsync.rb +234 -0
  55. data/test/extra/test_auto_compiler.rb +482 -0
  56. data/test/extra/test_file_proxy.rb +21 -0
  57. data/test/extra/test_vcs.rb +24 -0
  58. data/test/extra/validators/test_links.rb +53 -0
  59. data/test/extra/validators/test_w3c.rb +49 -0
  60. data/test/filters/test_bluecloth.rb +20 -0
  61. data/test/filters/test_coderay.rb +46 -0
  62. data/test/filters/test_colorize_syntax.rb +56 -0
  63. data/test/filters/test_erb.rb +72 -0
  64. data/test/filters/test_erubis.rb +72 -0
  65. data/test/filters/test_haml.rb +98 -0
  66. data/test/filters/test_kramdown.rb +20 -0
  67. data/test/filters/test_less.rb +59 -0
  68. data/test/filters/test_markaby.rb +26 -0
  69. data/test/filters/test_maruku.rb +20 -0
  70. data/test/filters/test_rainpress.rb +31 -0
  71. data/test/filters/test_rdiscount.rb +33 -0
  72. data/test/filters/test_rdoc.rb +18 -0
  73. data/test/filters/test_redcloth.rb +20 -0
  74. data/test/filters/test_relativize_paths.rb +231 -0
  75. data/test/filters/test_rubypants.rb +20 -0
  76. data/test/filters/test_sass.rb +170 -0
  77. data/test/filters/test_sass.rb.orig +103 -0
  78. data/test/gem_loader.rb +11 -0
  79. data/test/helper.rb +99 -0
  80. data/test/helpers/test_blogging.rb +808 -0
  81. data/test/helpers/test_breadcrumbs.rb +83 -0
  82. data/test/helpers/test_capturing.rb +42 -0
  83. data/test/helpers/test_filtering.rb +108 -0
  84. data/test/helpers/test_html_escape.rb +18 -0
  85. data/test/helpers/test_link_to.rb +251 -0
  86. data/test/helpers/test_rendering.rb +109 -0
  87. data/test/helpers/test_tagging.rb +89 -0
  88. data/test/helpers/test_text.rb +26 -0
  89. data/test/helpers/test_xml_sitemap.rb +69 -0
  90. data/test/tasks/test_clean.rb +71 -0
  91. metadata +83 -8
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::LayoutTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_initialize
10
+ # Make sure attributes are cleaned
11
+ layout = Nanoc3::Layout.new("content", { 'foo' => 'bar' }, '/foo/')
12
+ assert_equal({ :foo => 'bar' }, layout.attributes)
13
+
14
+ # Make sure identifier is cleaned
15
+ layout = Nanoc3::Layout.new("content", { 'foo' => 'bar' }, 'foo')
16
+ assert_equal('/foo/', layout.identifier)
17
+ end
18
+
19
+ def test_frozen_identifier
20
+ layout = Nanoc3::Layout.new("foo", {}, '/foo')
21
+
22
+ error = assert_raises(RuntimeError) do
23
+ layout.identifier.chop!
24
+ end
25
+ assert_equal "can't modify frozen string", error.message
26
+ end
27
+
28
+ def test_lookup_with_known_attribute
29
+ # Create layout
30
+ layout = Nanoc3::Layout.new("content", { 'foo' => 'bar' }, '/foo/')
31
+
32
+ # Check attributes
33
+ assert_equal('bar', layout[:foo])
34
+ end
35
+
36
+ def test_lookup_with_unknown_attribute
37
+ # Create layout
38
+ layout = Nanoc3::Layout.new("content", { 'foo' => 'bar' }, '/foo/')
39
+
40
+ # Check attributes
41
+ assert_equal(nil, layout[:filter])
42
+ end
43
+
44
+ end
@@ -0,0 +1,36 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::NotificationCenterTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_post
10
+ # Set up notification
11
+ Nanoc3::NotificationCenter.on :ping_received, :test do
12
+ @ping_received = true
13
+ end
14
+
15
+ # Post
16
+ @ping_received = false
17
+ Nanoc3::NotificationCenter.post :ping_received
18
+ assert(@ping_received)
19
+ end
20
+
21
+ def test_remove
22
+ # Set up notification
23
+ Nanoc3::NotificationCenter.on :ping_received, :test do
24
+ @ping_received = true
25
+ end
26
+
27
+ # Remove observer
28
+ Nanoc3::NotificationCenter.remove :ping_received, :test
29
+
30
+ # Post
31
+ @ping_received = false
32
+ Nanoc3::NotificationCenter.post :ping_received
33
+ assert(!@ping_received)
34
+ end
35
+
36
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::PluginTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ class SampleFilter < Nanoc3::Filter
10
+ identifier :_plugin_test_sample_filter
11
+ end
12
+
13
+ def test_named
14
+ # Find existant filter
15
+ filter = Nanoc3::Filter.named(:erb)
16
+ assert(!filter.nil?)
17
+
18
+ # Find non-existant filter
19
+ filter = Nanoc3::Filter.named(:lksdaffhdlkashlgkskahf)
20
+ assert(filter.nil?)
21
+ end
22
+
23
+ def test_register
24
+ SampleFilter.send(:identifier, :_plugin_test_sample_filter)
25
+
26
+ registry = Nanoc3::PluginRegistry.instance
27
+ filter = registry.find(Nanoc3::Filter, :_plugin_test_sample_filter)
28
+
29
+ refute_nil filter
30
+ end
31
+
32
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::RuleTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_initialize
10
+ # TODO implement
11
+ end
12
+
13
+ def test_applicable_to
14
+ # TODO implement
15
+ end
16
+
17
+ def test_apply_to
18
+ # TODO implement
19
+ end
20
+
21
+ end
@@ -0,0 +1,63 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::RuleContextTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_objects
10
+ # Mock everything
11
+ config = mock
12
+ items = mock
13
+ layouts = mock
14
+ site = mock
15
+ site.stubs(:config).returns(config)
16
+ site.stubs(:items).returns(items)
17
+ site.stubs(:layouts).returns(layouts)
18
+ item = mock
19
+ item.stubs(:site).returns(site)
20
+ rep = mock
21
+ rep.stubs(:item).returns(item)
22
+
23
+ # Create context
24
+ @rule_context = Nanoc3::RuleContext.new(rep)
25
+
26
+ # Check
27
+ assert_equal rep, @rule_context.rep
28
+ assert_equal item, @rule_context.item
29
+ assert_equal site, @rule_context.site
30
+ assert_equal config, @rule_context.config
31
+ assert_equal layouts, @rule_context.layouts
32
+ assert_equal items, @rule_context.items
33
+ end
34
+
35
+ def test_actions
36
+ # Mock everything
37
+ config = mock
38
+ items = mock
39
+ layouts = mock
40
+ site = mock
41
+ site.stubs(:config).returns(config)
42
+ site.stubs(:items).returns(items)
43
+ site.stubs(:layouts).returns(layouts)
44
+ item = mock
45
+ item.stubs(:site).returns(site)
46
+
47
+ # Mock rep
48
+ rep = mock
49
+ rep.stubs(:item).returns(item)
50
+ rep.expects(:filter).with(:foo, { :bar => 'baz' })
51
+ rep.expects(:layout).with('foo')
52
+ rep.expects(:snapshot).with('awesome')
53
+
54
+ # Create context
55
+ @rule_context = Nanoc3::RuleContext.new(rep)
56
+
57
+ # Check
58
+ rep.filter :foo, :bar => 'baz'
59
+ rep.layout 'foo'
60
+ rep.snapshot 'awesome'
61
+ end
62
+
63
+ end
@@ -0,0 +1,366 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::SiteTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_initialize_with_dir_without_config_yaml
10
+ assert_raises(Errno::ENOENT) do
11
+ site = Nanoc3::Site.new('.')
12
+ end
13
+ end
14
+
15
+ def test_initialize_with_dir_with_config_yaml
16
+ File.open('config.yaml', 'w') { |io| io.write('output_dir: public_html') }
17
+ site = Nanoc3::Site.new('.')
18
+ assert_equal 'public_html', site.config[:output_dir]
19
+ end
20
+
21
+ def test_initialize_with_config_hash
22
+ site = Nanoc3::Site.new(:foo => 'bar')
23
+ assert_equal 'bar', site.config[:foo]
24
+ end
25
+
26
+ def test_initialize_with_incomplete_data_source_config
27
+ site = Nanoc3::Site.new(:data_sources => [ { :type => 'foo', :items_root => '/bar/' } ])
28
+ assert_equal('foo', site.config[:data_sources][0][:type])
29
+ assert_equal('/bar/', site.config[:data_sources][0][:items_root])
30
+ assert_equal('/', site.config[:data_sources][0][:layouts_root])
31
+ assert_equal({}, site.config[:data_sources][0][:config])
32
+ end
33
+
34
+ def test_load_rules_with_existing_rules_file
35
+ # Mock DSL
36
+ dsl = mock
37
+ dsl.expects(:compile).with('*')
38
+
39
+ # Create site
40
+ site = Nanoc3::Site.new({})
41
+ site.expects(:dsl).returns(dsl)
42
+
43
+ # Create rules file
44
+ File.open('Rules', 'w') do |io|
45
+ io.write <<-EOF
46
+ compile '*' do
47
+ # ... do nothing ...
48
+ end
49
+ EOF
50
+ end
51
+
52
+ # Load rules
53
+ site.send :load_rules
54
+ end
55
+
56
+ def test_load_rules_with_broken_rules_file
57
+ # Mock DSL
58
+ dsl = mock
59
+ dsl.expects(:some_function_that_doesn_really_exist)
60
+ dsl.expects(:weird_param_number_one)
61
+ dsl.expects(:mysterious_param_number_two)
62
+
63
+ # Create site
64
+ site = Nanoc3::Site.new({})
65
+ site.expects(:dsl).returns(dsl)
66
+
67
+ # Create rules file
68
+ File.open('Rules', 'w') do |io|
69
+ io.write <<-EOF
70
+ some_function_that_doesn_really_exist(
71
+ weird_param_number_one,
72
+ mysterious_param_number_two
73
+ )
74
+ EOF
75
+ end
76
+
77
+ # Load rules
78
+ site.send :load_rules
79
+ end
80
+
81
+ def test_load_data_sources_first
82
+ # Create site
83
+ Nanoc3::CLI::Base.new.run([ 'create_site', 'bar' ])
84
+
85
+ FileUtils.cd('bar') do
86
+ # Create data source code
87
+ File.open('lib/some_data_source.rb', 'w') do |io|
88
+ io.write "class FooDataSource < Nanoc3::DataSource\n"
89
+ io.write " identifier :site_test_foo\n"
90
+ io.write " def items ; [ Nanoc3::Item.new('content', {}, '/foo/') ] ; end\n"
91
+ io.write "end\n"
92
+ end
93
+
94
+ # Update configuration
95
+ File.open('config.yaml', 'w') do |io|
96
+ io.write "data_sources:\n"
97
+ io.write " - type: site_test_foo"
98
+ end
99
+
100
+ # Create site
101
+ site = Nanoc3::Site.new('.')
102
+ site.load_data
103
+
104
+ # Check
105
+ assert_equal 1, site.data_sources.size
106
+ assert_equal '/foo/', site.items[0].identifier
107
+ end
108
+ end
109
+
110
+ def test_disallow_routes_not_starting_with_slash
111
+ # Create site
112
+ Nanoc3::CLI::Base.new.run([ 'create_site', 'bar' ])
113
+
114
+ FileUtils.cd('bar') do
115
+ # Create routes
116
+ File.open('Rules', 'w') do |io|
117
+ io.write "compile '*' do\n"
118
+ io.write " layout 'default'\n"
119
+ io.write "end\n"
120
+ io.write "\n"
121
+ io.write "route '*' do\n"
122
+ io.write " 'index.html'\n"
123
+ io.write "end\n"
124
+ io.write "\n"
125
+ io.write "layout '*', :erb\n"
126
+ end
127
+
128
+ # Create site
129
+ site = Nanoc3::Site.new('.')
130
+ error = assert_raises(RuntimeError) do
131
+ site.load_data
132
+ end
133
+ assert_match /^The path returned for the.*does not start with a slash. Please ensure that all routing rules return a path that starts with a slash./, error.message
134
+ end
135
+ end
136
+
137
+ end
138
+
139
+ describe 'Nanoc3::Site#initialize' do
140
+
141
+ include Nanoc3::TestHelpers
142
+
143
+ it 'should merge default config' do
144
+ site = Nanoc3::Site.new(:foo => 'bar')
145
+ site.config[:foo].must_equal 'bar'
146
+ site.config[:output_dir].must_equal 'output'
147
+ end
148
+
149
+ it 'should not raise under normal circumstances' do
150
+ Nanoc3::Site.new({})
151
+ end
152
+
153
+ it 'should not raise for non-existant output directory' do
154
+ Nanoc3::Site.new(:output_dir => 'fklsdhailfdjalghlkasdflhagjskajdf')
155
+ end
156
+
157
+ it 'should not raise for unknown data sources' do
158
+ proc do
159
+ Nanoc3::Site.new(:data_source => 'fklsdhailfdjalghlkasdflhagjskajdf')
160
+ end
161
+ end
162
+
163
+ end
164
+
165
+ describe 'Nanoc3::Site#load_data' do
166
+
167
+ include Nanoc3::TestHelpers
168
+
169
+ it 'should load the data source' do
170
+ site = Nanoc3::Site.new({})
171
+
172
+ # Mock data sources
173
+ data_sources = [ mock, mock, mock ]
174
+ data_sources.each { |ds| ds.expects(:use) }
175
+ data_sources.each { |ds| ds.expects(:unuse) }
176
+ site.stubs(:data_sources).returns(data_sources)
177
+
178
+ # Mock load_* methods
179
+ site.stubs(:load_code_snippets).with(false)
180
+ site.stubs(:load_rules)
181
+ site.stubs(:load_items)
182
+ site.stubs(:load_layouts)
183
+ site.expects(:link_everything_to_site)
184
+ site.expects(:setup_child_parent_links).times(2)
185
+ site.expects(:build_reps)
186
+ site.expects(:route_reps)
187
+
188
+ # Load data
189
+ site.load_data
190
+ end
191
+
192
+ it 'should call the preprocessor' do
193
+ site = Nanoc3::Site.new({})
194
+ site.instance_eval do
195
+ @items_loaded = true
196
+ @layouts_loaded = true
197
+ end
198
+
199
+ # Mock data sources
200
+ data_sources = [ mock, mock, mock ]
201
+ data_sources.each { |ds| ds.expects(:use) }
202
+ data_sources.each { |ds| ds.expects(:unuse) }
203
+ site.stubs(:data_sources).returns(data_sources)
204
+
205
+ # Mock load_* methods
206
+ site.expects(:load_code_snippets).with(false)
207
+ site.expects(:load_rules)
208
+ site.expects(:load_items)
209
+ site.expects(:load_layouts)
210
+ site.expects(:link_everything_to_site)
211
+ site.expects(:setup_child_parent_links).times(2)
212
+ site.expects(:build_reps)
213
+ site.expects(:route_reps)
214
+
215
+ # Mock preprocessor
216
+ preprocessor = lambda { |*x| }
217
+ site.expects(:preprocessor).times(2).returns(preprocessor)
218
+
219
+ # Load data
220
+ site.load_data
221
+ end
222
+
223
+ it 'should call load_* methods' do
224
+ site = Nanoc3::Site.new({})
225
+
226
+ # Mock data sources
227
+ data_sources = [ mock, mock, mock ]
228
+ data_sources.each { |ds| ds.expects(:use) }
229
+ data_sources.each { |ds| ds.expects(:unuse) }
230
+ site.stubs(:data_sources).returns(data_sources)
231
+
232
+ # Mock load_* methods
233
+ site.expects(:load_code_snippets).with(false)
234
+ site.expects(:load_rules)
235
+ site.expects(:load_items)
236
+ site.expects(:load_layouts)
237
+ site.expects(:link_everything_to_site)
238
+ site.expects(:setup_child_parent_links).times(2)
239
+ site.expects(:build_reps)
240
+ site.expects(:route_reps)
241
+
242
+ # Load data
243
+ site.load_data
244
+ end
245
+
246
+ it 'should not load data twice if not forced' do
247
+ site = Nanoc3::Site.new({})
248
+
249
+ # Mock data sources
250
+ data_sources = [ mock, mock, mock ]
251
+ data_sources.each { |ds| ds.expects(:use) }
252
+ data_sources.each { |ds| ds.expects(:unuse) }
253
+ site.stubs(:data_sources).returns(data_sources)
254
+
255
+ # Mock load_* methods
256
+ site.expects(:load_code_snippets).with(false).once
257
+ site.expects(:load_rules)
258
+ site.expects(:load_items).once
259
+ site.expects(:load_layouts).once
260
+ site.expects(:link_everything_to_site)
261
+ site.expects(:setup_child_parent_links).times(2)
262
+ site.expects(:build_reps).once
263
+ site.expects(:route_reps).once
264
+
265
+ # Load data twice
266
+ site.load_data
267
+ site.load_data
268
+ end
269
+
270
+ it 'should load data twice if forced' do
271
+ site = Nanoc3::Site.new({})
272
+
273
+ # Mock data sources
274
+ data_sources = [ mock, mock, mock ]
275
+ data_sources.each { |ds| ds.expects(:use).times(2) }
276
+ data_sources.each { |ds| ds.expects(:unuse).times(2) }
277
+ site.stubs(:data_sources).returns(data_sources)
278
+
279
+ # Mock load_* methods
280
+ site.expects(:load_code_snippets).with(true).times(2)
281
+ site.expects(:load_rules).times(2)
282
+ site.expects(:load_items).times(2)
283
+ site.expects(:load_layouts).times(2)
284
+ site.expects(:link_everything_to_site).times(2)
285
+ site.expects(:setup_child_parent_links).times(2*2)
286
+ site.expects(:build_reps).times(2)
287
+ site.expects(:route_reps).times(2)
288
+
289
+ # Load data twice
290
+ site.load_data(true)
291
+ site.load_data(true)
292
+ end
293
+
294
+ end
295
+
296
+ describe 'Nanoc3::Site#code_snippets' do
297
+
298
+ include Nanoc3::TestHelpers
299
+
300
+ it 'should raise when data is not loaded yet' do
301
+ site = Nanoc3::Site.new({})
302
+ proc do
303
+ site.code_snippets
304
+ end.must_raise Nanoc3::Errors::DataNotYetAvailable
305
+ end
306
+
307
+ end
308
+
309
+ describe 'Nanoc3::Site#items' do
310
+
311
+ include Nanoc3::TestHelpers
312
+
313
+ it 'should raise when data is not loaded yet' do
314
+ site = Nanoc3::Site.new({})
315
+ proc do
316
+ site.items
317
+ end.must_raise Nanoc3::Errors::DataNotYetAvailable
318
+ end
319
+
320
+ end
321
+
322
+ describe 'Nanoc3::Site#layouts' do
323
+
324
+ include Nanoc3::TestHelpers
325
+
326
+ it 'should raise when data is not loaded yet' do
327
+ site = Nanoc3::Site.new({})
328
+ proc do
329
+ site.layouts
330
+ end.must_raise Nanoc3::Errors::DataNotYetAvailable
331
+ end
332
+
333
+ end
334
+
335
+ describe 'Nanoc3::Site#compiler' do
336
+
337
+ include Nanoc3::TestHelpers
338
+
339
+ it 'should not raise under normal circumstances' do
340
+ site = Nanoc3::Site.new({})
341
+ site.compiler
342
+ end
343
+
344
+ end
345
+
346
+ describe 'Nanoc3::Site#data_sources' do
347
+
348
+ include Nanoc3::TestHelpers
349
+
350
+ it 'should not raise for known data sources' do
351
+ site = Nanoc3::Site.new({})
352
+ site.data_sources
353
+ end
354
+
355
+ it 'should raise for unknown data sources' do
356
+ proc do
357
+ site = Nanoc3::Site.new(
358
+ :data_sources => [
359
+ { :type => 'fklsdhailfdjalghlkasdflhagjskajdf' }
360
+ ]
361
+ )
362
+ site.data_sources
363
+ end.must_raise Nanoc3::Errors::UnknownDataSource
364
+ end
365
+
366
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::CLI::Commands::CompileTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_stub
10
+ end
11
+
12
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::CLI::Commands::CreateItemTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_stub
10
+ end
11
+
12
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::CLI::Commands::CreateLayoutTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_can_compile_new_layout
10
+ Nanoc3::CLI::Base.new.run([ 'create_site', 'foo' ])
11
+
12
+ FileUtils.cd('foo') do
13
+ # Create new layout
14
+ Nanoc3::CLI::Base.new.run([ 'create_layout', 'moo' ])
15
+
16
+ # Makes rules use new layout
17
+ rules_raw = File.read('Rules')
18
+ File.open('Rules', 'w') do |io|
19
+ io.write rules_raw.sub("layout 'default'", "layout 'moo'")
20
+ end
21
+
22
+ site = Nanoc3::Site.new('.')
23
+ site.load_data
24
+ site.compiler.run
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::CLI::Commands::CreateSiteTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_create_site_with_existing_name
10
+ Nanoc3::CLI::Base.new.run([ 'create_site', 'foo' ])
11
+ assert_raises(SystemExit) { Nanoc3::CLI::Base.new.run([ 'create_site', 'foo' ]) }
12
+ end
13
+
14
+ def test_can_compile_new_site
15
+ Nanoc3::CLI::Base.new.run([ 'create_site', 'foo' ])
16
+
17
+ FileUtils.cd('foo') do
18
+ site = Nanoc3::Site.new('.')
19
+ site.load_data
20
+ site.compiler.run
21
+ end
22
+ end
23
+
24
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::CLI::Commands::HelpTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_stub
10
+ end
11
+
12
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::CLI::Commands::InfoTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_stub
10
+ end
11
+
12
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::CLI::Commands::UpdateTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_stub
10
+ end
11
+
12
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::CLI::LoggerTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_stub
10
+ end
11
+
12
+ end