review 3.2.0 → 4.0.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.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +26 -4
  3. data/.travis.yml +1 -1
  4. data/NEWS.ja.md +97 -1
  5. data/NEWS.md +97 -1
  6. data/bin/review-catalog-converter +1 -1
  7. data/bin/review-check +5 -5
  8. data/bin/review-checkdep +1 -1
  9. data/bin/review-compile +5 -5
  10. data/bin/review-idgxmlmaker +16 -0
  11. data/bin/review-index +7 -7
  12. data/bin/review-preproc +9 -9
  13. data/bin/review-validate +2 -2
  14. data/bin/review-vol +5 -5
  15. data/doc/config.yml.sample +14 -6
  16. data/doc/config.yml.sample-simple +1 -1
  17. data/doc/format.ja.md +15 -5
  18. data/doc/format.md +30 -18
  19. data/doc/pdfmaker.ja.md +1 -1
  20. data/doc/pdfmaker.md +1 -1
  21. data/lib/review/book.rb +1 -1
  22. data/lib/review/book/base.rb +23 -63
  23. data/lib/review/book/chapter.rb +18 -3
  24. data/lib/review/book/compilable.rb +5 -0
  25. data/lib/review/book/index.rb +26 -65
  26. data/lib/review/book/index/item.rb +40 -0
  27. data/lib/review/book/part.rb +22 -2
  28. data/lib/review/builder.rb +60 -40
  29. data/lib/review/catalog.rb +12 -15
  30. data/lib/review/compiler.rb +68 -36
  31. data/lib/review/configure.rb +10 -7
  32. data/lib/review/epubmaker.rb +5 -2
  33. data/lib/review/htmlbuilder.rb +24 -71
  34. data/lib/review/htmlutils.rb +2 -3
  35. data/lib/review/i18n.rb +2 -2
  36. data/lib/review/idgxmlbuilder.rb +101 -55
  37. data/lib/review/idgxmlmaker.rb +184 -0
  38. data/lib/review/init-web/finish.html +10 -0
  39. data/lib/review/init-web/index.html +190 -0
  40. data/lib/review/init-web/review-layout-design.js +691 -0
  41. data/lib/review/init.rb +110 -26
  42. data/lib/review/latexbuilder.rb +76 -54
  43. data/lib/review/lineinput.rb +1 -1
  44. data/lib/review/logger.rb +4 -8
  45. data/lib/review/makerhelper.rb +6 -4
  46. data/lib/review/markdownbuilder.rb +25 -38
  47. data/lib/review/md2inaobuilder.rb +3 -5
  48. data/lib/review/pdfmaker.rb +15 -15
  49. data/lib/review/plaintextbuilder.rb +67 -76
  50. data/lib/review/preprocessor.rb +13 -13
  51. data/lib/review/rstbuilder.rb +31 -31
  52. data/lib/review/textmaker.rb +13 -3
  53. data/lib/review/textutils.rb +77 -2
  54. data/lib/review/tocparser.rb +17 -17
  55. data/lib/review/tocprinter.rb +8 -8
  56. data/lib/review/topbuilder.rb +76 -57
  57. data/lib/review/update.rb +16 -16
  58. data/lib/review/version.rb +1 -1
  59. data/lib/review/webmaker.rb +2 -2
  60. data/lib/review/yamlloader.rb +3 -0
  61. data/review.gemspec +4 -3
  62. data/samples/sample-book/README.md +7 -2
  63. data/samples/sample-book/src/.gitignore +153 -0
  64. data/samples/sample-book/src/config-jlreq.yml +6 -0
  65. data/samples/sample-book/src/lib/tasks/review.rake +20 -9
  66. data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +14 -8
  67. data/samples/syntax-book/ch03.re +3 -6
  68. data/samples/syntax-book/config-jlreq.yml +5 -0
  69. data/samples/syntax-book/lib/tasks/review.rake +7 -7
  70. data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +14 -8
  71. data/templates/latex/config.erb +6 -0
  72. data/templates/latex/layout.tex.erb +1 -0
  73. data/templates/latex/review-jlreq/review-base.sty +93 -31
  74. data/templates/latex/review-jlreq/review-jlreq.cls +6 -0
  75. data/templates/latex/review-jlreq/review-style.sty +3 -0
  76. data/templates/latex/review-jsbook/README.md +39 -0
  77. data/templates/latex/review-jsbook/review-base.sty +65 -10
  78. data/templates/latex/review-jsbook/review-jsbook.cls +4 -0
  79. data/templates/latex/review-jsbook/review-style.sty +4 -1
  80. data/test/assets/test_template.tex +11 -3
  81. data/test/assets/test_template_backmatter.tex +11 -3
  82. data/test/test_book.rb +65 -19
  83. data/test/test_catalog.rb +18 -42
  84. data/test/test_catalog_converter_cmd.rb +1 -1
  85. data/test/test_epubmaker_cmd.rb +2 -2
  86. data/test/test_helper.rb +1 -1
  87. data/test/test_htmlbuilder.rb +144 -55
  88. data/test/test_i18n.rb +25 -25
  89. data/test/test_idgxmlbuilder.rb +60 -18
  90. data/test/test_image_finder.rb +6 -6
  91. data/test/test_latexbuilder.rb +128 -24
  92. data/test/test_latexbuilder_v2.rb +23 -23
  93. data/test/test_logger.rb +14 -1
  94. data/test/test_makerhelper.rb +3 -3
  95. data/test/test_markdownbuilder.rb +45 -4
  96. data/test/test_md2inaobuilder.rb +12 -2
  97. data/test/test_pdfmaker.rb +1 -1
  98. data/test/test_pdfmaker_cmd.rb +1 -1
  99. data/test/test_plaintextbuilder.rb +31 -6
  100. data/test/test_rstbuilder.rb +33 -4
  101. data/test/test_textutils.rb +109 -2
  102. data/test/test_topbuilder.rb +35 -7
  103. data/test/test_update.rb +17 -8
  104. data/test/test_yamlloader.rb +13 -0
  105. metadata +26 -2
