From ed07df16da675c4c123e02a996822daf13d69c63 Mon Sep 17 00:00:00 2001
From: lhoerl <coder@lolux.de>
Date: 周一, 03 8月 2015 22:42:07 +0800
Subject: [PATCH] added full SCPI error messages added list for device dependent error messages some minor changes to get rid of compiler warnings added support for Keil ARM compiler added support for National Instruments CVI compiler removed bug if(c = '\0')...

---
 libscpi/test/test_parser.c |   81 +++++++++++++++++++++++++++++++++-------
 1 files changed, 67 insertions(+), 14 deletions(-)

diff --git a/libscpi/test/test_parser.c b/libscpi/test/test_parser.c
index 5c9b117..76a4053 100644
--- a/libscpi/test/test_parser.c
+++ b/libscpi/test/test_parser.c
@@ -13,6 +13,37 @@
  * CUnit Test Suite
  */
 
+static scpi_result_t text_function(scpi_t* context) {
+    char param[100];
+    size_t param_len;
+
+    if (!SCPI_ParamCopyText(context, param, 100, &param_len, TRUE)) {
+        return SCPI_RES_ERR;
+    }
+
+    if (!SCPI_ParamCopyText(context, param, 100, &param_len, TRUE)) {
+        return SCPI_RES_ERR;
+    }
+
+    SCPI_ResultText(context, param);
+
+    return SCPI_RES_OK;
+}
+
+static scpi_result_t test_treeA(scpi_t* context) {
+
+    SCPI_ResultInt(context, 10);
+
+    return SCPI_RES_OK;
+}
+
+static scpi_result_t test_treeB(scpi_t* context) {
+
+    SCPI_ResultInt(context, 20);
+
+    return SCPI_RES_OK;
+}
+
 static const scpi_command_t scpi_commands[] = {
     /* IEEE Mandated Commands (SCPI std V1999.0 4.1.1) */
     { .pattern = "*CLS", .callback = SCPI_CoreCls,},
@@ -40,6 +71,11 @@
 
     { .pattern = "STATus:PRESet", .callback = SCPI_StatusPreset,},
     
+    { .pattern = "TEXTfunction?", .callback = text_function,},
+
+    { .pattern = "TEST:TREEA?", .callback = test_treeA,},
+    { .pattern = "TEST:TREEB?", .callback = test_treeB,},
+
     SCPI_CMD_LIST_END
 };
 
@@ -63,7 +99,7 @@
 
 scpi_t scpi_context;
 static void error_buffer_clear(void) {
-    err_buffer[0] = '\0';
+    err_buffer[0] = 0;
     err_buffer_pos = 0;
 
     SCPI_EventClear(&scpi_context);
@@ -78,6 +114,7 @@
 
 static size_t SCPI_Write(scpi_t * context, const char * data, size_t len) {
     (void) context;
+
     return output_buffer_write(data, len);
 }
 
@@ -136,17 +173,18 @@
     .idn = {"MA", "IN", NULL, "VER"},
 };
 
