File: OptionsTest.cpp

package info (click to toggle)
pentobi 29.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,892 kB
  • sloc: cpp: 25,719; javascript: 875; xml: 40; makefile: 13; sh: 6
file content (88 lines) | stat: -rw-r--r-- 3,415 bytes parent folder | download | duplicates (2)
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
//-----------------------------------------------------------------------------
/** @file libboardgame_base/tests/OptionsTest.cpp
    @author Markus Enzenberger
    @copyright GNU General Public License version 3 or later */
//-----------------------------------------------------------------------------

#include "libboardgame_base/Options.h"

#include "libboardgame_test/Test.h"

using namespace std;
using namespace libboardgame_base;

//-----------------------------------------------------------------------------

LIBBOARDGAME_TEST_CASE(libboardgame_base_options_basic)
{
    vector<string> specs =
        { "first|a:", "second|b:", "third|c", "fourth", "fifth" };
    const char* argv[] =
        { nullptr, "--second", "secondval", "--first", "firstval",
          "--fourth", "-c", "arg1", "arg2" };
    auto argc = static_cast<int>(sizeof(argv) / sizeof(argv[0]));
    Options opt(argc, argv, specs);
    LIBBOARDGAME_CHECK(opt.contains("first"))
    LIBBOARDGAME_CHECK_EQUAL(opt.get("first"), "firstval")
    LIBBOARDGAME_CHECK(opt.contains("second"))
    LIBBOARDGAME_CHECK_EQUAL(opt.get("second"), "secondval")
    LIBBOARDGAME_CHECK(opt.contains("third"))
    LIBBOARDGAME_CHECK(opt.contains("fourth"))
    LIBBOARDGAME_CHECK(! opt.contains("fifth"))
    auto& args = opt.get_args();
    LIBBOARDGAME_CHECK_EQUAL(args.size(), 2u)
    LIBBOARDGAME_CHECK_EQUAL(args[0], "arg1")
    LIBBOARDGAME_CHECK_EQUAL(args[1], "arg2")
}

LIBBOARDGAME_TEST_CASE(libboardgame_base_options_end_options)
{
    vector<string> specs = { "first:" };
    const char* argv[] =
        { nullptr, "--first", "firstval", "--", "--arg1" };
    auto argc = static_cast<int>(sizeof(argv) / sizeof(argv[0]));
    Options opt(argc, argv, specs);
    LIBBOARDGAME_CHECK_EQUAL(opt.get("first"), "firstval")
    auto& args = opt.get_args();
    LIBBOARDGAME_CHECK_EQUAL(args.size(), 1u)
    LIBBOARDGAME_CHECK_EQUAL(args[0], "--arg1")
}

LIBBOARDGAME_TEST_CASE(libboardgame_base_options_missing_val)
{
    vector<string> specs = { "first:" };
    const char* argv[] = { nullptr, "--first" };
    auto argc = static_cast<int>(sizeof(argv) / sizeof(argv[0]));
    LIBBOARDGAME_CHECK_THROW(Options opt(argc, argv, specs), runtime_error)
}

LIBBOARDGAME_TEST_CASE(libboardgame_base_options_nospace)
{
    vector<string> specs = { "first|a:", "second|b:" };
    const char* argv[] = { nullptr, "-abc" };
    auto argc = static_cast<int>(sizeof(argv) / sizeof(argv[0]));
    Options opt(argc, argv, specs);
    LIBBOARDGAME_CHECK_EQUAL(opt.get("first"), "bc")
}

LIBBOARDGAME_TEST_CASE(libboardgame_base_options_multi_short_with_val)
{
    vector<string> specs = { "first|a", "second|b:" };
    const char* argv[] = { nullptr, "-ab", "c" };
    auto argc = static_cast<int>(sizeof(argv) / sizeof(argv[0]));
    Options opt(argc, argv, specs);
    LIBBOARDGAME_CHECK(opt.contains("first"))
    LIBBOARDGAME_CHECK_EQUAL(opt.get("second"), "c")
}

LIBBOARDGAME_TEST_CASE(libboardgame_base_options_type)
{
    vector<string> specs = { "first:", "second:" };
    const char* argv[] = { nullptr, "--first", "10", "--second", "foo" };
    auto argc = static_cast<int>(sizeof(argv) / sizeof(argv[0]));
    Options opt(argc, argv, specs);
    LIBBOARDGAME_CHECK_EQUAL(opt.get<int>("first"), 10)
    LIBBOARDGAME_CHECK_THROW(opt.get<int>("second"), runtime_error)
}

//-----------------------------------------------------------------------------