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