Skip to content

Instantly share code, notes, and snippets.

@fadhlirahim
Forked from mattheworiordan/Gemfile
Created November 4, 2011 04:09
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fadhlirahim/1338638 to your computer and use it in GitHub Desktop.
Save fadhlirahim/1338638 to your computer and use it in GitHub Desktop.
Test PDF within Cucumber and Capybara
# normal Gem dependancy declarations
# ...
group :test, :cucumber do
gem 'pdf-reader'
end
When /^I follow the PDF link "([^"]+)"$/ do |label|
click_link(label)
temp_pdf = Tempfile.new('pdf')
temp_pdf << page.source.force_encoding('UTF-8')
temp_pdf.close
pdf_text = PDF::PdfToText.new(temp_pdf.path)
page.driver.response.instance_variable_set('@body', pdf_text.get_text)
end
Scenario: Check printable PDF
When I follow the PDF link "Print"
Then I should see "My name"
And I should see "Something else"
module PDF
class PdfToText
def initialize(pdf_file)
@receiver = PDF::SimplePageTextReceiver.new
pdf = PDF::Reader.file(pdf_file, @receiver)
end
def get_text
@receiver.content.inspect
end
end
end
module PDF
class SimplePageTextReceiver
attr_accessor :content
def initialize
@content = []
end
# Called when page parsing starts
def begin_page(arg = nil)
@content << ""
end
# record text that is drawn on the page
def show_text(string, *params)
@content.last << string.strip
end
# there's a few text callbacks, so make sure we process them all
alias :super_show_text :show_text
alias :move_to_next_line_and_show_text :show_text
alias :set_spacing_next_line_show_text :show_text
# this final text callback takes slightly different arguments
def show_text_with_positioning(*params)
params = params.first
params.each { |str| show_text(str) if str.kind_of?(String)}
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment