about summary refs log tree commit diff stats
path: root/tests/unittests/test_contact.c
blob: 127ca5cfb8a0948146282820a358cd8a1e52d824 (plain) (blame)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
ID: f99ef530-0407-4f0b-a4d0-51498fc7cd96
Title: Aya Hirano - Bouken Desho Desho?
Authors: Nova [ミラーワールド] <novaburst@envs.net>
Date: 2021-12-20T12:21:37-00:00
Topics: Lyrics

# Kanji

答えはいつも私の胸に...

なんでだろ あなたを選んだ私です
もうとまらない 運命様から決められたけど
I believe 真似だけじゃつまらないの
You'll be right!
感じるまま感じることだけをするよ

冒険でしょでしょ!? ホントが嘘に変わる世界で
夢があるから強くなるのよ 誰の為じゃない

一緒に来てくださいっ
どこまでも自由な私を見てよね
明日過去になった今日のいまが奇跡
I believe you...

戻れないとこまで 行かなきゃつまんない
さあ教えて 秘めてる願いを鏡に投げた
My delight 身体ごと受けとめたら
Your mind fly!
驚かせて驚いて笑顔になろう

始まりでしょでしょ!? キレイが闇を照らすみたいに
私のちからあなたの涙 どっちも正しいの

現実にゆれる繊細な心が
傷つくのはイヤ
思いましたいつもいつも胸の奥に
答えが...

普通じゃないのが当然なら
答える私は何ができる?
普通でも普通じゃなくて
感じるまま感じることだけをするよ

冒険でしょでしょ!? ホントが嘘に変わる世界で
夢があるから強くなるのよ 誰の為じゃない
始まりでしょ始まりなんでしょ!?
キレイが闇を照らすみたいに
私とあなた冒険の途中

一緒に進んでく どこまでも自由に
現実を超えて
明日過去になった今日のいまが奇跡
確かな未来を
つかもう未来を
I believe you...

# Romaji

Kotae wa itsumo watashi no mune ni...

Nande daro anata wo eranda watashi desu
Mou tomaranai unmei-sama kara kimerareta kedo
I believe mane dake ja tsumaranai no
You'll be right!
Kanjiru mama kanjiru koto dake wo suru yo

Bouken desho desho!? honto ga uso ni kawaru sekai de
Yume ga aru kara tsuyoku naru no yo dare no tame ja nai

Issho ni kite kudasai
Doko made mo juyuu na watashi wo mite yo ne
Ashita kako ni natta kyou no ima ga kiseki
I believe you...

Modorenai toko made ikanakya tsumannai
Saa oshiete himeteru negai wo kagami ni nageta
My delight karada goto uketometara
Your mind fly!
Odorokasete odoroite egao ni narou

Hajimari desho desho!? kirei ga yami wo terasu mitai ni
Watashi no chikara anata no namida dotchi mo tadashii no

Genjitsu ni yureru sensai na kokoro ga
Kizutsuku no wa iya
Omoimashita itsumo itsumo mune no oku ni
Kotae ga...

Futsuu ja nai no ga touzen nara
Kotaeru watashi wa nani ga dekiru?
Futsuu demo futsuu ja nakute
Kanjiru mama kanjiru koto dake wo suru yo

Bouken desho desho!? honto ga uso ni kawaru sekai de
Yume ga aru kara tsuyoku naru no yo dare no tame ja nai
Hajimari desho hajimari nandesho!?
Kirei ga yami wo terasu mitai ni
Watashi to anata bouken no tochuu

Issho ni susundeku doko made mo jiyuu ni
Genjitsu wo koete
Ashita kako ni natta kyou no ima ga kiseki
Tashika na mirai wo
Tsukamou mirai wo
I believe you...
a id='n373' href='#n373'>373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407
#include <glib.h>
#include <stdarg.h>
#include <string.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>
#include <stdlib.h>

#include "xmpp/contact.h"

void contact_in_group(void **state)
{
    GSList *groups = NULL;
    groups = g_slist_append(groups, strdup("somegroup"));
    PContact contact = p_contact_new("bob@server.com", "bob", groups, "both",
        "is offline", FALSE);

    gboolean result = p_contact_in_group(contact, "somegroup");

    assert_true(result);

    p_contact_free(contact);
//    g_slist_free(groups);
}

