prawn 1.0.0.rc1 → 1.0.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (203) hide show
  1. data/Gemfile +18 -0
  2. data/README.md +5 -3
  3. data/Rakefile +8 -14
  4. data/data/pdfs/nested_pages.pdf +13 -13
  5. data/lib/prawn.rb +3 -1
  6. data/lib/prawn/compatibility.rb +46 -10
  7. data/lib/prawn/core.rb +3 -1
  8. data/lib/prawn/core/document_state.rb +2 -1
  9. data/lib/prawn/core/object_store.rb +61 -5
  10. data/lib/prawn/core/page.rb +3 -6
  11. data/lib/prawn/core/pdf_object.rb +21 -4
  12. data/lib/prawn/core/reference.rb +6 -2
  13. data/lib/prawn/core/text.rb +4 -4
  14. data/lib/prawn/core/text/formatted/line_wrap.rb +23 -8
  15. data/lib/prawn/document.rb +21 -15
  16. data/lib/prawn/document/bounding_box.rb +3 -3
  17. data/lib/prawn/document/column_box.rb +22 -4
  18. data/lib/prawn/document/snapshot.rb +1 -1
  19. data/lib/prawn/encoding.rb +1 -1
  20. data/lib/prawn/errors.rb +4 -0
  21. data/lib/prawn/font.rb +1 -1
  22. data/lib/prawn/font/afm.rb +30 -72
  23. data/lib/prawn/font/ttf.rb +6 -33
  24. data/lib/prawn/graphics.rb +148 -23
  25. data/lib/prawn/graphics/color.rb +8 -1
  26. data/lib/prawn/graphics/patterns.rb +137 -0
  27. data/lib/prawn/images.rb +25 -19
  28. data/lib/prawn/images/jpg.rb +4 -4
  29. data/lib/prawn/images/png.rb +18 -12
  30. data/lib/prawn/security.rb +6 -4
  31. data/lib/prawn/soft_mask.rb +94 -0
  32. data/lib/prawn/table.rb +136 -31
  33. data/lib/prawn/table/cell.rb +260 -29
  34. data/lib/prawn/table/cell/span_dummy.rb +88 -0
  35. data/lib/prawn/table/cell/text.rb +36 -14
  36. data/lib/prawn/table/cells.rb +91 -41
  37. data/lib/prawn/text.rb +3 -2
  38. data/lib/prawn/text/formatted/box.rb +14 -5
  39. data/lib/prawn/text/formatted/fragment.rb +33 -22
  40. data/lib/prawn/text/formatted/parser.rb +5 -2
  41. data/lib/prawn/utilities.rb +44 -0
  42. data/manual/basic_concepts/adding_pages.rb +27 -0
  43. data/manual/basic_concepts/basic_concepts.rb +34 -0
  44. data/manual/basic_concepts/creation.rb +39 -0
  45. data/manual/basic_concepts/cursor.rb +33 -0
  46. data/manual/basic_concepts/measurement.rb +25 -0
  47. data/manual/basic_concepts/origin.rb +38 -0
  48. data/manual/basic_concepts/other_cursor_helpers.rb +40 -0
  49. data/manual/bounding_box/bounding_box.rb +39 -0
  50. data/manual/bounding_box/bounds.rb +49 -0
  51. data/manual/bounding_box/canvas.rb +24 -0
  52. data/manual/bounding_box/creation.rb +23 -0
  53. data/manual/bounding_box/indentation.rb +46 -0
  54. data/manual/bounding_box/nesting.rb +45 -0
  55. data/manual/bounding_box/russian_boxes.rb +40 -0
  56. data/manual/bounding_box/stretchy.rb +31 -0
  57. data/manual/document_and_page_options/background.rb +27 -0
  58. data/manual/document_and_page_options/document_and_page_options.rb +31 -0
  59. data/manual/document_and_page_options/metadata.rb +23 -0
  60. data/manual/document_and_page_options/page_margins.rb +38 -0
  61. data/manual/document_and_page_options/page_size.rb +34 -0
  62. data/manual/example_file.rb +116 -0
  63. data/manual/example_helper.rb +430 -0
  64. data/manual/example_package.rb +53 -0
  65. data/manual/example_section.rb +46 -0
  66. data/manual/graphics/circle_and_ellipse.rb +22 -0
  67. data/manual/graphics/color.rb +24 -0
  68. data/manual/graphics/common_lines.rb +28 -0
  69. data/manual/graphics/fill_and_stroke.rb +42 -0
  70. data/manual/graphics/fill_rules.rb +37 -0
  71. data/manual/graphics/gradients.rb +37 -0
  72. data/manual/graphics/graphics.rb +58 -0
  73. data/manual/graphics/helper.rb +17 -0
  74. data/manual/graphics/line_width.rb +35 -0
  75. data/manual/graphics/lines_and_curves.rb +41 -0
  76. data/manual/graphics/polygon.rb +29 -0
  77. data/manual/graphics/rectangle.rb +21 -0
  78. data/manual/graphics/rotate.rb +28 -0
  79. data/manual/graphics/scale.rb +41 -0
  80. data/manual/graphics/soft_masks.rb +46 -0
  81. data/manual/graphics/stroke_cap.rb +31 -0
  82. data/manual/graphics/stroke_dash.rb +43 -0
  83. data/manual/graphics/stroke_join.rb +30 -0
  84. data/manual/graphics/translate.rb +29 -0
  85. data/manual/graphics/transparency.rb +35 -0
  86. data/manual/images/absolute_position.rb +23 -0
  87. data/manual/images/fit.rb +21 -0
  88. data/manual/images/horizontal.rb +25 -0
  89. data/manual/images/images.rb +40 -0
  90. data/manual/images/plain_image.rb +18 -0
  91. data/manual/images/scale.rb +22 -0
  92. data/manual/images/vertical.rb +28 -0
  93. data/manual/images/width_and_height.rb +25 -0
  94. data/manual/layout/boxes.rb +27 -0
  95. data/manual/layout/content.rb +25 -0
  96. data/manual/layout/layout.rb +28 -0
  97. data/manual/layout/simple_grid.rb +23 -0
  98. data/manual/manual/cover.rb +26 -0
  99. data/manual/manual/foreword.rb +13 -0
  100. data/manual/manual/how_to_read_this_manual.rb +41 -0
  101. data/manual/manual/manual.rb +36 -0
  102. data/manual/outline/add_subsection_to.rb +61 -0
  103. data/manual/outline/insert_section_after.rb +47 -0
  104. data/manual/outline/outline.rb +32 -0
  105. data/manual/outline/sections_and_pages.rb +67 -0
  106. data/manual/repeatable_content/page_numbering.rb +54 -0
  107. data/manual/repeatable_content/repeatable_content.rb +31 -0
  108. data/manual/repeatable_content/repeater.rb +55 -0
  109. data/manual/repeatable_content/stamp.rb +41 -0
  110. data/manual/security/encryption.rb +31 -0
  111. data/manual/security/permissions.rb +38 -0
  112. data/manual/security/security.rb +28 -0
  113. data/manual/syntax_highlight.rb +52 -0
  114. data/manual/table/basic_block.rb +53 -0
  115. data/manual/table/before_rendering_page.rb +26 -0
  116. data/manual/table/cell_border_lines.rb +24 -0
  117. data/manual/table/cell_borders_and_bg.rb +31 -0
  118. data/manual/table/cell_dimensions.rb +30 -0
  119. data/manual/table/cell_text.rb +38 -0
  120. data/manual/table/column_widths.rb +30 -0
  121. data/manual/table/content_and_subtables.rb +39 -0
  122. data/manual/table/creation.rb +27 -0
  123. data/manual/table/filtering.rb +36 -0
  124. data/manual/table/flow_and_header.rb +17 -0
  125. data/manual/table/image_cells.rb +33 -0
  126. data/manual/table/position.rb +29 -0
  127. data/manual/table/row_colors.rb +20 -0
  128. data/manual/table/span.rb +30 -0
  129. data/manual/table/style.rb +22 -0
  130. data/manual/table/table.rb +52 -0
  131. data/manual/table/width.rb +27 -0
  132. data/manual/templates/full_template.rb +23 -0
  133. data/manual/templates/page_template.rb +47 -0
  134. data/manual/templates/templates.rb +26 -0
  135. data/manual/text/alignment.rb +44 -0
  136. data/manual/text/color.rb +24 -0
  137. data/manual/text/column_box.rb +32 -0
  138. data/manual/text/fallback_fonts.rb +37 -0
  139. data/manual/text/font.rb +41 -0
  140. data/manual/text/font_size.rb +45 -0
  141. data/manual/text/font_style.rb +23 -0
  142. data/manual/text/formatted_callbacks.rb +60 -0
  143. data/manual/text/formatted_text.rb +50 -0
  144. data/manual/text/free_flowing_text.rb +51 -0
  145. data/manual/text/group.rb +29 -0
  146. data/manual/text/inline.rb +43 -0
  147. data/manual/text/kerning_and_character_spacing.rb +39 -0
  148. data/manual/text/leading.rb +25 -0
  149. data/manual/text/line_wrapping.rb +41 -0
  150. data/manual/text/paragraph_indentation.rb +26 -0
  151. data/manual/text/positioned_text.rb +38 -0
  152. data/manual/text/registering_families.rb +48 -0
  153. data/manual/text/rendering_and_color.rb +37 -0
  154. data/manual/text/right_to_left_text.rb +43 -0
  155. data/manual/text/rotation.rb +43 -0
  156. data/manual/text/single_usage.rb +37 -0
  157. data/manual/text/text.rb +75 -0
  158. data/manual/text/text_box_excess.rb +32 -0
  159. data/manual/text/text_box_extensions.rb +45 -0
  160. data/manual/text/text_box_overflow.rb +44 -0
  161. data/manual/text/utf8.rb +28 -0
  162. data/manual/text/win_ansi_charset.rb +59 -0
  163. data/prawn.gemspec +10 -7
  164. data/spec/bounding_box_spec.rb +107 -17
  165. data/spec/cell_spec.rb +66 -40
  166. data/spec/column_box_spec.rb +33 -0
  167. data/spec/document_spec.rb +45 -24
  168. data/spec/extensions/encoding_helpers.rb +6 -0
  169. data/spec/extensions/mocha.rb +1 -0
  170. data/spec/font_spec.rb +71 -53
  171. data/spec/formatted_text_arranger_spec.rb +19 -19
  172. data/spec/formatted_text_box_spec.rb +16 -16
  173. data/spec/formatted_text_fragment_spec.rb +6 -6
  174. data/spec/graphics_spec.rb +96 -31
  175. data/spec/grid_spec.rb +2 -2
  176. data/spec/images_spec.rb +18 -10
  177. data/spec/jpg_spec.rb +1 -1
  178. data/spec/line_wrap_spec.rb +14 -14
  179. data/spec/measurement_units_spec.rb +2 -2
  180. data/spec/name_tree_spec.rb +6 -6
  181. data/spec/object_store_spec.rb +17 -17
  182. data/spec/outline_spec.rb +35 -17
  183. data/spec/pdf_object_spec.rb +3 -1
  184. data/spec/png_spec.rb +22 -19
  185. data/spec/reference_spec.rb +24 -1
  186. data/spec/repeater_spec.rb +9 -9
  187. data/spec/security_spec.rb +3 -3
  188. data/spec/snapshot_spec.rb +3 -3
  189. data/spec/soft_mask_spec.rb +117 -0
  190. data/spec/span_spec.rb +4 -4
  191. data/spec/spec_helper.rb +12 -6
  192. data/spec/stamp_spec.rb +12 -12
  193. data/spec/stroke_styles_spec.rb +5 -5
  194. data/spec/table_spec.rb +458 -88
  195. data/spec/template_spec.rb +108 -54
  196. data/spec/text_at_spec.rb +17 -17
  197. data/spec/text_box_spec.rb +76 -45
  198. data/spec/text_rendering_mode_spec.rb +5 -5
  199. data/spec/text_spacing_spec.rb +4 -4
  200. data/spec/text_spec.rb +44 -40
  201. metadata +419 -250
  202. data/lib/prawn/graphics/gradient.rb +0 -84
  203. data/lib/prawn/security/arcfour.rb +0 -51
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
 
3
- require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
4
4
 
5
5
  module CellHelpers
6
6
 
@@ -10,10 +10,6 @@ module CellHelpers
10
10
  Prawn::Table::Cell::Text.new(@pdf, at, options)
11
11
  end
12
12
 
13
- def close?(actual, expected, epsilon=0.01)
14
- (actual - expected).abs < epsilon
15
- end
16
-
17
13
  end
18
14
 
19
15
  describe "Prawn::Table::Cell" do
@@ -30,13 +26,18 @@ describe "Prawn::Table::Cell" do
30
26
  end
31
27
 
32
28
  it "should return a Cell" do
33
- @pdf.cell(:content => "text").should.be.a.kind_of Prawn::Table::Cell
29
+ @pdf.cell(:content => "text").should be_a_kind_of Prawn::Table::Cell
30
+ end
31
+
32
+ it "accepts :content => nil in a hash" do
33
+ @pdf.cell(:content => nil).should be_a_kind_of(Prawn::Table::Cell::Text)
34
+ @pdf.make_cell(:content => nil).should be_a_kind_of(Prawn::Table::Cell::Text)
34
35
  end
35
36
 
36
37
  it "should convert nil, Numeric, and Date values to strings" do
37
38
  [nil, 123, 123.45, Date.today].each do |value|
