class Mechanize::TestCase
A generic test case for testing mechanize. Using a subclass of Mechanize::TestCase
for your tests will create an isolated mechanize instance that won't pollute your filesystem or other tests.
Once Mechanize::TestCase
is loaded no HTTP
requests will be made outside mechanize itself. All requests are handled via WEBrick servlets.
Mechanize
uses WEBrick servlets to test some functionality. You can run other HTTP
clients against the servlets using:
ruby -rmechanize/test_case/server -e0
Which will launch a test server at localhost:8000
Constants
- REQUESTS
- TEST_DIR
Public Instance Methods
Creates a fake page with URI fake.example and an empty, submittable form.
# File lib/mechanize/test_case.rb, line 59 def fake_page agent = @mech uri = URI 'http://fake.example/' html = String.new(<<~END) <html> <body> <form><input type="submit" value="submit" /></form> </body> </html> END Mechanize::Page.new uri, nil, html, 200, agent end
Return the contents of the file without Windows carriage returns
# File lib/mechanize/test_case.rb, line 187 def file_contents_without_cr(path) File.read(path).gsub(/\r\n/, "\n") end
Is the Encoding constant defined?
# File lib/mechanize/test_case.rb, line 75 def have_encoding? Object.const_defined? :Encoding end
Creates a Mechanize::Page
with the given body
# File lib/mechanize/test_case.rb, line 82 def html_page body uri = URI 'http://example/' Mechanize::Page.new uri, nil, body, 200, @mech end
Runs the block inside a temporary directory
# File lib/mechanize/test_case.rb, line 99 def in_tmpdir Dir.mktmpdir do |dir| Dir.chdir dir do yield end end end
Creates a Nokogiri Node element
with the given attributes
# File lib/mechanize/test_case.rb, line 110 def node element, attributes = {} Nokogiri::XML::Node.new(element, Nokogiri::HTML::Document.new).tap do |node| attributes.each do |name, value| node[name] = value end end end
Creates a Mechanize::Page
for the given uri
with the given content_type
, response body
and HTTP
status code
# File lib/mechanize/test_case.rb, line 122 def page uri, content_type = 'text/html', body = String.new, code = 200 uri = URI uri unless URI::Generic === uri Mechanize::Page.new(uri, { 'content-type' => content_type }, body, code, @mech) end
Requests made during this tests
# File lib/mechanize/test_case.rb, line 132 def requests REQUESTS end
Creates a clean mechanize instance +@mech+ for use in tests.
# File lib/mechanize/test_case.rb, line 46 def setup super REQUESTS.clear @mech = Mechanize.new @ssl_private_key = nil @ssl_certificate = nil end
An X509 certificate. This certificate is the same across all test runs
# File lib/mechanize/test_case.rb, line 153 def ssl_certificate @ssl_certificate ||= OpenSSL::X509::Certificate.new <<-CERT -----BEGIN CERTIFICATE----- MIIBQjCB7aADAgECAgEAMA0GCSqGSIb3DQEBBQUAMCoxDzANBgNVBAMMBm5vYm9k eTEXMBUGCgmSJomT8ixkARkWB2V4YW1wbGUwIBcNMTExMTAzMjEwODU5WhgPOTk5 OTEyMzExMjU5NTlaMCoxDzANBgNVBAMMBm5vYm9keTEXMBUGCgmSJomT8ixkARkW B2V4YW1wbGUwWjANBgkqhkiG9w0BAQEFAANJADBGAkEA8pmEfmP0Ibir91x6pbts 4JmmsVZd3xvD5p347EFvBCbhBW1nv1GsbCBEFlSiT1q2qvxGb5IlbrfdhdgyqdTX UQIBATANBgkqhkiG9w0BAQUFAANBAAAB//////////////////////////////// //8AMCEwCQYFKw4DAhoFAAQUePiv+QrJxyjtEJNnH5pB9OTWIqA= -----END CERTIFICATE----- CERT end
An SSL private key. This key is the same across all test runs
# File lib/mechanize/test_case.rb, line 139 def ssl_private_key @ssl_private_key ||= OpenSSL::PKey::RSA.new <<-KEY -----BEGIN RSA PRIVATE KEY----- MIG7AgEAAkEA8pmEfmP0Ibir91x6pbts4JmmsVZd3xvD5p347EFvBCbhBW1nv1Gs bCBEFlSiT1q2qvxGb5IlbrfdhdgyqdTXUQIBAQIBAQIhAPumXslvf6YasXa1hni3 p80joKOug2UUgqOLD2GUSO//AiEA9ssY6AFxjHWuwo/+/rkLmkfO2s1Lz3OeUEWq 6DiHOK8CAQECAQECIQDt8bc4vS6wh9VXApNSKIpVygtxSFe/IwLeX26n77j6Qg== -----END RSA PRIVATE KEY----- KEY end
Creates a Tempfile with content
that is immediately unlinked
# File lib/mechanize/test_case.rb, line 170 def tempfile content Tempfile.new(@NAME).tap do |body_io| body_io.unlink body_io.write content body_io.flush body_io.rewind end end
Returns true if the current platform is a Windows platform
# File lib/mechanize/test_case.rb, line 181 def windows? ::RUBY_PLATFORM =~ /mingw|mswin/ end