From 94caff5f66cacdd21e5a93cd3de9150a22eeaa3a Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 16 Dec 2017 04:21:33 +0100 Subject: Add support for sub project (unit tests) --- src/Conf.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'src/Conf.cpp') diff --git a/src/Conf.cpp b/src/Conf.cpp index 1f439cd..b1e05bb 100644 --- a/src/Conf.cpp +++ b/src/Conf.cpp @@ -394,6 +394,25 @@ namespace sibs else throw ParserException("Expected package.type to be a single value, was a list"); } + else if(name.equals("tests")) + { + if (value.isSingle()) + { + testPath = projectPath; + testPath += "/"; + testPath += string(value.asSingle().data, value.asSingle().size); + Result testRealPathResult = getRealPath(testPath.c_str()); + if(!testRealPathResult) + { + string errMsg = "Failed to resolve package.tests path: "; + errMsg += testRealPathResult.getErrMsg(); + throw ParserException(errMsg); + } + testPath = testRealPathResult.unwrap(); + } + else + throw ParserException("Expected package.tests to be a single value, was a list"); + } } else if(currentObject.equals("dependencies")) { @@ -416,4 +435,38 @@ namespace sibs throw ParserException("Missing required config package.type. Expected to be one either 'executable', 'static', 'dynamic' or 'library'"); finishedProcessing = true; } + + void SibsTestConfig::processObject(StringView name) + { + currentObject = name; + } + + void SibsTestConfig::processField(StringView name, const ConfigValue &value) + { + if(currentObject.equals("dependencies")) + { + if(value.isSingle()) + { + // TODO: Validate version is number in correct format + Dependency dependency; + dependency.name = string(name.data, name.size); + dependency.version = string(value.asSingle().data, value.asSingle().size); + dependencies.emplace_back(dependency); + } + else + throw ParserException("Expected field under dependencies to be a single value, was a list"); + } + else + { + string errMsg = "project.conf: Expected category to be 'dependencies', was: '"; + errMsg += string(currentObject.data, currentObject.size); + errMsg += "'"; + throw ParserException(errMsg); + } + } + + void SibsTestConfig::finished() + { + finishedProcessing = true; + } } \ No newline at end of file -- cgit v1.2.3