Home | History | Annotate | Download | only in xmpp
      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:
     28   explicit FakeXmppClient(rtc::TaskParent* parent)
     29       : XmppTaskParentInterface(parent) {
     30   }
     31 
     32   // As XmppTaskParentInterface
     33   virtual XmppClientInterface* GetClient() {
     34     return this;
     35   }
     36 
     37   virtual int ProcessStart() {
     38     return STATE_RESPONSE;
     39   }
     40 
     41   // As XmppClientInterface
     42   virtual XmppEngine::State GetState() const {
     43     return XmppEngine::STATE_OPEN;
     44   }
     45 
     46   virtual const Jid& jid() const {
     47     return jid_;
     48   }
     49 
     50   virtual std::string NextId() {
     51     // Implement if needed for tests.
     52     return "0";
     53   }
     54 
     55   virtual XmppReturnStatus SendStanza(const XmlElement* stanza) {
     56     sent_stanzas_.push_back(stanza);
     57     return XMPP_RETURN_OK;
     58   }
     59 
     60   const std::vector<const XmlElement*>& sent_stanzas() {
     61     return sent_stanzas_;
     62   }
     63 
     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 
     72   virtual void AddXmppTask(XmppTask* task,
     73                            XmppEngine::HandlerLevel level) {
     74     tasks_.push_back(task);
     75   }
     76 
     77   virtual void RemoveXmppTask(XmppTask* task) {
     78     std::remove(tasks_.begin(), tasks_.end(), task);
     79   }
     80 
     81   // As FakeXmppClient
     82   void set_jid(const Jid& jid) {
     83     jid_ = jid;
     84   }
     85 
     86   // Takes ownership of 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