void contact_not_in_group(void **state)
{
    GSList *groups = NULL;
    groups = g_slist_append(groups, strdup("somegroup"));
    PContact contact = p_contact_new("bob@server.com", "bob", groups, "both",
        "is offline", FALSE);

    gboolean result = p_contact_in_group(contact, "othergroup");

    assert_false(result);

    p_contact_free(contact);
//    g_slist_free(groups);
}

void contact_name_when_name_exists(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "both",
        "is offline", FALSE);

    const char *name = p_contact_name_or_jid(contact);

    assert_string_equal("bob", name);

    p_contact_free(contact);
}

void contact_jid_when_name_not_exists(void **state)
{
    PContact contact = p_contact_new("bob@server.com", NULL, NULL, "both",
        "is offline", FALSE);

    const char *jid = p_contact_name_or_jid(contact);

    assert_string_equal("bob@server.com", jid);

    p_contact_free(contact);
}

void contact_string_when_name_exists(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "both",
        "is offline", FALSE);

    char *str = p_contact_create_display_string(contact, "laptop");

    assert_string_equal("bob (laptop)", str);

    p_contact_free(contact);
    free(str);
}

void contact_string_when_name_not_exists(void **state)
{
    PContact contact = p_contact_new("bob@server.com", NULL, NULL, "both",
        "is offline", FALSE);

    char *str = p_contact_create_display_string(contact, "laptop");

    assert_string_equal("bob@server.com (laptop)", str);

    p_contact_free(contact);
    free(str);
}

void contact_string_when_default_resource(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "both",
        "is offline", FALSE);

    char *str = p_contact_create_display_string(contact, "__prof_default");

    assert_string_equal("bob", str);

    p_contact_free(contact);
    free(str);
}

void contact_presence_offline(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "both",
        "is offline", FALSE);

    const char *presence = p_contact_presence(contact);

    assert_string_equal("offline", presence);

    p_contact_free(contact);
}

void contact_presence_uses_highest_priority(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "both",
        "is offline", FALSE);

    Resource *resource10 = resource_new("resource10", RESOURCE_ONLINE, NULL, 10);
    Resource *resource20 = resource_new("resource20", RESOURCE_CHAT, NULL, 20);
    Resource *resource30 = resource_new("resource30", RESOURCE_AWAY, NULL, 30);
    Resource *resource1 = resource_new("resource1", RESOURCE_XA, NULL, 1);
    Resource *resource2 = resource_new("resource2", RESOURCE_DND, NULL, 2);
    p_contact_set_presence(contact, resource10);
    p_contact_set_presence(contact, resource20);
    p_contact_set_presence(contact, resource30);
    p_contact_set_presence(contact, resource1);
    p_contact_set_presence(contact, resource2);

    const char *presence = p_contact_presence(contact);

    assert_string_equal("away", presence);

    p_contact_free(contact);
}

void contact_presence_chat_when_same_prioroty(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "both",
        "is offline", FALSE);

    Resource *resource_online = resource_new("resource_online", RESOURCE_ONLINE, NULL, 10);
    Resource *resource_chat = resource_new("resource_chat", RESOURCE_CHAT, NULL, 10);
    Resource *resource_away = resource_new("resource_away", RESOURCE_AWAY, NULL, 10);
    Resource *resource_xa = resource_new("resource_xa", RESOURCE_XA, NULL, 10);
    Resource *resource_dnd = resource_new("resource_dnd", RESOURCE_DND, NULL, 10);
    p_contact_set_presence(contact, resource_online);
    p_contact_set_presence(contact, resource_chat);
    p_contact_set_presence(contact, resource_away);
    p_contact_set_presence(contact, resource_xa);
    p_contact_set_presence(contact, resource_dnd);

    const char *presence = p_contact_presence(contact);

    assert_string_equal("chat", presence);

    p_contact_free(contact);
}

void contact_presence_online_when_same_prioroty(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "both",
        "is offline", FALSE);

    Resource *resource_online = resource_new("resource_online", RESOURCE_ONLINE, NULL, 10);
    Resource *resource_away = resource_new("resource_away", RESOURCE_AWAY, NULL, 10);
    Resource *resource_xa = resource_new("resource_xa", RESOURCE_XA, NULL, 10);
    Resource *resource_dnd = resource_new("resource_dnd", RESOURCE_DND, NULL, 10);
    p_contact_set_presence(contact, resource_online);
    p_contact_set_presence(contact, resource_away);
    p_contact_set_presence(contact, resource_xa);
    p_contact_set_presence(contact, resource_dnd);

    const char *presence = p_contact_presence(contact);

    assert_string_equal("online", presence);

    p_contact_free(contact);
}

void contact_presence_away_when_same_prioroty(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "both",
        "is offline", FALSE);

    Resource *resource_away = resource_new("resource_away", RESOURCE_AWAY, NULL, 10);
    Resource *resource_xa = resource_new("resource_xa", RESOURCE_XA, NULL, 10);
    Resource *resource_dnd = resource_new("resource_dnd", RESOURCE_DND, NULL, 10);
    p_contact_set_presence(contact, resource_away);
    p_contact_set_presence(contact, resource_xa);
    p_contact_set_presence(contact, resource_dnd);

    const char *presence = p_contact_presence(contact);

    assert_string_equal("away", presence);

    p_contact_free(contact);
}

void contact_presence_xa_when_same_prioroty(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "both",
        "is offline", FALSE);

    Resource *resource_xa = resource_new("resource_xa", RESOURCE_XA, NULL, 10);
    Resource *resource_dnd = resource_new("resource_dnd", RESOURCE_DND, NULL, 10);
    p_contact_set_presence(contact, resource_xa);
    p_contact_set_presence(contact, resource_dnd);

    const char *presence = p_contact_presence(contact);

    assert_string_equal("xa", presence);

    p_contact_free(contact);
}

void contact_presence_dnd(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "both",
        "is offline", FALSE);

    Resource *resource_dnd = resource_new("resource_dnd", RESOURCE_DND, NULL, 10);
    p_contact_set_presence(contact, resource_dnd);

    const char *presence = p_contact_presence(contact);

    assert_string_equal("dnd", presence);

    p_contact_free(contact);
}

void contact_subscribed_when_to(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "to",
        "is offline", FALSE);

    gboolean result = p_contact_subscribed(contact);

    assert_true(result);

    p_contact_free(contact);
}

void contact_subscribed_when_both(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "both",
        "is offline", FALSE);

    gboolean result = p_contact_subscribed(contact);

    assert_true(result);

    p_contact_free(contact);
}

void contact_not_subscribed_when_from(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, "from",
        "is offline", FALSE);

    gboolean result = p_contact_subscribed(contact);

    assert_false(result);

    p_contact_free(contact);
}

void contact_not_subscribed_when_no_subscription_value(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, NULL,
        "is offline", FALSE);

    gboolean result = p_contact_subscribed(contact);

    assert_false(result);

    p_contact_free(contact);
}

void contact_not_available(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, NULL,
        "is offline", FALSE);

    gboolean result = p_contact_is_available(contact);

    assert_false(result);

    p_contact_free(contact);
}

void contact_not_available_when_highest_priority_away(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, NULL,
        "is offline", FALSE);

    Resource *resource_online = resource_new("resource_online", RESOURCE_ONLINE, NULL, 10);
    Resource *resource_chat = resource_new("resource_chat", RESOURCE_CHAT, NULL, 10);
    Resource *resource_away = resource_new("resource_away", RESOURCE_AWAY, NULL, 20);
    Resource *resource_xa = resource_new("resource_xa", RESOURCE_XA, NULL, 10);
    Resource *resource_dnd = resource_new("resource_dnd", RESOURCE_DND, NULL, 10);
    p_contact_set_presence(contact, resource_online);
    p_contact_set_presence(contact, resource_chat);
    p_contact_set_presence(contact, resource_away);
    p_contact_set_presence(contact, resource_xa);
    p_contact_set_presence(contact, resource_dnd);

    gboolean result = p_contact_is_available(contact);

    assert_false(result);

    p_contact_free(contact);
}

void contact_not_available_when_highest_priority_xa(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, NULL,
        "is offline", FALSE);

    Resource *resource_online = resource_new("resource_online", RESOURCE_ONLINE, NULL, 10);
    Resource *resource_chat = resource_new("resource_chat", RESOURCE_CHAT, NULL, 10);
    Resource *resource_away = resource_new("resource_away", RESOURCE_AWAY, NULL, 10);
    Resource *resource_xa = resource_new("resource_xa", RESOURCE_XA, NULL, 20);
    Resource *resource_dnd = resource_new("resource_dnd", RESOURCE_DND, NULL, 10);
    p_contact_set_presence(contact, resource_online);
    p_contact_set_presence(contact, resource_chat);
    p_contact_set_presence(contact, resource_away);
    p_contact_set_presence(contact, resource_xa);
    p_contact_set_presence(contact, resource_dnd);

    gboolean result = p_contact_is_available(contact);

    assert_false(result);

    p_contact_free(contact);
}

void contact_not_available_when_highest_priority_dnd(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, NULL,
        "is offline", FALSE);

    Resource *resource_online = resource_new("resource_online", RESOURCE_ONLINE, NULL, 10);
    Resource *resource_chat = resource_new("resource_chat", RESOURCE_CHAT, NULL, 10);
    Resource *resource_away = resource_new("resource_away", RESOURCE_AWAY, NULL, 10);
    Resource *resource_xa = resource_new("resource_xa", RESOURCE_XA, NULL, 10);
    Resource *resource_dnd = resource_new("resource_dnd", RESOURCE_DND, NULL, 20);
    p_contact_set_presence(contact, resource_online);
    p_contact_set_presence(contact, resource_chat);
    p_contact_set_presence(contact, resource_away);
    p_contact_set_presence(contact, resource_xa);
    p_contact_set_presence(contact, resource_dnd);

    gboolean result = p_contact_is_available(contact);

    assert_false(result);

    p_contact_free(contact);
}

void contact_available_when_highest_priority_online(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, NULL,
        "is offline", FALSE);

    Resource *resource_online = resource_new("resource_online", RESOURCE_ONLINE, NULL, 20);
    Resource *resource_chat = resource_new("resource_chat", RESOURCE_CHAT, NULL, 10);
    Resource *resource_away = resource_new("resource_away", RESOURCE_AWAY, NULL, 10);
    Resource *resource_xa = resource_new("resource_xa", RESOURCE_XA, NULL, 10);
    Resource *resource_dnd = resource_new("resource_dnd", RESOURCE_DND, NULL, 10);
    p_contact_set_presence(contact, resource_online);
    p_contact_set_presence(contact, resource_chat);
    p_contact_set_presence(contact, resource_away);
    p_contact_set_presence(contact, resource_xa);
    p_contact_set_presence(contact, resource_dnd);

    gboolean result = p_contact_is_available(contact);

    assert_true(result);

    p_contact_free(contact);
}

void contact_available_when_highest_priority_chat(void **state)
{
    PContact contact = p_contact_new("bob@server.com", "bob", NULL, NULL,
        "is offline", FALSE);

    Resource *resource_online = resource_new("resource_online", RESOURCE_ONLINE, NULL, 10);
    Resource *resource_chat = resource_new("resource_chat", RESOURCE_CHAT, NULL, 20);
    Resource *resource_away = resource_new("resource_away", RESOURCE_AWAY, NULL, 10);
    Resource *resource_xa = resource_new("resource_xa", RESOURCE_XA, NULL, 10);
    Resource *resource_dnd = resource_new("resource_dnd", RESOURCE_DND, NULL, 10);
    p_contact_set_presence(contact, resource_online);
    p_contact_set_presence(contact, resource_chat);
    p_contact_set_presence(contact, resource_away);
    p_contact_set_presence(contact, resource_xa);
    p_contact_set_presence(contact, resource_dnd);

    gboolean result = p_contact_is_available(contact);

    assert_true(result);

    p_contact_free(contact);
}