nanoc-filesystem-i18n 0.1.0 → 0.2.0

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.
@@ -1,61 +0,0 @@
1
- require 'helper'
2
-
3
- class TestNanocFilesystemI18n < MiniTest::Unit::TestCase
4
-
5
- include Nanoc3::TestHelpers
6
-
7
- def new_data_source(params=nil)
8
- # Mock site
9
- site = Nanoc3::Site.new({})
10
-
11
- # Create data source
12
- data_source = Nanoc3::DataSources::FilesystemI18n.new(site, nil, nil, params)
13
- data_source.up
14
-
15
- # Done
16
- data_source
17
- end
18
-
19
- def test_create_object_not_at_root
20
- # Create item
21
- data_source = new_data_source
22
- data_source.send(:create_object, 'foobar', 'content here', { :foo => 'bar' }, '/asdf/')
23
-
24
- # Check file existance
25
- assert File.directory?('foobar')
26
- assert !File.directory?('foobar/content')
27
- assert !File.directory?('foobar/asdf')
28
- assert File.file?('foobar/asdf.yaml')
29
- assert File.file?('foobar/asdf.html')
30
-
31
- # Check file meta
32
- expected = "--- \nfoo: bar\n"
33
- assert_equal expected, File.read('foobar/asdf.yaml')
34
-
35
- # Check file content
36
- expected = "content here"
37
- assert_equal expected, File.read('foobar/asdf.html')
38
- end
39
-
40
- def test_create_object_at_root
41
- # Create item
42
- data_source = new_data_source
43
- data_source.send(:create_object, 'foobar', 'content here', { :foo => 'bar' }, '/')
44
-
45
- # Check file existance
46
- assert File.directory?('foobar')
47
- assert !File.directory?('foobar/index')
48
- assert !File.directory?('foobar/foobar')
49
- assert File.file?('foobar/index.yaml')
50
- assert File.file?('foobar/index.html')
51
-
52
- # Check file meta
53
- expected = "--- \nfoo: bar\n"
54
- assert_equal expected, File.read('foobar/index.yaml')
55
-
56
- # Check file content
57
- expected = "content here"
58
- assert_equal expected, File.read('foobar/index.html')
59
- end
60
-
61
- end
@@ -1,461 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'test/helper'
4
-
5
- class Nanoc3::DataSources::FilesystemUnifiedTest < 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
- # I18n: call `up` to setup locale config
15
- data_source = Nanoc3::DataSources::FilesystemI18n.new(site, nil, nil, params)
16
- data_source.up
17
-
18
- # Done
19
- data_source
20
- end
21
-
22
- def test_load_objects
23
- # Create data source
24
- data_source = new_data_source
25
-
26
- # Create a fake class
27
- klass = Class.new do
28
- attr_reader :stuff
29
- def initialize(*stuff)
30
- @stuff = stuff
31
- end
32
- def ==(other)
33
- @stuff == other.stuff
34
- end
35
- end
36
-
37
- # Create sample files
38
- FileUtils.mkdir_p('foo')
39
- FileUtils.mkdir_p('foo/a/b')
40
- File.open('foo/bar.html', 'w') { |io| io.write("---\nnum: 1\n---\ntest 1") }
41
- File.open('foo/b.c.html', 'w') { |io| io.write("---\nnum: 2\n---\ntest 2") }
42
- File.open('foo/a/b/c.html', 'w') { |io| io.write("---\nnum: 3\n---\ntest 3") }
43
- File.open('foo/ugly.html~', 'w') { |io| io.write("---\nnum: 4\n---\ntest 4") }
44
- File.open('foo/ugly.html.orig', 'w') { |io| io.write("---\nnum: 5\n---\ntest 5") }
45
- File.open('foo/ugly.html.rej', 'w') { |io| io.write("---\nnum: 6\n---\ntest 6") }
46
- File.open('foo/ugly.html.bak', 'w') { |io| io.write("---\nnum: 7\n---\ntest 7") }
47
-
48
- # Get expected and actual output
49
- expected_out = [
50
- klass.new(
51
- 'test 1',
52
- { 'num' => 1, :filename => 'foo/bar.html', :extension => 'html', :file => File.open('foo/bar.html') },
53
- '/bar/',
54
- :binary => false, :mtime => File.mtime('foo/bar.html')
55
- ),
56
- klass.new(
57
- 'test 2',
58
- { 'num' => 2, :filename => 'foo/b.c.html', :extension => 'c.html', :file => File.open('foo/b.c.html') },
59
- '/b/',
60
- :binary => false, :mtime => File.mtime('foo/b.c.html')
61
- ),
62
- klass.new(
63
- 'test 3',
64
- { 'num' => 3, :filename => 'foo/a/b/c.html', :extension => 'html', :file => File.open('foo/a/b/c.html') },
65
- '/a/b/c/',
66
- :binary => false, :mtime => File.mtime('foo/a/b/c.html')
67
- )
68
- ]
69
- actual_out = data_source.send(:load_objects, 'foo', 'The Foo', klass).sort_by { |i| i.stuff[0] }
70
-
71
- # Check
72
- (0..expected_out.size-1).each do |i|
73
- assert_equal expected_out[i].stuff[0], actual_out[i].stuff[0], 'content must match'
74
- assert_equal expected_out[i].stuff[2], actual_out[i].stuff[2], 'identifier must match'
75
- assert_equal expected_out[i].stuff[3][:mtime], actual_out[i].stuff[3][:mtime], 'mtime must match'
76
- assert_equal expected_out[i].stuff[1][:file].path, actual_out[i].stuff[1][:file].path, 'file paths must match'
77
- [ 'num', :filename, :extension ].each do |key|
78
- assert_equal expected_out[i].stuff[1][key], actual_out[i].stuff[1][key], "attribute key #{key} must match"
79
- end
80
- end
81
- end
82
-
83
- def test_load_binary_objects
84
- # Create data source
85
- data_source = new_data_source
86
-
87
- # Create sample files
88
- FileUtils.mkdir_p('foo')
89
- File.open('foo/stuff.dat', 'w') { |io| io.write("random binary data") }
90
-
91
- # Load
92
- items = data_source.send(:load_objects, 'foo', 'item', Nanoc3::Item)
93
-
94
- # Check
95
- assert_equal 1, items.size
96
- assert items[0].binary?
97
- assert_equal 'foo/stuff.dat', items[0].raw_filename
98
- assert_nil items[0].raw_content
99
- end
100
-
101
- def test_load_binary_layouts
102
- # Create data source
103
- data_source = new_data_source
104
-
105
- # Create sample files
106
- FileUtils.mkdir_p('foo')
107
- File.open('foo/stuff.dat', 'w') { |io| io.write("random binary data") }
108
-
109
- # Load
110
- items = data_source.send(:load_objects, 'foo', 'item', Nanoc3::Layout)
111
-
112
- # Check
113
- assert_equal 1, items.size
114
- assert_equal 'random binary data', items[0].raw_content
115
- end
116
-
117
- def test_identifier_for_filename_allowing_periods_in_identifiers
118
- # Create data source
119
- data_source = new_data_source(:allow_periods_in_identifiers => true)
120
-
121
- # Get input and expected output
122
- expected = {
123
- '/foo' => '/foo/',
124
- '/foo.html' => '/foo/',
125
- '/foo/index.html' => '/foo/',
126
- '/foo.entry.html' => '/foo.entry/'
127
- }
128
-
129
- # Check
130
- expected.each_pair do |input, expected_output|
131
- actual_output = data_source.send(:identifier_for_filename, input)
132
- assert_equal(
133
- expected_output, actual_output,
134
- "identifier_for_filename(#{input.inspect}) should equal #{expected_output.inspect}, not #{actual_output.inspect}"
135
- )
136
- end
137
- end
138
-
139
- def test_identifier_for_filename_disallowing_periods_in_identifiers
140
- # Create data source
141
- data_source = new_data_source
142
-
143
- # Get input and expected output
144
- expected = {
145
- '/foo' => '/foo/',
146
- '/foo.html' => '/foo/',
147
- '/foo/index.html' => '/foo/',
148
- '/foo.html.erb' => '/foo/'
149
- }
150
-
151
- # Check
152
- expected.each_pair do |input, expected_output|
153
- actual_output = data_source.send(:identifier_for_filename, input)
154
- assert_equal(
155
- expected_output, actual_output,
156
- "identifier_for_filename(#{input.inspect}) should equal #{expected_output.inspect}, not #{actual_output.inspect}"
157
- )
158
- end
159
- end
160
-
161
- def test_identifier_for_filename_with_subfilename_allowing_periods_in_identifiers
162
- # Create data source
163
- data_source = new_data_source(:allow_periods_in_identifiers => true)
164
-
165
- # Build directory
166
- FileUtils.mkdir_p('foo')
167
- File.open('foo/bar.yaml', 'w') { |io| io.write('test') }
168
- File.open('foo/bar.html', 'w') { |io| io.write('test') }
169
- File.open('foo/quxbar.yaml', 'w') { |io| io.write('test') }
170
- File.open('foo/quxbar.html', 'w') { |io| io.write('test') }
171
- File.open('foo/barqux.yaml', 'w') { |io| io.write('test') }
172
- File.open('foo/barqux.html', 'w') { |io| io.write('test') }
173
- File.open('foo/quxbarqux.yaml', 'w') { |io| io.write('test') }
174
- File.open('foo/quxbarqux.html', 'w') { |io| io.write('test') }
175
- File.open('foo/qux.bar.yaml', 'w') { |io| io.write('test') }
176
- File.open('foo/qux.bar.html', 'w') { |io| io.write('test') }
177
- File.open('foo/bar.qux.yaml', 'w') { |io| io.write('test') }
178
- File.open('foo/bar.qux.html', 'w') { |io| io.write('test') }
179
- File.open('foo/qux.bar.qux.yaml', 'w') { |io| io.write('test') }
180
- File.open('foo/qux.bar.qux.html', 'w') { |io| io.write('test') }
181
-
182
- # Check content filename
183
- {
184
- 'foo/bar.yaml' => '/foo/bar/',
185
- 'foo/quxbar.yaml' => '/foo/quxbar/',
186
- 'foo/barqux.yaml' => '/foo/barqux/',
187
- 'foo/quxbarqux.yaml' => '/foo/quxbarqux/',
188
- 'foo/qux.bar.yaml' => '/foo/qux.bar/',
189
- 'foo/bar.qux.yaml' => '/foo/bar.qux/',
190
- 'foo/qux.bar.qux.yaml' => '/foo/qux.bar.qux/'
191
- }.each_pair do |meta_filename, expected_identifier|
192
- assert_equal(
193
- expected_identifier,
194
- data_source.instance_eval { identifier_for_filename(meta_filename) }
195
- )
196
- end
197
- end
198
-
199
- def test_identifier_for_filename_with_subfilename_disallowing_periods_in_identifiers
200
- # Create data source
201
- data_source = new_data_source
202
-
203
- # Build directory
204
- FileUtils.mkdir_p('foo')
205
- File.open('foo/bar.yaml', 'w') { |io| io.write('test') }
206
- File.open('foo/bar.html', 'w') { |io| io.write('test') }
207
- File.open('foo/quxbar.yaml', 'w') { |io| io.write('test') }
208
- File.open('foo/quxbar.html', 'w') { |io| io.write('test') }
209
- File.open('foo/barqux.yaml', 'w') { |io| io.write('test') }
210
- File.open('foo/barqux.html', 'w') { |io| io.write('test') }
211
- File.open('foo/quxbarqux.yaml', 'w') { |io| io.write('test') }
212
- File.open('foo/quxbarqux.html', 'w') { |io| io.write('test') }
213
- File.open('foo/qux.bar.yaml', 'w') { |io| io.write('test') }
214
- File.open('foo/qux.bar.html', 'w') { |io| io.write('test') }
215
- File.open('foo/bar.qux.yaml', 'w') { |io| io.write('test') }
216
- File.open('foo/bar.qux.html', 'w') { |io| io.write('test') }
217
- File.open('foo/qux.bar.qux.yaml', 'w') { |io| io.write('test') }
218
- File.open('foo/qux.bar.qux.html', 'w') { |io| io.write('test') }
219
-
220
- # Check content filename
221
- {
222
- 'foo/bar.yaml' => '/foo/bar/',
223
- 'foo/quxbar.yaml' => '/foo/quxbar/',
224
- 'foo/barqux.yaml' => '/foo/barqux/',
225
- 'foo/quxbarqux.yaml' => '/foo/quxbarqux/',
226
- 'foo/qux.bar.yaml' => '/foo/qux/',
227
- 'foo/bar.qux.yaml' => '/foo/bar/',
228
- 'foo/qux.bar.qux.yaml' => '/foo/qux/'
229
- }.each_pair do |meta_filename, expected_identifier|
230
- assert_equal(
231
- expected_identifier,
232
- data_source.instance_eval { identifier_for_filename(meta_filename) }
233
- )
234
- end
235
- end
236
-
237
- def test_load_objects_allowing_periods_in_identifiers
238
- # Create data source
239
- data_source = new_data_source(:allow_periods_in_identifiers => true)
240
-
241
- # Create a fake class
242
- klass = Class.new do
243
- attr_reader :stuff
244
- def initialize(*stuff)
245
- @stuff = stuff
246
- end
247
- def ==(other)
248
- @stuff == other.stuff
249
- end
250
- end
251
-
252
- # Create sample files
253
- FileUtils.mkdir_p('foo')
254
- FileUtils.mkdir_p('foo/a/b')
255
- File.open('foo/a/b/c.yaml', 'w') { |io| io.write("---\nnum: 1\n") }
256
- File.open('foo/b.c.yaml', 'w') { |io| io.write("---\nnum: 2\n") }
257
- File.open('foo/b.c.html', 'w') { |io| io.write("test 2") }
258
- File.open('foo/car.html', 'w') { |io| io.write("test 3") }
259
- File.open('foo/ugly.yaml~', 'w') { |io| io.write("blah") }
260
- File.open('foo/ugly.html~', 'w') { |io| io.write("blah") }
261
- File.open('foo/ugly.html.orig', 'w') { |io| io.write("blah") }
262
- File.open('foo/ugly.html.rej', 'w') { |io| io.write("blah") }
263
- File.open('foo/ugly.html.bak', 'w') { |io| io.write("blah") }
264
-
265
- # Get expected output
266
- expected_out = [
267
- klass.new(
268
- '',
269
- {
270
- 'num' => 1,
271
- :content_filename => nil,
272
- :meta_filename => 'foo/a/b/c.yaml',
273
- :extension => nil,
274
- :file => nil
275
- },
276
- '/a/b/c/',
277
- :binary => false, :mtime => File.mtime('foo/a/b/c.yaml')
278
- ),
279
- klass.new(
280
- 'test 2',
281
- {
282
- 'num' => 2,
283
- :content_filename => 'foo/b.c.html',
284
- :meta_filename => 'foo/b.c.yaml',
285
- :extension => 'html',
286
- :file => File.open('foo/b.c.html')
287
- },
288
- '/b.c/',
289
- :binary => false, :mtime => File.mtime('foo/b.c.html') > File.mtime('foo/b.c.yaml') ? File.mtime('foo/b.c.html') : File.mtime('foo/b.c.yaml')
290
- ),
291
- klass.new(
292
- 'test 3',
293
- {
294
- :content_filename => 'foo/car.html',
295
- :meta_filename => nil,
296
- :extension => 'html',
297
- :file => File.open('foo/car.html')
298
- },
299
- '/car/',
300
- :binary => false, :mtime => File.mtime('foo/car.html')
301
- )
302
- ]
303
-
304
- # Get actual output ordered by identifier
305
- actual_out = data_source.send(:load_objects, 'foo', 'The Foo', klass).sort_by { |i| i.stuff[2] }
306
-
307
- # Check
308
- (0..expected_out.size-1).each do |i|
309
- assert_equal expected_out[i].stuff[0], actual_out[i].stuff[0], 'content must match'
310
- assert_equal expected_out[i].stuff[2], actual_out[i].stuff[2], 'identifier must match'
311
- assert_equal expected_out[i].stuff[3][:mtime], actual_out[i].stuff[3][:mtime], 'mtime must match'
312
-
313
- actual_file = actual_out[i].stuff[1][:file]
314
- expected_file = expected_out[i].stuff[1][:file]
315
- assert(actual_file == expected_file || actual_file.path == expected_file.path, 'file paths must match')
316
-
317
- [ 'num', :content_filename, :meta_filename, :extension ].each do |key|
318
- assert_equal expected_out[i].stuff[1][key], actual_out[i].stuff[1][key], "attribute key #{key} must match"
319
- end
320
- end
321
- end
322
-
323
- def test_load_objects_disallowing_periods_in_identifiers
324
- # Create data source
325
- data_source = new_data_source
326
-
327
- # Create a fake class
328
- klass = Class.new do
329
- attr_reader :stuff
330
- def initialize(*stuff)
331
- @stuff = stuff
332
- end
333
- def ==(other)
334
- @stuff == other.stuff
335
- end
336
- end
337
-
338
- # Create sample files
339
- FileUtils.mkdir_p('foo')
340
- FileUtils.mkdir_p('foo/a/b')
341
- File.open('foo/a/b/c.yaml', 'w') { |io| io.write("---\nnum: 1\n") }
342
- File.open('foo/b.yaml', 'w') { |io| io.write("---\nnum: 2\n") }
343
- File.open('foo/b.html.erb', 'w') { |io| io.write("test 2") }
344
- File.open('foo/car.html', 'w') { |io| io.write("test 3") }
345
- File.open('foo/ugly.yaml~', 'w') { |io| io.write("blah") }
346
- File.open('foo/ugly.html~', 'w') { |io| io.write("blah") }
347
- File.open('foo/ugly.html.orig', 'w') { |io| io.write("blah") }
348
- File.open('foo/ugly.html.rej', 'w') { |io| io.write("blah") }
349
- File.open('foo/ugly.html.bak', 'w') { |io| io.write("blah") }
350
-
351
- # Get expected output
352
- expected_out = [
353
- klass.new(
354
- '',
355
- {
356
- 'num' => 1,
357
- :content_filename => nil,
358
- :meta_filename => 'foo/a/b/c.yaml',
359
- :extension => nil,
360
- :file => nil
361
- },
362
- '/a/b/c/',
363
- :binary => false, :mtime => File.mtime('foo/a/b/c.yaml')
364
- ),
365
- klass.new(
366
- 'test 2',
367
- {
368
- 'num' => 2,
369
- :content_filename => 'foo/b.html.erb',
370
- :meta_filename => 'foo/b.yaml',
371
- :extension => 'html.erb',
372
- :file => File.open('foo/b.html.erb')
373
- },
374
- '/b/',
375
- :binary => false, :mtime => File.mtime('foo/b.html.erb') > File.mtime('foo/b.yaml') ? File.mtime('foo/b.html.erb') : File.mtime('foo/b.yaml')
376
- ),
377
- klass.new(
378
- 'test 3',
379
- {
380
- :content_filename => 'foo/car.html',
381
- :meta_filename => nil,
382
- :extension => 'html',
383
- :file => File.open('foo/car.html')
384
- },
385
- '/car/',
386
- :binary => false, :mtime => File.mtime('foo/car.html')
387
- )
388
- ]
389
-
390
- # Get actual output ordered by identifier
391
- actual_out = data_source.send(:load_objects, 'foo', 'The Foo', klass).sort_by { |i| i.stuff[2] }
392
-
393
- # Check
394
- (0..expected_out.size-1).each do |i|
395
- assert_equal expected_out[i].stuff[0], actual_out[i].stuff[0], 'content must match'
396
- assert_equal expected_out[i].stuff[2], actual_out[i].stuff[2], 'identifier must match'
397
- assert_equal expected_out[i].stuff[3][:mtime], actual_out[i].stuff[3][:mtime], 'mtime must match'
398
-
399
- actual_file = actual_out[i].stuff[1][:file]
400
- expected_file = expected_out[i].stuff[1][:file]
401
- assert(actual_file == expected_file || actual_file.path == expected_file.path, 'file paths must match')
402
-
403
- [ 'num', :content_filename, :meta_filename, :extension ].each do |key|
404
- assert_equal expected_out[i].stuff[1][key], actual_out[i].stuff[1][key], "attribute key #{key} must match"
405
- end
406
- end
407
- end
408
-
409
- def test_create_object_allowing_periods_in_identifiers
410
- # Create data source
411
- data_source = new_data_source(:allow_periods_in_identifiers => true)
412
-
413
- # Create object without period
414
- data_source.send(:create_object, 'foo', 'some content', { :some => 'attributes' }, '/asdf/')
415
- assert File.file?('foo/asdf.html')
416
- data = data_source.send(:parse, 'foo/asdf.html', 'foo/asdf.yaml', 'moo', false)
417
- assert_equal({ 'some' => 'attributes' }, data[0])
418
- assert_equal('some content', data[1])
419
-
420
- # Create object with period
421
- data_source.send(:create_object, 'foo', 'some content', { :some => 'attributes' }, '/as.df/')
422
- assert File.file?('foo/as.df.html')
423
- data = data_source.send(:parse, 'foo/as.df.html', 'foo/asdf.yaml', 'moo', false)
424
- assert_equal({ 'some' => 'attributes' }, data[0])
425
- assert_equal('some content', data[1])
426
- end
427
-
428
- def test_create_object_disallowing_periods_in_identifiers
429
- # Create data source
430
- data_source = new_data_source
431
-
432
- # Create object without period
433
- data_source.send(:create_object, 'foo', 'some content', { :some => 'attributes' }, '/asdf/')
434
- assert File.file?('foo/asdf.html')
435
- data = data_source.send(:parse, 'foo/asdf.html', 'foo/asdf.yaml', 'moo', false)
436
- assert_equal({ 'some' => 'attributes' }, data[0])
437
- assert_equal('some content', data[1])
438
-
439
- # Create object with period
440
- assert_raises(RuntimeError) do
441
- data_source.send(:create_object, 'foo', 'some content', { :some => 'attributes' }, '/as.df/')
442
- end
443
- end
444
-
445
- def test_compile_huge_site
446
- # Create data source
447
- data_source = new_data_source
448
-
449
- # Create a lot of items
450
- count = Process.getrlimit(Process::RLIMIT_NOFILE)[0] + 5
451
- count.times do |i|
452
- FileUtils.mkdir_p("content/#{i}")
453
- File.open("content/#{i}/#{i}.html", 'w') { |io| io << "This is item #{i}." }
454
- File.open("content/#{i}/#{i}.yaml", 'w') { |io| io << "title: Item #{i}" }
455
- end
456
-
457
- # Read all items
458
- data_source.items
459
- end
460
-
461
- end