Skip to content

Commit

Permalink
Merge pull request #895 from hardbyte/reader-writer-case
Browse files Browse the repository at this point in the history
Find the correct Reader/Writer independently of the file extension case
  • Loading branch information
mergify[bot] committed Aug 16, 2020
2 parents ac6e3ef + 67af506 commit 738a5d7
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 2 deletions.
2 changes: 1 addition & 1 deletion can/io/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def __new__(
)
Logger.fetched_plugins = True

suffix = pathlib.PurePath(filename).suffix
suffix = pathlib.PurePath(filename).suffix.lower()
try:
return Logger.message_writers[suffix](filename, *args, **kwargs)
except KeyError:
Expand Down
2 changes: 1 addition & 1 deletion can/io/player.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def __new__(cls, filename: "can.typechecking.StringPathLike", *args, **kwargs):
)
LogReader.fetched_plugins = True

suffix = pathlib.PurePath(filename).suffix
suffix = pathlib.PurePath(filename).suffix.lower()
try:
return LogReader.message_readers[suffix](filename, *args, **kwargs)
except KeyError:
Expand Down
30 changes: 30 additions & 0 deletions test/logformats_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,36 @@
logging.basicConfig(level=logging.DEBUG)


class ReaderWriterExtensionTest(unittest.TestCase):
message_writers_and_readers = {}
for suffix, writer in can.Logger.message_writers.items():
message_writers_and_readers[suffix] = (
writer,
can.LogReader.message_readers.get(suffix),
)

def test_extension_matching(self):
for suffix, (writer, reader) in self.message_writers_and_readers.items():
suffix_variants = [
suffix.upper(),
suffix.lower(),
"".join([c.upper() if i % 2 else c for i, c in enumerate(suffix)]),
]
for suffix_variant in suffix_variants:
tmp_file = tempfile.NamedTemporaryFile(
suffix=suffix_variant, delete=False
)
tmp_file.close()
try:
with can.Logger(tmp_file.name) as logger:
assert type(logger) == writer
if reader is not None:
with can.LogReader(tmp_file.name) as player:
assert type(player) == reader
finally:
os.remove(tmp_file.name)


class ReaderWriterTest(unittest.TestCase, ComparingMessagesTestCase, metaclass=ABCMeta):
"""Tests a pair of writer and reader by writing all data first and
then reading all data and checking if they could be reconstructed
Expand Down

0 comments on commit 738a5d7

Please sign in to comment.