File: test_other_net_http_libraries.rb

package info (click to toggle)
ruby-fakeweb 1.3.0%2Bgit20170806%2Bdfsg1-4
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 464 kB
  • sloc: ruby: 2,058; sh: 24; makefile: 3
file content (56 lines) | stat: -rw-r--r-- 2,697 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
require 'test_helper'

# Each of these tests shells out to `ruby -rfakeweb ...` so
# we can see how FakeWeb behaves with different combinations of
# other gems loaded without polluting the rest of our tests.
class TestOtherNetHttpLibraries < Test::Unit::TestCase

  def capture_output_from_requiring(libs, additional_code = "")
    requires = libs.map { |lib| "require '#{lib}'" }.join("; ")
    fakeweb_test_dir = File.dirname(__FILE__)
    load_paths = [fakeweb_test_dir,
                  File.expand_path("#{fakeweb_test_dir}/../lib")]
    load_paths += Dir["#{fakeweb_test_dir}/vendor/*/lib"]
    load_path_opts = load_paths.map { |dir| "-I#{dir}" }.join(" ")

    # Since each test in this class starts a new Ruby process to run
    # implementation code, the main test process's Coverage database
    # won't know that code's been exercised. Instead, you have to load
    # SimpleCov at the start of each process, collect the results as
    # they exit, then finally merge them with the original test
    # process's stats at the end of the suite. SimpleCov is magic and
    # does this for you (!) as long as you inform it re: the haps by
    # providing a unique, stable identifier for each part.
    # We can just use the name of the current test, since we only
    # start one process per test. The original process (comprising
    # the rest of the tests) will just get the default name
    # "Unit Tests".
    #simplecov_code = "SIMPLECOV_COMMAND_NAME = '#{current_test_name}'; require 'helpers/start_simplecov'"

    #output = `#{ruby_path} #{current_ruby_opts.join(' ')} #{load_path_opts} -e "#{simplecov_code}; #{requires}; #{additional_code}" 2>&1`
    remove_warnings_from_gems_and_stdlib(output)
  end

  def _test_requiring_samuel_before_fakeweb_prints_warning
    output = capture_output_from_requiring %w(samuel fakeweb)
    assert_match %r(Warning: FakeWeb was loaded after Samuel), output
  end

  def _test_requiring_samuel_after_fakeweb_does_not_print_warning
    output = capture_output_from_requiring %w(fakeweb samuel)
    assert_empty output
  end

  def _test_requiring_right_http_connection_before_fakeweb_and_then_connecting_does_not_print_warning
    additional_code = "Net::HTTP.start('example.com')"
    output = capture_output_from_requiring %w(right_http_connection fakeweb), additional_code
    assert_empty output
  end

  def _test_requiring_right_http_connection_after_fakeweb_and_then_connecting_prints_warning
    additional_code = "Net::HTTP.start('example.com')"
    output = capture_output_from_requiring %w(fakeweb right_http_connection), additional_code
    assert_match %r(Warning: RightHttpConnection was loaded after FakeWeb), output
  end

end