/*************************************************************************\ * Copyright (c) 2019 Michael Davidsaver * SPDX-License-Identifier: EPICS * EPICS BASE is distributed subject to a Software License Agreement found * in file LICENSE that is included with this distribution. \*************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include namespace { void findTestData() { const char *locations[] = { ".", "..", ".." OSI_PATH_LIST_SEPARATOR "O.Common", "O.Common", }; for(size_t i=0; i %d", expect ? "ran" : "expected error from", fname, err); } void testCmd(const char *cmd, bool expect=true) { testDiag("eval \"%s\"", cmd); int err = iocshCmd(cmd); testOk((err==0) ^ (!expect), "%s \"%s\" -> %d", expect ? "eval'd" : "expected error from", cmd, err); } std::set reached; const iocshArg positionArg0 = {"position", iocshArgString}; const iocshArg * const positionArgs[1] = { &positionArg0 }; const iocshFuncDef positionFuncDef = {"position",1,positionArgs}; void positionCallFunc(const iocshArgBuf *args) { testDiag("Reaching \"%s\"", args[0].sval); reached.insert(args[0].sval); } void testPosition(const std::string& pos, bool expect=true) { testOk((reached.find(pos)!=reached.end()) ^ !expect, "%sreached position %s", expect ? "" : "not ", pos.c_str()); } const iocshArg assertArg0 = {"condition", iocshArgInt}; const iocshArg * const assertArgs[1] = {&assertArg0}; const iocshFuncDef assertFuncDef = {"assert",1,assertArgs}; void assertCallFunc(const iocshArgBuf *args) { iocshSetError(args[0].ival); } } // namespace MAIN(iocshTest) { testPlan(19); libComRegister(); iocshRegister(&positionFuncDef, &positionCallFunc); iocshRegister(&assertFuncDef, &assertCallFunc); findTestData(); testFile("iocshTestSuccess.cmd"); testPosition("success"); reached.clear(); testPosition("success", false); testCmd("