/* SPDX-License-Identifier: GPL-2.0-or-later */ /* * Copyright (C) 2018, Google Inc. * * utils.cpp - Miscellaneous utility tests */ #include #include #include #include #include #include "test.h" #include "utils.h" using namespace std; using namespace libcamera; class UtilsTest : public Test { protected: int testDirname() { static const std::vector paths = { "", "///", "/bin", "/usr/bin", "//etc////", "//tmp//d//", "current_file", "./current_file", "./current_dir/", "current_dir/", }; static const std::vector expected = { ".", "/", "/", "/usr", "/", "//tmp", ".", ".", ".", ".", }; std::vector results; for (const auto &path : paths) results.push_back(utils::dirname(path)); if (results != expected) { cerr << "utils::dirname() tests failed" << endl; cerr << "expected: " << endl; for (const auto &path : expected) cerr << "\t" << path << endl; cerr << "results: " << endl; for (const auto &path : results) cerr << "\t" << path << endl; return TestFail; } return TestPass; } int run() { /* utils::hex() test. */ std::ostringstream os; std::string ref; os << utils::hex(static_cast(0x42)) << " "; ref += "0x00000042 "; os << utils::hex(static_cast(0x42)) << " "; ref += "0x00000042 "; os << utils::hex(static_cast(0x42)) << " "; ref += "0x0000000000000042 "; os << utils::hex(static_cast(0x42)) << " "; ref += "0x0000000000000042 "; os << utils::hex(static_cast(0x42), 4) << " "; ref += "0x0042 "; os << utils::hex(static_cast(0x42), 1) << " "; ref += "0x42 "; os << utils::hex(static_cast(0x42), 4) << " "; ref += "0x0042 "; os << utils::hex(static_cast(0x42), 1) << " "; ref += "0x42 "; std::string s = os.str(); if (s != ref) { cerr << "utils::hex() test failed, expected '" << ref << "', got '" << s << "'"; return TestFail; } /* utils::join() and utils::split() test. */ std::vector elements = { "/bin", "/usr/bin", "", "", }; std::string path; for (const auto &element : elements) path += (path.empty() ? "" : ":") + element; if (path != utils::join(elements, ":")) { cerr << "utils::join() test failed" << endl; return TestFail; } std::vector dirs; for (const auto &dir : utils::split(path, ":")) dirs.push_back(dir); if (dirs != elements) { cerr << "utils::split() test failed" << endl; return TestFail; } /* utils::join() with conversion function test. */ std::vector sizes = { { 0, 0 }, { 100, 100 } }; s = utils::join(sizes, "/", [](const Size &size) { return size.toString(); }); if (s != "0x0/100x100") { cerr << "utils::join() with conversion test failed" << endl; return TestFail; } /* utils::dirname() tests. */ if (TestPass != testDirname()) return TestFail; return TestPass; } }; TEST_REGISTER(UtilsTest) de4ed4e966b476dbcfa63bc61028b0fc16ee4a78'>plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>

import selectors
import sys


class NullRenderer:
    def __init__(self, state):
        self.state = state

        self.cm = state.cm
        self.contexts = state.contexts

        self.running = False

    def setup(self):
        pass

    def run(self):
        print('Capturing...')

        self.running = True

        sel = selectors.DefaultSelector()
        sel.register(self.cm.event_fd, selectors.EVENT_READ, self.readcam)
        sel.register(sys.stdin, selectors.EVENT_READ, self.readkey)

        print('Press enter to exit')

        while self.running:
            events = sel.select()
            for key, mask in events:
                callback = key.data
                callback(key.fileobj)

        print('Exiting...')

    def readcam(self, fd):
        self.running = self.state.event_handler()

    def readkey(self, fileobj):
        sys.stdin.readline()
        self.running = False

    def request_handler(self, ctx, req):
        self.state.request_processed(ctx, req)