File: test_detect.py

package info (click to toggle)
chirp 1%3A20251108-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 18,728 kB
  • sloc: python: 156,369; ansic: 296; sh: 219; xml: 24; makefile: 19
file content (47 lines) | stat: -rw-r--r-- 2,014 bytes parent folder | download | duplicates (2)
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
import logging
import sys
from unittest import mock

import pytest

from chirp import directory
from chirp import logger
from tests import base


class TestCaseDetect(base.DriverTest):
    def test_detect(self):
        with logger.log_history(logging.WARNING, 'chirp.drivers') as history:
            radio = directory.get_radio_by_image(self.TEST_IMAGE)
            self.assertEqual([], history.get_history(),
                             'Drivers should not log warnings/errors for '
                             'good images')
        if hasattr(radio, '_orig_rclass'):
            radio = radio._orig_rclass(self.TEST_IMAGE)
        if isinstance(self.radio, radio.__class__):
            # If we are a sub-device of the detected class then that's fine.
            # There's no good way for us to know that other than checking, so
            # the below assertion is just for show.
            self.assertIsInstance(self.radio, radio.__class__)
        else:
            self.assertIsInstance(radio, self.RADIO_CLASS,
                                  "Image %s detected as %s but expected %s" % (
                                      self.TEST_IMAGE,
                                      radio.__class__, self.RADIO_CLASS))

    @pytest.mark.skipif(sys.version_info < (3, 10),
                        reason="requires python3.10 or higher")
    @mock.patch('builtins.print')
    def test_match_model_is_quiet_no_match(self, mock_print):
        with self.assertNoLogs(level=logging.DEBUG):
            self.radio.match_model(b'', 'foo.img')
        mock_print.assert_not_called()

    @pytest.mark.skipif(sys.version_info < (3, 10),
                        reason="requires python3.10 or higher")
    @mock.patch('builtins.print')
    def test_match_model_is_quiet_with_match(self, mock_print):
        with self.assertNoLogs(level=logging.DEBUG):
            with open(self.TEST_IMAGE, 'rb') as f:
                self.radio.match_model(f.read(), self.TEST_IMAGE)
        mock_print.assert_not_called()