[libcamera-devel] [PATCH] tests: Add a base Test class

Kieran Bingham kieran.bingham at ideasonboard.com
Thu Dec 20 20:40:52 CET 2018


Hi Laurent,

On 20/12/2018 18:53, Niklas Söderlund wrote:
> Hi Laurent,
> 
> Thanks for your work.
> 
> On 2018-12-19 11:48:30 +0200, Laurent Pinchart wrote:
>> The base Test class is meant to provide infrastructure common to all
>> tests. It is very limited for now, and should be extended with at least
>> logging and assertion handling.
> 
> I agree it's a bit limited now but can serve as a good base to build 
> upon. I have used this to write tests for device enumerator work.
> 

I've also used this as a base to rework my tests on top of, and I've now
refactored my v4l2device tests which does indeed reduce quite a bit of
code duplication.

>> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> 
> Reviewed-by: Niklas Söderlund <niklas.soderlund at ragnatech.se>
> 
>> ---
>>  test/meson.build |  6 ++++++
>>  test/test.cpp    | 28 ++++++++++++++++++++++++++++
>>  test/test.h      | 28 ++++++++++++++++++++++++++++
>>  3 files changed, 62 insertions(+)
>>  create mode 100644 test/test.cpp
>>  create mode 100644 test/test.h
>>
>> diff --git a/test/meson.build b/test/meson.build
>> index 24d1927f977c..fc9c124927d2 100644
>> --- a/test/meson.build
>> +++ b/test/meson.build
>> @@ -1,3 +1,9 @@
>> +libtest_sources = files([
>> +    'test.cpp',
>> +])
>> +
>> +libtest = static_library('libtest', libtest_sources)

I wonder if libtest should get it's own directory as test/libtest to
separate it out. Especially as it will likely expand with logging and
other helpers.

>> +
>>  test_init = executable('test_init', 'init.cpp',
>>                         link_with : libcamera,
>>                         include_directories : libcamera_includes)
>> diff --git a/test/test.cpp b/test/test.cpp
>> new file mode 100644
>> index 000000000000..4e7779e750d5
>> --- /dev/null
>> +++ b/test/test.cpp
>> @@ -0,0 +1,28 @@
>> +/* SPDX-License-Identifier: GPL-2.0-or-later */
>> +/*
>> + * Copyright (C) 2018, Google Inc.
>> + *
>> + * test.cpp - libcamera test base class
>> + */
>> +
>> +#include "test.h"
>> +
>> +Test::Test()
>> +{
>> +}
>> +
>> +Test::~Test()
>> +{
>> +	cleanup();
>> +}
>> +
>> +int Test::execute()
>> +{
>> +	int ret;
>> +
>> +	ret = init();
>> +	if (ret < 0)
>> +		return ret;
>> +
>> +	return run();
>> +}
>> diff --git a/test/test.h b/test/test.h
>> new file mode 100644
>> index 000000000000..2464fc5cb607
>> --- /dev/null
>> +++ b/test/test.h
>> @@ -0,0 +1,28 @@
>> +/* SPDX-License-Identifier: GPL-2.0-or-later */
>> +/*
>> + * Copyright (C) 2018, Google Inc.
>> + *
>> + * test.h - libcamera test base class
>> + */

Shouldn't we have an include guard here?

>> +
>> +#include <sstream>
>> +
>> +class Test
>> +{
>> +public:
>> +	Test();
>> +	virtual ~Test();
>> +
>> +	int execute();
>> +
>> +protected:
>> +	virtual int init() { return 0; }
>> +	virtual int run() = 0;
>> +	virtual void cleanup() { }
>> +};
>> +
>> +#define TEST_REGISTER(klass)						\
>> +int main(int argc, char *argv[])					\
>> +{									\
>> +	return klass().execute();					\
>> +}
>> -- 
>> Regards,
>>
>> Laurent Pinchart
>>
>> _______________________________________________
>> libcamera-devel mailing list
>> libcamera-devel at lists.libcamera.org
>> https://lists.libcamera.org/listinfo/libcamera-devel
> 

-- 
Regards
--
Kieran


More information about the libcamera-devel mailing list