diff --git a/tests/test_forensics.py b/tests/test_forensics.py index e79dbb8..e59cbfe 100644 --- a/tests/test_forensics.py +++ b/tests/test_forensics.py @@ -605,3 +605,32 @@ def test_metadata_decoded_hints_cli(): assert "base64" in result.output assert "flag{b64_metadata}" in result.output +# {{{ test_parser_factory_and_classes +def test_parser_factory_and_classes(): + """ + Verifies that ParserFactory selects the correct parser subclass and + that individual FormatParser subclasses behave correctly. + """ + from ctf.forensics import ParserFactory, JpegParser, PngParser, GifParser, FallbackParser + + # Assert JPEG + jpeg_parser = ParserFactory.get_parser(b"\xff\xd8\xff\xe0\x00\x10JFIF") + assert isinstance(jpeg_parser, JpegParser) + + # Assert PNG + png_parser = ParserFactory.get_parser(b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR") + assert isinstance(png_parser, PngParser) + + # Assert GIF + gif_parser = ParserFactory.get_parser(b"GIF89a\x01\x00\x01\x00") + assert isinstance(gif_parser, GifParser) + + # Assert Fallback + fallback_parser = ParserFactory.get_parser(b"MZ\x90\x00\x03\x00\x00\x00") + assert isinstance(fallback_parser, FallbackParser) + assert fallback_parser.parse_physical(b"") == {} + assert fallback_parser.get_comment(b"") == "" + assert fallback_parser.get_exif_tags(b"") == {} +# }}} + +