@@ -86,6 +86,8 @@ func TestValidate(t *testing.T) {
8686 tcCheckUserDefinedFieldsDisabled (),
8787 tcCheckUserDefinedFieldsDisabledFixT (),
8888 tcMultipleRepeatingGroupFields (),
89+ tcMultiValueEnumValid (),
90+ tcMultiValueEnumInvalidComponent (),
8991 }
9092
9193 msg := NewMessage ()
@@ -662,6 +664,42 @@ func tcValueIsIncorrectFixT() validateTest {
662664 }
663665}
664666
667+ func tcMultiValueEnumValid () validateTest {
668+ dict , _ := datadictionary .Parse ("spec/FIX43.xml" )
669+ validator := NewValidator (defaultValidatorSettings , dict , nil )
670+
671+ // ExecInst (tag 18) is a MULTIPLEVALUESTRING: a space-delimited set of
672+ // individually-valid enum tokens (e.g. "Y M") must be accepted.
673+ builder := createFIX43NewOrderSingle ()
674+ builder .Body .SetField (Tag (18 ), FIXString ("Y M" ))
675+ msgBytes := builder .build ()
676+
677+ return validateTest {
678+ TestName : "Multi-value enum valid" ,
679+ Validator : validator ,
680+ MessageBytes : msgBytes ,
681+ DoNotExpectReject : true ,
682+ }
683+ }
684+
685+ func tcMultiValueEnumInvalidComponent () validateTest {
686+ dict , _ := datadictionary .Parse ("spec/FIX43.xml" )
687+ validator := NewValidator (defaultValidatorSettings , dict , nil )
688+
689+ tag := Tag (18 )
690+ builder := createFIX43NewOrderSingle ()
691+ builder .Body .SetField (tag , FIXString ("Y ZZ" )) // ZZ is not a valid ExecInst enum
692+ msgBytes := builder .build ()
693+
694+ return validateTest {
695+ TestName : "Multi-value enum invalid component" ,
696+ Validator : validator ,
697+ MessageBytes : msgBytes ,
698+ ExpectedRejectReason : rejectReasonValueIsIncorrect ,
699+ ExpectedRefTagID : & tag ,
700+ }
701+ }
702+
665703func tcIncorrectDataFormatForValue () validateTest {
666704 dict , _ := datadictionary .Parse ("spec/FIX40.xml" )
667705 validator := NewValidator (defaultValidatorSettings , dict , nil )
0 commit comments