• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2011 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 // A fake XmppClient for use in unit tests.
12 
13 #ifndef WEBRTC_LIBJINGLE_XMPP_FAKEXMPPCLIENT_H_
14 #define WEBRTC_LIBJINGLE_XMPP_FAKEXMPPCLIENT_H_
15 
16 #include <string>
17 #include <vector>
18 
19 #include "webrtc/libjingle/xmpp/xmpptask.h"
20 
21 namespace buzz {
22 
23 class XmlElement;
24 
25 class FakeXmppClient : public XmppTaskParentInterface,
26                        public XmppClientInterface {
27  public:
FakeXmppClient(rtc::TaskParent * parent)28   explicit FakeXmppClient(rtc::TaskParent* parent)
29       : XmppTaskParentInterface(parent) {
30   }
31 
32   // As XmppTaskParentInterface
GetClient()33   virtual XmppClientInterface* GetClient() {
34     return this;
35   }
36 
ProcessStart()37   virtual int ProcessStart() {
38     return STATE_RESPONSE;
39   }
40 
41   // As XmppClientInterface
GetState()42   virtual XmppEngine::State GetState() const {
43     return XmppEngine::STATE_OPEN;
44   }
45 
jid()46   virtual const Jid& jid() const {
47     return jid_;
48   }
49 
NextId()50   virtual std::string NextId() {
51     // Implement if needed for tests.
52     return "0";
53   }
54 
SendStanza(const XmlElement * stanza)55   virtual XmppReturnStatus SendStanza(const XmlElement* stanza) {
56     sent_stanzas_.push_back(stanza);
57     return XMPP_RETURN_OK;
58   }
59 
sent_stanzas()60   const std::vector<const XmlElement*>& sent_stanzas() {
61     return sent_stanzas_;
62   }
63 
SendStanzaError(const XmlElement * pelOriginal,XmppStanzaError code,const std::string & text)64   virtual XmppReturnStatus SendStanzaError(
65       const XmlElement * pelOriginal,
66       XmppStanzaError code,
67       const std::string & text) {
68     // Implement if needed for tests.
69     return XMPP_RETURN_OK;
70   }
71 
AddXmppTask(XmppTask * task,XmppEngine::HandlerLevel level)72   virtual void AddXmppTask(XmppTask* task,
73                            XmppEngine::HandlerLevel level) {
74     tasks_.push_back(task);
75   }
76 
RemoveXmppTask(XmppTask * task)77   virtual void RemoveXmppTask(XmppTask* task) {
78     std::remove(tasks_.begin(), tasks_.end(), task);
79   }
80 
81   // As FakeXmppClient
set_jid(const Jid & jid)82   void set_jid(const Jid& jid) {
83     jid_ = jid;
84   }
85 
86   // Takes ownership of stanza.
HandleStanza(XmlElement * stanza)87   void HandleStanza(XmlElement* stanza) {
88     for (std::vector<XmppTask*>::iterator task = tasks_.begin();
89          task != tasks_.end(); ++task) {
90       if ((*task)->HandleStanza(stanza)) {
91         delete stanza;
92         return;
93       }
94     }
95     delete stanza;
96   }
97 
98  private:
99   Jid jid_;
100   std::vector<XmppTask*> tasks_;
101   std::vector<const XmlElement*> sent_stanzas_;
102 };
103 
104 }  // namespace buzz
105 
106 #endif  // WEBRTC_LIBJINGLE_XMPP_FAKEXMPPCLIENT_H_
107