38
39
  c = @pdf.cell(:content => value)
39
- c.should.be.a.kind_of Prawn::Table::Cell::Text
40
+ c.should be_a_kind_of Prawn::Table::Cell::Text
40
41
  c.content.should == value.to_s
41
42
  end
42
43
  end
@@ -45,7 +46,7 @@ describe "Prawn::Table::Cell" do
45
46
  # used for table([[{:text => "...", :font_style => :bold, ...}, ...]])
46
47
  c = Prawn::Table::Cell.make(@pdf,
47
48
  {:content => 'hello', :font_style => :bold})
48
- c.should.be.a.kind_of Prawn::Table::Cell::Text
49
+ c.should be_a_kind_of Prawn::Table::Cell::Text
49
50
  c.content.should == "hello"
50
51
  c.font.name.should == 'Helvetica-Bold'
51
52
  end
@@ -56,22 +57,22 @@ describe "Prawn::Table::Cell" do
56
57
  @pdf.expects(:move_down)
57
58
  @pdf.expects(:draw_text!).with { |text, options| text == "hello world" }
58
59
 
59
- @pdf.cell(:content => "hello world",
60
+ @pdf.cell(:content => "hello world",
60
61
  :at => [10, 20],
61
62
  :padding => [30, 40],
62
- :size => 7,
63
+ :size => 7,
63
64
  :font_style => :bold)
64
65
  end
65
66
  end
66
-
67
+
67
68
  describe "Prawn::Document#make_cell" do
68
69
  it "should not draw the cell" do
69
70
  Prawn::Table::Cell::Text.any_instance.expects(:draw).never
70
71
  @pdf.make_cell("text")
71
72
  end
72
-
73
+
73
74
  it "should return a Cell" do
74
- @pdf.make_cell("text", :size => 7).should.be.a.kind_of Prawn::Table::Cell
75
+ @pdf.make_cell("text", :size => 7).should be_a_kind_of Prawn::Table::Cell
75
76
  end
76
77
  end
77
78
 
@@ -103,7 +104,7 @@ describe "Prawn::Table::Cell" do
103
104
 
104
105
  it "should incorporate padding when specified" do
105
106
  c = cell(:content => "text", :padding => [1, 2, 3, 4])
106
- c.width.should.be.close(@pdf.width_of("text") + 6, 0.01)
107
+ c.width.should be_within(0.01).of(@pdf.width_of("text") + 6)
107
108
  end
108
109
 
109
110
  it "should allow width to be reset after it has been calculated" do
@@ -117,7 +118,7 @@ describe "Prawn::Table::Cell" do
117
118
  it "should return proper width with size set" do
118
119
  text = "text " * 4
119
120
  c = cell(:content => text, :size => 7)
120
- c.width.should ==
121
+ c.width.should ==
121
122
  @pdf.width_of(text, :size => 7) + c.padding[1] + c.padding[3]
122
123
  end
123
124
 
@@ -128,7 +129,7 @@ describe "Prawn::Table::Cell" do
128
129
 
129
130
  it "content_width should exclude padding even with manual :width" do
130
131
  c = cell(:content => "text", :padding => 10, :width => 400)
131
- c.content_width.should.be.close(380, 0.01)
132
+ c.content_width.should be_within(0.01).of(380)
132
133
  end
133
134
 
134
135
  it "should have a reasonable minimum width that can fit @content" do
@@ -136,9 +137,9 @@ describe "Prawn::Table::Cell" do
136
137
  min_content_width = c.min_width - c.padding[1] - c.padding[3]
137
138
 
138
139
  lambda { @pdf.height_of("text", :width => min_content_width) }.
139
- should.not.raise(Prawn::Errors::CannotFit)
140
+ should_not raise_error(Prawn::Errors::CannotFit)
140
141
 
141
- @pdf.height_of("text", :width => min_content_width).should.be <
142
+ @pdf.height_of("text", :width => min_content_width).should be <
142
143
  (5 * @pdf.height_of("text"))
143
144
  end
144
145
 
@@ -147,14 +148,14 @@ describe "Prawn::Table::Cell" do
147
148
  c.padding = 0
148
149
 
149
150
  # Make sure we use the new value of padding in calculating min_width
150
- c.min_width.should.be < 100
151
+ c.min_width.should be < 100
151
152
  end
152
153
 
153
154
  it "should defer min_width's evaluation of size" do
154
155
  c = cell(:content => "text", :size => 50)
155
156
  c.size = 8
156
157
  c.padding = 0
157
- c.min_width.should.be < 10
158
+ c.min_width.should be < 10
158
159
  end
159
160
 
160
161
  end
@@ -164,7 +165,7 @@ describe "Prawn::Table::Cell" do
164
165
 
165
166
  it "should be calculated for text" do
166
167
  c = cell(:content => "text")
167
- c.height.should ==
168
+ c.height.should ==
168
169
  @pdf.height_of("text", :width => @pdf.width_of("text")) +
169
170
  c.padding[0] + c.padding[3]
170
171
  end
@@ -176,8 +177,8 @@ describe "Prawn::Table::Cell" do
176
177
 
177
178
  it "should incorporate :padding when specified" do
178
179
  c = cell(:content => "text", :padding => [1, 2, 3, 4])
179
- c.height.should.be.close(1 + 3 +
180
- @pdf.height_of("text", :width => @pdf.width_of("text")), 0.01)
180
+ c.height.should be_within(0.01).of(1 + 3 +
181
+ @pdf.height_of("text", :width => @pdf.width_of("text")))
181
182
  end
182
183
 
183
184
  it "should allow height to be reset after it has been calculated" do
@@ -211,10 +212,10 @@ describe "Prawn::Table::Cell" do
211
212
  c = cell(:content => "text", :padding => 10)
212
213
  c.content_height.should == @pdf.height_of("text")
213
214
  end
214
-
215
+
215
216
  it "content_height should exclude padding even with manual :height" do
216
217
  c = cell(:content => "text", :padding => 10, :height => 400)
217
- c.content_height.should.be.close(380, 0.01)
218
+ c.content_height.should be_within(0.01).of(380)
218
219
  end
219
220
  end
220
221
 
@@ -235,7 +236,7 @@ describe "Prawn::Table::Cell" do
235
236
  c = cell(:content => "text", :padding => [20, 30])
236
237
  c.padding.should == [20, 30, 20, 30]
237
238
  end
238
-
239
+
239
240
  it "should accept [t,h,b]" do
240
241
  c = cell(:content => "text", :padding => [10, 20, 30])
241
242
  c.padding.should == [10, 20, 30, 20]
@@ -249,7 +250,7 @@ describe "Prawn::Table::Cell" do
249
250
  it "should reject other formats" do
250
251
  lambda{
251
252
  cell(:content => "text", :padding => [10])
252
- }.should.raise(ArgumentError)
253
+ }.should raise_error(ArgumentError)
253
254
  end
