<self-promotion> A little while ago I wrote a framework to do just that: https://github.com/polysquare/cmake-unit
I haven't maintained it in a few years, but it works exactly the way you would expect it to (the syntax is a bit different though). </self-promotion> On Wed, May 30, 2018 at 12:36 AM, Wouter Klouwen <wouter.klou...@youview.com> wrote: > Hi all, > > We have a rather large amount of CMake code (4k+ lines) in various > modules/functions. They contain the common logic for many of our > projects. This makes it quite an important base for everything our team > does. > > Rather shamefully at present these modules are rather poorly tested. I'd > like to improve this, but the current way of testing CMake code > is typically to run a trimmed project, and to verify whether certain > invocations produce a certain output or file hierarchy. > This involves a bit of infrastructure and can be a bit cumbersome > maintain, to diagnose when tests fail, and it requires a separate run of > the tests. > The overall cumbersomeness of the setup in turn discourages in our team, > including myself, from adding tests. > > I'd like a more integrated approach that makes running at least some > basic tests part of the build progress, and a more direct way of > reporting failures. > > In other programming environments, testing often involves some kind of > mocking environment, and CMake helpfully allows the overriding of CMake > built in functions, though this is typically discouraged. > > In my ideal world it would be possible to save the state of the current > function set up, then call a function with a certain given number of > parameters, and expect a certain sequence of events, such as functions > to be called, environment variables to be set, etc. > Something akin to CMakePushCheckState, except for built in functions. > > Then a module could provide for some functions that would set up > expectations and verify them, within a run of cmake, or possibly some > other commands could be added, to give some syntactic glossy coat to it. > > As it wouldn't actually trigger any of the expensive generating > functions, it would be lightweight, quick to run and give pretty direct > errors in terms of failed expectations, reducing debug time. > > If it was done with CMake commands, I might imagine it to look something > like: > > function(foobar) > # function to test, does something non trivial > if ("FOO" IN_LIST ARGV) > install(FILES foo DESTINATION foo_dir) > else("BAR" IN_LIST ARGV) > message(FATAL_ERROR "Some error") > else("BAZ" IN_LIST ARGV) > set(BAZ True PARENT_SCOPE) > endif() > endfunction() > > test(foobar) > expect(WITH "FOO" CALL install FILES foo DESTINATION foo_dir) > expect(WITH "BAR" CALL message FATAL_ERROR "Some error") > expect(WITH "BAZ" ENVIRONMENT BAZ True) > endtest(foobar) > > What do people think? Is this crazy? Is there a quicker way to get > somewhere close? Should I put some effort into making this into an > actual proposal/working code? > > Thanks in advance, > W > > > This transmission contains information that may be confidential and contain > personal views which are not necessarily those of YouView TV Ltd. YouView TV > Ltd (Co No:7308805) is a limited liability company registered in England and > Wales with its registered address at YouView TV Ltd, 3rd Floor, 10 Lower > Thames Street, London, EC3R 6YT. For details see our web site at > http://www.youview.com > -- > > Powered by www.kitware.com > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Kitware offers various services to support the CMake community. For more > information on each offering, please visit: > > CMake Support: http://cmake.org/cmake/help/support.html > CMake Consulting: http://cmake.org/cmake/help/consulting.html > CMake Training Courses: http://cmake.org/cmake/help/training.html > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Follow this link to subscribe/unsubscribe: > https://cmake.org/mailman/listinfo/cmake-developers -- Sam Spilsbury pgp.mit.edu: 0xb8a90fb599bae9c2 -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake-developers