review 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -2
- data/ChangeLog +65 -0
- data/Gemfile +5 -0
- data/README.rdoc +6 -1
- data/Rakefile +14 -28
- data/bin/review-check +9 -21
- data/bin/review-compile +45 -12
- data/bin/review-epubmaker +477 -220
- data/bin/review-epubmaker-ng +5 -14
- data/bin/review-index +4 -2
- data/bin/review-init +94 -0
- data/bin/review-pdfmaker +70 -287
- data/bin/review-preproc +5 -2
- data/bin/review-vol +4 -11
- data/debian/changelog +3 -3
- data/debian/copyright +5 -3
- data/debian/docs +1 -0
- data/doc/format.rdoc +57 -11
- data/doc/quickstart.rdoc +4 -4
- data/doc/sample.yaml +11 -7
- data/lib/epubmaker.rb +1 -1
- data/lib/epubmaker/epubv2.rb +26 -27
- data/lib/epubmaker/epubv3.rb +13 -13
- data/lib/epubmaker/producer.rb +1 -1
- data/lib/review.rb +3 -4
- data/lib/review/book.rb +17 -581
- data/lib/review/book/base.rb +247 -0
- data/lib/review/book/chapter.rb +81 -0
- data/lib/review/book/compilable.rb +163 -0
- data/lib/review/book/index.rb +339 -0
- data/lib/review/book/page_metric.rb +38 -0
- data/lib/review/book/parameters.rb +97 -0
- data/lib/review/book/part.rb +44 -0
- data/lib/review/book/volume.rb +65 -0
- data/lib/review/builder.rb +34 -40
- data/lib/review/compiler.rb +32 -13
- data/lib/review/configure.rb +38 -0
- data/lib/review/ewbbuilder.rb +23 -21
- data/lib/review/extentions.rb +3 -0
- data/lib/review/extentions/object.rb +9 -0
- data/lib/review/{compat.rb → extentions/string.rb} +11 -0
- data/lib/review/htmlbuilder.rb +162 -74
- data/lib/review/htmlutils.rb +28 -1
- data/lib/review/i18n.yaml +11 -0
- data/lib/review/idgxmlbuilder.rb +119 -35
- data/lib/review/inaobuilder.rb +355 -0
- data/lib/review/latexbuilder.rb +133 -59
- data/lib/review/latexutils.rb +15 -6
- data/lib/review/makerhelper.rb +59 -0
- data/lib/review/markdownbuilder.rb +129 -0
- data/lib/review/preprocessor.rb +20 -7
- data/lib/review/review.tex.erb +250 -0
- data/lib/review/textutils.rb +28 -3
- data/lib/review/tocparser.rb +20 -12
- data/lib/review/tocprinter.rb +7 -3
- data/lib/review/topbuilder.rb +44 -27
- data/lib/review/version.rb +3 -0
- data/review.gemspec +20 -117
- data/test/book_test_helper.rb +35 -0
- data/test/sample-book/README.md +5 -0
- data/test/sample-book/src/CHAPS +2 -0
- data/test/sample-book/src/PREDEF +1 -0
- data/test/sample-book/src/Rakefile +26 -0
- data/test/sample-book/src/_cover.html +3 -0
- data/test/sample-book/src/ch01.re +71 -0
- data/test/sample-book/src/ch02.re +3 -0
- data/test/sample-book/src/config.yml +55 -0
- data/test/sample-book/src/images/ch01-imgsample.jpg +0 -0
- data/test/sample-book/src/images/cover.jpg +0 -0
- data/test/sample-book/src/main.css +251 -0
- data/test/sample-book/src/preface.re +15 -0
- data/test/sample-book/src/sty/jumoline.sty +310 -0
- data/test/sample-book/src/sty/samplemacro.sty +21 -0
- data/test/sample-book/src/vendor/jumoline/README +29 -0
- data/test/sample-book/src/vendor/jumoline/jumoline.dtx +2988 -0
- data/test/sample-book/src/vendor/jumoline/jumoline.ins +6 -0
- data/test/test_book.rb +26 -646
- data/test/test_book_chapter.rb +418 -0
- data/test/test_book_parameter.rb +42 -0
- data/test/test_book_part.rb +53 -0
- data/test/test_builder.rb +17 -10
- data/test/test_compiler.rb +46 -0
- data/test/test_epubmaker.rb +1 -1
- data/test/test_epubmaker_cmd.rb +36 -0
- data/test/test_helper.rb +17 -0
- data/test/test_htmlbuilder.rb +156 -24
- data/test/test_htmlutils.rb +4 -0
- data/test/test_i18n.rb +6 -2
- data/test/test_idgxmlbuilder.rb +33 -11
- data/test/test_inaobuilder.rb +247 -0
- data/test/test_index.rb +31 -0
- data/test/test_latexbuilder.rb +115 -35
- data/test/test_makerhelper.rb +50 -0
- data/test/test_pdfmaker_cmd.rb +36 -0
- data/test/test_preprocessor.rb +7 -7
- data/test/test_topbuilder.rb +6 -7
- data/test/test_uuid.rb +1 -0
- metadata +117 -12
- data/lib/review/index.rb +0 -323
- data/lib/review/volume.rb +0 -66
data/test/test_book.rb
CHANGED
@@ -1,40 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'test_helper'
|
4
|
-
require 'review/book'
|
5
|
-
|
6
|
-
require 'stringio'
|
7
|
-
require 'tempfile'
|
8
|
-
require 'tmpdir'
|
9
|
-
|
10
|
-
include ReVIEW
|
11
|
-
|
12
|
-
module BookTestHelper
|
13
|
-
def mktmpbookdir(files = {})
|
14
|
-
created_files = {}
|
15
|
-
Dir.mktmpdir do |dir|
|
16
|
-
files.each_pair do |basename, content|
|
17
|
-
path = File.join(dir, basename)
|
18
|
-
File.open(path, 'w') {|o| o.print content }
|
19
|
-
created_files[basename] = path
|
20
|
-
end
|
21
|
-
book = Book.new(dir)
|
22
|
-
yield(dir, book, created_files)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def get_instance_variables(obj)
|
27
|
-
obj.instance_variables.inject({}) do |memo, name|
|
28
|
-
value = obj.instance_variable_get(name)
|
29
|
-
if value.instance_variables.empty?
|
30
|
-
memo[name] = value
|
31
|
-
else
|
32
|
-
memo[name] = get_instance_variables(value)
|
33
|
-
end
|
34
|
-
memo
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
2
|
+
require 'book_test_helper'
|
38
3
|
|
39
4
|
class BookTest < Test::Unit::TestCase
|
40
5
|
include BookTestHelper
|
@@ -90,7 +55,7 @@ class BookTest < Test::Unit::TestCase
|
|
90
55
|
def test_s_load
|
91
56
|
Dir.mktmpdir do |dir|
|
92
57
|
book = Book.load(dir)
|
93
|
-
defs = get_instance_variables(Parameters.default)
|
58
|
+
defs = get_instance_variables(Book::Parameters.default)
|
94
59
|
pars = get_instance_variables(book.instance_eval { @parameters })
|
95
60
|
assert_equal defs, pars
|
96
61
|
end
|
@@ -140,13 +105,13 @@ class BookTest < Test::Unit::TestCase
|
|
140
105
|
end
|
141
106
|
|
142
107
|
def test_ext
|
143
|
-
book = Book.new(File.dirname(__FILE__))
|
108
|
+
book = Book::Base.new(File.dirname(__FILE__))
|
144
109
|
assert_equal '.re', book.ext
|
145
110
|
end
|
146
111
|
|
147
112
|
def test_read_CHAPS
|
148
113
|
Dir.mktmpdir do |dir|
|
149
|
-
book = Book.new(dir)
|
114
|
+
book = Book::Base.new(dir)
|
150
115
|
assert_equal "", book.read_CHAPS
|
151
116
|
|
152
117
|
chaps_path = File.join(dir, 'CHAPS')
|
@@ -172,13 +137,13 @@ class BookTest < Test::Unit::TestCase
|
|
172
137
|
|
173
138
|
def test_read_PART
|
174
139
|
Dir.mktmpdir do |dir|
|
175
|
-
book = Book.new(dir)
|
140
|
+
book = Book::Base.new(dir)
|
176
141
|
assert !book.part_exist?
|
177
142
|
assert_raises Errno::ENOENT do # XXX: OK?
|
178
143
|
book.read_PART
|
179
144
|
end
|
180
145
|
|
181
|
-
chaps_path = File.join(dir, '
|
146
|
+
chaps_path = File.join(dir, 'PART')
|
182
147
|
chaps_content = "abc\n"
|
183
148
|
File.open(chaps_path, 'w') {|o| o.print chaps_content }
|
184
149
|
|
@@ -192,7 +157,7 @@ class BookTest < Test::Unit::TestCase
|
|
192
157
|
|
193
158
|
def test_read_bib
|
194
159
|
Dir.mktmpdir do |dir|
|
195
|
-
book = Book.new(dir)
|
160
|
+
book = Book::Base.new(dir)
|
196
161
|
assert !book.bib_exist?
|
197
162
|
assert_raises Errno::ENOENT do # XXX: OK?
|
198
163
|
book.read_bib
|
@@ -207,7 +172,7 @@ class BookTest < Test::Unit::TestCase
|
|
207
172
|
end
|
208
173
|
|
209
174
|
def test_setParameter
|
210
|
-
book = Book.new(File.dirname(__FILE__))
|
175
|
+
book = Book::Base.new(File.dirname(__FILE__))
|
211
176
|
book.param = :test
|
212
177
|
assert_equal :test, book.instance_eval {@param}
|
213
178
|
end
|
@@ -223,7 +188,6 @@ class BookTest < Test::Unit::TestCase
|
|
223
188
|
assert_equal 1, parts.size
|
224
189
|
|
225
190
|
assert_equal 1, parts[0].number
|
226
|
-
assert_equal 'chapter1.re', parts[0].name # XXX: OK?
|
227
191
|
assert_equal 2, parts[0].chapters.size
|
228
192
|
chaps = parts[0].chapters.map {|ch| [ch.number, ch.name, ch.path] }
|
229
193
|
expect = [
|
@@ -248,7 +212,6 @@ EOC
|
|
248
212
|
assert_equal 3, parts.size
|
249
213
|
|
250
214
|
assert_equal 1, parts[0].number
|
251
|
-
assert_equal 'part1_chapter1.re', parts[0].name
|
252
215
|
assert_equal 2, parts[0].chapters.size
|
253
216
|
chaps = parts[0].chapters.map {|ch| [ch.number, ch.name, ch.path] }
|
254
217
|
expect = [
|
@@ -258,7 +221,6 @@ EOC
|
|
258
221
|
assert_equal expect, chaps
|
259
222
|
|
260
223
|
assert_equal 2, parts[1].number
|
261
|
-
assert_equal 'part1_chapter2.re', parts[1].name # XXX: OK?
|
262
224
|
assert_equal 3, parts[1].chapters.size
|
263
225
|
chaps = parts[1].chapters.map {|ch| [ch.number, ch.name, ch.path] }
|
264
226
|
expect = [
|
@@ -269,7 +231,6 @@ EOC
|
|
269
231
|
assert_equal expect, chaps
|
270
232
|
|
271
233
|
assert_equal 3, parts[2].number
|
272
|
-
assert_equal '', parts[2].name # XXX: OK?
|
273
234
|
assert_equal 1, parts[2].chapters.size
|
274
235
|
chaps = parts[2].chapters.map {|ch| [ch.number, ch.name, ch.path] }
|
275
236
|
expect = [
|
@@ -318,8 +279,8 @@ EOC
|
|
318
279
|
].each do |n_parts, chaps_text, parts_text, part_names|
|
319
280
|
n_test += 1
|
320
281
|
Dir.mktmpdir do |dir|
|
321
|
-
params = Parameters.new(:part_file => 'PARTS')
|
322
|
-
book = Book.new(dir, params)
|
282
|
+
params = Book::Parameters.new(:part_file => 'PARTS')
|
283
|
+
book = Book::Base.new(dir, params)
|
323
284
|
chaps_path = File.join(dir, 'CHAPS')
|
324
285
|
File.open(chaps_path, 'w') {|o| o.print chaps_text }
|
325
286
|
unless parts_text.nil?
|
@@ -340,7 +301,7 @@ EOC
|
|
340
301
|
end
|
341
302
|
|
342
303
|
mktmpbookdir 'preface.re' => '' do |dir, book, files|
|
343
|
-
assert_kind_of Part, book.prefaces
|
304
|
+
assert_kind_of Book::Part, book.prefaces
|
344
305
|
assert_equal '', book.prefaces.name
|
345
306
|
assert_equal 1, book.prefaces.chapters.size
|
346
307
|
assert_equal "preface", book.prefaces.chapters.first.name
|
@@ -359,7 +320,7 @@ EOC
|
|
359
320
|
|
360
321
|
mktmpbookdir 'PREDEF' => 'chapter1',
|
361
322
|
'chapter1.re' => '' do |dir, book, files|
|
362
|
-
assert_kind_of Part, book.prefaces
|
323
|
+
assert_kind_of Book::Part, book.prefaces
|
363
324
|
assert_equal '', book.prefaces.name
|
364
325
|
assert_equal 1, book.prefaces.chapters.size
|
365
326
|
assert_equal "chapter1", book.prefaces.chapters.first.name
|
@@ -368,7 +329,7 @@ EOC
|
|
368
329
|
|
369
330
|
mktmpbookdir 'PREDEF' => "chapter1\n\nchapter2",
|
370
331
|
'chapter1.re' => '', 'chapter2.re' => '' do |dir, book, files|
|
371
|
-
assert_kind_of Part, book.prefaces
|
332
|
+
assert_kind_of Book::Part, book.prefaces
|
372
333
|
assert_equal '', book.prefaces.name
|
373
334
|
assert_equal 2, book.prefaces.chapters.size
|
374
335
|
assert_equal "chapter1", book.prefaces.chapters.first.name
|
@@ -379,7 +340,7 @@ EOC
|
|
379
340
|
|
380
341
|
mktmpbookdir 'PREDEF' => "chapter1 chapter2",
|
381
342
|
'chapter1.re' => '', 'chapter2.re' => '' do |dir, book, files|
|
382
|
-
assert_kind_of Part, book.prefaces
|
343
|
+
assert_kind_of Book::Part, book.prefaces
|
383
344
|
assert_equal '', book.prefaces.name
|
384
345
|
assert_equal 2, book.prefaces.chapters.size # XXX: OK?
|
385
346
|
end
|
@@ -392,14 +353,14 @@ EOC
|
|
392
353
|
|
393
354
|
mktmpbookdir 'PREDEF' => 'chapter1.re',
|
394
355
|
'chapter1.re' => '' do |dir, book, files|
|
395
|
-
assert_kind_of Part, book.prefaces
|
356
|
+
assert_kind_of Book::Part, book.prefaces
|
396
357
|
assert_equal '', book.prefaces.name
|
397
358
|
assert_equal 1, book.prefaces.chapters.size
|
398
359
|
end
|
399
360
|
|
400
361
|
mktmpbookdir 'PREDEF' => 'chapter1.txt',
|
401
362
|
'chapter1.txt' => '' do |dir, book, files|
|
402
|
-
assert_kind_of Part, book.prefaces
|
363
|
+
assert_kind_of Book::Part, book.prefaces
|
403
364
|
assert_equal '', book.prefaces.name
|
404
365
|
assert_equal 1, book.prefaces.chapters.size
|
405
366
|
end
|
@@ -411,7 +372,7 @@ EOC
|
|
411
372
|
end
|
412
373
|
|
413
374
|
mktmpbookdir 'appendix.re' => '' do |dir, book, files|
|
414
|
-
assert_kind_of Part, book.postscripts
|
375
|
+
assert_kind_of Book::Part, book.postscripts
|
415
376
|
assert_equal '', book.postscripts.name
|
416
377
|
assert_equal 1, book.postscripts.chapters.size
|
417
378
|
assert_equal "appendix", book.postscripts.chapters.first.name
|
@@ -420,7 +381,7 @@ EOC
|
|
420
381
|
end
|
421
382
|
|
422
383
|
mktmpbookdir 'postscript.re' => '' do |dir, book, files|
|
423
|
-
assert_kind_of Part, book.postscripts
|
384
|
+
assert_kind_of Book::Part, book.postscripts
|
424
385
|
assert_equal '', book.postscripts.name
|
425
386
|
assert_equal 1, book.postscripts.chapters.size
|
426
387
|
assert_equal "postscript", book.postscripts.chapters.first.name
|
@@ -430,7 +391,7 @@ EOC
|
|
430
391
|
|
431
392
|
mktmpbookdir 'appendix.re' => '',
|
432
393
|
'postscript.re' => '' do |dir, book, files|
|
433
|
-
assert_kind_of Part, book.postscripts
|
394
|
+
assert_kind_of Book::Part, book.postscripts
|
434
395
|
assert_equal '', book.postscripts.name
|
435
396
|
assert_equal 2, book.postscripts.chapters.size
|
436
397
|
assert_equal "appendix", book.postscripts.chapters.first.name
|
@@ -452,7 +413,7 @@ EOC
|
|
452
413
|
|
453
414
|
mktmpbookdir 'POSTDEF' => 'chapter1',
|
454
415
|
'chapter1.re' => '' do |dir, book, files|
|
455
|
-
assert_kind_of Part, book.postscripts
|
416
|
+
assert_kind_of Book::Part, book.postscripts
|
456
417
|
assert_equal '', book.postscripts.name
|
457
418
|
assert_equal 1, book.postscripts.chapters.size
|
458
419
|
assert_equal "chapter1", book.postscripts.chapters.first.name
|
@@ -461,7 +422,7 @@ EOC
|
|
461
422
|
|
462
423
|
mktmpbookdir 'POSTDEF' => "chapter1\n\nchapter2",
|
463
424
|
'chapter1.re' => '', 'chapter2.re' => '' do |dir, book, files|
|
464
|
-
assert_kind_of Part, book.postscripts
|
425
|
+
assert_kind_of Book::Part, book.postscripts
|
465
426
|
assert_equal '', book.postscripts.name
|
466
427
|
assert_equal 2, book.postscripts.chapters.size
|
467
428
|
assert_equal "chapter1", book.postscripts.chapters.first.name
|
@@ -472,7 +433,7 @@ EOC
|
|
472
433
|
|
473
434
|
mktmpbookdir 'POSTDEF' => "chapter1 chapter2",
|
474
435
|
'chapter1.re' => '', 'chapter2.re' => '' do |dir, book, files|
|
475
|
-
assert_kind_of Part, book.postscripts
|
436
|
+
assert_kind_of Book::Part, book.postscripts
|
476
437
|
assert_equal '', book.postscripts.name
|
477
438
|
assert_equal 2, book.postscripts.chapters.size # XXX: OK?
|
478
439
|
end
|
@@ -489,7 +450,6 @@ EOC
|
|
489
450
|
assert book.parts.empty?
|
490
451
|
assert !book.part(0)
|
491
452
|
assert !book.part(1)
|
492
|
-
assert !book.no_part?
|
493
453
|
|
494
454
|
tmp = []
|
495
455
|
book.each_part { tmp << true }
|
@@ -503,7 +463,6 @@ EOC
|
|
503
463
|
assert book.part(1)
|
504
464
|
assert book.part(2)
|
505
465
|
assert !book.part(3)
|
506
|
-
assert !book.no_part? # XXX: OK?
|
507
466
|
|
508
467
|
tmp = []
|
509
468
|
book.each_part {|p| tmp << p.number }
|
@@ -574,7 +533,7 @@ EOC
|
|
574
533
|
assert_equal name, book.chapter(name).name
|
575
534
|
end
|
576
535
|
|
577
|
-
assert_raises
|
536
|
+
assert_raises ReVIEW::KeyError do
|
578
537
|
book.chapter('not exist')
|
579
538
|
end
|
580
539
|
end
|
@@ -594,7 +553,7 @@ EOC
|
|
594
553
|
assert_equal name, book.chapter(name).name
|
595
554
|
end
|
596
555
|
|
597
|
-
assert_raises
|
556
|
+
assert_raises ReVIEW::KeyError do
|
598
557
|
book.chapter('not exist')
|
599
558
|
end
|
600
559
|
end
|
@@ -621,7 +580,7 @@ EOC
|
|
621
580
|
end
|
622
581
|
|
623
582
|
Dir.chdir(dir) do
|
624
|
-
book2 = Book.new('.')
|
583
|
+
book2 = Book::Base.new('.')
|
625
584
|
assert book2.volume
|
626
585
|
assert book2.volume.bytes > 0
|
627
586
|
assert book2.volume.chars > 0
|
@@ -632,587 +591,8 @@ EOC
|
|
632
591
|
|
633
592
|
def test_basedir
|
634
593
|
Dir.mktmpdir do |dir|
|
635
|
-
book = Book.new(dir)
|
594
|
+
book = Book::Base.new(dir)
|
636
595
|
assert_equal dir, book.basedir
|
637
596
|
end
|
638
597
|
end
|
639
598
|
end
|
640
|
-
|
641
|
-
class ParametersTest < Test::Unit::TestCase
|
642
|
-
def test_s_default
|
643
|
-
assert Parameters.default
|
644
|
-
end
|
645
|
-
|
646
|
-
def test_s_load
|
647
|
-
Tempfile.open('parameters_test') do |io|
|
648
|
-
io.puts 'CHAPS_FILE = "x_CHAPS"'
|
649
|
-
io.puts 'PAPER = "B5"' # XXX: avoid erros of the last line of Parameters.get_page_metric
|
650
|
-
io.close
|
651
|
-
|
652
|
-
params = Parameters.load(io.path)
|
653
|
-
assert_equal '/x_CHAPS', params.chapter_file # XXX: OK? (leading / and uninitialized @basedir)
|
654
|
-
assert_equal '/CHAPS', params.part_file
|
655
|
-
end
|
656
|
-
end
|
657
|
-
|
658
|
-
def test_s_get_page_metric
|
659
|
-
mod = Module.new
|
660
|
-
assert_raises ArgumentError do # XXX: OK?
|
661
|
-
params = Parameters.get_page_metric(mod)
|
662
|
-
assert params
|
663
|
-
end
|
664
|
-
|
665
|
-
mod = Module.new
|
666
|
-
mod.module_eval { const_set(:PAPER, 'A5') }
|
667
|
-
assert_nothing_raised do
|
668
|
-
params = Parameters.get_page_metric(mod)
|
669
|
-
assert params
|
670
|
-
end
|
671
|
-
|
672
|
-
mod = Module.new
|
673
|
-
mod.module_eval { const_set(:PAPER, 'X5') }
|
674
|
-
assert_raises ConfigError do
|
675
|
-
Parameters.get_page_metric(mod)
|
676
|
-
end
|
677
|
-
end
|
678
|
-
end
|
679
|
-
|
680
|
-
class PartTest < Test::Unit::TestCase
|
681
|
-
def test_initialize
|
682
|
-
part = Part.new(nil, nil)
|
683
|
-
assert_equal nil, part.number
|
684
|
-
assert_equal nil, part.chapters
|
685
|
-
assert_equal '', part.name
|
686
|
-
|
687
|
-
part = Part.new(123, [], 'name')
|
688
|
-
assert_equal 123, part.number
|
689
|
-
assert_equal [], part.chapters
|
690
|
-
assert_equal 'name', part.name
|
691
|
-
end
|
692
|
-
|
693
|
-
def test_each_chapter
|
694
|
-
part = Part.new(nil, [1, 2, 3])
|
695
|
-
|
696
|
-
tmp = []
|
697
|
-
part.each_chapter do |ch|
|
698
|
-
tmp << ch
|
699
|
-
end
|
700
|
-
assert_equal [1, 2, 3], tmp
|
701
|
-
end
|
702
|
-
|
703
|
-
def test_volume
|
704
|
-
part = Part.new(nil, [])
|
705
|
-
assert part.volume
|
706
|
-
assert_equal 0, part.volume.bytes
|
707
|
-
assert_equal 0, part.volume.chars
|
708
|
-
assert_equal 0, part.volume.lines
|
709
|
-
|
710
|
-
chs = []
|
711
|
-
Tempfile.open('part_test') do |o|
|
712
|
-
o.print "12345"
|
713
|
-
chs << Chapter.new(nil, nil, nil, o.path)
|
714
|
-
end
|
715
|
-
Tempfile.open('part_test') do |o|
|
716
|
-
o.print "67890"
|
717
|
-
chs << Chapter.new(nil, nil, nil, o.path)
|
718
|
-
end
|
719
|
-
|
720
|
-
part = Part.new(nil, chs)
|
721
|
-
assert part.volume
|
722
|
-
assert part.volume.bytes > 0
|
723
|
-
assert part.volume.chars > 0
|
724
|
-
assert part.volume.lines > 0
|
725
|
-
end
|
726
|
-
end
|
727
|
-
|
728
|
-
class ChapterTest < Test::Unit::TestCase
|
729
|
-
include BookTestHelper
|
730
|
-
|
731
|
-
def setup
|
732
|
-
|
733
|
-
if "".respond_to?(:encode)
|
734
|
-
@utf8_str = "あいうえお"
|
735
|
-
@eucjp_str = "あいうえお".encode("EUC-JP")
|
736
|
-
@sjis_str = "あいうえお".encode("Shift_JIS")
|
737
|
-
@jis_str = "あいうえお".encode("ISO-2022-JP")
|
738
|
-
else
|
739
|
-
@utf8_str = "\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a" # "あいうえお"
|
740
|
-
@eucjp_str = "\xa4\xa2\xa4\xa4\xa4\xa6\xa4\xa8\xa4\xaa"
|
741
|
-
@sjis_str = "\x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8"
|
742
|
-
@jis_str = "\x1b\x24\x42\x24\x22\x24\x24\x24\x26\x24\x28\x24\x2a\x1b\x28\x42"
|
743
|
-
end
|
744
|
-
=begin
|
745
|
-
@utf8_str = "\xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a" # "あいうえお"
|
746
|
-
@eucjp_str = "\xa4\xa2\xa4\xa4\xa4\xa6\xa4\xa8\xa4\xaa"
|
747
|
-
@sjis_str = "\x82\xa0\x82\xa2\x82\xa4\x82\xa6\x82\xa8"
|
748
|
-
@jis_str = "\x1b\x24\x42\x24\x22\x24\x24\x24\x26\x24\x28\x24\x2a\x1b\x28\x42"
|
749
|
-
=end
|
750
|
-
end
|
751
|
-
|
752
|
-
def test_s_intern_pathes
|
753
|
-
dir1_files = {
|
754
|
-
'CHAPS' => "ch1.re\nch2.re\n",
|
755
|
-
'ch1.re' => 'ch1',
|
756
|
-
'ch2.re' => 'ch2',
|
757
|
-
}
|
758
|
-
dir2_files = {
|
759
|
-
'CHAPS' => "ch1.re\n",
|
760
|
-
'ch1.re' => 'ch1',
|
761
|
-
}
|
762
|
-
mktmpbookdir dir1_files do |dir1, book1, files1|
|
763
|
-
mktmpbookdir dir2_files do |dir2, book2, files2|
|
764
|
-
paths = (files1.values + files2.values).flatten.grep(/\.re\z/)
|
765
|
-
chs = Chapter.intern_pathes(paths)
|
766
|
-
|
767
|
-
assert_equal 3, chs.size
|
768
|
-
assert chs[0].book == chs[1].book
|
769
|
-
assert chs[0].book != chs[2].book
|
770
|
-
assert dir1, chs[0].book.basedir
|
771
|
-
assert dir2, chs[2].book.basedir
|
772
|
-
end
|
773
|
-
end
|
774
|
-
|
775
|
-
dir_files = {
|
776
|
-
'CHAPS' => "ch1.re\n",
|
777
|
-
'ch1.re' => 'ch1',
|
778
|
-
}
|
779
|
-
mktmpbookdir dir_files do |dir, book, files|
|
780
|
-
paths = files.values.grep(/\.re\z/)
|
781
|
-
paths << __FILE__ + ' not exist file.re'
|
782
|
-
assert_raises IndexError,KeyError do # XXX: OK? (KeyError?)
|
783
|
-
Chapter.intern_pathes(paths)
|
784
|
-
end
|
785
|
-
end
|
786
|
-
|
787
|
-
dir_files = {
|
788
|
-
'ch1.re' => 'ch1 not in CHAPS',
|
789
|
-
'ch2.re' => 'ch2 not in CHAPS',
|
790
|
-
}
|
791
|
-
mktmpbookdir dir_files do |dir, book, files|
|
792
|
-
paths = files.values.grep(/\.re\z/)
|
793
|
-
assert_nothing_raised do
|
794
|
-
Chapter.intern_pathes(paths)
|
795
|
-
end
|
796
|
-
end
|
797
|
-
|
798
|
-
dir_files = {
|
799
|
-
'CHAPS' => "ch1.re\n",
|
800
|
-
'ch1.re' => 'ch1',
|
801
|
-
'ch2.re' => 'ch2 not in CHAPS',
|
802
|
-
}
|
803
|
-
mktmpbookdir dir_files do |dir, book, files|
|
804
|
-
paths = files.values.grep(/\.re\z/)
|
805
|
-
assert_raises IndexError,KeyError do # XXX: OK? (should not be raised?)
|
806
|
-
Chapter.intern_pathes(paths)
|
807
|
-
end
|
808
|
-
end
|
809
|
-
|
810
|
-
dir_files = {
|
811
|
-
'CHAPS' => "ch1.re\n",
|
812
|
-
'ch1.re' => 'ch1',
|
813
|
-
'preface.re' => 'preface',
|
814
|
-
}
|
815
|
-
mktmpbookdir dir_files do |dir, book, files|
|
816
|
-
paths = files.values.grep(/\.re\z/)
|
817
|
-
assert_nothing_raised do
|
818
|
-
Chapter.intern_pathes(paths)
|
819
|
-
end
|
820
|
-
end
|
821
|
-
end
|
822
|
-
|
823
|
-
def test_s_for_stdin
|
824
|
-
assert Chapter.for_stdin
|
825
|
-
end
|
826
|
-
|
827
|
-
def test_s_for_path
|
828
|
-
assert Chapter.for_path(1, __FILE__)
|
829
|
-
end
|
830
|
-
|
831
|
-
def test_initialize
|
832
|
-
ch = Chapter.new(:book, :number, :name, '/foo/bar', :io)
|
833
|
-
assert_equal :book, ch.env
|
834
|
-
assert_equal :book, ch.book
|
835
|
-
assert_equal :number, ch.number
|
836
|
-
assert_equal '/foo/bar', ch.path
|
837
|
-
assert_equal "#<ReVIEW::Chapter number /foo/bar>", ch.inspect
|
838
|
-
end
|
839
|
-
|
840
|
-
def test_dirname_and_basename
|
841
|
-
ch = Chapter.new(nil, nil, nil, nil, nil)
|
842
|
-
assert_equal nil, ch.dirname
|
843
|
-
assert_equal nil, ch.basename
|
844
|
-
|
845
|
-
ch = Chapter.new(nil, nil, nil, '/foo/bar', nil)
|
846
|
-
assert_equal '/foo', ch.dirname
|
847
|
-
assert_equal 'bar', ch.basename
|
848
|
-
|
849
|
-
ch = Chapter.new(nil, nil, nil, 'bar', nil)
|
850
|
-
assert_equal '.', ch.dirname
|
851
|
-
assert_equal 'bar', ch.basename
|
852
|
-
end
|
853
|
-
|
854
|
-
def test_name
|
855
|
-
ch = Chapter.new(nil, nil, 'foo', nil)
|
856
|
-
assert_equal 'foo', ch.name
|
857
|
-
|
858
|
-
ch = Chapter.new(nil, nil, 'foo.bar', nil)
|
859
|
-
assert_equal 'foo', ch.name
|
860
|
-
|
861
|
-
ch = Chapter.new(nil, nil, nil, nil)
|
862
|
-
assert_raises(TypeError) { ch.name } # XXX: OK?
|
863
|
-
end
|
864
|
-
|
865
|
-
def test_open
|
866
|
-
ch = Chapter.new(nil, nil, nil, __FILE__, :io)
|
867
|
-
assert_equal :io, ch.open
|
868
|
-
assert_equal [:io], ch.open {|io| [io] }
|
869
|
-
|
870
|
-
ch = Chapter.new(nil, nil, nil, __FILE__)
|
871
|
-
assert_equal __FILE__, ch.open.path
|
872
|
-
assert_equal [__FILE__], ch.open {|io| [io.path] }
|
873
|
-
end
|
874
|
-
|
875
|
-
def test_size
|
876
|
-
ch = Chapter.new(nil, nil, nil, __FILE__, :io)
|
877
|
-
assert_equal File.size(__FILE__), ch.size
|
878
|
-
|
879
|
-
File.open(__FILE__, 'r') do |i|
|
880
|
-
ch = Chapter.new(nil, nil, nil, nil, i)
|
881
|
-
assert_raises(TypeError) do # XXX: OK?
|
882
|
-
ch.size
|
883
|
-
end
|
884
|
-
end
|
885
|
-
end
|
886
|
-
|
887
|
-
def test_title
|
888
|
-
io = StringIO.new
|
889
|
-
ch = Chapter.new(nil, nil, nil, nil, io)
|
890
|
-
assert_equal '', ch.title
|
891
|
-
|
892
|
-
io = StringIO.new("=1\n=2\n")
|
893
|
-
ch = Chapter.new(nil, nil, nil, nil, io)
|
894
|
-
assert_equal '1', ch.title
|
895
|
-
|
896
|
-
|
897
|
-
[
|
898
|
-
['EUC', @eucjp_str],
|
899
|
-
['SJIS', @sjis_str],
|
900
|
-
# ['JIS', @jis_str],
|
901
|
-
['XYZ', @eucjp_str],
|
902
|
-
].each do |enc, instr|
|
903
|
-
io = StringIO.new("= #{instr}\n")
|
904
|
-
ch = Chapter.new(nil, nil, nil, nil, io)
|
905
|
-
ReVIEW.book.param = {'inencoding' => enc}
|
906
|
-
assert_equal @utf8_str, ch.title
|
907
|
-
assert_equal @utf8_str, ch.instance_eval { @title }
|
908
|
-
end
|
909
|
-
end
|
910
|
-
|
911
|
-
def test_content
|
912
|
-
[
|
913
|
-
['EUC', @eucjp_str],
|
914
|
-
['SJIS', @sjis_str],
|
915
|
-
['JIS', @jis_str],
|
916
|
-
['XYZ', @eucjp_str],
|
917
|
-
].each do |enc, instr|
|
918
|
-
tf = Tempfile.new('chapter_test')
|
919
|
-
begin
|
920
|
-
tf.print instr
|
921
|
-
tf.close
|
922
|
-
|
923
|
-
ch = Chapter.new(nil, nil, nil, tf.path)
|
924
|
-
ReVIEW.book.param = {'inencoding' => enc}
|
925
|
-
assert_equal @utf8_str, ch.content
|
926
|
-
assert_equal @utf8_str, ch.instance_eval { @content }
|
927
|
-
ensure
|
928
|
-
tf.close(true)
|
929
|
-
end
|
930
|
-
|
931
|
-
tf1 = Tempfile.new('chapter_test1')
|
932
|
-
tf2 = Tempfile.new('chapter_test2')
|
933
|
-
begin
|
934
|
-
tf1.puts instr
|
935
|
-
tf1.puts instr
|
936
|
-
tf1.close
|
937
|
-
tf2.puts instr
|
938
|
-
tf1.close
|
939
|
-
|
940
|
-
ch = Chapter.new(nil, nil, nil, tf1.path, tf2)
|
941
|
-
ReVIEW.book.param = {'inencoding' => enc}
|
942
|
-
assert_equal "#{@utf8_str}\n#{@utf8_str}\n", ch.content # XXX: OK?
|
943
|
-
ensure
|
944
|
-
tf1.close(true)
|
945
|
-
tf2.close(true)
|
946
|
-
end
|
947
|
-
end
|
948
|
-
end
|
949
|
-
|
950
|
-
def test_lines
|
951
|
-
lines = ["1\n", "2\n", "3"]
|
952
|
-
tf = Tempfile.new('chapter_test')
|
953
|
-
tf.print lines.join('')
|
954
|
-
tf.close
|
955
|
-
|
956
|
-
ch = Chapter.new(nil, nil, nil, tf.path)
|
957
|
-
assert_equal lines, ch.lines
|
958
|
-
|
959
|
-
lines = ["1\n", "2\n", "3"]
|
960
|
-
tf1 = Tempfile.new('chapter_test1')
|
961
|
-
tf1.print lines.join('')
|
962
|
-
tf1.close
|
963
|
-
tf2 = Tempfile.new('chapter_test2')
|
964
|
-
tf2.puts lines.join('')
|
965
|
-
tf2.puts lines.join('')
|
966
|
-
tf2.close
|
967
|
-
|
968
|
-
ch = Chapter.new(nil, nil, nil, tf1.path, tf2.path)
|
969
|
-
assert_equal lines, ch.lines # XXX: OK?
|
970
|
-
end
|
971
|
-
|
972
|
-
def test_volume
|
973
|
-
content = "abc\ndef"
|
974
|
-
tf1 = Tempfile.new('chapter_test1')
|
975
|
-
tf1.print content
|
976
|
-
tf1.close
|
977
|
-
tf2 = Tempfile.new('chapter_test2')
|
978
|
-
tf2.print content
|
979
|
-
tf2.print content
|
980
|
-
tf2.close
|
981
|
-
|
982
|
-
ch = Chapter.new(nil, nil, nil, tf1.path)
|
983
|
-
assert ch.volume
|
984
|
-
assert_equal content.gsub(/\s/, '').size, ch.volume.bytes
|
985
|
-
|
986
|
-
ch = Chapter.new(nil, nil, nil, tf1.path, tf2)
|
987
|
-
assert ch.volume
|
988
|
-
assert_equal content.gsub(/\s/, '').size, ch.volume.bytes # XXX: OK?
|
989
|
-
end
|
990
|
-
|
991
|
-
def test_on_CHAPS?
|
992
|
-
mktmpbookdir 'CHAPS' => "chapter1.re\nchapter2.re",
|
993
|
-
'chapter1.re' => '12345', 'preface.re' => 'abcde' do |dir, book, files|
|
994
|
-
ch1 = Chapter.new(book, 1, 'chapter1', files['chapter1.re'])
|
995
|
-
pre = Chapter.new(book, nil, 'preface', files['preface.re'])
|
996
|
-
|
997
|
-
assert ch1.on_CHAPS?
|
998
|
-
assert !pre.on_CHAPS?
|
999
|
-
|
1000
|
-
ch2_path = File.join(dir, 'chapter2.er')
|
1001
|
-
File.open(ch2_path, 'w') {}
|
1002
|
-
ch2 = Chapter.new(book, 2, 'chapter2', ch2_path)
|
1003
|
-
|
1004
|
-
ch3_path = File.join(dir, 'chapter3.er')
|
1005
|
-
File.open(ch3_path, 'w') {}
|
1006
|
-
ch3 = Chapter.new(book, 3, 'chapter3', ch3_path)
|
1007
|
-
|
1008
|
-
assert ch2.on_CHAPS?
|
1009
|
-
assert !ch3.on_CHAPS?
|
1010
|
-
end
|
1011
|
-
end
|
1012
|
-
|
1013
|
-
def test_list_index
|
1014
|
-
do_test_index(<<E, ListIndex, :list_index, :list)
|
1015
|
-
//list
|
1016
|
-
//listnum [abc]
|
1017
|
-
//list [def]
|
1018
|
-
//table [def]
|
1019
|
-
//table [others]
|
1020
|
-
E
|
1021
|
-
end
|
1022
|
-
|
1023
|
-
def test_table_index
|
1024
|
-
do_test_index(<<E, TableIndex, :table_index, :table)
|
1025
|
-
//table
|
1026
|
-
//table [abc]
|
1027
|
-
//table [def]
|
1028
|
-
//list [def]
|
1029
|
-
//list [others]
|
1030
|
-
E
|
1031
|
-
end
|
1032
|
-
|
1033
|
-
def test_footnote_index
|
1034
|
-
content = <<E
|
1035
|
-
//footnote
|
1036
|
-
//footnote [abc][text...]
|
1037
|
-
//footnote [def][text...]
|
1038
|
-
//footnote [xyz]
|
1039
|
-
//list [def]
|
1040
|
-
//list [others]
|
1041
|
-
E
|
1042
|
-
do_test_index(content, FootnoteIndex, :footnote_index, :footnote) do |ch|
|
1043
|
-
assert_raises IndexError,KeyError do
|
1044
|
-
ch.footnote('xyz')
|
1045
|
-
end
|
1046
|
-
end
|
1047
|
-
end
|
1048
|
-
|
1049
|
-
def test_bibpaper
|
1050
|
-
do_test_index(<<E, BibpaperIndex, :bibpaper_index, :bibpaper, :filename => 'bib.re')
|
1051
|
-
//bibpaper
|
1052
|
-
//bibpaper [abc][text...]
|
1053
|
-
//bibpaper [def][text...]
|
1054
|
-
//bibpaper [xyz]
|
1055
|
-
//list [def]
|
1056
|
-
//list [others]
|
1057
|
-
E
|
1058
|
-
assert_raises FileNotFound do
|
1059
|
-
do_test_index('', BibpaperIndex, :bibpaper_index, :bibpaper, :filename => 'bib')
|
1060
|
-
end
|
1061
|
-
end
|
1062
|
-
|
1063
|
-
def test_headline_index
|
1064
|
-
do_test_index(<<E, HeadlineIndex, :headline_index, :headline, :propagate => false)
|
1065
|
-
==
|
1066
|
-
== abc
|
1067
|
-
== def
|
1068
|
-
=== def
|
1069
|
-
//table others
|
1070
|
-
E
|
1071
|
-
end
|
1072
|
-
|
1073
|
-
def test_image
|
1074
|
-
do_test_index(<<E, ImageIndex, :image_index, :image)
|
1075
|
-
//image
|
1076
|
-
//image [abc]
|
1077
|
-
//image [def]
|
1078
|
-
//list [def]
|
1079
|
-
//list [others]
|
1080
|
-
E
|
1081
|
-
|
1082
|
-
do_test_index(<<E, NumberlessImageIndex, :numberless_image_index, :image, :propagate => false)
|
1083
|
-
//numberlessimage
|
1084
|
-
//numberlessimage [abc]
|
1085
|
-
//numberlessimage [def]
|
1086
|
-
//list [def]
|
1087
|
-
//list [others]
|
1088
|
-
E
|
1089
|
-
|
1090
|
-
do_test_index(<<E, ImageIndex, :image_index, :image)
|
1091
|
-
//image
|
1092
|
-
//numberlessimage [abc]
|
1093
|
-
//image [def]
|
1094
|
-
//list [def]
|
1095
|
-
//list [others]
|
1096
|
-
E
|
1097
|
-
|
1098
|
-
do_test_index(<<E, NumberlessImageIndex, :numberless_image_index, :image, :propagate => false)
|
1099
|
-
//image
|
1100
|
-
//numberlessimage [abc]
|
1101
|
-
//image [def]
|
1102
|
-
//list [def]
|
1103
|
-
//list [others]
|
1104
|
-
E
|
1105
|
-
end
|
1106
|
-
|
1107
|
-
def do_test_index(content, klass, list_method, ref_method, opts = {})
|
1108
|
-
Dir.mktmpdir do |dir|
|
1109
|
-
path = File.join(dir, opts[:filename] || 'chapter.re')
|
1110
|
-
|
1111
|
-
book = Book.new(dir)
|
1112
|
-
|
1113
|
-
ch = nil
|
1114
|
-
File.open(path, 'w') do |o|
|
1115
|
-
o.print content
|
1116
|
-
ch = Chapter.new(book, 1, 'chapter', o.path)
|
1117
|
-
end
|
1118
|
-
|
1119
|
-
assert ch.__send__(ref_method, 'abc')
|
1120
|
-
assert ch.__send__(ref_method, 'def')
|
1121
|
-
assert_raises IndexError,KeyError do
|
1122
|
-
ch.__send__(ref_method, nil)
|
1123
|
-
end
|
1124
|
-
assert_raises IndexError,KeyError do
|
1125
|
-
ch.__send__(ref_method, 'others')
|
1126
|
-
end
|
1127
|
-
assert_raises IndexError,KeyError do
|
1128
|
-
ch.__send__(ref_method, 'not exist id')
|
1129
|
-
end
|
1130
|
-
|
1131
|
-
yield(ch) if block_given?
|
1132
|
-
end
|
1133
|
-
end
|
1134
|
-
end
|
1135
|
-
|
1136
|
-
class ChapterSetTest < Test::Unit::TestCase
|
1137
|
-
include BookTestHelper
|
1138
|
-
|
1139
|
-
def test_s_for_pathes
|
1140
|
-
dir_files = {
|
1141
|
-
'ch1.re' => 'ch1',
|
1142
|
-
'ch2.re' => 'ch2',
|
1143
|
-
}
|
1144
|
-
mktmpbookdir dir_files do |dir, book, files|
|
1145
|
-
paths = files.values.grep(/\.re\z/)
|
1146
|
-
cs = nil
|
1147
|
-
assert_nothing_raised do
|
1148
|
-
cs = ChapterSet.for_pathes(paths)
|
1149
|
-
end
|
1150
|
-
assert_equal 2, cs.chapters.size
|
1151
|
-
end
|
1152
|
-
end
|
1153
|
-
|
1154
|
-
def test_s_for_argv
|
1155
|
-
begin
|
1156
|
-
paths = []
|
1157
|
-
ChapterSet.class_eval { const_set(:ARGV, paths) }
|
1158
|
-
|
1159
|
-
dir_files = {
|
1160
|
-
'ch1.re' => 'ch1',
|
1161
|
-
'ch2.re' => 'ch2',
|
1162
|
-
}
|
1163
|
-
mktmpbookdir dir_files do |dir, book, files|
|
1164
|
-
paths.concat files.values.grep(/\.re\z/)
|
1165
|
-
cs = nil
|
1166
|
-
assert_nothing_raised do
|
1167
|
-
cs = ChapterSet.for_argv
|
1168
|
-
end
|
1169
|
-
assert_equal 2, cs.chapters.size
|
1170
|
-
assert_equal ['ch1', 'ch2'], cs.chapters.map(&:name).sort
|
1171
|
-
end
|
1172
|
-
|
1173
|
-
ensure
|
1174
|
-
ChapterSet.class_eval { remove_const(:ARGV) }
|
1175
|
-
ChapterSet.class_eval { const_set(:ARGV, []) }
|
1176
|
-
end
|
1177
|
-
|
1178
|
-
begin
|
1179
|
-
$stdin = StringIO.new('abc')
|
1180
|
-
cs = nil
|
1181
|
-
assert_nothing_raised do
|
1182
|
-
cs = ChapterSet.for_argv
|
1183
|
-
end
|
1184
|
-
assert_equal 1, cs.chapters.size
|
1185
|
-
assert_equal '-', cs.chapters.first.name
|
1186
|
-
|
1187
|
-
ensure
|
1188
|
-
$stdin = STDIN
|
1189
|
-
end
|
1190
|
-
end
|
1191
|
-
|
1192
|
-
def test_no_part?
|
1193
|
-
cs = ChapterSet.new([])
|
1194
|
-
assert cs.no_part?
|
1195
|
-
|
1196
|
-
ch = Chapter.new(nil, nil, nil, nil, StringIO.new)
|
1197
|
-
cs = ChapterSet.new([ch])
|
1198
|
-
assert cs.no_part?
|
1199
|
-
end
|
1200
|
-
|
1201
|
-
def test_chapters
|
1202
|
-
ch1 = Chapter.new(nil, 123, nil, nil, StringIO.new)
|
1203
|
-
ch2 = Chapter.new(nil, 456, nil, nil, StringIO.new)
|
1204
|
-
cs = ChapterSet.new([ch1, ch2])
|
1205
|
-
assert_equal [123, 456], cs.chapters.map(&:number)
|
1206
|
-
|
1207
|
-
tmp = [ch1, ch2]
|
1208
|
-
cs.each_chapter do |ch|
|
1209
|
-
assert tmp.delete(ch)
|
1210
|
-
end
|
1211
|
-
assert tmp.empty?
|
1212
|
-
end
|
1213
|
-
|
1214
|
-
def test_ext
|
1215
|
-
cs = ChapterSet.new([])
|
1216
|
-
assert_equal '.re', cs.ext
|
1217
|
-
end
|
1218
|
-
end
|