@@ -28,11 +28,32 @@ def test__infer_charge_columns(self):
2828
2929 def test_parse_peptidoform (self ):
3030 test_cases = [
31+ # Basic cases
3132 (("ACDEFGHR" , None ), "ACDEFGHR" ),
3233 (("K.ACDEFGHR.I" , 1 ), "ACDEFGHR/1" ),
3334 (("K.ACDEFGHR.-" , 2 ), "ACDEFGHR/2" ),
3435 (("-.ACDEFGHR.I" , 3 ), "ACDEFGHR/3" ),
3536 (("-.ACDEFGHR.-" , None ), "ACDEFGHR" ),
37+ # N-terminal modifications
38+ (("-.n[42.0106]ACDEFGHR.-" , None ), "[+42.0106]-ACDEFGHR" ),
39+ (("n[42.0106]ACDEFGHR" , None ), "[+42.0106]-ACDEFGHR" ), # Without flanking
40+ (("-.n[43]ACDEFGHR.-" , 2 ), "[+43]-ACDEFGHR/2" ), # Integer mass
41+ # C-terminal modifications
42+ (("-.ACDEFGHRc[-0.9840].-" , None ), "ACDEFGHR-[-0.984]" ),
43+ (("ACDEFGHRc[-0.9840]" , None ), "ACDEFGHR-[-0.984]" ), # Without flanking
44+ (("-.ACDEFGHRc[17.0265].-" , 2 ), "ACDEFGHR-[+17.0265]/2" ), # Positive C-term
45+ # Internal modifications
46+ (("-.ACDEFM[15.9949]GHR.-" , None ), "ACDEFM[+15.9949]GHR" ),
47+ (("-.ACDEM[-18.010565]GHR.-" , None ), "ACDEM[-18.010565]GHR" ), # Negative internal
48+ (("-.AC[57.021]DEFGHR.-" , None ), "AC[+57.021]DEFGHR" ), # Carbamidomethyl
49+ # Multiple modifications
50+ (("-.n[43]ACDEFM[16]GHR.-" , None ), "[+43]-ACDEFM[+16]GHR" ), # N-term + internal
51+ (("-.ACDEFM[16]GHRc[-1].-" , None ), "ACDEFM[+16]GHR-[-1]" ), # Internal + C-term
52+ (("-.n[42]ACDEFM[16]GHRc[-1].-" , 2 ), "[+42]-ACDEFM[+16]GHR-[-1]/2" ), # All three
53+ (("-.AC[57]DEM[16]GHK.-" , None ), "AC[+57]DEM[+16]GHK" ), # Multiple internal
54+ # Already has '+' sign (should not add another)
55+ (("-.ACDEFM[+15.9949]GHR.-" , None ), "ACDEFM[+15.9949]GHR" ),
56+ (("-.n[+42.0106]ACDEFGHR.-" , None ), "[+42.0106]-ACDEFGHR" ),
3657 ]
3758 for test_in , expected_out in test_cases :
3859 assert expected_out == PercolatorTabReader ._parse_peptidoform (* test_in ).proforma
0 commit comments