Skip to content

Commit 60df27a

Browse files
authored
Add invitation char to config (closes #28)
1 parent e9f6f53 commit 60df27a

File tree

6 files changed

+51
-1
lines changed

6 files changed

+51
-1
lines changed

lib/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ else ()
4141
-Wlogical-op
4242
-Wredundant-decls
4343
-Wsign-conversion
44+
-Wwrite-strings
4445
-pedantic-errors)
4546
endif ()
4647

lib/include/embedded_cli.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,12 @@ struct EmbeddedCli {
121121
* Configuration to create CLI
122122
*/
123123
struct EmbeddedCliConfig {
124+
/**
125+
* Invitation string. Is printed at the beginning of each line with user
126+
* input
127+
*/
128+
const char *invitation;
129+
124130
/**
125131
* Size of buffer that is used to store characters until they're processed
126132
*/

lib/src/embedded_cli.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ EmbeddedCliConfig *embeddedCliDefaultConfig(void) {
379379
defaultConfig.cliBufferSize = 0;
380380
defaultConfig.maxBindingCount = 8;
381381
defaultConfig.enableAutoComplete = true;
382+
defaultConfig.invitation = "> ";
382383
return &defaultConfig;
383384
}
384385

@@ -450,7 +451,7 @@ EmbeddedCli *embeddedCliNew(EmbeddedCliConfig *config) {
450451
impl->bindingsCount = 0;
451452
impl->maxBindingsCount = (uint16_t) (config->maxBindingCount + cliInternalBindingCount);
452453
impl->lastChar = '\0';
453-
impl->invitation = "> ";
454+
impl->invitation = config->invitation;
454455

455456
initInternalBindings(cli);
456457

tests/CliTestRunner.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,3 +650,28 @@ void CliTestRunner::testHelp() {
650650
REQUIRE(lines[2] == "> ");
651651
}
652652
}
653+
654+
void CliTestRunner::testInvitationChanged(const std::string &invitation) {
655+
embeddedCliProcess(cli);
656+
657+
SECTION("Invitation is applied to cli") {
658+
size_t cursor = 0;
659+
auto lines = mock.getLines(false, &cursor);
660+
661+
REQUIRE(lines.size() == 1);
662+
REQUIRE(lines[0] == invitation);
663+
REQUIRE(cursor == 4);
664+
665+
std::string input = "str";
666+
667+
mock.sendStr(input);
668+
669+
embeddedCliProcess(cli);
670+
671+
lines = mock.getLines(true, &cursor);
672+
673+
REQUIRE(lines.size() == 1);
674+
REQUIRE(lines[0] == invitation + input);
675+
REQUIRE(cursor == 7);
676+
}
677+
}

tests/CliTestRunner.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ class CliTestRunner {
1313

1414
void testAutocompleteDisabled();
1515

16+
void testInvitationChanged(const std::string &invitation);
17+
1618
private:
1719
EmbeddedCli *cli;
1820
CliMock mock;

tests/EmbeddedCliTest.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,5 +64,20 @@ TEST_CASE("EmbeddedCli. Disabled autocomplete", "[cli]") {
6464

6565
runner.testAutocompleteDisabled();
6666

67+
embeddedCliFree(cli);
68+
}
69+
70+
TEST_CASE("EmbeddedCli. Invitation is changed", "[cli]") {
71+
EmbeddedCliConfig *config = embeddedCliDefaultConfig();
72+
const std::string invitation = "test";
73+
config->invitation = invitation.c_str();
74+
EmbeddedCli *cli = embeddedCliNew(config);
75+
76+
REQUIRE(cli != nullptr);
77+
78+
CliTestRunner runner(cli);
79+
80+
runner.testInvitationChanged(invitation);
81+
6782
embeddedCliFree(cli);
6883
}

0 commit comments

Comments
 (0)