test/test_epub3maker.rb in review-2.3.0 vs test/test_epub3maker.rb in review-2.4.0
- old
+ new
@@ -1,45 +1,44 @@
-# encoding: utf-8
-
require 'test_helper'
require 'epubmaker'
require 'review/epubmaker'
class EPUB3MakerTest < Test::Unit::TestCase
include EPUBMaker
def setup
@producer = Producer.new
- @producer.merge_params({
- "bookname" => "sample",
- "title" => "Sample Book",
- "epubversion" => 3,
- "urnid" => "http://example.jp/",
- "date" => "2011-01-01",
- "language" => "en",
- "modified" => "2014-12-13T14:15:16Z"
- })
+ @producer.merge_config(
+ 'bookname' => 'sample',
+ 'title' => 'Sample Book',
+ 'epubversion' => 3,
+ 'urnid' => 'http://example.jp/',
+ 'date' => '2011-01-01',
+ 'language' => 'en',
+ 'modified' => '2014-12-13T14:15:16Z',
+ 'titlepage' => nil
+ )
@output = StringIO.new
end
def test_initialize
assert Producer.new
end
def test_resource_en
- @producer.merge_params({"language" => "en"})
- assert_equal "Table of Contents", @producer.res.v("toctitle")
+ @producer.merge_config('language' => 'en')
+ assert_equal 'Table of Contents', @producer.res.v('toctitle')
end
def test_resource_ja
- @producer.merge_params({"language" => "ja"})
- assert_equal "目次", @producer.res.v("toctitle")
+ @producer.merge_config('language' => 'ja')
+ assert_equal '目次', @producer.res.v('toctitle')
end
def test_mimetype
@producer.mimetype(@output)
- assert_equal %Q[application/epub+zip], @output.string
+ assert_equal 'application/epub+zip', @output.string
end
def test_container
@producer.container(@output)
expect = <<EOT
@@ -80,11 +79,14 @@
EOT
assert_equal expect, @output.string
end
def test_stage1_opf_ebpaj
- @producer.merge_params({"opf_prefix"=>{"ebpaj"=>"http://www.ebpaj.jp/"},"opf_meta"=>{"ebpaj:guide-version" => "1.1.2"}})
+ @producer.merge_config(
+ 'opf_prefix' => { 'ebpaj' => 'http://www.ebpaj.jp/' },
+ 'opf_meta' => { 'ebpaj:guide-version' => '1.1.2' }
+ )
@producer.opf(@output)
expect = <<EOT
<?xml version="1.0" encoding="UTF-8"?>
<package version="3.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId" xml:lang="en" prefix="ebpaj: http://www.ebpaj.jp/">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
@@ -110,13 +112,13 @@
EOT
assert_equal expect, @output.string
end
def test_stage1_opf_fileas
- @producer.params["title"] = {"name" => "これは書籍です", "file-as" => "コレハショセキデス"}
- @producer.params["aut"] = [{"name" => "著者A", "file-as" => "チョシャA"}, {"name" => "著者B", "file-as" => "チョシャB"}]
- @producer.params["pbl"] = [{"name" => "出版社", "file-as" => "シュッパンシャ"}]
+ @producer.config['title'] = { 'name' => 'これは書籍です', 'file-as' => 'コレハショセキデス' }
+ @producer.config['aut'] = [{ 'name' => '著者A', 'file-as' => 'チョシャA' }, { 'name' => '著者B', 'file-as' => 'チョシャB' }]
+ @producer.config['pbl'] = [{ 'name' => '出版社', 'file-as' => 'シュッパンシャ' }]
@producer.opf(@output)
expect = <<EOT
<?xml version="1.0" encoding="UTF-8"?>
<package version="3.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId" xml:lang="en">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
@@ -177,19 +179,19 @@
assert_equal expect, @output.string
end
def stage2
# add one item
- @producer.contents << Content.new({"file" => "ch01.html", "title" => "CH01", "level" => 1})
+ @producer.contents << Content.new({ 'file' => 'ch01.html', 'title' => 'CH01', 'level' => 1 })
end
def test_stage2_add_l1item
stage2
- expect = EPUBMaker::Content.new("ch01.html",
- "ch01-html",
- "application/xhtml+xml",
- "CH01",
+ expect = EPUBMaker::Content.new('ch01.html',
+ 'ch01-html',
+ 'application/xhtml+xml',
+ 'CH01',
1)
assert_equal expect, @producer.contents[0]
end
def test_stage2_opf
@@ -247,53 +249,53 @@
assert_equal expect, @output.string
end
def stage3
# add more items
- @producer.contents << Content.new({"file" => "ch01.html", "title" => "CH01<>&\"", "level" => 1})
- @producer.contents << Content.new({"file" => "ch02.html", "title" => "CH02", "level" => 1})
- @producer.contents << Content.new({"file" => "ch02.html#S1", "title" => "CH02.1", "level" => 2})
- @producer.contents << Content.new({"file" => "ch02.html#S1.1", "title" => "CH02.1.1", "level" => 3})
- @producer.contents << Content.new({"file" => "ch02.html#S1.1.1", "title" => "CH02.1.1.1", "level" => 4})
- @producer.contents << Content.new({"file" => "ch02.html#S1.1.1.1", "title" => "CH02.1.1.1.1", "level" => 5})
- @producer.contents << Content.new({"file" => "ch02.html#S1.1.2", "title" => "CH02.1.1.2", "level" => 4})
- @producer.contents << Content.new({"file" => "ch02.html#S2", "title" => "CH02.2", "level" => 2})
- @producer.contents << Content.new({"file" => "ch02.html#S2.1", "title" => "CH02.2.1", "level" => 3})
- @producer.contents << Content.new({"file" => "ch03.html", "title" => "CH03", "level" => 1, "properties" => ["mathml"]})
- @producer.contents << Content.new({"file" => "ch03.html#S1", "title" => "CH03.1", "level" => 2})
- @producer.contents << Content.new({"file" => "ch03.html#S1.1", "title" => "CH03.1.1", "level" => 3})
- @producer.contents << Content.new({"file" => "ch04.html", "title" => "CH04", "level" => 1})
- @producer.contents << Content.new({"file" => "sample.png"})
- @producer.contents << Content.new({"file" => "sample.jpg"})
- @producer.contents << Content.new({"file" => "sample.JPEG"})
- @producer.contents << Content.new({"file" => "sample.SvG"})
- @producer.contents << Content.new({"file" => "sample.GIF"})
- @producer.contents << Content.new({"file" => "sample.css"})
+ @producer.contents << Content.new({ 'file' => 'ch01.html', 'title' => %Q(CH01<>&"), 'level' => 1 })
+ @producer.contents << Content.new({ 'file' => 'ch02.html', 'title' => 'CH02', 'level' => 1 })
+ @producer.contents << Content.new({ 'file' => 'ch02.html#S1', 'title' => 'CH02.1', 'level' => 2 })
+ @producer.contents << Content.new({ 'file' => 'ch02.html#S1.1', 'title' => 'CH02.1.1', 'level' => 3 })
+ @producer.contents << Content.new({ 'file' => 'ch02.html#S1.1.1', 'title' => 'CH02.1.1.1', 'level' => 4 })
+ @producer.contents << Content.new({ 'file' => 'ch02.html#S1.1.1.1', 'title' => 'CH02.1.1.1.1', 'level' => 5 })
+ @producer.contents << Content.new({ 'file' => 'ch02.html#S1.1.2', 'title' => 'CH02.1.1.2', 'level' => 4 })
+ @producer.contents << Content.new({ 'file' => 'ch02.html#S2', 'title' => 'CH02.2', 'level' => 2 })
+ @producer.contents << Content.new({ 'file' => 'ch02.html#S2.1', 'title' => 'CH02.2.1', 'level' => 3 })
+ @producer.contents << Content.new({ 'file' => 'ch03.html', 'title' => 'CH03', 'level' => 1, 'properties' => ['mathml'] })
+ @producer.contents << Content.new({ 'file' => 'ch03.html#S1', 'title' => 'CH03.1', 'level' => 2 })
+ @producer.contents << Content.new({ 'file' => 'ch03.html#S1.1', 'title' => 'CH03.1.1', 'level' => 3 })
+ @producer.contents << Content.new({ 'file' => 'ch04.html', 'title' => 'CH04', 'level' => 1 })
+ @producer.contents << Content.new({ 'file' => 'sample.png' })
+ @producer.contents << Content.new({ 'file' => 'sample.jpg' })
+ @producer.contents << Content.new({ 'file' => 'sample.JPEG' })
+ @producer.contents << Content.new({ 'file' => 'sample.SvG' })
+ @producer.contents << Content.new({ 'file' => 'sample.GIF' })
+ @producer.contents << Content.new({ 'file' => 'sample.css' })
end
def test_stage3_add_various_items
stage3
expect = [
- Content.new("ch01.html", "ch01-html", "application/xhtml+xml", "CH01<>&\"", 1),
- Content.new("ch02.html", "ch02-html", "application/xhtml+xml", "CH02", 1),
- Content.new("ch02.html#S1", "ch02-html#S1","html#s1","CH02.1", 2),
- Content.new("ch02.html#S1.1", "ch02-html#S1-1", "1", "CH02.1.1", 3),
- Content.new("ch02.html#S1.1.1", "ch02-html#S1-1-1","1", "CH02.1.1.1", 4),
- Content.new("ch02.html#S1.1.1.1", "ch02-html#S1-1-1-1", "1","CH02.1.1.1.1", 5),
- Content.new("ch02.html#S1.1.2", "ch02-html#S1-1-2", "2", "CH02.1.1.2", 4),
- Content.new("ch02.html#S2", "ch02-html#S2", "html#s2", "CH02.2", 2),
- Content.new("ch02.html#S2.1", "ch02-html#S2-1", "1", "CH02.2.1", 3),
- Content.new("ch03.html", "ch03-html", "application/xhtml+xml", "CH03", 1, nil, ["mathml"]),
- Content.new("ch03.html#S1", "ch03-html#S1", "html#s1", "CH03.1", 2),
- Content.new("ch03.html#S1.1", "ch03-html#S1-1", "1", "CH03.1.1", 3),
- Content.new("ch04.html", "ch04-html", "application/xhtml+xml", "CH04", 1),
- Content.new("sample.png", "sample-png", "image/png"),
- Content.new("sample.jpg", "sample-jpg", "image/jpeg"),
- Content.new("sample.JPEG", "sample-JPEG", "image/jpeg"),
- Content.new("sample.SvG", "sample-SvG", "image/svg+xml"),
- Content.new("sample.GIF", "sample-GIF", "image/gif"),
- Content.new("sample.css", "sample-css", "text/css")
+ Content.new('ch01.html', 'ch01-html', 'application/xhtml+xml', %Q(CH01<>&"), 1),
+ Content.new('ch02.html', 'ch02-html', 'application/xhtml+xml', 'CH02', 1),
+ Content.new('ch02.html#S1', 'ch02-html#S1', 'html#s1', 'CH02.1', 2),
+ Content.new('ch02.html#S1.1', 'ch02-html#S1-1', '1', 'CH02.1.1', 3),
+ Content.new('ch02.html#S1.1.1', 'ch02-html#S1-1-1', '1', 'CH02.1.1.1', 4),
+ Content.new('ch02.html#S1.1.1.1', 'ch02-html#S1-1-1-1', '1', 'CH02.1.1.1.1', 5),
+ Content.new('ch02.html#S1.1.2', 'ch02-html#S1-1-2', '2', 'CH02.1.1.2', 4),
+ Content.new('ch02.html#S2', 'ch02-html#S2', 'html#s2', 'CH02.2', 2),
+ Content.new('ch02.html#S2.1', 'ch02-html#S2-1', '1', 'CH02.2.1', 3),
+ Content.new('ch03.html', 'ch03-html', 'application/xhtml+xml', 'CH03', 1, nil, ['mathml']),
+ Content.new('ch03.html#S1', 'ch03-html#S1', 'html#s1', 'CH03.1', 2),
+ Content.new('ch03.html#S1.1', 'ch03-html#S1-1', '1', 'CH03.1.1', 3),
+ Content.new('ch04.html', 'ch04-html', 'application/xhtml+xml', 'CH04', 1),
+ Content.new('sample.png', 'sample-png', 'image/png'),
+ Content.new('sample.jpg', 'sample-jpg', 'image/jpeg'),
+ Content.new('sample.JPEG', 'sample-JPEG', 'image/jpeg'),
+ Content.new('sample.SvG', 'sample-SvG', 'image/svg+xml'),
+ Content.new('sample.GIF', 'sample-GIF', 'image/gif'),
+ Content.new('sample.css', 'sample-css', 'text/css')
]
assert_equal expect, @producer.contents
end
@@ -401,11 +403,11 @@
EOT
assert_equal expect, @output.string
end
def test_stage3_flat
- @producer.merge_params({"epubmaker" => {"flattoc" => true, "flattocindent" => false}})
+ @producer.merge_config('epubmaker' => { 'flattoc' => true, 'flattocindent' => false })
stage3
@producer.mytoc(@output)
expect = <<EOT
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
@@ -452,11 +454,11 @@
assert_equal expect, @output.string
end
def test_stage3_cover_with_image
stage3
- @producer.params["coverimage"] = "sample.png"
+ @producer.config['coverimage'] = 'sample.png'
@producer.cover(@output)
expect = <<EOT
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="en">
@@ -474,12 +476,12 @@
EOT
assert_equal expect, @output.string
end
def test_colophon_default
- @producer.params["aut"] = ["Mr.Smith"]
- @producer.params["pbl"] = ["BLUEPRINT"]
+ @producer.config['aut'] = ['Mr.Smith']
+ @producer.config['pbl'] = ['BLUEPRINT']
@producer.colophon(@output)
expect = <<EOT
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="en">
@@ -504,13 +506,13 @@
EOT
assert_equal expect, @output.string
end
def test_colophon_pht
- @producer.params["aut"] = ["Mr.Smith"]
- @producer.params["pbl"] = ["BLUEPRINT"]
- @producer.params["pht"] = ["Mrs.Smith"]
+ @producer.config['aut'] = ['Mr.Smith']
+ @producer.config['pbl'] = ['BLUEPRINT']
+ @producer.config['pht'] = ['Mrs.Smith']
@producer.colophon(@output)
expect = <<EOT
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="en">
@@ -536,75 +538,70 @@
EOT
assert_equal expect, @output.string
end
def test_colophon_history
- @producer.params["aut"] = ["Mr.Smith"]
- @producer.params["pbl"] = ["BLUEPRINT"]
- @producer.params["pht"] = ["Mrs.Smith"]
- @producer.merge_params({"language" => "ja"})
- history = @producer.instance_eval{ @epub.colophon_history }
+ @producer.config['aut'] = ['Mr.Smith']
+ @producer.config['pbl'] = ['BLUEPRINT']
+ @producer.config['pht'] = ['Mrs.Smith']
+ @producer.merge_config('language' => 'ja')
+ history = @producer.instance_eval { @epub.colophon_history }
expect = <<EOT
<div class="pubhistory">
<p>2011年1月1日 発行</p>
</div>
EOT
assert_equal expect, history
end
def test_colophon_history_2
- @producer.params["aut"] = ["Mr.Smith"]
- @producer.params["pbl"] = ["BLUEPRINT"]
- @producer.params["pht"] = ["Mrs.Smith"]
- @producer.merge_params({"language" => "ja",
- "history" => [[
- "2011-08-03 v1.0.0版発行",
- "2012-02-15 v1.1.0版発行",
- ]] })
- history = @producer.instance_eval{ @epub.colophon_history }
+ @producer.config['aut'] = ['Mr.Smith']
+ @producer.config['pbl'] = ['BLUEPRINT']
+ @producer.config['pht'] = ['Mrs.Smith']
+ @producer.merge_config(
+ 'language' => 'ja',
+ 'history' => [['2011-08-03 v1.0.0版発行', '2012-02-15 v1.1.0版発行']]
+ )
+ history = @producer.instance_eval { @epub.colophon_history }
expect = <<EOT
<div class="pubhistory">
<p>2011年8月3日 v1.0.0版発行</p>
<p>2012年2月15日 v1.1.0版発行</p>
</div>
EOT
assert_equal expect, history
end
def test_colophon_history_date
- @producer.params["aut"] = ["Mr.Smith"]
- @producer.params["pbl"] = ["BLUEPRINT"]
- @producer.params["pht"] = ["Mrs.Smith"]
- @producer.merge_params({"language" => "ja",
- "history" => [[
- "2011-08-03",
- "2012-02-15",
- ]] })
- history = @producer.instance_eval{ @epub.colophon_history }
+ @producer.config['aut'] = ['Mr.Smith']
+ @producer.config['pbl'] = ['BLUEPRINT']
+ @producer.config['pht'] = ['Mrs.Smith']
+ @producer.merge_config(
+ 'language' => 'ja',
+ 'history' => [['2011-08-03', '2012-02-15']]
+ )
+ history = @producer.instance_eval { @epub.colophon_history }
expect = <<EOT
<div class="pubhistory">
<p>2011年8月3日 初版第1刷 発行</p>
<p>2012年2月15日 初版第2刷 発行</p>
</div>
EOT
assert_equal expect, history
end
def test_colophon_history_date2
- @producer.params["aut"] = ["Mr.Smith"]
- @producer.params["pbl"] = ["BLUEPRINT"]
- @producer.params["pht"] = ["Mrs.Smith"]
- @producer.merge_params({"language" => "ja",
- "history" => [[
- "2011-08-03",
- "2012-02-15",
- ],[
- "2012-10-01",
- ],[
- "2013-03-01",
- ]] })
- history = @producer.instance_eval{ @epub.colophon_history }
+ @producer.config['aut'] = ['Mr.Smith']
+ @producer.config['pbl'] = ['BLUEPRINT']
+ @producer.config['pht'] = ['Mrs.Smith']
+ @producer.merge_config(
+ 'language' => 'ja',
+ 'history' => [['2011-08-03', '2012-02-15'],
+ ['2012-10-01'],
+ ['2013-03-01']]
+ )
+ history = @producer.instance_eval { @epub.colophon_history }
expect = <<EOT
<div class="pubhistory">
<p>2011年8月3日 初版第1刷 発行</p>
<p>2012年2月15日 初版第2刷 発行</p>
<p>2012年10月1日 第2版第1刷 発行</p>
@@ -615,11 +612,11 @@
end
def test_detect_mathml
Dir.mktmpdir do |dir|
epubmaker = ReVIEW::EPUBMaker.new
- path = File.join(dir,"test.html")
+ path = File.join(dir, 'test.html')
html = <<EOT
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="en">
<head>
@@ -627,26 +624,24 @@
<meta name="generator" content="Re:VIEW" />
<title>Colophon</title>
</head>
<body>
<div>
- <p><span class=\"equation\"><math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mfrac><mrow><mo stretchy='false'>-</mo><mi>b</mi><mo stretchy='false'>±</mo><msqrt><mrow><msup><mi>b</mi><mn>2</mn></msup><mo stretchy='false'>-</mo><mn>4</mn><mi>a</mi><mi>c</mi></mrow></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac></math></span></p>
+ <p><span class="equation"><math xmlns='http://www.w3.org/1998/Math/MathML' display='inline'><mfrac><mrow><mo stretchy='false'>-</mo><mi>b</mi><mo stretchy='false'>±</mo><msqrt><mrow><msup><mi>b</mi><mn>2</mn></msup><mo stretchy='false'>-</mo><mn>4</mn><mi>a</mi><mi>c</mi></mrow></msqrt></mrow><mrow><mn>2</mn><mi>a</mi></mrow></mfrac></math></span></p>
</div>
</body>
</html>
EOT
- File.open(path, "w") do |f|
- f.write(html)
- end
- assert_equal ["mathml"], epubmaker.detect_properties(path)
+ File.open(path, 'w') { |f| f.write(html) }
+ assert_equal ['mathml'], epubmaker.detect_properties(path)
end
end
def test_detect_mathml_ns
Dir.mktmpdir do |dir|
epubmaker = ReVIEW::EPUBMaker.new
- path = File.join(dir,"test.html")
+ path = File.join(dir, 'test.html')
html = <<EOT
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops" xmlns:ops="http://www.idpf.org/2007/ops" xml:lang="en">
<head>
@@ -654,17 +649,41 @@
<meta name="generator" content="Re:VIEW" />
<title>Colophon</title>
</head>
<body>
<div>
- <p><span class=\"equation\"><m:math xmlns:m='http://www.w3.org/1998/Math/MathML' display='inline'><m:mfrac><m:mrow><m:mo stretchy='false'>-</m:mo><m:mi>b</m:mi><m:mo stretchy='false'>±</m:mo><m:msqrt><m:mrow><m:msup><m:mi>b</m:mi><m:mn>2</m:mn></m:msup><m:mo stretchy='false'>-</m:mo><m:mn>4</m:mn><m:mi>a</m:mi><m:mi>c</m:mi></m:mrow></m:msqrt></m:mrow><m:mrow><m:mn>2</m:mn><m:mi>a</m:mi></m:mrow></m:mfrac></m:math></span></p>
+ <p><span class="equation"><m:math xmlns:m='http://www.w3.org/1998/Math/MathML' display='inline'><m:mfrac><m:mrow><m:mo stretchy='false'>-</m:mo><m:mi>b</m:mi><m:mo stretchy='false'>±</m:mo><m:msqrt><m:mrow><m:msup><m:mi>b</m:mi><m:mn>2</m:mn></m:msup><m:mo stretchy='false'>-</m:mo><m:mn>4</m:mn><m:mi>a</m:mi><m:mi>c</m:mi></m:mrow></m:msqrt></m:mrow><m:mrow><m:mn>2</m:mn><m:mi>a</m:mi></m:mrow></m:mfrac></m:math></span></p>
</div>
</body>
</html>
EOT
- File.open(path, "w") do |f|
- f.write(html)
+ File.open(path, 'w') { |f| f.write(html) }
+ assert_equal ['mathml'], epubmaker.detect_properties(path)
+ end
+ end
+
+ def test_image_size
+ begin
+ require 'image_size'
+ rescue LoadError
+ $stderr.puts 'skip test_image_size (cannot find image_size.rb)'
+ return true
+ end
+ epubmaker = ReVIEW::EPUBMaker.new
+ epubmaker.instance_eval do
+ def warn(msg)
+ $stderr.puts msg
end
- assert_equal ["mathml"], epubmaker.detect_properties(path)
end
+ _out, err = capture_output do
+ epubmaker.check_image_size(assets_dir, 5500, %w[png gif jpg jpeg svg ttf woff otf])
+ end
+
+ expected = <<-EOS
+large.gif: 250x150 exceeds a limit. suggeted value is 95x57
+large.jpg: 250x150 exceeds a limit. suggeted value is 95x57
+large.png: 250x150 exceeds a limit. suggeted value is 95x57
+large.svg: 250x150 exceeds a limit. suggeted value is 95x57
+EOS
+ assert_equal expected, err
end
end