# encoding: utf-8 require 'test_helper' require 'epubmaker' class EPUBMakerTest < Test::Unit::TestCase include EPUBMaker def setup @producer = Producer.new @producer.merge_params({ "bookname" => "sample", "title" => "Sample Book", "epubversion" => 2, "urnid" => "http://example.jp/", "date" => "2011-01-01", "language" => "en", }) @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") end def test_resource_ja @producer.merge_params({"language" => "ja"}) assert_equal "目次", @producer.res.v("toctitle") end def test_mimetype @producer.mimetype(@output) assert_equal %Q[application/epub+zip], @output.string end def test_container @producer.container(@output) expect = < EOT assert_equal expect, @output.string end def test_stage1_opf @producer.opf(@output) expect = < Sample Book en 2011-01-01 http://example.jp/ EOT assert_equal expect, @output.string end def test_stage1_ncx @producer.ncx(@output) expect = < Sample Book Sample Book EOT assert_equal expect, @output.string end def stage2 # add one item @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", 1) assert_equal expect, @producer.contents[0] end def test_stage2_opf stage2 @producer.opf(@output) expect = < Sample Book en 2011-01-01 http://example.jp/ EOT assert_equal expect, @output.string end def test_stage2_ncx stage2 @producer.ncx(@output) expect = < Sample Book Sample Book CH01 EOT 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}) @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), 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 def test_stage3_opf stage3 @producer.opf(@output) expect = < Sample Book en 2011-01-01 http://example.jp/ EOT assert_equal expect, @output.string end def test_stage3_ncx stage3 @producer.ncx(@output) expect = < Sample Book Sample Book CH01<>&" CH02 CH02.1 CH02.1.1 CH02.1.1.1 CH02.1.1.1.1 CH02.1.1.2 CH02.2 CH02.2.1 CH03 CH03.1 CH03.1.1 CH04 EOT assert_equal expect, @output.string end def test_stage3_mytoc stage3 @producer.mytoc(@output) expect = < Table of Contents

Table of Contents

EOT assert_equal expect, @output.string end def test_stage3_flat @producer.merge_params({"epubmaker" => {"flattoc" => true, "flattocindent" => false}}) stage3 @producer.mytoc(@output) expect = < Table of Contents

Table of Contents

EOT assert_equal expect, @output.string end def test_stage3_cover stage3 @producer.cover(@output) expect = < Sample Book

Sample Book

EOT assert_equal expect, @output.string end def test_stage3_cover_with_image stage3 @producer.params["coverimage"] = "sample.png" @producer.cover(@output) expect = < Sample Book
Sample Book
EOT assert_equal expect, @output.string end def test_colophon_default @producer.params["aut"] = ["Mr.Smith"] @producer.params["pbl"] = ["BLUEPRINT"] @producer.colophon(@output) expect = < Colophon

Sample Book

published by Jan. 1, 2011

AuthorMr.Smith
PublisherBLUEPRINT
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.colophon(@output) expect = < Colophon

Sample Book

published by Jan. 1, 2011

AuthorMr.Smith
PublisherBLUEPRINT
Director of PhotographyMrs.Smith
EOT assert_equal expect, @output.string end # def test_duplicate_id # stage3 # assert_raise(Error) do # @producer.contents << Content.new({"file" => "ch02.html#S1", "title" => "CH02.1", "level" => 2}) # end # end end