spec/outline_spec.rb in prawn-0.15.0 vs spec/outline_spec.rb in prawn-1.0.0.rc1
- old
+ new
@@ -14,41 +14,41 @@
page :destination => 2, :title => 'Page 2'
end
end
end
end
-
- describe "outline encoding" do
- it "should store all outline titles as UTF-16" do
- render_and_find_objects
- @hash.values.each do |obj|
- if obj.is_a?(Hash) && obj[:Title]
- title = obj[:Title].dup
- title.force_encoding(Encoding::UTF_16LE)
- title.valid_encoding?.should == true
+ if RUBY_VERSION >= "1.9"
+ describe "outline encoding" do
+ it "should store all outline titles as UTF-16" do
+ render_and_find_objects
+ @hash.values.each do |obj|
+ if obj.is_a?(Hash) && obj[:Title]
+ title = obj[:Title].dup
+ title.force_encoding("UTF-16LE")
+ title.valid_encoding?.should == true
+ end
end
end
end
end
-
describe "#generate_outline" do
before(:each) do
render_and_find_objects
end
it "should create a root outline dictionary item" do
- @outline_root.should_not be_nil
+ assert_not_nil @outline_root
end
it "should set the first and last top items of the root outline dictionary item" do
referenced_object(@outline_root[:First]).should == @section_1
referenced_object(@outline_root[:Last]).should == @section_1
end
describe "#create_outline_item" do
it "should create outline items for each section and page" do
- [@section_1, @page_1, @page_2].each {|item| item.should_not be_nil}
+ [@section_1, @page_1, @page_2].each {|item| assert_not_nil item}
end
end
describe "#set_relations, #set_variables_for_block, and #reset_parent" do
it "should link sibling items" do
@@ -68,11 +68,11 @@
describe "#increase_count" do
it "should add the count of all descendant items" do
@outline_root[:Count].should == 3
- @section_1[:Count].abs.should == 2
+ @section_1[:Count].should.abs == 2
@page_1[:Count].should == 0
@page_2[:Count].should == 0
end
end
@@ -85,32 +85,10 @@
end
end
- describe "adding a custom destination" do
- before(:each) do
- @pdf.start_new_page
- @pdf.text "Page 3 with a destination"
- @pdf.add_dest('customdest', @pdf.dest_xyz(200, 200))
- pdf = @pdf
- @pdf.outline.update do
- page :destination => pdf.dest_xyz(200, 200), :title => 'Custom Destination'
- end
- render_and_find_objects
- end
-
- it "should create an outline item" do
- @custom_dest.should_not be_nil
- end
-
- it "should reference the custom destination" do
- referenced_object(@custom_dest[:Dest].first).should == referenced_object(@pages.last)
- end
-
- end
-
describe "addding a section later with outline#section" do
before(:each) do
@pdf.start_new_page
@pdf.text "Page 3. An added section "
@pdf.outline.update do
@@ -120,11 +98,11 @@
end
render_and_find_objects
end
it "should add new outline items to document" do
- [@section_2, @page_3].each { |item| item.should_not be_nil}
+ [@section_2, @page_3].each { |item| assert_not_nil item}
end
it "should reset the last items for root outline dictionary" do
referenced_object(@outline_root[:First]).should == @section_1
referenced_object(@outline_root[:Last]).should == @section_2
@@ -140,62 +118,62 @@
it "should increase the count of root outline dictionary" do
@outline_root[:Count].should == 5
end
- end
-
- describe "#outline.add_subsection_to" do
+ end
+
+ describe "#outline.add_subsection_to" do
context "positioned last" do
-
+
before(:each) do
@pdf.start_new_page
@pdf.text "Page 3. An added subsection "
@pdf.outline.update do
add_subsection_to 'Chapter 1' do
section 'Added SubSection', :destination => 3 do
page :destination => 3, :title => 'Added Page 3'
end
- end
+ end
end
render_and_find_objects
end
-
+
it "should add new outline items to document" do
- [@subsection, @added_page_3].each { |item| item.should_not be_nil}
+ [@subsection, @added_page_3].each { |item| assert_not_nil item}
end
-
+
it "should reset the last item for parent item dictionary" do
referenced_object(@section_1[:First]).should == @page_1
referenced_object(@section_1[:Last]).should == @subsection
end
-
+
it "should set the prev relation for the new subsection to its parent's old last item" do
referenced_object(@subsection[:Prev]).should == @page_2
end
-
-
+
+
it "the subsection should become the next relation for its parent's old last item" do
referenced_object(@page_2[:Next]).should == @subsection
end
-
+
it "should set the first relation for the new subsection" do
referenced_object(@subsection[:First]).should == @added_page_3
end
-
+
it "should set the correct last relation of the added to section" do
referenced_object(@subsection[:Last]).should == @added_page_3
end
-
+
it "should increase the count of root outline dictionary" do
@outline_root[:Count].should == 5
end
-
- end
-
+
+ end
+
context "positioned first" do
-
+
before(:each) do
@pdf.start_new_page
@pdf.text "Page 3. An added subsection "
@pdf.outline.update do
add_subsection_to 'Chapter 1', :first do
@@ -206,18 +184,18 @@
end
render_and_find_objects
end
it "should add new outline items to document" do
- [@subsection, @added_page_3].each { |item| item.should_not be_nil}
+ [@subsection, @added_page_3].each { |item| assert_not_nil item}
end
it "should reset the first item for parent item dictionary" do
referenced_object(@section_1[:First]).should == @subsection
referenced_object(@section_1[:Last]).should == @page_2
end
-
+
it "should set the next relation for the new subsection to its parent's old first item" do
referenced_object(@subsection[:Next]).should == @page_1
end
it "the subsection should become the prev relation for its parent's old first item" do
@@ -235,25 +213,25 @@
it "should increase the count of root outline dictionary" do
@outline_root[:Count].should == 5
end
end
-
+
it "should require an existing title" do
- lambda do
+ assert_raise Prawn::Errors::UnknownOutlineTitle do
@pdf.go_to_page 1
@pdf.start_new_page
@pdf.text "Inserted Page"
@pdf.outline.update do
add_subsection_to 'Wrong page' do
page page_number, :title => "Inserted Page"
end
end
render_and_find_objects
- end.should raise_error(Prawn::Errors::UnknownOutlineTitle)
+ end
end
- end
+ end
describe "#outline.insert_section_after" do
describe "inserting in the middle of another section" do
before(:each) do
@pdf.go_to_page 1
@@ -266,51 +244,51 @@
end
end
it "should insert new outline items to document" do
render_and_find_objects
- @inserted_page.should_not be_nil
+ assert_not_nil @inserted_page
end
-
+
it "should adjust the count of all ancestors" do
render_and_find_objects
@outline_root[:Count].should == 4
- @section_1[:Count].abs.should == 3
+ @section_1[:Count].should.abs == 3
end
-
+
describe "#adjust_relations" do
-
+
it "should reset the sibling relations of adjoining items to inserted item" do
render_and_find_objects
referenced_object(@page_1[:Next]).should == @inserted_page
referenced_object(@page_2[:Prev]).should == @inserted_page
end
-
+
it "should set the sibling relation of added item to adjoining items" do
render_and_find_objects
referenced_object(@inserted_page[:Next]).should == @page_2
referenced_object(@inserted_page[:Prev]).should == @page_1
end
-
+
it "should not affect the first and last relations of parent item" do
render_and_find_objects
referenced_object(@section_1[:First]).should == @page_1
referenced_object(@section_1[:Last]).should == @page_2
end
-
- end
-
-
- context "when adding another section afterwards" do
+
+ end
+
+
+ context "when adding another section afterwards" do
it "should have reset the root position so that a new section is added at the end of root sections" do
@pdf.start_new_page
@pdf.text "Another Inserted Page"
@pdf.outline.update do
section 'Added Section' do
page :destination => page_number, :title => "Inserted Page"
- end
- end
+ end
+ end
render_and_find_objects
referenced_object(@outline_root[:Last]).should == @section_2
referenced_object(@section_1[:Next]).should == @section_2
end
end
@@ -325,11 +303,11 @@
@pdf.start_new_page
@pdf.text "Inserted Page"
@pdf.outline.update do
insert_section_after 'Page 2' do
page :destination => page_number, :title => "Inserted Page"
- end
+ end
end
render_and_find_objects
end
describe "#adjust_relations" do
@@ -337,11 +315,11 @@
it "should reset the sibling relations of adjoining item to inserted item" do
referenced_object(@page_2[:Next]).should == @inserted_page
end
it "should set the sibling relation of added item to adjoining items" do
- referenced_object(@inserted_page[:Next]).should be_nil
+ assert_nil referenced_object(@inserted_page[:Next])
referenced_object(@inserted_page[:Prev]).should == @page_2
end
it "should adjust the last relation of parent item" do
referenced_object(@section_1[:Last]).should == @inserted_page
@@ -349,40 +327,40 @@
end
end
it "should require an existing title" do
- lambda do
+ assert_raise Prawn::Errors::UnknownOutlineTitle do
@pdf.go_to_page 1
@pdf.start_new_page
@pdf.text "Inserted Page"
@pdf.outline.update do
insert_section_after 'Wrong page' do
page :destination => page_number, :title => "Inserted Page"
end
end
render_and_find_objects
- end.should raise_error(Prawn::Errors::UnknownOutlineTitle)
+ end
end
end
describe "#page" do
it "should require a title option to be set" do
- lambda do
+ assert_raise Prawn::Errors::RequiredOption do
@pdf = Prawn::Document.new() do
text "Page 1. This is the first Chapter. "
outline.define do
page :destination => 1, :title => nil
end
end
- end.should raise_error(Prawn::Errors::RequiredOption)
+ end
end
end
end
-
-describe "foreign character encoding" do
+
+context "foreign character encoding" do
before(:each) do
pdf = Prawn::Document.new() do
outline.define do
section 'La pomme croquée', :destination => 1, :closed => true
end
@@ -390,46 +368,27 @@
@hash = PDF::Reader::ObjectHash.new(StringIO.new(pdf.render, 'r+'))
end
it "should handle other encodings for the title" do
object = find_by_title('La pomme croquée')
- object.should_not == nil
+ object.should.not == nil
end
end
-describe "with optimize_objects option" do
- before(:each) do
- @pdf = Prawn::Document.new(:optimize_objects => true) do
- outline.define do
- section 'Chapter 1', :destination => 1, :closed => true do
- page :destination => 1, :title => 'Page 1'
- end
- end
- end
- render_and_find_objects
- end
-
- it "should generate an outline" do
- @section_1.should_not be_nil
- @page_1.should_not be_nil
- end
-end
-
def render_and_find_objects
output = StringIO.new(@pdf.render, 'r+')
@hash = PDF::Reader::ObjectHash.new(output)
@outline_root = @hash.values.find {|obj| obj.is_a?(Hash) && obj[:Type] == :Outlines}
@pages = @hash.values.find {|obj| obj.is_a?(Hash) && obj[:Type] == :Pages}[:Kids]
@section_1 = find_by_title('Chapter 1')
@page_1 = find_by_title('Page 1')
@page_2 = find_by_title('Page 2')
@section_2 = find_by_title('Added Section')
@page_3 = find_by_title('Page 3')
- @inserted_page = find_by_title('Inserted Page')
+ @inserted_page = find_by_title('Inserted Page')
@subsection = find_by_title('Added SubSection')
@added_page_3 = find_by_title('Added Page 3')
- @custom_dest = find_by_title('Custom Destination')
end
# Outline titles are stored as UTF-16. This method accepts a UTF-8 outline title
# and returns the PDF Object that contains an outline with that name
def find_by_title(title)
@@ -444,5 +403,6 @@
end
def referenced_object(reference)
@hash[reference]
end
+