Class Jabber::Test::ListenerMocker
In: lib/xmpp4r/test/listener_mocker.rb
Parent: Object

Methods

Attributes

mock_clients  [RW] 
tracker_of_callers  [RW] 
with_socket_mocked_callback_proc  [RW] 

Public Class methods

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

     # 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

[Source]

    # 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

Public Instance methods

[Source]

    # File lib/xmpp4r/test/listener_mocker.rb, line 47
47:           def auth(password)
48:             auth_nonsasl(password)
49:           end

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # File lib/xmpp4r/test/listener_mocker.rb, line 89
89:           def is_connected?
90:             self.connected
91:           end

[Source]

    # 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

[Validate]