-int init_suite(void) {
+
+static int init_suite(void) {
     SCPI_Init(&scpi_context);
 
     return 0;
 }
 
-int clean_suite(void) {
+static int clean_suite(void) {
     return 0;
 }
 
-void testCommandsHandling(void) {
+static void testCommandsHandling(void) {
 #define TEST_INPUT(data, output) {                              \
     SCPI_Input(&scpi_context, data, strlen(data));              \
     CU_ASSERT_STRING_EQUAL(output, output_buffer);              \
@@ -162,6 +200,12 @@
     TEST_INPUT("*IDN?\r\n*IDN?\r\n*IDN?\r\n*IDN?\r\n", "MA,IN,0,VER\r\nMA,IN,0,VER\r\nMA,IN,0,VER\r\nMA,IN,0,VER\r\n");
     output_buffer_clear();
 
+    TEST_INPUT("*IDN?;*IDN?;*IDN?;*IDN?\r\n", "MA,IN,0,VER;MA,IN,0,VER;MA,IN,0,VER;MA,IN,0,VER\r\n");
+    output_buffer_clear();
+
+    TEST_INPUT("*IDN?;*OPC;*IDN?\r\n", "MA,IN,0,VER;MA,IN,0,VER\r\n");
+    output_buffer_clear();
+
     /* Test one command in multiple buffers */
     TEST_INPUT("*IDN?", "");
     TEST_INPUT("\r\n", "MA,IN,0,VER\r\n");
@@ -172,37 +216,46 @@
     TEST_INPUT("", "MA,IN,0,VER\r\n");
     output_buffer_clear();
     
+    /* Test ctree traversal */
+    TEST_INPUT("TEST:TREEA?;TREEB?\r\n", "10;20\r\n");
+    output_buffer_clear();
+
+    TEST_INPUT("TEST:TREEA?;:TEXT? \"PARAM1\", \"PARAM2\"\r\n", "10;\"PARAM2\"\r\n");
+    output_buffer_clear();
+
     CU_ASSERT_EQUAL(err_buffer_pos, 0);
     error_buffer_clear();
-    
-    // TODO: Compound commands A:B;C -> A:B; A:C
 }
 
-void testErrorHandling(void) {
+static void testErrorHandling(void) {
     output_buffer_clear();
     error_buffer_clear();
 
 #define TEST_ERROR(data, output, err_num) {                     \
+    output_buffer_clear();                                      \
+    error_buffer_clear();                                       \
     SCPI_Input(&scpi_context, data, strlen(data));              \
     CU_ASSERT_STRING_EQUAL(output, output_buffer);              \
-    error_buffer_clear();                                       \
+    CU_ASSERT_EQUAL(err_buffer[0], err_num)                     \
 }
 
     TEST_ERROR("*IDN?\r\n", "MA,IN,0,VER\r\n", 0);
-    output_buffer_clear();
     TEST_ERROR("IDN?\r\n", "", SCPI_ERROR_UNDEFINED_HEADER);
     TEST_ERROR("*ESE\r\n", "", SCPI_ERROR_MISSING_PARAMETER);
     TEST_ERROR("*IDN? 12\r\n", "MA,IN,0,VER\r\n", SCPI_ERROR_PARAMETER_NOT_ALLOWED);
-    output_buffer_clear();
+    TEST_ERROR("TEXT? \"PARAM1\", \"PARAM2\"\r\n", "\"PARAM2\"\r\n", 0);
 
     // TODO: SCPI_ERROR_INVALID_SEPARATOR
     // TODO: SCPI_ERROR_INVALID_SUFFIX
     // TODO: SCPI_ERROR_SUFFIX_NOT_ALLOWED
     // TODO: SCPI_ERROR_EXECUTION_ERROR
     // TODO: SCPI_ERROR_ILLEGAL_PARAMETER_VALUE
+
+    output_buffer_clear();
+    error_buffer_clear();
 }
 
-void testIEEE4882(void) {
+static void testIEEE4882(void) {
 #define TEST_IEEE4882(data, output) {                           \
     SCPI_Input(&scpi_context, data, strlen(data));              \
     CU_ASSERT_STRING_EQUAL(output, output_buffer);              \
@@ -269,7 +322,7 @@
     CU_ASSERT_EQUAL(errCode, expected_error_code);                                      \
 }
 
-void testSCPI_ParamInt(void) {
+static void testSCPI_ParamInt(void) {
     TEST_ParamInt("10", TRUE, 10, TRUE, 0);
     TEST_ParamInt("", FALSE, 0, FALSE, 0);
     TEST_ParamInt("10.5", TRUE, 10, TRUE, 0); // TODO: should be FALSE, -104
@@ -304,7 +357,7 @@
     CU_ASSERT_EQUAL(errCode, expected_error_code);                                      \
 }
 
-void testSCPI_ParamDouble(void) {
+static void testSCPI_ParamDouble(void) {
     TEST_ParamDouble("10", TRUE, 10, TRUE, 0);
     TEST_ParamDouble("", FALSE, 0, FALSE, 0);
     TEST_ParamDouble("10.5", TRUE, 10.5, TRUE, 0);
@@ -340,7 +393,7 @@
     CU_ASSERT_EQUAL(errCode, expected_error_code);                                      \
 }
 
-void testSCPI_ParamCharacters(void) {
+static void testSCPI_ParamCharacters(void) {
     TEST_ParamCharacters("10", TRUE, "10", TRUE, 0);
     TEST_ParamCharacters(" ABCD", TRUE, "ABCD", TRUE, 0); // TokProgramMnemonic
     TEST_ParamCharacters("\"ABCD\"", TRUE, "ABCD", TRUE, 0); // TokDoubleQuoteProgramData

--
Gitblit v1.9.1