Class: Mechanize::TestCase

Inherits:
Minitest::Test
  • Object
show all
Defined in:
lib/mechanize/test_case.rb

Overview

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

Constant Summary collapse

TEST_DIR =
File.expand_path '../../../test', __FILE__
REQUESTS =
[]

Instance Method Summary collapse

Instance Method Details

Creates a Mechanize::CookieJar by parsing the given str

 85 86 87 88 89
# File 'lib/mechanize/test_case.rb', line 85 def cookie_jar str, uri = URI('http://example') Mechanize::CookieJar.new.tap do |jar| jar.parse str, uri end end

#fake_page(agent = @mech) ⇒ Object

Creates a fake page with URI fake.example and an empty, submittable form.

 54 55 56 57 58 59 60 61 62 63 64 65
# File 'lib/mechanize/test_case.rb', line 54 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) ⇒ Object

Return the contents of the file without Windows carriage returns

 182 183 184
# File 'lib/mechanize/test_case.rb', line 182 def file_contents_without_cr(path) File.read(path).gsub(/\r\n/, "\n") end

#have_encoding?Boolean

Is the Encoding constant defined?

Returns:

  • (Boolean)
 70 71 72
# File 'lib/mechanize/test_case.rb', line 70 def have_encoding? Object.const_defined? :Encoding end

#html_page(body) ⇒ Object

Creates a Mechanize::Page with the given body

 77 78 79 80
# File 'lib/mechanize/test_case.rb', line 77 def html_page body uri = URI 'http://example/' Mechanize::Page.new uri, nil, body, 200, @mech end

#in_tmpdirObject

Runs the block inside a temporary directory

 94 95 96 97 98 99 100
# File 'lib/mechanize/test_case.rb', line 94 def in_tmpdir Dir.mktmpdir do |dir| Dir.chdir dir do yield end end end

#node(element, attributes = {}) ⇒ Object

Creates a Nokogiri Node element with the given attributes

 105 106 107 108 109 110 111
# File 'lib/mechanize/test_case.rb', line 105 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) ⇒ Object

Creates a Mechanize::Page for the given uri with the given content_type, response body and HTTP status code

 117 118 119 120 121 122
# File 'lib/mechanize/test_case.rb', line 117 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

#requestsObject

Requests made during this tests

 127 128 129
# File 'lib/mechanize/test_case.rb', line 127 def requests REQUESTS end

#setupObject

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

 41 42 43 44 45 46 47 48
# File 'lib/mechanize/test_case.rb', line 41 def setup super REQUESTS.clear @mech = Mechanize.new @ssl_private_key = nil @ssl_certificate = nil end

#ssl_certificateObject

An X509 certificate. This certificate is the same across all test runs

 148 149 150 151 152 153 154 155 156 157 158 159 160
# File 'lib/mechanize/test_case.rb', line 148 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_keyObject

An SSL private key. This key is the same across all test runs

 134 135 136 137 138 139 140 141 142 143
# File 'lib/mechanize/test_case.rb', line 134 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) ⇒ Object

Creates a Tempfile with content that is immediately unlinked

 165 166 167 168 169 170 171 172
# File 'lib/mechanize/test_case.rb', line 165 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?Boolean

Returns true if the current platform is a Windows platform

Returns:

  • (Boolean)
 176 177 178
# File 'lib/mechanize/test_case.rb', line 176 def windows? ::RUBY_PLATFORM =~ /mingw|mswin/ end