| Class | Jabber::Test::ListenerMocker |
| In: |
lib/xmpp4r/test/listener_mocker.rb
|
| Parent: | Object |
| mock_clients | [RW] | |
| tracker_of_callers | [RW] | |
| with_socket_mocked_callback_proc | [RW] |
# File lib/xmpp4r/test/listener_mocker.rb, line 99
99: def self.mock_out(listener)
100: listener.instance_eval do
101: class << self
102: def setup_connection
103: super
104: @connection.instance_eval do
105: class << self
106: self.class_eval(&Jabber::Test::ListenerMocker.mocker_proc)
107: end
108: end
109: end
110: end
111: end
112:
113: listener
114: end
# File lib/xmpp4r/test/listener_mocker.rb, line 95
95: def self.mock_out_all_connections
96: Jabber::Reliable::Connection.class_eval(&Jabber::Test::ListenerMocker.mocker_proc)
97: end
# File lib/xmpp4r/test/listener_mocker.rb, line 30
30: def self.mocker_proc
31: Proc.new do
32: attr_accessor :messagecbs, :connected
33: ListenerMocker.mock_clients ||= {}
34: ListenerMocker.tracker_of_callers ||= {}
35:
36: def connect
37: Jabber::debuglog("(in mock) connected #{@jid.bare}")
38: self.connected = true
39: end
40:
41: def close!
42: ListenerMocker.mock_clients[@jid.bare.to_s] = nil
43: ListenerMocker.tracker_of_callers[@jid.bare.to_s] = nil
44: self.connected = false
45: end
46:
47: def auth(password)
48: auth_nonsasl(password)
49: end
50:
51: def auth_nonsasl(password, digest=true)
52: Jabber::debuglog("(in mock) authed #{@jid.bare}")
53:
54: if(ListenerMocker.mock_clients[@jid.bare.to_s])
55: #raise a stack trace about multiple clients
56: raise "\n\n ---> READ ME: this is actualy 2 stack traces: <---- \n\n"+
57: "There is already a client connected on that jid #{@jid.bare.to_s}. "+
58: "The mock library cannot support multiple listeners connected as the same user! originally called in:\n"+
59: ListenerMocker.tracker_of_callers[@jid.bare.to_s].backtrace.join("\n")+"\n\n second trace: \n"
60: else
61: #store a stack trace so that next time we have multiple client, we can alert about it...
62: begin
63: throw "just saving a stack trace"
64: rescue => e
65: ListenerMocker.tracker_of_callers[@jid.bare.to_s] = e
66: end
67: end
68:
69: ListenerMocker.mock_clients[@jid.bare.to_s] = self
70: true
71: end
72:
73: def send(xml, &block)
74: Jabber::debuglog("(in mock) sending #{xml} #{xml.class}")
75: if(xml.is_a?(Jabber::Message))
76: xml.from = @jid
77: # unless xml.to
78: # raise "no jid!"
79: # end
80: if ListenerMocker.mock_clients[xml.to.bare.to_s]
81: Jabber::debuglog("(in mock) to #{xml.to.bare.to_s}")
82: ListenerMocker.mock_clients[xml.to.bare.to_s].messagecbs.process(xml)
83: else
84: Jabber::debuglog("(in mock) no client listening as #{xml.to.bare.to_s}")
85: end
86: end
87: end
88:
89: def is_connected?
90: self.connected
91: end
92: end
93: end
# File lib/xmpp4r/test/listener_mocker.rb, line 13
13: def initialize(*args)
14: initialize_old(*args) if ListenerMocker.with_socket_mocked_callback_proc.call(args)
15: end
# File lib/xmpp4r/test/listener_mocker.rb, line 102
102: def setup_connection
103: super
104: @connection.instance_eval do
105: class << self
106: self.class_eval(&Jabber::Test::ListenerMocker.mocker_proc)
107: end
108: end
109: end
# File lib/xmpp4r/test/listener_mocker.rb, line 9
9: def self.with_socket_mocked(callback_proc)
10: TCPSocket.class_eval{ ListenerMocker.with_socket_mocked_callback_proc = callback_proc }
11: TCPSocket.class_eval do
12: alias_method :initialize_old, :initialize
13: def initialize(*args)
14: initialize_old(*args) if ListenerMocker.with_socket_mocked_callback_proc.call(args)
15: end
16: end
17: yield
18: ensure
19: TCPSocket.class_eval do
20: if method_defined?(:initialize_old)
21: alias_method :initialize, :initialize_old
22: end
23: end
24: end
# File lib/xmpp4r/test/listener_mocker.rb, line 47
47: def auth(password)
48: auth_nonsasl(password)
49: end
# File lib/xmpp4r/test/listener_mocker.rb, line 51
51: def auth_nonsasl(password, digest=true)
52: Jabber::debuglog("(in mock) authed #{@jid.bare}")
53:
54: if(ListenerMocker.mock_clients[@jid.bare.to_s])
55: #raise a stack trace about multiple clients
56: raise "\n\n ---> READ ME: this is actualy 2 stack traces: <---- \n\n"+
57: "There is already a client connected on that jid #{@jid.bare.to_s}. "+
58: "The mock library cannot support multiple listeners connected as the same user! originally called in:\n"+
59: ListenerMocker.tracker_of_callers[@jid.bare.to_s].backtrace.join("\n")+"\n\n second trace: \n"
60: else
61: #store a stack trace so that next time we have multiple client, we can alert about it...
62: begin
63: throw "just saving a stack trace"
64: rescue => e
65: ListenerMocker.tracker_of_callers[@jid.bare.to_s] = e
66: end
67: end
68:
69: ListenerMocker.mock_clients[@jid.bare.to_s] = self
70: true
71: end
# File lib/xmpp4r/test/listener_mocker.rb, line 41
41: def close!
42: ListenerMocker.mock_clients[@jid.bare.to_s] = nil
43: ListenerMocker.tracker_of_callers[@jid.bare.to_s] = nil
44: self.connected = false
45: end
# File lib/xmpp4r/test/listener_mocker.rb, line 36
36: def connect
37: Jabber::debuglog("(in mock) connected #{@jid.bare}")
38: self.connected = true
39: end
# File lib/xmpp4r/test/listener_mocker.rb, line 73
73: def send(xml, &block)
74: Jabber::debuglog("(in mock) sending #{xml} #{xml.class}")
75: if(xml.is_a?(Jabber::Message))
76: xml.from = @jid
77: # unless xml.to
78: # raise "no jid!"
79: # end
80: if ListenerMocker.mock_clients[xml.to.bare.to_s]
81: Jabber::debuglog("(in mock) to #{xml.to.bare.to_s}")
82: ListenerMocker.mock_clients[xml.to.bare.to_s].messagecbs.process(xml)
83: else
84: Jabber::debuglog("(in mock) no client listening as #{xml.to.bare.to_s}")
85: end
86: end
87: end