@@ -485,6 +485,84 @@ FOSSIL_TEST(cpp_test_io_clear_keybindings) {
485485 ASSUME_ITS_EQUAL_I32 (0 , (int )bindings.size ());
486486}
487487
488+ FOSSIL_TEST (cpp_test_io_validate_is_weak_password_simple) {
489+ std::string password = " 123456" ;
490+ bool result = fossil::io::Input::is_weak_password (password);
491+ ASSUME_ITS_TRUE (result);
492+ }
493+
494+ FOSSIL_TEST (cpp_test_io_validate_is_weak_password_with_username) {
495+ std::string password = " username123" ;
496+ std::string username = " username" ;
497+ bool result = fossil::io::Input::is_weak_password (password, username);
498+ ASSUME_ITS_TRUE (result);
499+ }
500+
501+ FOSSIL_TEST (cpp_test_io_validate_is_weak_password_with_email) {
502+ std::string password = " emailpassword" ;
503+ std::string email =
" [email protected] " ;
504+ bool result = fossil::io::Input::is_weak_password (password, " " , email);
505+ ASSUME_ITS_TRUE (result);
506+ }
507+
508+ FOSSIL_TEST (cpp_test_io_validate_is_weak_password_strong) {
509+ std::string password = " Str0ng!Passw0rd#2024" ;
510+ bool result = fossil::io::Input::is_weak_password (password);
511+ ASSUME_ITS_FALSE (result);
512+ }
513+
514+ FOSSIL_TEST (cpp_test_io_validate_is_suspicious_bot_known_bot) {
515+ std::string userAgent = " Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" ;
516+ bool result = fossil::io::Input::is_suspicious_bot (userAgent);
517+ ASSUME_ITS_TRUE (result);
518+ }
519+
520+ FOSSIL_TEST (cpp_test_io_validate_is_suspicious_bot_normal_browser) {
521+ std::string userAgent = " Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0" ;
522+ bool result = fossil::io::Input::is_suspicious_bot (userAgent);
523+ ASSUME_ITS_FALSE (result);
524+ }
525+
526+ FOSSIL_TEST (cpp_test_io_validate_is_disposable_email_true) {
527+ std::string email =
" [email protected] " ;
528+ bool result = fossil::io::Input::is_disposable_email (email);
529+ ASSUME_ITS_TRUE (result);
530+ }
531+
532+ FOSSIL_TEST (cpp_test_io_validate_is_disposable_email_false) {
533+ std::string email =
" [email protected] " ;
534+ bool result = fossil::io::Input::is_disposable_email (email);
535+ ASSUME_ITS_FALSE (result);
536+ }
537+
538+ FOSSIL_TEST (cpp_test_io_validate_is_suspicious_user_true) {
539+ std::string username = " bot_user_123" ;
540+ bool result = fossil::io::Input::is_suspicious_user (username);
541+ ASSUME_ITS_TRUE (result);
542+ }
543+
544+ FOSSIL_TEST (cpp_test_io_validate_is_suspicious_user_false) {
545+ std::string username = " johnsmith" ;
546+ bool result = fossil::io::Input::is_suspicious_user (username);
547+ ASSUME_ITS_FALSE (result);
548+ }
549+
550+ FOSSIL_TEST (cpp_test_io_validate_sanitize_string_basic) {
551+ std::string input = " Hello <script>alert('x')</script>!" ;
552+ fossil_context_t ctx = FOSSIL_SANITIZE_HTML;
553+ int flags = fossil::io::Input::validate_sanitize_string (input, ctx);
554+ ASSUME_ITS_TRUE (flags != 0 );
555+ ASSUME_ITS_FALSE (input.find (" <script>" ) != std::string::npos);
556+ }
557+
558+ FOSSIL_TEST (cpp_test_io_validate_sanitize_string_noop) {
559+ std::string input = " SafeString123" ;
560+ fossil_context_t ctx = FOSSIL_SANITIZE_NONE;
561+ int flags = fossil::io::Input::validate_sanitize_string (input, ctx);
562+ ASSUME_ITS_EQUAL_I32 (0 , flags);
563+ ASSUME_ITS_EQUAL_CSTR (" SafeString123" , input.c_str ());
564+ }
565+
488566// * * * * * * * * * * * * * * * * * * * * * * * *
489567// * Fossil Logic Test Pool
490568// * * * * * * * * * * * * * * * * * * * * * * * *
@@ -513,7 +591,6 @@ FOSSIL_TEST_GROUP(cpp_input_tests) {
513591 FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_email_invalid);
514592 FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_length_valid);
515593 FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_length_invalid);
516-
517594 FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_input_class_gets_from_stream);
518595 FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_input_class_gets_from_stream_ex);
519596 FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_input_class_validate_input_buffer_valid);
@@ -522,7 +599,18 @@ FOSSIL_TEST_GROUP(cpp_input_tests) {
522599 FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_input_class_gets_from_stream_empty);
523600 FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_input_class_gets_from_stream_whitespace_only);
524601 FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_getc);
525-
602+ FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_weak_password_simple);
603+ FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_weak_password_with_username);
604+ FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_weak_password_with_email);
605+ FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_weak_password_strong);
606+ FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_suspicious_bot_known_bot);
607+ FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_suspicious_bot_normal_browser);
608+ FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_disposable_email_true);
609+ FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_disposable_email_false);
610+ FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_suspicious_user_true);
611+ FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_is_suspicious_user_false);
612+ FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_sanitize_string_basic);
613+ FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_validate_sanitize_string_noop);
526614 FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_register_keybinding_success);
527615 FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_register_keybinding_duplicate);
528616 FOSSIL_TEST_ADD (cpp_input_suite, cpp_test_io_register_keybinding_callback_success);
0 commit comments