1*34c4ff1cSNamhyung Kim // SPDX-License-Identifier: GPL-2.0 2*34c4ff1cSNamhyung Kim #include "tests.h" 3*34c4ff1cSNamhyung Kim #include <linux/compiler.h> 4*34c4ff1cSNamhyung Kim #include <subcmd/help.h> 5*34c4ff1cSNamhyung Kim 6*34c4ff1cSNamhyung Kim static int test__load_cmdnames(struct test_suite *test __maybe_unused, 7*34c4ff1cSNamhyung Kim int subtest __maybe_unused) 8*34c4ff1cSNamhyung Kim { 9*34c4ff1cSNamhyung Kim struct cmdnames cmds = {}; 10*34c4ff1cSNamhyung Kim 11*34c4ff1cSNamhyung Kim add_cmdname(&cmds, "aaa", 3); 12*34c4ff1cSNamhyung Kim add_cmdname(&cmds, "foo", 3); 13*34c4ff1cSNamhyung Kim add_cmdname(&cmds, "xyz", 3); 14*34c4ff1cSNamhyung Kim 15*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds, "aaa") == 1); 16*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("wrong cmd", is_in_cmdlist(&cmds, "bar") == 0); 17*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("case sensitive", is_in_cmdlist(&cmds, "XYZ") == 0); 18*34c4ff1cSNamhyung Kim 19*34c4ff1cSNamhyung Kim clean_cmdnames(&cmds); 20*34c4ff1cSNamhyung Kim return TEST_OK; 21*34c4ff1cSNamhyung Kim } 22*34c4ff1cSNamhyung Kim 23*34c4ff1cSNamhyung Kim static int test__uniq_cmdnames(struct test_suite *test __maybe_unused, 24*34c4ff1cSNamhyung Kim int subtest __maybe_unused) 25*34c4ff1cSNamhyung Kim { 26*34c4ff1cSNamhyung Kim struct cmdnames cmds = {}; 27*34c4ff1cSNamhyung Kim 28*34c4ff1cSNamhyung Kim /* uniq() assumes it's sorted */ 29*34c4ff1cSNamhyung Kim add_cmdname(&cmds, "aaa", 3); 30*34c4ff1cSNamhyung Kim add_cmdname(&cmds, "aaa", 3); 31*34c4ff1cSNamhyung Kim add_cmdname(&cmds, "bbb", 3); 32*34c4ff1cSNamhyung Kim 33*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("invalid original size", cmds.cnt == 3); 34*34c4ff1cSNamhyung Kim /* uniquify command names (to remove second 'aaa') */ 35*34c4ff1cSNamhyung Kim uniq(&cmds); 36*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("invalid final size", cmds.cnt == 2); 37*34c4ff1cSNamhyung Kim 38*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds, "aaa") == 1); 39*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds, "bbb") == 1); 40*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("wrong cmd", is_in_cmdlist(&cmds, "ccc") == 0); 41*34c4ff1cSNamhyung Kim 42*34c4ff1cSNamhyung Kim clean_cmdnames(&cmds); 43*34c4ff1cSNamhyung Kim return TEST_OK; 44*34c4ff1cSNamhyung Kim } 45*34c4ff1cSNamhyung Kim 46*34c4ff1cSNamhyung Kim static int test__exclude_cmdnames(struct test_suite *test __maybe_unused, 47*34c4ff1cSNamhyung Kim int subtest __maybe_unused) 48*34c4ff1cSNamhyung Kim { 49*34c4ff1cSNamhyung Kim struct cmdnames cmds1 = {}; 50*34c4ff1cSNamhyung Kim struct cmdnames cmds2 = {}; 51*34c4ff1cSNamhyung Kim 52*34c4ff1cSNamhyung Kim add_cmdname(&cmds1, "aaa", 3); 53*34c4ff1cSNamhyung Kim add_cmdname(&cmds1, "bbb", 3); 54*34c4ff1cSNamhyung Kim add_cmdname(&cmds1, "ccc", 3); 55*34c4ff1cSNamhyung Kim add_cmdname(&cmds1, "ddd", 3); 56*34c4ff1cSNamhyung Kim add_cmdname(&cmds1, "eee", 3); 57*34c4ff1cSNamhyung Kim add_cmdname(&cmds1, "fff", 3); 58*34c4ff1cSNamhyung Kim add_cmdname(&cmds1, "ggg", 3); 59*34c4ff1cSNamhyung Kim add_cmdname(&cmds1, "hhh", 3); 60*34c4ff1cSNamhyung Kim add_cmdname(&cmds1, "iii", 3); 61*34c4ff1cSNamhyung Kim add_cmdname(&cmds1, "jjj", 3); 62*34c4ff1cSNamhyung Kim 63*34c4ff1cSNamhyung Kim add_cmdname(&cmds2, "bbb", 3); 64*34c4ff1cSNamhyung Kim add_cmdname(&cmds2, "eee", 3); 65*34c4ff1cSNamhyung Kim add_cmdname(&cmds2, "jjj", 3); 66*34c4ff1cSNamhyung Kim 67*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("invalid original size", cmds1.cnt == 10); 68*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("invalid original size", cmds2.cnt == 3); 69*34c4ff1cSNamhyung Kim 70*34c4ff1cSNamhyung Kim /* remove duplicate command names in cmds1 */ 71*34c4ff1cSNamhyung Kim exclude_cmds(&cmds1, &cmds2); 72*34c4ff1cSNamhyung Kim 73*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("invalid excluded size", cmds1.cnt == 7); 74*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("invalid excluded size", cmds2.cnt == 3); 75*34c4ff1cSNamhyung Kim 76*34c4ff1cSNamhyung Kim /* excluded commands should not belong to cmds1 */ 77*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds1, "aaa") == 1); 78*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("wrong cmd", is_in_cmdlist(&cmds1, "bbb") == 0); 79*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds1, "ccc") == 1); 80*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds1, "ddd") == 1); 81*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("wrong cmd", is_in_cmdlist(&cmds1, "eee") == 0); 82*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds1, "fff") == 1); 83*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds1, "ggg") == 1); 84*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds1, "hhh") == 1); 85*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds1, "iii") == 1); 86*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("wrong cmd", is_in_cmdlist(&cmds1, "jjj") == 0); 87*34c4ff1cSNamhyung Kim 88*34c4ff1cSNamhyung Kim /* they should be only in cmds2 */ 89*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds2, "bbb") == 1); 90*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds2, "eee") == 1); 91*34c4ff1cSNamhyung Kim TEST_ASSERT_VAL("cannot find cmd", is_in_cmdlist(&cmds2, "jjj") == 1); 92*34c4ff1cSNamhyung Kim 93*34c4ff1cSNamhyung Kim clean_cmdnames(&cmds1); 94*34c4ff1cSNamhyung Kim clean_cmdnames(&cmds2); 95*34c4ff1cSNamhyung Kim return TEST_OK; 96*34c4ff1cSNamhyung Kim } 97*34c4ff1cSNamhyung Kim 98*34c4ff1cSNamhyung Kim static struct test_case tests__subcmd_help[] = { 99*34c4ff1cSNamhyung Kim TEST_CASE("Load subcmd names", load_cmdnames), 100*34c4ff1cSNamhyung Kim TEST_CASE("Uniquify subcmd names", uniq_cmdnames), 101*34c4ff1cSNamhyung Kim TEST_CASE("Exclude duplicate subcmd names", exclude_cmdnames), 102*34c4ff1cSNamhyung Kim { .name = NULL, } 103*34c4ff1cSNamhyung Kim }; 104*34c4ff1cSNamhyung Kim 105*34c4ff1cSNamhyung Kim struct test_suite suite__subcmd_help = { 106*34c4ff1cSNamhyung Kim .desc = "libsubcmd help tests", 107*34c4ff1cSNamhyung Kim .test_cases = tests__subcmd_help, 108*34c4ff1cSNamhyung Kim }; 109