|
@@ -0,0 +1,107 @@
|
|
|
+/*
|
|
|
+ * Copyright (c) 2019 Stefan Strobel <stefan.strobel@shimatta.net>
|
|
|
+ *
|
|
|
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
|
+ */
|
|
|
+
|
|
|
+/**
|
|
|
+ * @file test_integration_opt.cpp
|
|
|
+ * @brief integration test implementation for the option parser of the shellmatta
|
|
|
+ * @author Stefan Strobel <stefan.strobel@shimatta.net>
|
|
|
+ */
|
|
|
+
|
|
|
+#include "test/framework/catch.hpp"
|
|
|
+extern "C" {
|
|
|
+#include "shellmatta.h"
|
|
|
+}
|
|
|
+#include <string.h>
|
|
|
+
|
|
|
+static uint32_t write_callCnt = 0u;
|
|
|
+static char write_data[1024];
|
|
|
+static uint32_t write_length;
|
|
|
+
|
|
|
+
|
|
|
+static shellmatta_retCode_t writeFct(const char* data, uint32_t length)
|
|
|
+{
|
|
|
+ write_callCnt ++;
|
|
|
+ while((length > 0) && (write_length < sizeof(write_data)))
|
|
|
+ {
|
|
|
+ write_data[write_length] = *data;
|
|
|
+ data ++;
|
|
|
+ length --;
|
|
|
+ write_length ++;
|
|
|
+ }
|
|
|
+
|
|
|
+ return SHELLMATTA_OK;
|
|
|
+}
|
|
|
+
|
|
|
+static shellmatta_retCode_t parseOpts(shellmatta_handle_t handle, const char *arguments, uint32_t length)
|
|
|
+{
|
|
|
+ (void) arguments;
|
|
|
+ (void) length;
|
|
|
+ char option;
|
|
|
+ char *argumentString;
|
|
|
+ uint32_t argumentLength;
|
|
|
+
|
|
|
+ while(SHELLMATTA_OK == shellmatta_opt(handle, (char*)"abcde:f::", &option, &argumentString, &argumentLength))
|
|
|
+ {
|
|
|
+ switch(option)
|
|
|
+ {
|
|
|
+ case 'a':
|
|
|
+ break;
|
|
|
+ case 'b':
|
|
|
+ break;
|
|
|
+ case 'c':
|
|
|
+ break;
|
|
|
+ case 'd':
|
|
|
+ break;
|
|
|
+ case 'e':
|
|
|
+ break;
|
|
|
+ case 'f':
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return SHELLMATTA_OK;
|
|
|
+}
|
|
|
+shellmatta_cmd_t parseOptsCmd = {(char*)"parseOpts", (char*)"opt", NULL, NULL, parseOpts, NULL};
|
|
|
+
|
|
|
+static shellmatta_retCode_t empty(shellmatta_handle_t handle, const char *arguments, uint32_t length)
|
|
|
+{
|
|
|
+ shellmatta_printf(handle, "empty - %s - length: %u", arguments, length);
|
|
|
+ return SHELLMATTA_OK;
|
|
|
+}
|
|
|
+shellmatta_cmd_t emptyCmd = {(char*)"empty", NULL, NULL, NULL, empty, NULL};
|
|
|
+
|
|
|
+TEST_CASE( "shellmatta option parser 1" ) {
|
|
|
+
|
|
|
+ shellmatta_instance_t inst;
|
|
|
+ shellmatta_handle_t handle;
|
|
|
+ char buffer[1024];
|
|
|
+ char historyBuffer[1024];
|
|
|
+ //char *dummyData = (char*)"\r\nshellmatta->";
|
|
|
+
|
|
|
+ shellmatta_doInit( &inst,
|
|
|
+ &handle,
|
|
|
+ buffer,
|
|
|
+ sizeof(buffer),
|
|
|
+ historyBuffer,
|
|
|
+ sizeof(historyBuffer),
|
|
|
+ "shellmatta->",
|
|
|
+ NULL,
|
|
|
+ writeFct);
|
|
|
+
|
|
|
+ write_callCnt = 0u;
|
|
|
+ memset(write_data, 0, sizeof(write_data));
|
|
|
+ write_length = 0u;
|
|
|
+
|
|
|
+ shellmatta_processData(handle, (char*)"parseOpts -a -e meow\r", 1);
|
|
|
+
|
|
|
+ // CHECK( write_length == 14u);
|
|
|
+ // REQUIRE( strcmp(dummyData, write_data) == 0);
|
|
|
+ REQUIRE( 1 == 1 );
|
|
|
+}
|