@@ -132,23 +132,23 @@
132
132
  \newenvironment{reviewlistblock}{\needspace{2\Cvs}}{}
133
133
 
134
134
  \newenvironment{reviewemlist}{%
135
- \medskip\small\begin{shaded}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
135
+ \medskip\small\begin{shaded}\ifdefined\reviewlistxkanjiskip\xkanjiskip=\reviewlistxkanjiskip\fi\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
136
136
  \end{alltt}\end{shaded}}
137
137
 
138
138
  \newenvironment{reviewlist}{%
139
- \begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
139
+ \begin{shaded}\small\ifdefined\reviewlistxkanjiskip\xkanjiskip=\reviewlistxkanjiskip\fi\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
140
140
  \end{alltt}\end{shaded}\par\vspace*{0.5zw}}
141
141
 
142
142
  \newenvironment{reviewsource}{%
143
- \begin{shaded}\small\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
143
+ \begin{shaded}\small\ifdefined\reviewlistxkanjiskip\xkanjiskip=\reviewlistxkanjiskip\fi\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
144
144
  \end{alltt}\end{shaded}\par\vspace*{0.5zw}}
145
145
 
146
146
  \newenvironment{reviewcmd}{%
147
- \color{white}\medskip\small\begin{shadedb}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
147
+ \color{white}\medskip\small\ifdefined\reviewlistxkanjiskip\xkanjiskip=\reviewlistxkanjiskip\fi\begin{shadedb}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
148
148
  \end{alltt}\end{shadedb}}
149
149
 
150
150
  \newenvironment{reviewbox}{%
151
- \medskip\small\begin{framed}\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
151
+ \medskip\small\begin{framed}\ifdefined\reviewlistxkanjiskip\xkanjiskip=\reviewlistxkanjiskip\fi\setlength{\baselineskip}{1.3zw}\begin{alltt}}{%
152
152
  \end{alltt}\end{framed}}
153
153
 
