summary refs log tree commit diff stats
path: root/README.org
blob: dd23ebe272b16047e44afa057c43d8dd151d9a8f (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
#+TITLE: Cetus

Cetus is a wallpaper tool written in Go. It can set wallpapers from various
sources. Default behaviour is to set a random wallpaper.

* Dependency
- [[https://feh.finalrewind.org/][feh]]

* Features
- Set Daily, Weekly or Random wallpaper

* Examples
** Daily wallpaper
*** from Astronomy Picture of the Day
#+BEGIN_SRC sh
cetus -apod -daily
#+END_SRC
*** from Bing Photo of the Day
#+BEGIN_SRC sh
cetus -bpod -daily
#+END_SRC
*** from Unsplash
#+BEGIN_SRC sh
cetus -unsplash -daily
#+END_SRC
*** from any service (choosen randomly)
#+BEGIN_SRC sh
cetus -daily
#+END_SRC
** Weekly wallpaper
*** from Unsplash
#+BEGIN_SRC sh
cetus -unsplash -weekly
#+END_SRC
** Random wallpaper
*** from Unsplash
#+BEGIN_SRC sh
cetus -unsplash -random
#+END_SRC
a> 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263
#include <glib.h>
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>
#include <stdlib.h>
#include <string.h>

#include <stabber.h>
#include <expect.h>

#include "proftest.h"

void
presence_online(void **state)
{
    prof_connect();

    prof_input("/online");

    assert_true(stbbr_received(
        "<presence id=\"prof_presence_2\">"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));

    assert_true(prof_output_exact("Status set to online (priority 0)"));
}

void
presence_online_with_message(void **state)
{
    prof_connect();

    prof_input("/online \"Hi there\"");

    assert_true(stbbr_received(
        "<presence id=\"prof_presence_2\">"
            "<status>Hi there</status>"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));

    assert_true(prof_output_exact("Status set to online (priority 0), \"Hi there\"."));
}

void
presence_away(void **state)
{
    prof_connect();

    prof_input("/away");

    assert_true(stbbr_received(
        "<presence id=\"prof_presence_2\">"
            "<show>away</show>"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));

    assert_true(prof_output_exact("Status set to away (priority 0)"));
}

void
presence_away_with_message(void **state)
{
    prof_connect();

    prof_input("/away \"I'm not here for a bit\"");

    assert_true(stbbr_received(
        "<presence id=\"prof_presence_2\">"
            "<show>away</show>"
            "<status>I'm not here for a bit</status>"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));

    assert_true(prof_output_exact("Status set to away (priority 0), \"I'm not here for a bit\"."));
}

void
presence_xa(void **state)
{
    prof_connect();

    prof_input("/xa");

    assert_true(stbbr_received(
        "<presence id=\"prof_presence_2\">"
            "<show>xa</show>"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));

    assert_true(prof_output_exact("Status set to xa (priority 0)"));
}

void
presence_xa_with_message(void **state)
{
    prof_connect();

    prof_input("/xa \"Gone to the shops\"");

    assert_true(stbbr_received(
        "<presence id=\"prof_presence_2\">"
            "<show>xa</show>"
            "<status>Gone to the shops</status>"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));

    assert_true(prof_output_exact("Status set to xa (priority 0), \"Gone to the shops\"."));
}

void
presence_dnd(void **state)
{
    prof_connect();

    prof_input("/dnd");

    assert_true(stbbr_received(
        "<presence id=\"prof_presence_2\">"
            "<show>dnd</show>"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));

    assert_true(prof_output_exact("Status set to dnd (priority 0)"));
}

void
presence_dnd_with_message(void **state)
{
    prof_connect();

    prof_input("/dnd \"Working\"");

    assert_true(stbbr_received(
        "<presence id=\"prof_presence_2\">"
            "<show>dnd</show>"
            "<status>Working</status>"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));

    assert_true(prof_output_exact("Status set to dnd (priority 0), \"Working\"."));
}

void
presence_chat(void **state)
{
    prof_connect();

    prof_input("/chat");

    assert_true(stbbr_received(
        "<presence id=\"prof_presence_2\">"
            "<show>chat</show>"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));

    assert_true(prof_output_exact("Status set to chat (priority 0)"));
}

void
presence_chat_with_message(void **state)
{
    prof_connect();

    prof_input("/chat \"Free to talk\"");

    assert_true(stbbr_received(
        "<presence id=\"prof_presence_2\">"
            "<show>chat</show>"
            "<status>Free to talk</status>"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));

    assert_true(prof_output_exact("Status set to chat (priority 0), \"Free to talk\"."));
}

void
presence_set_priority(void **state)
{
    prof_connect();

    prof_input("/priority 25");

    assert_true(stbbr_received(
        "<presence id=\"prof_presence_2\">"
            "<priority>25</priority>"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));

    assert_true(prof_output_exact("Priority set to 25."));
}

void
presence_includes_priority(void **state)
{
    prof_connect();

    prof_input("/priority 25");
    assert_true(stbbr_received(
        "<presence id=\"prof_presence_2\">"
            "<priority>25</priority>"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));
    assert_true(prof_output_exact("Priority set to 25."));

    prof_input("/chat \"Free to talk\"");
    assert_true(stbbr_received(
        "<presence id=\"prof_presence_3\">"
            "<priority>25</priority>"
            "<show>chat</show>"
            "<status>Free to talk</status>"
            "<c hash=\"sha-1\" xmlns=\"http://jabber.org/protocol/caps\" ver=\"*\" node=\"http://www.profanity.im\"/>"
        "</presence>"
    ));
    assert_true(prof_output_exact("Status set to chat (priority 25), \"Free to talk\"."));
}

void
presence_received(void **state)
{
    prof_connect();

    stbbr_send(
        "<presence to=\"stabber@localhost\" from=\"buddy1@localhost/mobile\">"
            "<priority>10</priority>"
            "<status>I'm here</status>"
        "</presence>"
    );

    assert_true(prof_output_exact("Buddy1 (mobile) is online, \"I'm here\""));
}

// Typical use case for gateways that don't support resources
void
presence_missing_resource_defaults(void **state)
{
    prof_connect();

    stbbr_send(
        "<presence to=\"stabber@localhost\" from=\"buddy1@localhost\">"
            "<priority>15</priority>"
            "<status>My status</status>"
        "</presence>"
    );

    assert_true(prof_output_exact("Buddy1 is online, \"My status\""));

    prof_input("/info Buddy1");

    assert_true(prof_output_exact("__prof_default (15), online"));
}