From 73b09f497655bb531d61b3d18d888129c7717b67 Mon Sep 17 00:00:00 2001 From: Keenan Lang Date: Tue, 16 Sep 2014 13:55:40 -0500 Subject: [PATCH] Adding scoping test, combining some aspects of macEnvTest to allow removal of that test. --- src/libCom/test/Makefile | 8 +- src/libCom/test/macDefExpandTest.c | 183 ++++++++++++++++++++++------- 2 files changed, 145 insertions(+), 46 deletions(-) diff --git a/src/libCom/test/Makefile b/src/libCom/test/Makefile index 05dc4dd75..c73616321 100755 --- a/src/libCom/test/Makefile +++ b/src/libCom/test/Makefile @@ -156,10 +156,10 @@ epicsExceptionTest_SRCS += epicsExceptionTest.cpp testHarness_SRCS += epicsExceptionTest.cpp TESTS += epicsExceptionTest -TESTPROD_HOST += macEnvExpandTest -macEnvExpandTest_SRCS += macEnvExpandTest.c -testHarness_SRCS += macEnvExpandTest.c -TESTS += macEnvExpandTest +#TESTPROD_HOST += macEnvExpandTest +#macEnvExpandTest_SRCS += macEnvExpandTest.c +#testHarness_SRCS += macEnvExpandTest.c +#TESTS += macEnvExpandTest TESTPROD_HOST += macDefExpandTest macDefExpandTest_SRCS += macDefExpandTest.c diff --git a/src/libCom/test/macDefExpandTest.c b/src/libCom/test/macDefExpandTest.c index 48356a129..e1698ab9d 100644 --- a/src/libCom/test/macDefExpandTest.c +++ b/src/libCom/test/macDefExpandTest.c @@ -21,6 +21,101 @@ #include "epicsUnitTest.h" #include "testMain.h" + +static void checkMac(MAC_HANDLE *handle, const char *name, const char *value) +{ + char buf[20]; + + buf[19]='\0'; + if(macGetValue(handle, name, buf, 19)<0) { + if(value) + testFail("Macro %s undefined, expected %s", name, value); + else + testPass("Macro %s undefined", name); + } else { + if(!value) + testFail("Macro %s is %s, expected undefined", name, buf); + else if(strcmp(value, buf)==0) + testPass("Macro %s is %s", name, value); + else + testFail("Macro %s is %s, expected %s", name, buf, value); + } +} + +static void macEnvScope(void) +{ + MAC_HANDLE *handle; + char **defines; + static char *pairs[] = { "", "environ", NULL, NULL }; + + epicsEnvSet("C","3"); + epicsEnvSet("D","4"); + epicsEnvSet("E","5"); + + macCreateHandle(&handle, pairs); + macParseDefns(NULL, "A=1,B=2,E=15", &defines); + macInstallMacros(handle, defines); + + checkMac(handle, "A", "1"); + checkMac(handle, "B", "2"); + checkMac(handle, "C", "3"); + checkMac(handle, "D", "4"); + checkMac(handle, "E", "15"); + checkMac(handle, "F", NULL); + + { + macPushScope(handle); + + macParseDefns(NULL, "A=11,C=13,D=14,G=7", &defines); + macInstallMacros(handle, defines); + + checkMac(handle, "A", "11"); + checkMac(handle, "B", "2"); + checkMac(handle, "C", "13"); + checkMac(handle, "D", "14"); + checkMac(handle, "E", "15"); + checkMac(handle, "F", NULL); + checkMac(handle, "G", "7"); + + epicsEnvSet("D", "24"); + macPutValue(handle, "D", NULL); /* implicit when called through in iocshBody */ + epicsEnvSet("F", "6"); + macPutValue(handle, "F", NULL); /* implicit */ + epicsEnvSet("G", "17"); + macPutValue(handle, "G", NULL); /* implicit */ + + checkMac(handle, "D", "24"); + checkMac(handle, "F", "6"); + checkMac(handle, "G", "17"); + + macPopScope(handle); + } + + checkMac(handle, "A", "1"); + checkMac(handle, "B", "2"); + checkMac(handle, "C", "3"); + checkMac(handle, "D", "24"); + checkMac(handle, "E", "15"); + checkMac(handle, "F", "6"); + checkMac(handle, "G", "17"); + + { + macPushScope(handle); + + macParseDefns(NULL, "D=34,G=27", &defines); + macInstallMacros(handle, defines); + + checkMac(handle, "D", "34"); + checkMac(handle, "G", "27"); + + macPopScope(handle); + } + + checkMac(handle, "D", "24"); + + macDeleteHandle(handle); +} + static void check(const char *str, const char *macros, const char *expect) { MAC_HANDLE *handle; @@ -49,7 +144,7 @@ static void check(const char *str, const char *macros, const char *expect) macDeleteHandle(handle); } -MAIN(macEnvExpandTest) +MAIN(macDefExpandTest) { eltc(0); testPlan(71); @@ -97,57 +192,61 @@ MAIN(macEnvExpandTest) check("${FOO=BAR}", "", "BAR"); check("x${FOO=BAR}y", "", "xBARy"); - check("${FOO}", "FOO=BLETCH", "BLETCH"); - check("${FOO,FOO}", "FOO=BLETCH", "BLETCH"); - check("x${FOO}y", "FOO=BLETCH", "xBLETCHy"); - check("x${FOO}y${FOO}z", "FOO=BLETCH", "xBLETCHyBLETCHz"); - check("${FOO=BAR}", "FOO=BLETCH", "BLETCH"); - check("x${FOO=BAR}y", "FOO=BLETCH", "xBLETCHy"); - check("${FOO=${BAZ}}", "FOO=BLETCH", "BLETCH"); - check("${FOO=${BAZ},BAR=$(BAZ)}", "FOO=BLETCH", "BLETCH"); - check("x${FOO=${BAZ}}y", "FOO=BLETCH", "xBLETCHy"); - check("x${FOO=${BAZ},BAR=$(BAZ)}y", "FOO=BLETCH", "xBLETCHy"); - check("${BAR=${FOO}}", "FOO=BLETCH", "BLETCH"); - check("x${BAR=${FOO}}y", "FOO=BLETCH", "xBLETCHy"); - check("w${BAR=x${FOO}y}z", "FOO=BLETCH", "wxBLETCHyz"); + epicsEnvSet("FOO","BLETCH"); + check("${FOO}", "", "BLETCH"); + check("${FOO,FOO}", "", "BLETCH"); + check("x${FOO}y", "", "xBLETCHy"); + check("x${FOO}y${FOO}z", "", "xBLETCHyBLETCHz"); + check("${FOO=BAR}", "", "BLETCH"); + check("x${FOO=BAR}y", "", "xBLETCHy"); + check("${FOO=${BAZ}}", "", "BLETCH"); + check("${FOO=${BAZ},BAR=$(BAZ)}", "", "BLETCH"); + check("x${FOO=${BAZ}}y", "", "xBLETCHy"); + check("x${FOO=${BAZ},BAR=$(BAZ)}y", "", "xBLETCHy"); + check("${BAR=${FOO}}", "", "BLETCH"); + check("x${BAR=${FOO}}y", "", "xBLETCHy"); + check("w${BAR=x${FOO}y}z", "", "wxBLETCHyz"); - check("${FOO,FOO=BAR}", "FOO=BLETCH", "BAR"); - check("x${FOO,FOO=BAR}y", "FOO=BLETCH", "xBARy"); - check("${BAR,BAR=$(FOO)}", "FOO=BLETCH", "BLETCH"); - check("x${BAR,BAR=$(FOO)}y", "FOO=BLETCH", "xBLETCHy"); - check("${BAR,BAR=$($(FOO)),BLETCH=GRIBBLE}", "FOO=BLETCH", "GRIBBLE"); - check("x${BAR,BAR=$($(FOO)),BLETCH=GRIBBLE}y", "FOO=BLETCH", "xGRIBBLEy"); - check("${$(BAR,BAR=$(FOO)),BLETCH=GRIBBLE}", "FOO=BLETCH", "GRIBBLE"); - check("x${$(BAR,BAR=$(FOO)),BLETCH=GRIBBLE}y", "FOO=BLETCH", "xGRIBBLEy"); + check("${FOO,FOO=BAR}", "", "BAR"); + check("x${FOO,FOO=BAR}y", "", "xBARy"); + check("${BAR,BAR=$(FOO)}", "", "BLETCH"); + check("x${BAR,BAR=$(FOO)}y", "", "xBLETCHy"); + check("${BAR,BAR=$($(FOO)),BLETCH=GRIBBLE}", "", "GRIBBLE"); + check("x${BAR,BAR=$($(FOO)),BLETCH=GRIBBLE}y", "", "xGRIBBLEy"); + check("${$(BAR,BAR=$(FOO)),BLETCH=GRIBBLE}", "", "GRIBBLE"); + check("x${$(BAR,BAR=$(FOO)),BLETCH=GRIBBLE}y", "", "xGRIBBLEy"); - check("${FOO}/${BAR}", "BAR=GLEEP,FOO=BLETCH", "BLETCH/GLEEP"); - check("x${FOO}/${BAR}y", "BAR=GLEEP,FOO=BLETCH", "xBLETCH/GLEEPy"); - check("${FOO,BAR}/${BAR}", "BAR=GLEEP,FOO=BLETCH", "BLETCH/GLEEP"); - check("${FOO,BAR=x}/${BAR}", "BAR=GLEEP,FOO=BLETCH", "BLETCH/GLEEP"); - check("${BAZ=BLETCH,BAR}/${BAR}", "BAR=GLEEP,FOO=BLETCH", "BLETCH/GLEEP"); - check("${BAZ=BLETCH,BAR=x}/${BAR}", "BAR=GLEEP,FOO=BLETCH", "BLETCH/GLEEP"); + check("${FOO}/${BAR}", "BAR=GLEEP", "BLETCH/GLEEP"); + check("x${FOO}/${BAR}y", "BAR=GLEEP", "xBLETCH/GLEEPy"); + check("${FOO,BAR}/${BAR}", "BAR=GLEEP", "BLETCH/GLEEP"); + check("${FOO,BAR=x}/${BAR}", "BAR=GLEEP", "BLETCH/GLEEP"); + check("${BAZ=BLETCH,BAR}/${BAR}", "BAR=GLEEP", "BLETCH/GLEEP"); + check("${BAZ=BLETCH,BAR=x}/${BAR}", "BAR=GLEEP", "BLETCH/GLEEP"); - check("${${FOO}}", "BAR=GLEEP,FOO=BLETCH,BLETCH=BAR", "BAR"); - check("x${${FOO}}y", "BAR=GLEEP,FOO=BLETCH,BLETCH=BAR", "xBARy"); - check("${${FOO}=GRIBBLE}", "BAR=GLEEP,FOO=BLETCH,BLETCH=BAR", "BAR"); - check("x${${FOO}=GRIBBLE}y", "BAR=GLEEP,FOO=BLETCH,BLETCH=BAR", "xBARy"); + check("${${FOO}}", "BAR=GLEEP,BLETCH=BAR", "BAR"); + check("x${${FOO}}y", "BAR=GLEEP,BLETCH=BAR", "xBARy"); + check("${${FOO}=GRIBBLE}", "BAR=GLEEP,BLETCH=BAR", "BAR"); + check("x${${FOO}=GRIBBLE}y", "BAR=GLEEP,BLETCH=BAR", "xBARy"); - check("${${FOO}}", "BAR=GLEEP,FOO=BLETCH,BLETCH=${BAR}", "GLEEP"); + check("${${FOO}}", "BAR=GLEEP,BLETCH=${BAR}", "GLEEP"); - check("${FOO}", "BAR=GLEEP,FOO=${BAR},BLETCH=${BAR}" ,"GLEEP"); + epicsEnvSet("FOO","${BAR}"); + check("${FOO}", "BAR=GLEEP,BLETCH=${BAR}" ,"GLEEP"); - check("${FOO}", "BAR=${BAZ},FOO=${BAR},BLETCH=${BAR}", NULL); + check("${FOO}", "BAR=${BAZ},BLETCH=${BAR}", NULL); - check("${FOO}", "BAR=${BAZ=GRIBBLE},FOO=${BAR},BLETCH=${BAR}", "GRIBBLE"); + check("${FOO}", "BAR=${BAZ=GRIBBLE},BLETCH=${BAR}", "GRIBBLE"); - check("${FOO}", "BAR=${STR1},FOO=${BAR},BLETCH=${BAR},STR1=VAL1,STR2=VAL2", "VAL1"); + check("${FOO}", "BAR=${STR1},BLETCH=${BAR},STR1=VAL1,STR2=VAL2", "VAL1"); - check("${FOO}", "BAR=${STR2},FOO=${BAR},BLETCH=${BAR},STR1=VAL1,STR2=VAL2", "VAL2"); + check("${FOO}", "BAR=${STR2},BLETCH=${BAR},STR1=VAL1,STR2=VAL2", "VAL2"); - check("${FOO}", "BAR=${FOO},FOO=${BAR},BLETCH=${BAR},STR1=VAL1,STR2=VAL2", NULL); - check("${FOO,FOO=$(FOO)}", "BAR=${FOO},FOO=${BAR},BLETCH=${BAR},STR1=VAL1,STR2=VAL2", NULL); - check("${FOO=$(FOO)}", "BAR=${FOO},FOO=${BAR},BLETCH=${BAR},STR1=VAL1,STR2=VAL2", NULL); - check("${FOO=$(BAR),BAR=$(FOO)}", "BAR=${FOO},FOO=${BAR},BLETCH=${BAR},STR1=VAL1,STR2=VAL2", NULL); + check("${FOO}", "BAR=${FOO},BLETCH=${BAR},STR1=VAL1,STR2=VAL2", NULL); + check("${FOO,FOO=$(FOO)}", "BAR=${FOO},BLETCH=${BAR},STR1=VAL1,STR2=VAL2", NULL); + check("${FOO=$(FOO)}", "BAR=${FOO},BLETCH=${BAR},STR1=VAL1,STR2=VAL2", NULL); + check("${FOO=$(BAR),BAR=$(FOO)}", "BAR=${FOO},BLETCH=${BAR},STR1=VAL1,STR2=VAL2", NULL); + + macEnvScope(); errlogFlush(); eltc(1);