diff --git a/tests/test_decoding.py b/tests/test_decoding.py index edc5a54..3084f9d 100644 --- a/tests/test_decoding.py +++ b/tests/test_decoding.py @@ -133,5 +133,31 @@ def test_try_decode_metadata_rot13_unique_only(): assert "rot13" not in res_duplicate # }}} +# {{{ test_decoder_subclasses_and_registry +def test_decoder_subclasses_and_registry(): + """ + Verifies that DecodingRegistry successfully registers concrete decoders and + that individual BaseDecoder subclasses correctly decode matching strings. + """ + from ctf.decoding import DecodingRegistry, Base64Decoder, HexDecoder, Rot13Decoder + + registry = DecodingRegistry.get_default_registry() + assert len(registry.decoders) >= 7 + + # Assert Base64Decoder behaves correctly + b64_dec = Base64Decoder() + assert b64_dec.name == "base64" + assert b64_dec.is_applicable("ZmxhZ3tiNjRfbWV0YWRhdGF9") + assert not b64_dec.is_applicable("A") + assert b64_dec.attempt_single("ZmxhZ3tiNjRfbWV0YWRhdGF9") == "flag{b64_metadata}" + + # Assert Rot13Decoder validates correctly + rot_dec = Rot13Decoder() + assert rot_dec.name == "rot13" + assert rot_dec.attempt_single("synt{ebg13}") == "flag{rot13}" + assert rot_dec.attempt_single("abezny grkg") is None # Fails validate check +# }}} + +