[{"id":214,"web_url":"https://patchwork.libcamera.org/comment/214/","msgid":"<20190106162933.GJ11987@bigcity.dyn.berto.se>","date":"2019-01-06T16:29:33","subject":"Re: [libcamera-devel] [PATCH 09/11] test: Add signal/slot test","submitter":{"id":5,"url":"https://patchwork.libcamera.org/api/people/5/","name":"Niklas Söderlund","email":"niklas.soderlund@ragnatech.se"},"content":"Hi Laurent,\n\nThanks for your patch.\n\nOn 2019-01-06 04:33:26 +0200, Laurent Pinchart wrote:\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\nReally nice test cases which really helps in reviewing the \nimplementation, nice work!\n\nFor this and the other test patches in this series\n\nReviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n\n> ---\n>  test/meson.build |   1 +\n>  test/signal.cpp  | 149 +++++++++++++++++++++++++++++++++++++++++++++++\n>  2 files changed, 150 insertions(+)\n>  create mode 100644 test/signal.cpp\n> \n> diff --git a/test/meson.build b/test/meson.build\n> index 638e8d51c131..4d334025f3d3 100644\n> --- a/test/meson.build\n> +++ b/test/meson.build\n> @@ -4,6 +4,7 @@ subdir('media_device')\n>  \n>  public_tests = [\n>      ['list-cameras',    'list.cpp'],\n> +    ['signal',          'signal.cpp'],\n>  ]\n>  \n>  internal_tests = [\n> diff --git a/test/signal.cpp b/test/signal.cpp\n> new file mode 100644\n> index 000000000000..5d96958c6d4c\n> --- /dev/null\n> +++ b/test/signal.cpp\n> @@ -0,0 +1,149 @@\n> +/* SPDX-License-Identifier: GPL-2.0-or-later */\n> +/*\n> + * Copyright (C) 2019, Google Inc.\n> + *\n> + * signal.cpp - Signal test\n> + */\n> +\n> +#include <iostream>\n> +#include <string.h>\n> +\n> +#include <libcamera/signal.h>\n> +\n> +#include \"test.h\"\n> +\n> +using namespace std;\n> +using namespace libcamera;\n> +\n> +class SignalTest : public Test\n> +{\n> +protected:\n> +\tvoid slotVoid()\n> +\t{\n> +\t\tcalled_ = true;\n> +\t}\n> +\n> +\tvoid slotDisconnect()\n> +\t{\n> +\t\tcalled_ = true;\n> +\t\tsignalVoid_.disconnect(this, &SignalTest::slotDisconnect);\n> +\t}\n> +\n> +\tvoid slotInteger1(int value)\n> +\t{\n> +\t\tvalues_[0] = value;\n> +\t}\n> +\n> +\tvoid slotInteger2(int value)\n> +\t{\n> +\t\tvalues_[1] = value;\n> +\t}\n> +\n> +\tvoid slotMultiArgs(int value, const std::string &name)\n> +\t{\n> +\t\tvalues_[2] = value;\n> +\t\tname_ = name;\n> +\t}\n> +\n> +\tint init()\n> +\t{\n> +\t\treturn 0;\n> +\t}\n> +\n> +\tint run()\n> +\t{\n> +\t\t/* Test signal emission and reception. */\n> +\t\tcalled_ = false;\n> +\t\tsignalVoid_.connect(this, &SignalTest::slotVoid);\n> +\t\tsignalVoid_.emit();\n> +\n> +\t\tif (!called_) {\n> +\t\t\tcout << \"Signal emission test failed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test signal with parameters. */\n> +\t\tvalues_[2] = 0;\n> +\t\tname_.clear();\n> +\t\tsignalMultiArgs_.connect(this, &SignalTest::slotMultiArgs);\n> +\t\tsignalMultiArgs_.emit(42, \"H2G2\");\n> +\n> +\t\tif (values_[2] != 42 || name_ != \"H2G2\") {\n> +\t\t\tcout << \"Signal parameters test failed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test signal connected to multiple slots. */\n> +\t\tmemset(values_, 0, sizeof(values_));\n> +\t\tsignalInt_.connect(this, &SignalTest::slotInteger1);\n> +\t\tsignalInt_.connect(this, &SignalTest::slotInteger2);\n> +\t\tsignalInt_.emit(42);\n> +\n> +\t\tif (values_[0] != 42 || values_[1] != 42 || values_[2] != 0) {\n> +\t\t\tcout << \"Signal multi slot test failed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test disconnection of a single slot. */\n> +\t\tmemset(values_, 0, sizeof(values_));\n> +\t\tsignalInt_.disconnect(this, &SignalTest::slotInteger2);\n> +\t\tsignalInt_.emit(42);\n> +\n> +\t\tif (values_[0] != 42 || values_[1] != 0 || values_[2] != 0) {\n> +\t\t\tcout << \"Signal slot disconnection test failed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test disconnection of a whole object. */\n> +\t\tmemset(values_, 0, sizeof(values_));\n> +\t\tsignalInt_.disconnect(this);\n> +\t\tsignalInt_.emit(42);\n> +\n> +\t\tif (values_[0] != 0 || values_[1] != 0 || values_[2] != 0) {\n> +\t\t\tcout << \"Signal object disconnection test failed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test disconnection of a whole signal. */\n> +\t\tmemset(values_, 0, sizeof(values_));\n> +\t\tsignalInt_.connect(this, &SignalTest::slotInteger1);\n> +\t\tsignalInt_.connect(this, &SignalTest::slotInteger2);\n> +\t\tsignalInt_.disconnect();\n> +\t\tsignalInt_.emit(42);\n> +\n> +\t\tif (values_[0] != 0 || values_[1] != 0 || values_[2] != 0) {\n> +\t\t\tcout << \"Signal object disconnection test failed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\t/* Test disconnection from slot. */\n> +\t\tsignalVoid_.disconnect();\n> +\t\tsignalVoid_.connect(this, &SignalTest::slotDisconnect);\n> +\n> +\t\tsignalVoid_.emit();\n> +\t\tcalled_ = false;\n> +\t\tsignalVoid_.emit();\n> +\n> +\t\tif (called_) {\n> +\t\t\tcout << \"Signal disconnection from slot test failed\" << endl;\n> +\t\t\treturn TestFail;\n> +\t\t}\n> +\n> +\t\treturn TestPass;\n> +\t}\n> +\n> +\tvoid cleanup()\n> +\t{\n> +\t}\n> +\n> +private:\n> +\tSignal<> signalVoid_;\n> +\tSignal<int> signalInt_;\n> +\tSignal<int, const std::string &> signalMultiArgs_;\n> +\n> +\tbool called_;\n> +\tint values_[3];\n> +\tstd::string name_;\n> +};\n> +\n> +TEST_REGISTER(SignalTest)\n> -- \n> Regards,\n> \n> Laurent Pinchart\n> \n> _______________________________________________\n> libcamera-devel mailing list\n> libcamera-devel@lists.libcamera.org\n> https://lists.libcamera.org/listinfo/libcamera-devel","headers":{"Return-Path":"<niklas.soderlund@ragnatech.se>","Received":["from mail-lj1-x243.google.com (mail-lj1-x243.google.com\n\t[IPv6:2a00:1450:4864:20::243])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 06F4360B2C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun,  6 Jan 2019 17:29:35 +0100 (CET)","by mail-lj1-x243.google.com with SMTP id q2-v6so36132376lji.10\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSun, 06 Jan 2019 08:29:34 -0800 (PST)","from localhost (89-233-230-99.cust.bredband2.com. [89.233.230.99])\n\tby smtp.gmail.com with ESMTPSA id\n\ti75sm12398755lfb.58.2019.01.06.08.29.33\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tSun, 06 Jan 2019 08:29:33 -0800 (PST)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=ragnatech-se.20150623.gappssmtp.com; s=20150623;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:content-transfer-encoding:in-reply-to\n\t:user-agent; bh=VBdMkoDgeEFBOXzAkXsczmboTQ4IuXZBu+pWKA5NvMI=;\n\tb=p62TWQzOYbSzIhrzm5BqTiFZv6OA9QteMGzBdzqLLAg4o7Vfi67LZEs1EaYrtUe2Gq\n\tegCGq2hzk/LZ1UO4Tzu7WSru81IwR2Sb8DmLGyk8AaZYmZ5vfTgQUj0y9BzvhKQKUlXl\n\tKlqnkzXJceKBkAzwg0RaNj8e/iq0xJo4vUmftGAr0cyKfjFZfXR0kfRGEs8XBR0bXzba\n\t6z2hAJnKl0qXsYLuCRwng+nilR0nBd8zu0qLwGU9srSBGicG8mOs1nPB/A7zymr1V2fJ\n\tpObEUcnJ/y2B4HEGjMSxN3wRFwbIDHLujFsPejhZ34UwEZGkG5IME0uKMQhuxKi0EfWK\n\tlisg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:content-transfer-encoding\n\t:in-reply-to:user-agent;\n\tbh=VBdMkoDgeEFBOXzAkXsczmboTQ4IuXZBu+pWKA5NvMI=;\n\tb=A2+BxupBOIX4loFXrkaUchm2sU8i8uXk53A54jd02A9+x3Ey2ALRhjCAI6nj+i0VaA\n\tPyhWhxoENlD3YbfGjaUVLwUhUZSYH+pps3dhYnSehXFwz8ElHJKwKLlqE+BZurunPypJ\n\txRYF1YbuiyQpN5Pa/k9MNTFOlb6Mk4YiuIcNg+EpeUGVWJWSCOZsxMMm/iAIciqUGzqg\n\tQ5aVvmOA3yEXQUIswTrfo8+qe/jdEEkOUl5t5b9gu1xuHPHkhXtMzBEjEsA7+PobekWb\n\tzaVZpkSxsKl3VKgX0IBgJyOCMV1+LTlg9/UhVWCrD+SFFuWZcDBhlypCkDHmDQayvg8i\n\t+LNA==","X-Gm-Message-State":"AJcUuke34ykIwyDOBfLph7bGGZRc/2JzqogRX3+HdfY1QIgdU2bQY18C\n\tJaSffHKkuCbefPYqADfqbZIjAg==","X-Google-Smtp-Source":"ALg8bN4CSSHL7/yJkRN4m00p/J98lCFKdxe3vLl3snCgIE0+KulLbTsd4MhUOC2FUfQoW29p8rEfYg==","X-Received":"by 2002:a2e:6a13:: with SMTP id\n\tf19-v6mr28376094ljc.41.1546792174280; \n\tSun, 06 Jan 2019 08:29:34 -0800 (PST)","Date":"Sun, 6 Jan 2019 17:29:33 +0100","From":"Niklas =?iso-8859-1?q?S=F6derlund?= <niklas.soderlund@ragnatech.se>","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190106162933.GJ11987@bigcity.dyn.berto.se>","References":"<20190106023328.10989-1-laurent.pinchart@ideasonboard.com>\n\t<20190106023328.10989-9-laurent.pinchart@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=iso-8859-1","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<20190106023328.10989-9-laurent.pinchart@ideasonboard.com>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH 09/11] test: Add signal/slot test","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Sun, 06 Jan 2019 16:29:35 -0000"}}]