~singpolyma/biboumi

ref: 0bb4f144fcded6b5753b5de7493b7b10474c9a1f biboumi/tests/xmpp.cpp -rw-r--r-- 2.2 KiB
0bb4f144 — Félix Baylac-Jacqué CLI: Add a test config flag 2 years ago
                                                                                
3c1889fb Florent Le Coz
021f025c louiz’
3c1889fb Florent Le Coz
66887c22 Florent Le Coz
3c1889fb Florent Le Coz
cf1c8f18 louiz’
3c1889fb Florent Le Coz
cf1c8f18 louiz’
3c1889fb Florent Le Coz
21826036 Florent Le Coz
3c1889fb Florent Le Coz
5402a256 louiz’
3c1889fb Florent Le Coz
021f025c louiz’
5a5bb7f6 louiz’
cf1c8f18 louiz’
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "catch.hpp"

#include <xmpp/xmpp_parser.hpp>
#include <xmpp/auth.hpp>

TEST_CASE("Test basic XML parsing")
{
  XmppParser xml;

  const std::string doc = "<stream xmlns='stream_ns'><stanza b='c'>inner<child1><grandchild/></child1><child2 xmlns='child2_ns'/>tail</stanza></stream>";

  auto check_stanza = [](const Stanza& stanza)
    {
      CHECK(stanza.get_name() == "stanza");
      CHECK(stanza.get_tag("xmlns") == "stream_ns");
      CHECK(stanza.get_tag("b") == "c");
      CHECK(stanza.get_inner() == "inner");
      CHECK(stanza.get_tail() == "");
      CHECK(stanza.get_child("child1", "stream_ns") != nullptr);
      CHECK(stanza.get_child("child2", "stream_ns") == nullptr);
      CHECK(stanza.get_child("child2", "child2_ns") != nullptr);
      CHECK(stanza.get_child("child2", "child2_ns")->get_tail() == "tail");
    };
  xml.add_stanza_callback([check_stanza](const Stanza& stanza)
      {
        check_stanza(stanza);
        // Do the same checks on a copy of that stanza.
        Stanza copy(stanza);
        check_stanza(copy);
        // And do the same checks on moved-constructed stanza
        Stanza moved(std::move(copy));
      });
  CHECK(doc.size() <= std::numeric_limits<int>::max());
  xml.feed(doc.data(), static_cast<int>(doc.size()), true);

  const std::string doc2 = "<stream xmlns='s'><stanza>coucou\r\n\a</stanza></stream>";
  xml.add_stanza_callback([](const Stanza& stanza)
      {
        CHECK(stanza.get_inner() == "coucou\r\n");
      });
  CHECK(doc.size() <= std::numeric_limits<int>::max());
  xml.feed(doc2.data(), static_cast<int>(doc.size()), true);
}

TEST_CASE("XML escape")
{
  const std::string unescaped = R"('coucou'<cc>/&"gaga")";
  CHECK(xml_escape(unescaped) == "&apos;coucou&apos;&lt;cc&gt;/&amp;&quot;gaga&quot;");
}

TEST_CASE("handshake_digest")
{
  const auto res = get_handshake_digest("id1234", "S4CR3T");
  CHECK(res == "c92901b5d376ad56269914da0cce3aab976847df");
}

TEST_CASE("substanzas")
{
  Stanza a("a");
  {
    XmlSubNode b(a, "b");
    {
      CHECK(!a.has_children());
      XmlSubNode c(b, "c");
      XmlSubNode d(b, "d");
      CHECK(!c.has_children());
      CHECK(!d.has_children());
    }
    CHECK(b.has_children());
  }
  CHECK(a.has_children());
}