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

fake_page(agent = @mech) click to toggle source

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
file_contents_without_cr(path) click to toggle source

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
have_encoding?() click to toggle source

Is the Encoding constant defined?

# File lib/mechanize/test_case.rb, line 75
def have_encoding?
  Object.const_defined? :Encoding
end
html_page(body) click to toggle source

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
in_tmpdir() { || ... } click to toggle source

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
node(element, attributes = {}) click to toggle source

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
page(uri, content_type = 'text/html', body = String.new, code = 200) click to toggle source

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() click to toggle source

Requests made during this tests

# File lib/mechanize/test_case.rb, line 132
def requests
  REQUESTS
end
setup() click to toggle source

Creates a clean mechanize instance +@mech+ for use in tests.

Calls superclass method
# File lib/mechanize/test_case.rb, line 46
def setup
  super

  REQUESTS.clear
  @mech = Mechanize.new
  @ssl_private_key = nil
  @ssl_certificate = nil
end
ssl_certificate() click to toggle source

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
ssl_private_key() click to toggle source

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
tempfile(content) click to toggle source

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
windows?() click to toggle source

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