154
154
  \newenvironment{reviewtable}[1]{%
@@ -205,7 +205,7 @@
205
205
  \newcommand{\reviewlistref}[1]{\review@intn@list #1}
206
206
  \newcommand{\reviewequationref}[1]{\review@intn@equation #1}
207
207
  \newcommand{\reviewbibref}[2]{#1}
208
- \newcommand{\reviewcolumnref}[2]{\review@intn@columnname #1}
208
+ \newcommand{\reviewcolumnref}[2]{#1}
209
209
  \newcommand{\reviewsecref}[2]{#1}
210
210
 
211
211
  \newenvironment{reviewpart}{%
@@ -264,10 +264,58 @@
264
264
  \DeclareRobustCommand{\reviewunderline}[1]{\Underline{#1}}
265
265
  \DeclareRobustCommand{\reviewit}[1]{\textit{#1}}
266
266
  \DeclareRobustCommand{\reviewbold}[1]{\textbf{#1}}
267
- \DeclareRobustCommand{\reviewcode}[1]{\texttt{#1}}
268
- \DeclareRobustCommand{\reviewtt}[1]{\texttt{#1}}
269
- \DeclareRobustCommand{\reviewtti}[1]{\texttt{\textit{#1}}}
270
- \DeclareRobustCommand{\reviewttb}[1]{\texttt{\textbf{#1}}}
267
+
268
+ % allow break line in tt
269
+ % contributed by @zr_tex8r
270
+ \newif\ifreview@ba@break
271
+ \def\review@ba@end{\review@ba@end@}
272
+ \DeclareRobustCommand{\reviewbreakall}[1]{%
273
+ \begingroup
274
+ \review@ba@breakfalse
275
+ \review@break@all@a#1\review@ba@end
276
+ \endgroup
277
+ }
278
+ \def\review@break@all@a{%
279
+ \futurelet\review@ba@tok\review@break@all@b
280
+ }
281
+ \def\review@break@all@b{%
282
+ \ifx\review@ba@tok\review@ba@end
283
+ \let\next\@gobble
284
+ \else\ifx\review@ba@tok\@sptoken
285
+ \let\next\review@break@all@c
286
+ \else\ifx\review@ba@tok~%
287
+ \let\next\review@break@all@d
288
+ \else\ifx\review@ba@tok\bgroup
289
+ \let\next\review@break@all@e
290
+ \else
291
+ \let\next\review@break@all@f
292
+ \fi\fi\fi\fi
293
+ \next
294
+ }
295
+ \expandafter\def\expandafter\review@break@all@c\space{%
296
+ \space
297
+ \review@ba@breakfalse
298
+ \review@break@all@a
299
+ }
300
+ \def\review@break@all@d#1{%
301
+ \review@break@all@f{\mbox{\space}}%
302
+ }
303
+ \def\review@break@all@e#1{%
304
+ \review@break@all@f{{#1}}%
305
+ }
306
+ \def\review@break@all@f#1{%
307
+ \ifreview@ba@break
308
+ \hskip0pt plus 0.02em\relax
309
+ \fi
310
+ #1%
311
+ \review@ba@breaktrue
312
+ \review@break@all@a
313
+ }
314
+ \DeclareRobustCommand{\reviewtt}[1]{{\ttfamily\reviewbreakall{#1}}}
315
+ \DeclareRobustCommand{\reviewcode}[1]{{\ttfamily\reviewbreakall{#1}}}
316
+ \DeclareRobustCommand{\reviewtti}[1]{{\ttfamily\itshape\reviewbreakall{#1}}}
317
+ \DeclareRobustCommand{\reviewttb}[1]{{\ttfamily\bfseries\reviewbreakall{#1}}}
318
+
271
319
  \DeclareRobustCommand{\reviewbou}[1]{\kenten{#1}}
272
320
 
273
321
  %% @<del> is ignored in LaTeX with default style
@@ -350,6 +398,13 @@
350
398
  }
351
399
 
352
400
  % cover
401
+ \newcommand*\covermatter{%
402
+ \ifdefined\review@usecovernombre%
403
+ \pagenumbering{coverpagezero}
404
+ \setcounter{page}{0}% force to even page, to avoid empty page
405
+ \fi
406
+ }
407
+
353
408
  \if@reclscover
354
409
  \ifdefined\review@coverimage
355
410
  \def\reviewcoverpagecont{%
@@ -486,5 +486,9 @@
486
486
  %% \setcounter{page}\@ne
487
487
  \fi}
488
488
 
489
+ %% 表紙のノンブル
490
+ \def\coverpagezero#1{\expandafter\@coverpagezero\csname c@#1\endcsname}
491
+ \def\@coverpagezero#1{cover}
492
+
489
493
  \listfiles
490
494
  \endinput
@@ -43,4 +43,7 @@
43
43
  \hypersetup{hidelinks}
44
44
 
45
45
  \floatplacement{figure}{H}
46
- \floatplacement{table}{htp}
46
+ \floatplacement{table}{H}
47
+
48
+ % space between English/Japanese characters in list environments (\z@ means 0, no space. You can comment out below line for backward compatibility.)
49
+ \def\reviewlistxkanjiskip{\z@}
@@ -1,13 +1,14 @@
1
1
  \documentclass[dvipdfmx]{review-jsbook}
2
2
  \makeatletter
3
- \def\review@reviewversion{3.0.0.preview3}
3
+ \def\review@reviewversion{3.2.0}
4
4
  \def\review@texcompiler{uplatex}
5
5
  \def\review@documentclass{review-jsbook}
6
6
 
7
7
  \def\review@booktitlename{Re:VIEW Sample Book}
8
8
 
9
+ \def\review@autnames{anonymous}
9
10
 
10
- \def\review@titlepageauthors{}
11
+ \def\review@titlepageauthors{anonymous 著}
11
12
  \def\review@date{2011{-}01{-}01}
12
13
 
13
14
  \def\review@bookname{sample}
@@ -34,10 +35,12 @@
34
35
  \def\review@tablename{表}
35
36
  \def\review@appendixname{付録}
36
37
 
38
+ \def\review@usecovernombre{true}
37
39
  \def\review@titlepage{true}
38
40
 
39
41
  \def\review@pubhistories{2011年1月1日 発行}
40
- \def\review@colophonnames{}
42
+ \def\review@colophonnames{著 者 & anonymous \\
43
+ }
41
44
 
42
45
  \def\reviewprefacefiles{}
43
46
  \def\reviewchapterfiles{}
@@ -52,10 +55,14 @@
52
55
  \DeclareRobustCommand{\reviewincludegraphics}[2][]{%
53
56
  \includegraphics[##1]{##2}}
54
57
  }
58
+ \@ifundefined{covermatter}{% for 4.0.0 compatibility
59
+ \def\covermatter{}
60
+ }
55
61
  }
56
62
 
57
63
  \makeatother
58
64
 
65
+ \usepackage{reviewmacro}
59
66
 
60
67
  %% backward compatibility (defined in config.erb)
61
68
  \reviewbackcompatibilityhook
@@ -69,6 +76,7 @@
69
76
 
70
77
  %% coverpage
71
78
  \ifdefined\reviewcoverpagecont
79
+ \covermatter
72
80
  \reviewcoverpagecont
73
81
  \fi
74
82
 
@@ -1,13 +1,14 @@
1
1
  \documentclass[dvipdfmx]{review-jsbook}
2
2
  \makeatletter
3
- \def\review@reviewversion{3.0.0.preview3}
3
+ \def\review@reviewversion{3.2.0}
4
4
  \def\review@texcompiler{uplatex}
5
5
  \def\review@documentclass{review-jsbook}
6
6
 
7
7
  \def\review@booktitlename{Re:VIEW Sample Book}
8
8
 
9
+ \def\review@autnames{anonymous}
9
10
 
10
- \def\review@titlepageauthors{}
11
+ \def\review@titlepageauthors{anonymous 著}
11
12
  \def\review@date{2011{-}01{-}01}
12
13
 
13
14
  \def\review@bookname{sample}
@@ -34,6 +35,7 @@
34
35
  \def\review@tablename{表}
35
36
  \def\review@appendixname{付録}
36
37
 
38
+ \def\review@usecovernombre{true}
37
39
  \def\review@titlepage{true}
38
40
  \def\reviewprofilepagecont{\thispagestyle{empty}\chapter*{Profile}
39
41
  some profile
@@ -48,7 +50,8 @@ some ad content
48
50
  \null}
49
51
 
50
52
  \def\review@pubhistories{2011年1月1日 発行}
51
- \def\review@colophonnames{}
53
+ \def\review@colophonnames{著 者 & anonymous \\
54
+ }
52
55
 
53
56
  \def\reviewprefacefiles{}
54
57
  \def\reviewchapterfiles{}
@@ -63,10 +66,14 @@ some ad content
63
66
  \DeclareRobustCommand{\reviewincludegraphics}[2][]{%
64
67
  \includegraphics[##1]{##2}}
65
68
  }
69
+ \@ifundefined{covermatter}{% for 4.0.0 compatibility
70
+ \def\covermatter{}
71
+ }
66
72
  }
67
73
 
68
74
  \makeatother
69
75
 
76
+ \usepackage{reviewmacro}
70
77
 
71
78
  %% backward compatibility (defined in config.erb)
72
79
  \reviewbackcompatibilityhook
@@ -80,6 +87,7 @@ some ad content
80
87
 
81
88
  %% coverpage
82
89
  \ifdefined\reviewcoverpagecont
90
+ \covermatter
83
91
  \reviewcoverpagecont
84
92
  \fi
85
93
 
@@ -32,7 +32,7 @@ class BookTest < Test::Unit::TestCase
32
32
  def test_read_chaps
33
33
  Dir.mktmpdir do |dir|
34
34
  book = Book::Base.new(dir)
35
- assert_equal '', book.read_chaps
35
+ assert_equal [], book.read_chaps
36
36
 
37
37
  chaps_path = File.join(dir, 'CHAPS')
38
38
  re1_path = File.join(dir, "123#{book.ext}")
@@ -42,16 +42,16 @@ class BookTest < Test::Unit::TestCase
42
42
  File.open(re1_path, 'w') { |o| o.print "123\n" }
43
43
  File.open(re2_path, 'w') { |o| o.print "456\n" }
44
44
 
45
- assert_equal "abc\n", book.read_chaps
45
+ assert_equal ['abc'], book.read_chaps
46
46
 
47
47
  File.unlink(chaps_path)
48
- assert_equal "#{re1_path}\n#{re2_path}", book.read_chaps
48
+ assert_equal [re1_path, re2_path], book.read_chaps
49
49
 
50
50
  File.unlink(re1_path)
51
- assert_equal re2_path, book.read_chaps
51
+ assert_equal [re2_path], book.read_chaps
52
52
 
53
53
  File.unlink(re2_path)
54
- assert_equal '', book.read_chaps
54
+ assert_equal [], book.read_chaps
55
55
  end
56
56
  end
57
57
 
@@ -68,17 +68,18 @@ class BookTest < Test::Unit::TestCase
68
68
  File.open(chaps_path, 'w') { |o| o.print chaps_content }
69
69
 
70
70
  assert book.part_exist?
71
- assert_equal chaps_content, book.read_part
71
+ assert_equal %w[abc], book.read_part
72
72
 
73
+ ## do not cache PART data
73
74
  File.open(chaps_path, 'w') { |o| o.print "XYZ\n" }
74
- assert_equal chaps_content, book.read_part
75
+ assert_equal %w[XYZ], book.read_part
75
76
  end
76
77
  end
77
78
 
78
79
  def test_read_appendix
79
80
  Dir.mktmpdir do |dir|
80
81
  book = Book::Base.new(dir)
81
- assert_equal '', book.read_appendix
82
+ assert_equal [], book.read_appendix
82
83
 
83
84
  post_path = File.join(dir, 'POSTDEF')
84
85
  re1_path = File.join(dir, "123#{book.ext}")
@@ -88,23 +89,23 @@ class BookTest < Test::Unit::TestCase
88
89
  File.open(re1_path, 'w') { |o| o.print "123\n" }
89
90
  File.open(re2_path, 'w') { |o| o.print "456\n" }
90
91
 
91
- assert_equal "abc\n", book.read_appendix
92
+ assert_equal ['abc'], book.read_appendix
92
93
 
93
94
  File.unlink(post_path)
94
- assert_equal "#{re1_path}\n#{re2_path}", book.read_appendix
95
+ assert_equal [re1_path, re2_path], book.read_appendix
95
96
 
96
97
  File.unlink(re1_path)
97
- assert_equal re2_path, book.read_appendix
98
+ assert_equal [re2_path], book.read_appendix
98
99
 
99
100
  File.unlink(re2_path)
100
- assert_equal '', book.read_appendix
101
+ assert_equal [], book.read_appendix
101
102
  end
102
103
  end
103
104
 
104
105
  def test_read_postdef
105
106
  Dir.mktmpdir do |dir|
106
107
  book = Book::Base.new(dir)
107
- assert_equal '', book.read_postdef
108
+ assert_equal [], book.read_postdef
108
109
 
109
110
  post_path = File.join(dir, 'POSTDEF')
110
111
  re1_path = File.join(dir, "123#{book.ext}")
@@ -114,10 +115,10 @@ class BookTest < Test::Unit::TestCase
114
115
  File.open(re1_path, 'w') { |o| o.print "123\n" }
115
116
  File.open(re2_path, 'w') { |o| o.print "456\n" }
116
117
 
117
- assert_equal '', book.read_postdef
118
+ assert_equal [], book.read_postdef
118
119
 
119
120
  File.unlink(post_path)
120
- assert_equal '', book.read_postdef
121
+ assert_equal [], book.read_postdef
121
122
  end
122
123
  end
123
124
 
@@ -248,15 +249,15 @@ EOC
248
249
  ''
249
250
  ]
250
251
  ]
251
- ].each do |n_parts, chaps_text, parts_text, part_names|
252
+ ].each do |n_parts, chaps, parts, part_names|
252
253
  n_test += 1
253
254
  Dir.mktmpdir do |dir|
254
255
  book = Book::Base.new(dir)
255
256
  chaps_path = File.join(dir, 'CHAPS')
256
- File.open(chaps_path, 'w') { |o| o.print chaps_text }
257
- if parts_text
257
+ File.open(chaps_path, 'w') { |o| o.print chaps }
258
+ if parts
258
259
  parts_path = File.join(dir, 'PART')
259
- File.open(parts_path, 'w') { |o| o.print parts_text }
260
+ File.open(parts_path, 'w') { |o| o.print parts }
260
261
  end
261
262
 
262
263
  parts = book.instance_eval { parse_chapters }
@@ -412,6 +413,51 @@ EOC
412
413
  end
413
414
  end
414
415
 
416
+ def test_parts_in_file
417
+ mktmpbookdir do |_dir, book, _files|
418
+ assert book.parts_in_file.empty?
419
+ assert !book.part(0)
420
+ assert !book.part(1)
421
+
422
+ tmp = []
423
+ book.each_part { tmp << true }
424
+ assert tmp.empty?
425
+ end
426
+
427
+ mktmpbookdir 'CHAPS' => "ch1.re\nch2.re\n\nch3.re\n",
428
+ 'PART' => "foo\nbar\n",
429
+ 'ch1.re' => "= ch1\n\n", 'ch2.re' => "= ch2\n\n",
430
+ 'ch3.re' => "= ch3\n\n" do |_dir, book, _files|
431
+ parts = book.parts_in_file
432
+ assert_equal 0, parts.size
433
+ assert !book.part(0)
434
+ assert_equal 'foo', book.part(1).name
435
+ assert_equal 'bar', book.part(2).name
436
+ assert !book.part(3)
437
+
438
+ tmp = []
439
+ book.each_part { |p| tmp << p.number }
440
+ assert_equal [1, 2], tmp
441
+ end
442
+
443
+ mktmpbookdir 'CHAPS' => "ch1.re\nch2.re\n\nch3.re\n",
444
+ 'PART' => "foo.re\nbar.re\n",
445
+ 'foo.re' => "= part1\n\n", 'bar.re' => "= part2\n\n",
446
+ 'ch1.re' => "= ch1\n\n", 'ch2.re' => "= ch2\n\n",
447
+ 'ch3.re' => "= ch3\n\n" do |_dir, book, _files|
448
+ parts = book.parts_in_file
449
+ assert_equal 2, parts.size
450
+ assert !book.part(0)
451
+ assert_equal 'foo', book.part(1).name
452
+ assert_equal 'bar', book.part(2).name
453
+ assert !book.part(3)
454
+
455
+ tmp = []
456
+ book.each_part { |p| tmp << p.number }
457
+ assert_equal [1, 2], tmp
458
+ end
459
+ end
460
+
415
461
  def test_chapters
416
462
  mktmpbookdir 'CHAPS' => "ch1\nch2\n\nch3" do |_dir, book, _files|
417
463
  chapters = book.chapters
@@ -7,61 +7,43 @@ class CatalogTest < Test::Unit::TestCase
7
7
 
8
8
  def test_predef
9
9
  sut = Catalog.new(yaml)
10
- exp = <<-EOS
11
- pre01.re
12
- pre02.re
13
- EOS
14
- assert_equal(exp.chomp, sut.predef)
10
+ exp = %w[pre01.re pre02.re]
11
+ assert_equal(exp, sut.predef)
15
12
  end
16
13
 
17
14
  def test_chaps
18
15
  sut = Catalog.new(yaml)
19
- exp = <<-EOS
20
- ch01.re
21
- ch02.re
22
- EOS
23
- assert_equal(exp.chomp, sut.chaps)
16
+ exp = %w[ch01.re ch02.re]
17
+ assert_equal(exp, sut.chaps)
24
18
  end
25
19
 
26
20
  def test_chaps_empty
27
21
  yaml = StringIO.new
28
22
  sut = Catalog.new(yaml)
29
- assert_equal('', sut.chaps)
23
+ assert_equal([], sut.chaps)
30
24
  end
31
25
 
32
26
  def test_appendix
33
27
  sut = Catalog.new(yaml)
34
- exp = <<-EOS
35
- post01.re
36
- post02.re
37
- EOS
38
- assert_equal(exp.chomp, sut.appendix)
28
+ exp = %w[post01.re post02.re]
29
+ assert_equal(exp, sut.appendix)
39
30
  end
40
31
 
41
32
  def test_chaps_with_parts
42
33
  sut = Catalog.new(yaml_with_parts)
43
- exp = <<-EOS
44
- ch01.re
45
- ch02.re
46
- ch03.re
47
- ch04.re
48
- ch05.re
49
- EOS
50
- assert_equal(exp.chomp, sut.chaps)
34
+ exp = %w[ch01.re ch02.re ch03.re ch04.re ch05.re]
35
+ assert_equal(exp, sut.chaps)
51
36
  end
52
37
 
53
38
  def test_parts
54
39
  sut = Catalog.new(yaml_with_parts)
55
- exp = <<-EOS
56
- part1.re
57
- part2.re
58
- EOS
59
- assert_equal(exp.chomp, sut.parts)
40
+ exp = %w[part1.re part2.re]
41
+ assert_equal(exp, sut.parts)
60
42
  end
61
43
 
62
44
  def test_parts_with_empty
63
45
  sut = Catalog.new(yaml)
64
- assert_equal('', sut.parts)
46
+ assert_equal([], sut.parts)
65
47
  end
66
48
 
67
49
  def test_empty_parts
@@ -80,20 +62,14 @@ part2.re
80
62
 
81
63
  def test_postdef
82
64
  sut = Catalog.new(yaml)
83
- exp = <<-EOS
84
- back01.re
85
- back02.re
86
- EOS
87
- assert_equal(exp.chomp, sut.postdef)
65
+ exp = %w[back01.re back02.re]
66
+ assert_equal(exp, sut.postdef)
88
67
  end
89
68
 
90
69
  def test_from_object
91
70
  sut = Catalog.new(yaml_hash)
92
- exp = <<-EOS
93
- ch01.re
94
- ch02.re
95
- EOS
96
- assert_equal(exp.chomp, sut.chaps)
71
+ exp = %w[ch01.re ch02.re]
72
+ assert_equal(exp, sut.chaps)
97
73
  end
98
74
 
99
75
  def test_validate
@@ -154,7 +130,7 @@ ch02.re
154
130
  private
155
131
 
156
132
  def yaml
157
- StringIO.new <<-EOS
133
+ StringIO.new(<<-EOS)
158
134
 
159
135
  PREDEF:
160
136
  - pre01.re
@@ -182,7 +158,7 @@ POSTDEF:
182
158
  end
183
159
 
184
160
  def yaml_with_parts
185
- StringIO.new <<-EOS
161
+ StringIO.new(<<-EOS)
186
162
  CHAPS:
187
163
  - ch01.re
188
164
  - part1.re: