about summary refs log tree commit diff stats
path: root/console.mu
Commit message (Expand)AuthorAgeFilesLines
* 3905Kartik K. Agaram2017-06-101-1/+0
* 3861 - screen untouched when entering console modeKartik K. Agaram2017-05-181-0/+1
* 3483Kartik K. Agaram2016-10-081-1/+1
* 2735 - define recipes using 'def'Kartik K. Agaram2016-03-081-1/+1
* 2652 - fix issue #4Kartik K. Agaram2016-02-131-0/+1
* 2132 - support for ctrl + arrow keysKartik K. Agaram2015-09-021-1/+2
* 1880 - switch .mu files to new type-deducing idiomKartik K. Agaram2015-07-291-1/+1
* 1868 - start using naked literals everywhereKartik K. Agaram2015-07-281-1/+1
* 1618Kartik K. Agaram2015-06-211-2/+2
* 1617Kartik K. Agaram2015-06-211-0/+14
11'>111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>
#include <stdlib.h>

#include "plugins/disco.h"

void
returns_empty_list_when_none(void **state)
{
    disco_close();
    GList *features = disco_get_features();

    assert_int_equal(g_list_length(features), 0);

    g_list_free(features);
    disco_close();
}

void
returns_added_feature(void **state)
{
    disco_close();
    disco_add_feature("my_plugin", "some:feature:example");

    GList *features = disco_get_features();
    assert_int_equal(g_list_length(features), 1);
    char *feature = features->data;
    assert_string_equal(feature, "some:feature:example");

    g_list_free(features);
    disco_close();
}

void
resets_features_on_close(void **state)
{
    disco_close();
    disco_add_feature("my_plugin", "some:feature:example");

    GList *features = disco_get_features();
    assert_int_equal(g_list_length(features), 1);
    g_list_free(features);

    disco_close();
    features = disco_get_features();
    assert_int_equal(g_list_length(features), 0);

    g_list_free(features);
    disco_close();
}

void
returns_all_added_features(void **state)
{
    disco_close();
    disco_add_feature("first_plugin", "first:feature");
    disco_add_feature("first_plugin", "second:feature");
    disco_add_feature("second_plugin", "third:feature");
    disco_add_feature("third_plugin", "fourth:feature");
    disco_add_feature("third_plugin", "fifth:feature");

    GList *features = disco_get_features();

    assert_int_equal(g_list_length(features), 5);
    assert_true(g_list_find_custom(features, "first:feature", g_strcmp0));
    assert_true(g_list_find_custom(features, "second:feature", g_strcmp0));
    assert_true(g_list_find_custom(features, "third:feature", g_strcmp0));
    assert_true(g_list_find_custom(features, "fourth:feature", g_strcmp0));
    assert_true(g_list_find_custom(features, "fifth:feature", g_strcmp0));

    g_list_free(features);
    disco_close();
}

void
does_not_add_duplicate_feature(void **state)
{
    disco_close();
    disco_add_feature("my_plugin", "my:feature");
    disco_add_feature("some_other_plugin", "my:feature");

    GList *features = disco_get_features();
    assert_int_equal(g_list_length(features), 1);

    g_list_free(features);
    disco_close();
}

void
removes_plugin_features(void **state)
{
    disco_close();
    disco_add_feature("plugin1", "plugin1:feature1");
    disco_add_feature("plugin1", "plugin1:feature2");
    disco_add_feature("plugin2", "plugin2:feature1");

    GList *features = disco_get_features();
    assert_int_equal(g_list_length(features), 3);
    g_list_free(features);

    disco_remove_features("plugin1");

    features = disco_get_features();
    assert_int_equal(g_list_length(features), 1);

    g_list_free(features);
    disco_close();
}

void
does_not_remove_feature_when_more_than_one_reference(void **state)
{
    disco_close();
    disco_add_feature("plugin1", "feature1");
    disco_add_feature("plugin1", "feature2");
    disco_add_feature("plugin2", "feature1");

    GList *features = disco_get_features();
    assert_int_equal(g_list_length(features), 2);
    g_list_free(features);

    disco_remove_features("plugin1");

    features = disco_get_features();
    assert_int_equal(g_list_length(features), 1);

    g_list_free(features);
    disco_close();
}