nanoc3 3.1.7 → 3.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,359 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::DataSources::FilesystemVerboseTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def new_data_source(params=nil)
10
+ # Mock site
11
+ site = Nanoc3::Site.new({})
12
+
13
+ # Create data source
14
+ data_source = Nanoc3::DataSources::FilesystemVerbose.new(site, nil, nil, params)
15
+
16
+ # Done
17
+ data_source
18
+ end
19
+
20
+ def test_items
21
+ # Create data source
22
+ data_source = new_data_source
23
+
24
+ # Create foo item
25
+ FileUtils.mkdir_p('content/foo')
26
+ File.open('content/foo/foo.yaml', 'w') do |io|
27
+ io.write("---\n")
28
+ io.write("title: Foo\n")
29
+ end
30
+ File.open('content/foo/foo.html', 'w') do |io|
31
+ io.write('Lorem ipsum dolor sit amet...')
32
+ end
33
+
34
+ # Create bar item
35
+ FileUtils.mkdir_p('content/bar')
36
+ File.open('content/bar/bar.yaml', 'w') do |io|
37
+ io.write("---\n")
38
+ io.write("title: Bar\n")
39
+ end
40
+ File.open('content/bar/bar.xml', 'w') do |io|
41
+ io.write("Lorem ipsum dolor sit amet...")
42
+ end
43
+
44
+ # Load items
45
+ items = data_source.items
46
+
47
+ # Check items
48
+ assert_equal(2, items.size)
49
+ assert(items.any? { |a|
50
+ a[:title] == 'Foo' &&
51
+ a[:extension] == 'html' &&
52
+ a[:content_filename] == 'content/foo/foo.html' &&
53
+ a[:meta_filename] == 'content/foo/foo.yaml'
54
+ })
55
+ assert(items.any? { |a|
56
+ a[:title] == 'Bar' &&
57
+ a[:extension] == 'xml' &&
58
+ a[:content_filename] == 'content/bar/bar.xml' &&
59
+ a[:meta_filename] == 'content/bar/bar.yaml'
60
+ })
61
+ end
62
+
63
+ def test_items_with_period_in_name
64
+ data_source = new_data_source(:allow_periods_in_identifiers => true)
65
+
66
+ # Create foo.css
67
+ FileUtils.mkdir_p('content/foo')
68
+ File.open('content/foo/foo.yaml', 'w') do |io|
69
+ io.write(YAML.dump({ 'title' => 'Foo' }))
70
+ end
71
+ File.open('content/foo/foo.css', 'w') do |io|
72
+ io.write('body.foo {}')
73
+ end
74
+
75
+ # Create foo.bar.css
76
+ FileUtils.mkdir_p('content/foo.bar')
77
+ File.open('content/foo.bar/foo.bar.yaml', 'w') do |io|
78
+ io.write(YAML.dump({ 'title' => 'Foo Bar' }))
79
+ end
80
+ File.open('content/foo.bar/foo.bar.css', 'w') do |io|
81
+ io.write('body.foobar {}')
82
+ end
83
+
84
+ # Load
85
+ items = data_source.items
86
+
87
+ # Check
88
+ assert_equal 2, items.size
89
+ assert_equal '/foo/', items[0].identifier
90
+ assert_equal 'Foo', items[0][:title]
91
+ assert_equal 'content/foo/foo.css', items[0][:content_filename]
92
+ assert_equal 'content/foo/foo.yaml', items[0][:meta_filename]
93
+ assert_equal '/foo.bar/', items[1].identifier
94
+ assert_equal 'Foo Bar', items[1][:title]
95
+ assert_equal 'content/foo.bar/foo.bar.css', items[1][:content_filename]
96
+ assert_equal 'content/foo.bar/foo.bar.yaml', items[1][:meta_filename]
97
+ end
98
+
99
+ def test_items_with_optional_meta_file
100
+ # Create data source
101
+ data_source = new_data_source
102
+
103
+ # Create foo item
104
+ FileUtils.mkdir_p('content/foo')
105
+ File.open('content/foo/foo.html', 'w') do |io|
106
+ io.write('Lorem ipsum dolor sit amet...')
107
+ end
108
+
109
+ # Create bar item
110
+ FileUtils.mkdir_p('content/bar')
111
+ File.open('content/bar/bar.yaml', 'w') do |io|
112
+ io.write("---\n")
113
+ io.write("title: Bar\n")
114
+ end
115
+
116
+ # Load items
117
+ items = data_source.items
118
+
119
+ # Check items
120
+ assert_equal(2, items.size)
121
+ assert(items.any? { |a|
122
+ a[:title] == nil &&
123
+ a[:extension] == 'html' &&
124
+ a[:content_filename] == 'content/foo/foo.html' &&
125
+ a[:meta_filename] == nil
126
+ })
127
+ assert(items.any? { |a|
128
+ a[:title] == 'Bar' &&
129
+ a[:extension] == nil &&
130
+ a[:content_filename] == nil &&
131
+ a[:meta_filename] == 'content/bar/bar.yaml'
132
+ })
133
+ end
134
+
135
+ def test_layouts
136
+ # Create data source
137
+ data_source = new_data_source
138
+
139
+ # Create layout
140
+ FileUtils.mkdir_p('layouts/foo')
141
+ File.open('layouts/foo/foo.yaml', 'w') do |io|
142
+ io.write("---\n")
143
+ io.write("filter: erb\n")
144
+ end
145
+ File.open('layouts/foo/foo.rhtml', 'w') do |io|
146
+ io.write('Lorem ipsum dolor sit amet...')
147
+ end
148
+
149
+ # Load layouts
150
+ layouts = data_source.layouts
151
+
152
+ # Check layouts
153
+ assert_equal(1, layouts.size)
154
+ assert_equal('erb', layouts[0][:filter])
155
+ assert_equal('rhtml', layouts[0][:extension])
156
+ assert_equal('layouts/foo/foo.rhtml', layouts[0][:content_filename])
157
+ assert_equal('layouts/foo/foo.yaml', layouts[0][:meta_filename])
158
+ end
159
+
160
+ def test_layouts_with_period_in_name_disallowing_periods_in_identifiers
161
+ data_source = new_data_source
162
+
163
+ # Create foo.html
164
+ FileUtils.mkdir_p('layouts/foo')
165
+ File.open('layouts/foo/foo.yaml', 'w') do |io|
166
+ io.write(YAML.dump({ 'dog' => 'woof' }))
167
+ end
168
+ File.open('layouts/foo/foo.html', 'w') do |io|
169
+ io.write('body.foo {}')
170
+ end
171
+
172
+ # Create bar.html.erb
173
+ FileUtils.mkdir_p('layouts/bar')
174
+ File.open('layouts/bar/bar.yaml', 'w') do |io|
175
+ io.write(YAML.dump({ 'cat' => 'meow' }))
176
+ end
177
+ File.open('layouts/bar/bar.html.erb', 'w') do |io|
178
+ io.write('body.foobar {}')
179
+ end
180
+
181
+ # Load
182
+ layouts = data_source.layouts.sort_by { |i| i.identifier }
183
+
184
+ # Check
185
+ assert_equal 2, layouts.size
186
+ assert_equal '/bar/', layouts[0].identifier
187
+ assert_equal 'meow', layouts[0][:cat]
188
+ assert_equal '/foo/', layouts[1].identifier
189
+ assert_equal 'woof', layouts[1][:dog]
190
+ end
191
+
192
+ def test_layouts_with_period_in_name_allowing_periods_in_identifiers
193
+ data_source = new_data_source(:allow_periods_in_identifiers => true)
194
+
195
+ # Create foo.html
196
+ FileUtils.mkdir_p('layouts/foo')
197
+ File.open('layouts/foo/foo.yaml', 'w') do |io|
198
+ io.write(YAML.dump({ 'dog' => 'woof' }))
199
+ end
200
+ File.open('layouts/foo/foo.html', 'w') do |io|
201
+ io.write('body.foo {}')
202
+ end
203
+
204
+ # Create bar.html.erb
205
+ FileUtils.mkdir_p('layouts/bar.xyz')
206
+ File.open('layouts/bar.xyz/bar.xyz.yaml', 'w') do |io|
207
+ io.write(YAML.dump({ 'cat' => 'meow' }))
208
+ end
209
+ File.open('layouts/bar.xyz/bar.xyz.html', 'w') do |io|
210
+ io.write('body.foobar {}')
211
+ end
212
+
213
+ # Load
214
+ layouts = data_source.layouts.sort_by { |i| i.identifier }
215
+
216
+ # Check
217
+ assert_equal 2, layouts.size
218
+ assert_equal '/bar.xyz/', layouts[0].identifier
219
+ assert_equal 'meow', layouts[0][:cat]
220
+ assert_equal '/foo/', layouts[1].identifier
221
+ assert_equal 'woof', layouts[1][:dog]
222
+ end
223
+
224
+ def test_create_item_at_root
225
+ # Create item
226
+ data_source = new_data_source
227
+ data_source.create_item('content here', { :foo => 'bar' }, '/')
228
+
229
+ # Check file existance
230
+ assert File.directory?('content')
231
+ assert File.file?('content/content.html')
232
+ assert File.file?('content/content.yaml')
233
+
234
+ # Check file content
235
+ assert_equal 'content here', File.read('content/content.html')
236
+ assert_match 'foo: bar', File.read('content/content.yaml')
237
+ end
238
+
239
+ def test_create_item_not_at_root
240
+ # Create item
241
+ data_source = new_data_source
242
+ data_source.create_item('content here', { :foo => 'bar' }, '/moo/')
243
+
244
+ # Check file existance
245
+ assert File.directory?('content/moo')
246
+ assert File.file?('content/moo/moo.html')
247
+ assert File.file?('content/moo/moo.yaml')
248
+
249
+ # Check file content
250
+ assert_equal 'content here', File.read('content/moo/moo.html')
251
+ assert_match 'foo: bar', File.read('content/moo/moo.yaml')
252
+ end
253
+
254
+ def test_create_layout
255
+ # Create layout
256
+ data_source = new_data_source
257
+ data_source.create_layout('content here', { :foo => 'bar' }, '/moo/')
258
+
259
+ # Check file existance
260
+ assert File.directory?('layouts/moo')
261
+ assert File.file?('layouts/moo/moo.html')
262
+ assert File.file?('layouts/moo/moo.yaml')
263
+
264
+ # Check file content
265
+ assert_equal 'content here', File.read('layouts/moo/moo.html')
266
+ assert_match 'foo: bar', File.read('layouts/moo/moo.yaml')
267
+ end
268
+
269
+ def test_load_binary_objects
270
+ # Create data source
271
+ data_source = new_data_source
272
+
273
+ # Create sample files
274
+ FileUtils.mkdir_p('foo')
275
+ File.open('foo/stuff.dat', 'w') { |io| io.write("random binary data") }
276
+
277
+ # Load
278
+ items = data_source.send(:load_objects, 'foo', 'item', Nanoc3::Item)
279
+
280
+ # Check
281
+ assert_equal 1, items.size
282
+ assert items[0].binary?
283
+ assert_equal 'foo/stuff.dat', items[0].raw_filename
284
+ assert_nil items[0].raw_content
285
+ end
286
+
287
+ def test_filename_for_with_single
288
+ data_source = new_data_source
289
+
290
+ FileUtils.mkdir_p('foo/bar')
291
+ File.open('foo/bar.ext', 'w') { |io| io.write('o hai') }
292
+ assert_equal 'foo/bar.ext', data_source.send(:filename_for, 'foo/bar', 'ext')
293
+ end
294
+
295
+ def test_filename_for_with_double
296
+ data_source = new_data_source
297
+
298
+ FileUtils.mkdir_p('foo/bar')
299
+ File.open('foo/bar/bar.ext', 'w') { |io| io.write('o hai') }
300
+ assert_equal 'foo/bar/bar.ext', data_source.send(:filename_for, 'foo/bar', 'ext')
301
+ end
302
+
303
+ def test_filename_for_with_index
304
+ data_source = new_data_source
305
+
306
+ FileUtils.mkdir_p('foo/bar')
307
+ File.open('foo/bar/index.ext', 'w') { |io| io.write('o hai') }
308
+ assert_equal 'foo/bar/index.ext', data_source.send(:filename_for, 'foo/bar', 'ext')
309
+ end
310
+
311
+ def test_filename_for_with_nil
312
+ data_source = new_data_source
313
+
314
+ assert_equal nil, data_source.send(:filename_for, 'foo/bar', nil)
315
+ end
316
+
317
+ def test_filename_for_with_single_and_empty_ext
318
+ data_source = new_data_source
319
+
320
+ FileUtils.mkdir_p('foo')
321
+ File.open('foo/bar', 'w') { |io| io.write('o hai') }
322
+ assert_equal 'foo/bar', data_source.send(:filename_for, 'foo/bar', '')
323
+ end
324
+
325
+ def test_filename_for_with_double_and_empty_ext
326
+ data_source = new_data_source
327
+
328
+ FileUtils.mkdir_p('foo/bar')
329
+ File.open('foo/bar/bar', 'w') { |io| io.write('o hai') }
330
+ assert_equal 'foo/bar/bar', data_source.send(:filename_for, 'foo/bar', '')
331
+ end
332
+
333
+ def test_filename_for_with_index_and_empty_ext
334
+ data_source = new_data_source
335
+
336
+ FileUtils.mkdir_p('foo/bar')
337
+ File.open('foo/bar/index', 'w') { |io| io.write('o hai') }
338
+ assert_equal 'foo/bar/index', data_source.send(:filename_for, 'foo/bar', '')
339
+ end
340
+
341
+ def test_compile_huge_site
342
+ if_implemented do
343
+ # Create data source
344
+ data_source = new_data_source
345
+
346
+ # Create a lot of items
347
+ count = Process.getrlimit(Process::RLIMIT_NOFILE)[0] + 5
348
+ count.times do |i|
349
+ FileUtils.mkdir_p("content/#{i}")
350
+ File.open("content/#{i}/#{i}.html", 'w') { |io| io << "This is item #{i}." }
351
+ File.open("content/#{i}/#{i}.yaml", 'w') { |io| io << "title: Item #{i}" }
352
+ end
353
+
354
+ # Read all items
355
+ data_source.items
356
+ end
357
+ end
358
+
359
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::ExtraCoreExtEnumerableTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ class MyCollection
10
+
11
+ include Enumerable
12
+
13
+ def initialize(array)
14
+ @array = array
15
+ end
16
+
17
+ def each(&block)
18
+ @array.each { |i| block.call(i) }
19
+ end
20
+
21
+ end
22
+
23
+ def test_group_by
24
+ input = MyCollection.new([ 'foo', 'bar', 'baz' ])
25
+
26
+ output_expected = { ?f => [ 'foo' ], ?b => [ 'bar', 'baz' ] }
27
+ output_actual = input.group_by { |i| i[0] }
28
+
29
+ assert_equal output_expected, output_actual
30
+ end
31
+
32
+ end
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::ExtraCoreExtTimeTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_to_iso8601_date
10
+ assert_equal('2008-05-19', Time.utc(2008, 5, 19, 14, 20, 0, 0).to_iso8601_date)
11
+ end
12
+
13
+ def test_to_iso8601_time
14
+ assert_equal('2008-05-19T14:20:00Z', Time.utc(2008, 5, 19, 14, 20, 0, 0).to_iso8601_time)
15
+ end
16
+
17
+ end
@@ -0,0 +1,234 @@
1
+ # encoding: utf-8
2
+
3
+ require 'test/helper'
4
+
5
+ class Nanoc3::Extra::Deployers::RsyncTest < MiniTest::Unit::TestCase
6
+
7
+ include Nanoc3::TestHelpers
8
+
9
+ def test_new_without_site
10
+ # Try creating site
11
+ error = assert_raises(RuntimeError) do
12
+ Nanoc3::Extra::Deployers::Rsync.new
13
+ end
14
+
15
+ # Check error message
16
+ assert_equal 'No site configuration found', error.message
17
+ end
18
+
19
+ def test_run_without_general_deploy_config
20
+ # Create config
21
+ File.open('config.yaml', 'w') do |io|
22
+ io.write "---\n"
23
+ io.write "foo: bar\n"
24
+ end
25
+
26
+ # Create site
27
+ rsync = Nanoc3::Extra::Deployers::Rsync.new
28
+
29
+ # Try running
30
+ error = assert_raises(RuntimeError) do
31
+ rsync.run
32
+ end
33
+
34
+ # Check error message
35
+ assert_equal 'No deploy configuration found', error.message
36
+ end
37
+
38
+ def test_run_without_special_deploy_config
39
+ # Create config
40
+ File.open('config.yaml', 'w') do |io|
41
+ io.write "---\n"
42
+ io.write "deploy:\n"
43
+ io.write " blahblah:\n"
44
+ io.write " stuff: more stuff\n"
45
+ end
46
+
47
+ # Create site
48
+ rsync = Nanoc3::Extra::Deployers::Rsync.new
49
+
50
+ # Try running
51
+ error = assert_raises(RuntimeError) do
52
+ rsync.run
53
+ end
54
+
55
+ # Check error message
56
+ assert_equal 'No deploy configuration found for default', error.message
57
+ end
58
+
59
+ def test_run_without_special_deploy_config_with_custom_deploy_config
60
+ # Create config
61
+ File.open('config.yaml', 'w') do |io|
62
+ io.write "---\n"
63
+ io.write "deploy:\n"
64
+ io.write " blahblah:\n"
65
+ io.write " stuff: more stuff\n"
66
+ end
67
+
68
+ # Create site
69
+ rsync = Nanoc3::Extra::Deployers::Rsync.new
70
+
71
+ # Try running
72
+ error = assert_raises(RuntimeError) do
73
+ rsync.run(:config_name => 'potrzebie')
74
+ end
75
+
76
+ # Check error message
77
+ assert_equal 'No deploy configuration found for potrzebie', error.message
78
+ end
79
+
80
+ def test_run_without_dst
81
+ # Create config
82
+ File.open('config.yaml', 'w') do |io|
83
+ io.write "---\n"
84
+ io.write "deploy:\n"
85
+ io.write " default:\n"
86
+ io.write " foo: bar\n"
87
+ end
88
+
89
+ # Create site
90
+ rsync = Nanoc3::Extra::Deployers::Rsync.new
91
+
92
+ # Try running
93
+ error = assert_raises(RuntimeError) do
94
+ rsync.run
95
+ end
96
+
97
+ # Check error message
98
+ assert_equal 'No dst found in deployment configuration', error.message
99
+ end
100
+
101
+ def test_run_with_erroneous_dst
102
+ # Create config
103
+ File.open('config.yaml', 'w') do |io|
104
+ io.write "---\n"
105
+ io.write "deploy:\n"
106
+ io.write " default:\n"
107
+ io.write " dst: asdf/\n"
108
+ end
109
+
110
+ # Create site
111
+ rsync = Nanoc3::Extra::Deployers::Rsync.new
112
+
113
+ # Try running
114
+ error = assert_raises(RuntimeError) do
115
+ rsync.run
116
+ end
117
+
118
+ # Check error message
119
+ assert_equal 'dst requires no trailing slash', error.message
120
+ end
121
+
122
+ def test_run_with_custom_deploy_config_string
123
+ # Create config
124
+ File.open('config.yaml', 'w') do |io|
125
+ io.write "---\n"
126
+ io.write "deploy:\n"
127
+ io.write " foobar:\n"
128
+ io.write " dst: asdf\n"
129
+ end
130
+
131
+ # Create site
132
+ rsync = Nanoc3::Extra::Deployers::Rsync.new
133
+
134
+ # Mock run_shell_cmd
135
+ def rsync.run_shell_cmd(args)
136
+ @shell_cms_args = args
137
+ end
138
+
139
+ # Run
140
+ rsync.run(:config_name => 'foobar')
141
+
142
+ # Check args
143
+ default_options = Nanoc3::Extra::Deployers::Rsync::DEFAULT_OPTIONS
144
+ assert_equal(
145
+ [ 'rsync', default_options, File.expand_path('output') + '/', 'asdf' ].flatten,
146
+ rsync.instance_eval { @shell_cms_args }
147
+ )
148
+ end
149
+
150
+ def test_run_with_custom_deploy_config_symbol
151
+ # Create config
152
+ File.open('config.yaml', 'w') do |io|
153
+ io.write "---\n"
154
+ io.write "deploy:\n"
155
+ io.write " foobar:\n"
156
+ io.write " dst: asdf\n"
157
+ end
158
+
159
+ # Create site
160
+ rsync = Nanoc3::Extra::Deployers::Rsync.new
161
+
162
+ # Mock run_shell_cmd
163
+ def rsync.run_shell_cmd(args)
164
+ @shell_cms_args = args
165
+ end
166
+
167
+ # Run
168
+ rsync.run(:config_name => :foobar)
169
+
170
+ # Check args
171
+ default_options = Nanoc3::Extra::Deployers::Rsync::DEFAULT_OPTIONS
172
+ assert_equal(
173
+ [ 'rsync', default_options, File.expand_path('output') + '/', 'asdf' ].flatten,
174
+ rsync.instance_eval { @shell_cms_args }
175
+ )
176
+ end
177
+
178
+ def test_run_everything_okay
179
+ # Create config
180
+ File.open('config.yaml', 'w') do |io|
181
+ io.write "---\n"
182
+ io.write "deploy:\n"
183
+ io.write " default:\n"
184
+ io.write " dst: asdf\n"
185
+ end
186
+
187
+ # Create site
188
+ rsync = Nanoc3::Extra::Deployers::Rsync.new
189
+
190
+ # Mock run_shell_cmd
191
+ def rsync.run_shell_cmd(args)
192
+ @shell_cms_args = args
193
+ end
194
+
195
+ # Run
196
+ rsync.run
197
+
198
+ # Check args
199
+ default_options = Nanoc3::Extra::Deployers::Rsync::DEFAULT_OPTIONS
200
+ assert_equal(
201
+ [ 'rsync', default_options, File.expand_path('output') + '/', 'asdf' ].flatten,
202
+ rsync.instance_eval { @shell_cms_args }
203
+ )
204
+ end
205
+
206
+ def test_run_everything_okay_dry
207
+ # Create config
208
+ File.open('config.yaml', 'w') do |io|
209
+ io.write "---\n"
210
+ io.write "deploy:\n"
211
+ io.write " default:\n"
212
+ io.write " dst: asdf\n"
213
+ end
214
+
215
+ # Create site
216
+ rsync = Nanoc3::Extra::Deployers::Rsync.new
217
+
218
+ # Mock run_shell_cmd
219
+ def rsync.run_shell_cmd(args)
220
+ @shell_cms_args = args
221
+ end
222
+
223
+ # Run
224
+ rsync.run(:dry_run => true)
225
+
226
+ # Check args
227
+ default_options = Nanoc3::Extra::Deployers::Rsync::DEFAULT_OPTIONS
228
+ assert_equal(
229
+ [ 'echo', 'rsync', default_options, File.expand_path('output') + '/', 'asdf' ].flatten,
230
+ rsync.instance_eval { @shell_cms_args }
231
+ )
232
+ end
233
+
234
+ end