254
255
  end
255
256
 
@@ -263,10 +264,10 @@ describe "Prawn::Table::Cell" do
263
264
  @pdf.stubs(:fill_color)
264
265
  @pdf.expects(:fill_color).with('123456')
265
266
  @pdf.expects(:fill_rectangle).checking do |(x, y), w, h|
266
- x.should.be.close(0, 0.01)
267
- y.should.be.close(@pdf.cursor, 0.01)
268
- w.should.be.close(29.344, 0.01)
269
- h.should.be.close(23.872, 0.01)
267
+ x.should be_within(0.01).of(0)
268
+ y.should be_within(0.01).of(@pdf.cursor)
269
+ w.should be_within(0.01).of(29.344)
270
+ h.should be_within(0.01).of(23.872)
270
271
  end
271
272
  @pdf.cell(:content => "text", :background_color => '123456')
272
273
  end
@@ -279,10 +280,10 @@ describe "Prawn::Table::Cell" do
279
280
  @pdf.stubs(:fill_color)
280
281
  @pdf.expects(:fill_color).with('123456')
281
282
  @pdf.expects(:fill_rectangle).checking do |(x, y), w, h|
282
- x.should.be.close(12.0, 0.01)
283
- y.should.be.close(34.0, 0.01)
284
- w.should.be.close(29.344, 0.01)
285
- h.should.be.close(23.872, 0.01)
283
+ x.should be_within(0.01).of(12.0)
284
+ y.should be_within(0.01).of(34.0)
285
+ w.should be_within(0.01).of(29.344)
286
+ h.should be_within(0.01).of(23.872)
286
287
  end
