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