@@ -60,16 +60,6 @@ TEST(parse_type_test, add_option_long_id)
60
60
EXPECT_TRUE ((testing::internal::GetCapturedStderr ()).empty ());
61
61
EXPECT_EQ (option_value, " option_string" );
62
62
63
- // add with no space
64
- const char * argv2[] = {" ./argument_parser_test" , " --string-optionoption_string" };
65
- seqan3::argument_parser parser2{" test_parser" , 2 , argv2, false };
66
- parser2.add_option (option_value, ' S' , " string-option" , " this is a string option." );
67
-
68
- testing::internal::CaptureStderr ();
69
- EXPECT_NO_THROW (parser2.parse ());
70
- EXPECT_TRUE ((testing::internal::GetCapturedStderr ()).empty ());
71
- EXPECT_EQ (option_value, " option_string" );
72
-
73
63
const char * argv3[] = {" ./argument_parser_test" , " --string-option=option_string" };
74
64
seqan3::argument_parser parser3{" test_parser" , 2 , argv3, false };
75
65
parser3.add_option (option_value, ' s' , " string-option" , " this is a string option." );
@@ -936,3 +926,46 @@ TEST(parse_test, subcommand_argument_parser_success)
936
926
seqan3::argument_parser_error);
937
927
}
938
928
}
929
+
930
+ TEST (parse_test, issue1544)
931
+ {
932
+ { // wrong separation of long value:
933
+ std::string option_value;
934
+ const char * argv[] = {" ./argument_parser_test" , " --foohallo" };
935
+ seqan3::argument_parser parser{" test_parser" , 2 , argv, false };
936
+ parser.add_option (option_value, ' f' , " foo" , " this is a string option." );
937
+
938
+ EXPECT_THROW (parser.parse (), seqan3::unknown_option);
939
+ }
940
+
941
+ { // unknown option (`--foo-bar`) that has a prefix of a known option (`--foo`)
942
+ std::string option_value;
943
+ const char * argv[] = {" ./argument_parser_test" , " --foo" , " hallo" , " --foo-bar" , " ballo" };
944
+ seqan3::argument_parser parser{" test_parser" , 5 , argv, false };
945
+ parser.add_option (option_value, ' f' , " foo" , " this is a string option." );
946
+
947
+ EXPECT_THROW (parser.parse (), seqan3::unknown_option);
948
+ }
949
+
950
+ { // known option (`--foo-bar`) that has a prefix of a unknown option (`--foo`)
951
+ std::string option_value;
952
+ const char * argv[] = {" ./argument_parser_test" , " --foo" , " hallo" , " --foo-bar" , " ballo" };
953
+ seqan3::argument_parser parser{" test_parser" , 5 , argv, false };
954
+ parser.add_option (option_value, ' f' , " foo-bar" , " this is a string option." );
955
+
956
+ EXPECT_THROW (parser.parse (), seqan3::unknown_option);
957
+ }
958
+
959
+ { // known option (`--foo`) is a prefix of another known option (`--foo-bar`)
960
+ std::string foo_option_value;
961
+ std::string foobar_option_value;
962
+ const char * argv[] = {" ./argument_parser_test" , " --foo" , " hallo" , " --foo-bar" , " ballo" };
963
+ seqan3::argument_parser parser{" test_parser" , 5 , argv, false };
964
+ parser.add_option (foo_option_value, ' f' , " foo" , " this is a prefix of foobar." );
965
+ parser.add_option (foobar_option_value, ' b' , " foo-bar" , " this has prefix foo." );
966
+
967
+ EXPECT_NO_THROW (parser.parse ());
968
+ EXPECT_EQ (foo_option_value, " hallo" );
969
+ EXPECT_EQ (foobar_option_value, " ballo" );
970
+ }
971
+ }
0 commit comments