287
288
  c = @pdf.make_cell(:content => "text", :background_color => '123456')
288
289
  c.draw([12.0, 34.0])
@@ -408,8 +409,34 @@ describe "Prawn::Table::Cell" do
408
409
  :border_width => [2, 3, 4, 5])
409
410
  c.border_widths.should == [2, 3, 4, 5]
410
411
  end
412
+
413
+ it "should set default border lines to :solid" do
414
+ c = @pdf.cell(:content => "text")
415
+ c.border_top_line.should == :solid
416
+ c.border_right_line.should == :solid
417
+ c.border_bottom_line.should == :solid
418
+ c.border_left_line.should == :solid
419
+ c.border_lines.should == [:solid] * 4
420
+ end
421
+
422
+ it "should set border line with :border_..._line" do
423
+ c = @pdf.cell(:content => "text", :border_bottom_line => :dotted)
424
+ c.border_bottom_line.should == :dotted
425
+ c.border_lines[2].should == :dotted
426
+ end
427
+
428
+ it "should set border lines with :border_lines" do
429
+ c = @pdf.cell(:content => "text",
430
+ :border_lines => [:solid, :dotted, :dashed, :solid])
431
+ c.border_lines.should == [:solid, :dotted, :dashed, :solid]
432
+ end
411
433
  end
