summaryrefslogtreecommitdiffstats
path: root/vendor/gems/ruby-openid-2.1.4/test/testutil.rb
blob: 7676fb9533110478a568ecdfc8a2f50f7938169d (plain)
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
require "pathname"

module OpenID
  module TestDataMixin
    TESTS_DIR = Pathname.new(__FILE__).dirname
    TEST_DATA_DIR = Pathname.new('data')

    def read_data_file(filename, lines=true, data_dir=TEST_DATA_DIR)
      fname = TESTS_DIR.join(data_dir, filename)

      if lines
        fname.readlines
      else
        fname.read
      end
    end
  end

  module FetcherMixin
    def with_fetcher(fetcher)
      original_fetcher = OpenID.fetcher
      begin
        OpenID.fetcher = fetcher
        return yield
      ensure
        OpenID.fetcher = original_fetcher
      end
    end
  end

  module Const
    def const(symbol, value)
      (class << self;self;end).instance_eval do
        define_method(symbol) { value }
      end
    end
  end

  class MockResponse
    attr_reader :code, :body

    def initialize(code, body)
      @code = code.to_s
      @body = body
    end
  end

  module ProtocolErrorMixin
    def assert_protocol_error(str_prefix)
      begin
        result = yield
      rescue ProtocolError => why
        message = "Expected prefix #{str_prefix.inspect}, got "\
                  "#{why.message.inspect}"
        assert(why.message.starts_with?(str_prefix), message)
      else
        fail("Expected ProtocolError. Got #{result.inspect}")
      end
    end
  end

  module OverrideMethodMixin
    def with_method_overridden(method_name, proc)
      original = method(method_name)
      begin
        # TODO: find a combination of undef calls which prevent the warning
        verbose, $VERBOSE = $VERBOSE, false
        define_method(method_name, proc)
        module_function(method_name)
        $VERBOSE = verbose
        yield
      ensure
        if original.respond_to? :owner
          original.owner.send(:undef_method, method_name)
          original.owner.send :define_method, method_name, original
        else
          define_method(method_name, original)
          module_function(method_name)
        end
      end
    end
  end

  # To use:
  # > x = Object.new
  # > x.extend(InstanceDefExtension)
  # > x.instance_def(:monkeys) do
  # >   "bananas"
  # > end
  # > x.monkeys
  #
  module InstanceDefExtension
    def instance_def(method_name, &proc)
      (class << self;self;end).instance_eval do
        # TODO: find a combination of undef calls which prevent the warning
        verbose, $VERBOSE = $VERBOSE, false
        define_method(method_name, proc)
        $VERBOSE = verbose
      end
    end
  end

  GOODSIG = '[A Good Signature]'

  class GoodAssoc
    attr_accessor :handle, :expires_in

    def initialize(handle='-blah-')
      @handle = handle
      @expires_in = 3600
    end

    def check_message_signature(msg)
      msg.get_arg(OPENID_NS, 'sig') == GOODSIG
    end
  end

  class HTTPResponse
    def self._from_raw_data(status, body="", headers={}, final_url=nil)
      resp = Net::HTTPResponse.new('1.1', status.to_s, 'NONE')
      me = self._from_net_response(resp, final_url)
      me.initialize_http_header headers
      me.body = body
      return me
    end
  end
end