412
434
 
435
+
436
+
437
+
438
+
439
+
413
440
  describe "Text cell attributes" do
414
441
  include CellHelpers
415
442
 
@@ -498,7 +525,6 @@ describe "Prawn::Table::Cell" do
498
525
  c.content_width.should == font.compute_width_of("text")
499
526
  end
500
527
  end
501
-
502
528
  end
503
529
 
504
530
  describe "Image cells" do
@@ -509,11 +535,11 @@ describe "Image cells" do
509
535
  describe "with default options" do
510
536
  before(:each) do
511
537
  @cell = Prawn::Table::Cell.make(@pdf,
512
- :image => "#{Prawn::BASEDIR}/data/images/prawn.png")
538
+ :image => "#{Prawn::DATADIR}/images/prawn.png")
513
539
  end
514
540
 
515
541
  it "should create a Cell::Image" do
516
- @cell.should.be.a.kind_of(Prawn::Table::Cell::Image)
542
+ @cell.should be_a_kind_of(Prawn::Table::Cell::Image)
517
543
  end
518
544
 
519
545
  it "should pull the natural width and height from the image" do
@@ -525,7 +551,7 @@ describe "Image cells" do
525
551
  describe "hash syntax" do
526
552
  before(:each) do
527
553
  @table = @pdf.make_table([[{
528
- :image => "#{Prawn::BASEDIR}/data/images/prawn.png",
554
+ :image => "#{Prawn::DATADIR}/images/prawn.png",
529
555
  :scale => 2,
530
556
  :fit => [100, 200],
531
557
  :image_width => 123,
@@ -538,7 +564,7 @@ describe "Image cells" do
538
564
 
539
565
 
540
566
  it "should create a Cell::Image" do
541
- @cell.should.be.a.kind_of(Prawn::Table::Cell::Image)
567
+ @cell.should be_a_kind_of(Prawn::Table::Cell::Image)
542
568
  end
543
569
 
544
570
  it "should pass through image options" do
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
4
+
5
+ describe "A column box" do
6
+ it "has sensible left and right values" do
7
+ create_pdf
8
+ @pdf.column_box [0, @pdf.cursor], :width => @pdf.bounds.width,
9
+ :height => 200, :columns => 3, :spacer => 25 do
10
+ left = @pdf.bounds.left
11
+ right = @pdf.bounds.right
12
+
13
+ @pdf.bounds.move_past_bottom # next column
14
+
15
+ @pdf.bounds.left.should be > left
16
+ @pdf.bounds.left.should be > right
17
+ @pdf.bounds.right.should be > @pdf.bounds.left
18
+ end
19
+ end
20
+
21
+ it "includes spacers between columns but not at the end" do
22
+ create_pdf
23
+ @pdf.column_box [0, @pdf.cursor], :width => 500,
24
+ :height => 200, :columns => 3, :spacer => 25 do
25
+ @pdf.bounds.width.should == 150 # (500 - (25 * 2)) / 3
26
+
27
+ @pdf.bounds.move_past_bottom
28
+ @pdf.bounds.move_past_bottom
29
+
30
+ @pdf.bounds.right.should == 500
31
+ end
32
+ end
33
+ end
@@ -12,7 +12,7 @@ describe "Prawn::Document.new" do
12
12
  end
13
13
 
14
14
  describe "The cursor" do
15
- it "should equal pdf.y - bounds.absolute_bottom" do
15
+ it "should == pdf.y - bounds.absolute_bottom" do
16
16
  pdf = Prawn::Document.new
17
17
  pdf.cursor.should == pdf.bounds.top
18
18
 
@@ -34,7 +34,7 @@ describe "when generating a document from a subclass" do
34
34
  custom_document = Class.new(Prawn::Document)
35
35
  custom_document.generate(Tempfile.new("generate_test").path) do |e|
36
36
  e.class.should == custom_document
37
- e.should.be.kind_of(Prawn::Document)
37
+ e.should be_a_kind_of(Prawn::Document)
38
38
  end
39
39
  end
40
40
 
@@ -45,20 +45,20 @@ describe "when generating a document from a subclass" do
45
45
  Prawn::Document.extensions << mod1 << mod2
46
46
 
47
47
  custom_document = Class.new(Prawn::Document)
48
- assert_equal [mod1, mod2], custom_document.extensions
48
+ custom_document.extensions.should == [mod1, mod2]
49
49
 
50
50
  # remove the extensions we added to prawn document
51
51
  Prawn::Document.extensions.delete(mod1)
52
52
  Prawn::Document.extensions.delete(mod2)
53
53
 
54
- assert ! Prawn::Document.new.respond_to?(:test_extensions1)
55
- assert ! Prawn::Document.new.respond_to?(:test_extensions2)
54
+ Prawn::Document.new.respond_to?(:test_extensions1).should be_false
55
+ Prawn::Document.new.respond_to?(:test_extensions2).should be_false
56
56
 
57
57
  # verify these still exist on custom class
58
- assert_equal [mod1, mod2], custom_document.extensions
58
+ custom_document.extensions.should == [mod1, mod2]
59
59
 
60
- assert custom_document.new.respond_to?(:test_extensions1)
61
- assert custom_document.new.respond_to?(:test_extensions2)
60
+ custom_document.new.respond_to?(:test_extensions1).should be_true
61
+ custom_document.new.respond_to?(:test_extensions2).should be_true
62
62
  end
63
63
 
64
64
  end
@@ -89,7 +89,7 @@ describe "When beginning each new page" do
89
89
 
90
90
  describe "Background template feature" do
91
91
  before(:each) do
92
- @filename = "#{Prawn::BASEDIR}/data/images/pigs.jpg"
92
+ @filename = "#{Prawn::DATADIR}/images/pigs.jpg"
93
93
  @pdf = Prawn::Document.new(:background => @filename)
94
94
  end
95
95
  it "should place a background image if it is in options block" do
@@ -235,11 +235,11 @@ describe "Document compression" do
235
235
  doc_uncompressed = Prawn::Document.new
236
236
  doc_compressed = Prawn::Document.new(:compress => true)
237
237
  [doc_compressed, doc_uncompressed].each do |pdf|
238
- pdf.font "#{Prawn::BASEDIR}/data/fonts/gkai00mp.ttf"
238
+ pdf.font "#{Prawn::DATADIR}/fonts/gkai00mp.ttf"
239
239
  pdf.text "更可怕的是,同质化竞争对手可以按照URL中后面这个ID来遍历" * 10
240
240
  end
241
241
 
242
- doc_compressed.render.length.should.be < doc_uncompressed.render.length
242
+ doc_compressed.render.length.should be < doc_uncompressed.render.length
243
243
  end
244
244
 
245
245
  end
@@ -266,7 +266,7 @@ describe "When reopening pages" do
266
266
  # MalformedPDFError raised if content stream actual length does not match
267
267
  # dictionary length
268
268
  lambda{ PDF::Inspector::Page.analyze(@pdf.render) }.
269
- should.not.raise(PDF::Reader::MalformedPDFError)
269
+ should_not raise_error(PDF::Reader::MalformedPDFError)
270
270
  end
271
271
 
272
272
  it "should insert pages after the current page when calling start_new_page" do
@@ -358,8 +358,8 @@ describe "The mask() feature" do
358
358
  @pdf.mask(:y, :line_width) do
359
359
  @pdf.y = y + 1
360
360
  @pdf.line_width = line_width + 1
361
- @pdf.y.should.not == y
362
- @pdf.line_width.should.not == line_width
361
+ @pdf.y.should_not == y
362
+ @pdf.line_width.should_not == line_width
363
363
  end
364
364
  @pdf.y.should == y
365
365
  @pdf.line_width.should == line_width
@@ -391,14 +391,14 @@ describe "The group() feature" do
391
391
  pages[1][:strings].should == ["Hello", "World"]
392
392
  end
393
393
 
394
- it "should raise CannotGroup if the content is too tall" do
394
+ it "should raise_error CannotGroup if the content is too tall" do
395
395
  lambda {
396
396
  Prawn::Document.new do
397
397
  group do
398
398
  100.times { text "Too long" }
399
399
  end
400
400
  end.render
401
- }.should.raise(Prawn::Errors::CannotGroup)
401
+ }.should raise_error(Prawn::Errors::CannotGroup)
402
402
  end
403
403
 
404
404
  it "should group within individual column boxes" do
@@ -478,7 +478,7 @@ describe "The :optimize_objects option" do
478
478
  wasteful_pdf = Prawn::Document.new(&@wasteful_doc)
479
479
  frugal_pdf = Prawn::Document.new(:optimize_objects => true,
480
480
  &@wasteful_doc)
481
- frugal_pdf.render.size.should.be < wasteful_pdf.render.size
481
+ frugal_pdf.render.size.should be < wasteful_pdf.render.size
482
482
  end
483
483
 
484
484
  it "should default to :false" do
@@ -676,6 +676,27 @@ describe "The number_pages method" do
676
676
  end
677
677
  end
678
678
  end
679
+
680
+ context "height option" do
681
+ before do
682
+ @pdf.start_new_page
683
+ end
684
+
685
+ it "with 10 height" do
686
+ @pdf.expects(:text_box).with("1 1", { :height => 10 })
687
+ @pdf.number_pages "<page> <total>", :height => 10
688
+ end
689
+
690
+ it "with nil height" do
691
+ @pdf.expects(:text_box).with("1 1", { :height => nil })
692
+ @pdf.number_pages "<page> <total>", :height => nil
693
+ end
694
+
695
+ it "with no height" do
696
+ @pdf.expects(:text_box).with("1 1", { :height => 50 })
697
+ @pdf.number_pages "<page> <total>"
698
+ end
699
+ end
679
700
  end
680
701
 
681
702
  describe "The page_match? method" do
@@ -685,31 +706,31 @@ describe "The page_match? method" do
685
706
  end
686
707
 
687
708
  it "returns nil given no filter" do
688
- assert ! @pdf.page_match?(:nil, 1)
709
+ @pdf.page_match?(:nil, 1).should be_false
689
710
  end
690
711
 
691
712
  it "must provide an :all filter" do
692
- assert (1..@pdf.page_count).all? { |i| @pdf.page_match?(:all, i) }
713
+ (1..@pdf.page_count).all? { |i| @pdf.page_match?(:all, i) }.should be_true
693
714
  end
694
715
 
695
716
  it "must provide an :odd filter" do
696
717
  odd, even = (1..@pdf.page_count).partition { |e| e % 2 == 1 }
697
- assert odd.all? { |i| @pdf.page_match?(:odd, i) }
698
- assert ! even.any? { |i| @pdf.page_match?(:odd, i) }
718
+ odd.all? { |i| @pdf.page_match?(:odd, i) }.should be_true
719
+ even.any? { |i| @pdf.page_match?(:odd, i) }.should be_false
699
720
  end
700
721
 
701
722
  it "must be able to filter by an array of page numbers" do
702
723
  fltr = [1,2,7]
703
- assert_equal [1,2,7], (1..10).select { |i| @pdf.page_match?(fltr, i) }
724
+ (1..10).select { |i| @pdf.page_match?(fltr, i) }.should == [1,2,7]
704
725
  end
705
726
 
706
727
  it "must be able to filter by a range of page numbers" do
707
728
  fltr = 2..4
708
- assert_equal [2,3,4], (1..10).select { |i| @pdf.page_match?(fltr, i) }
729
+ (1..10).select { |i| @pdf.page_match?(fltr, i) }.should == [2,3,4]
709
730
  end
710
731
 
711
732
  it "must be able to filter by an arbitrary proc" do
712
733
  fltr = lambda { |x| x == 1 or x % 3 == 0 }
713
- assert_equal [1,3,6,9], (1..10).select { |i| @pdf.page_match?(fltr, i) }
734
+ (1..10).select { |i| @pdf.page_match?(fltr, i) }.should == [1,3,6,9]
714
735
  end
715
736
  end