diff --git a/test/link.cpp b/test/link.cpp index 633a746fe..35fe816ab 100644 --- a/test/link.cpp +++ b/test/link.cpp @@ -157,159 +157,196 @@ static void parse_internal_link(const td::string &url, td::td_api::object_ptr( - can_manage_chat, can_change_info, can_post_messages, can_edit_messages, can_delete_messages, can_invite_users, - can_restrict_members, can_pin_messages, can_manage_topics, can_promote_members, can_manage_video_chats, - is_anonymous); - }; - auto target_chat_chosen = [](bool allow_users, bool allow_bots, bool allow_groups, bool allow_channels) { - return td::td_api::make_object(allow_users, allow_bots, allow_groups, allow_channels); - }; + return td::td_api::make_object( + can_manage_chat, can_change_info, can_post_messages, can_edit_messages, can_delete_messages, can_invite_users, + can_restrict_members, can_pin_messages, can_manage_topics, can_promote_members, can_manage_video_chats, + is_anonymous); +} - auto active_sessions = [] { - return td::td_api::make_object(); - }; - auto attachment_menu_bot = [](td::td_api::object_ptr chat_types, +static auto target_chat_chosen(bool allow_users, bool allow_bots, bool allow_groups, bool allow_channels) { + return td::td_api::make_object(allow_users, allow_bots, allow_groups, allow_channels); +} + +static auto active_sessions() { + return td::td_api::make_object(); +} + +static auto attachment_menu_bot(td::td_api::object_ptr chat_types, td::td_api::object_ptr chat_link, const td::string &bot_username, const td::string &start_parameter) { - td::td_api::object_ptr target_chat; - if (chat_link != nullptr) { - target_chat = td::td_api::make_object(std::move(chat_link)); - } else if (chat_types != nullptr) { - target_chat = std::move(chat_types); - } else { - target_chat = td::td_api::make_object(); - } - return td::td_api::make_object( - std::move(target_chat), bot_username, start_parameter.empty() ? td::string() : "start://" + start_parameter); - }; - auto authentication_code = [](const td::string &code) { - return td::td_api::make_object(code); - }; - auto background = [](const td::string &background_name) { - return td::td_api::make_object(background_name); - }; - auto bot_add_to_channel = [](const td::string &bot_username, - td::td_api::object_ptr &&administrator_rights) { - return td::td_api::make_object(bot_username, - std::move(administrator_rights)); - }; - auto bot_start = [](const td::string &bot_username, const td::string &start_parameter) { - return td::td_api::make_object(bot_username, start_parameter, false); - }; - auto bot_start_in_group = [](const td::string &bot_username, const td::string &start_parameter, - td::td_api::object_ptr &&administrator_rights) { - return td::td_api::make_object(bot_username, start_parameter, - std::move(administrator_rights)); - }; - auto change_phone_number = [] { - return td::td_api::make_object(); - }; - auto chat_invite = [](const td::string &hash) { - return td::td_api::make_object("tg:join?invite=" + hash); - }; - auto default_message_auto_delete_timer_settings = [] { - return td::td_api::make_object(); - }; - auto edit_profile_settings = [] { - return td::td_api::make_object(); - }; - auto filter_settings = [] { - return td::td_api::make_object(); - }; - auto game = [](const td::string &bot_username, const td::string &game_short_name) { - return td::td_api::make_object(bot_username, game_short_name); - }; - auto instant_view = [](const td::string &url, const td::string &fallback_url) { - return td::td_api::make_object(url, fallback_url); - }; - auto invoice = [](const td::string &invoice_name) { - return td::td_api::make_object(invoice_name); - }; - auto language_pack = [](const td::string &language_pack_name) { - return td::td_api::make_object(language_pack_name); - }; - auto language_settings = [] { - return td::td_api::make_object(); - }; - auto message = [](const td::string &url) { - return td::td_api::make_object(url); - }; - auto message_draft = [](td::string text, bool contains_url) { - auto formatted_text = td::td_api::make_object(); - formatted_text->text_ = std::move(text); - return td::td_api::make_object(std::move(formatted_text), contains_url); - }; - auto passport_data_request = [](td::int32 bot_user_id, const td::string &scope, const td::string &public_key, - const td::string &nonce, const td::string &callback_url) { - return td::td_api::make_object(bot_user_id, scope, public_key, - nonce, callback_url); - }; - auto phone_number_confirmation = [](const td::string &hash, const td::string &phone_number) { - return td::td_api::make_object(hash, phone_number); - }; - auto premium_features = [](const td::string &referrer) { - return td::td_api::make_object(referrer); - }; - auto privacy_and_security_settings = [] { - return td::td_api::make_object(); - }; - auto proxy_mtproto = [](const td::string &server, td::int32 port, const td::string &secret) { - return td::td_api::make_object( - server, port, td::td_api::make_object(secret)); - }; - auto proxy_socks = [](const td::string &server, td::int32 port, const td::string &username, - const td::string &password) { - return td::td_api::make_object( - server, port, td::td_api::make_object(username, password)); - }; - auto public_chat = [](const td::string &chat_username) { - return td::td_api::make_object(chat_username); - }; - auto qr_code_authentication = [] { - return td::td_api::make_object(); - }; - auto restore_purchases = [] { - return td::td_api::make_object(); - }; - auto settings = [] { - return td::td_api::make_object(); - }; - auto sticker_set = [](const td::string &sticker_set_name, bool expect_custom_emoji) { - return td::td_api::make_object(sticker_set_name, expect_custom_emoji); - }; - auto theme = [](const td::string &theme_name) { - return td::td_api::make_object(theme_name); - }; - auto theme_settings = [] { - return td::td_api::make_object(); - }; - auto unknown_deep_link = [](const td::string &link) { - return td::td_api::make_object(link); - }; - auto unsupported_proxy = [] { - return td::td_api::make_object(); - }; - auto user_phone_number = [](const td::string &phone_number) { - return td::td_api::make_object(phone_number); - }; - auto user_token = [](const td::string &token) { - return td::td_api::make_object(token); - }; - auto video_chat = [](const td::string &chat_username, const td::string &invite_hash, bool is_live_stream) { - return td::td_api::make_object(chat_username, invite_hash, is_live_stream); - }; - auto web_app = [](const td::string &bot_username, const td::string &web_app_short_name, - const td::string &start_parameter) { - return td::td_api::make_object(bot_username, web_app_short_name, - start_parameter); - }; + td::td_api::object_ptr target_chat; + if (chat_link != nullptr) { + target_chat = td::td_api::make_object(std::move(chat_link)); + } else if (chat_types != nullptr) { + target_chat = std::move(chat_types); + } else { + target_chat = td::td_api::make_object(); + } + return td::td_api::make_object( + std::move(target_chat), bot_username, start_parameter.empty() ? td::string() : "start://" + start_parameter); +} +static auto authentication_code(const td::string &code) { + return td::td_api::make_object(code); +} + +static auto background(const td::string &background_name) { + return td::td_api::make_object(background_name); +} + +static auto bot_add_to_channel(const td::string &bot_username, + td::td_api::object_ptr &&administrator_rights) { + return td::td_api::make_object(bot_username, + std::move(administrator_rights)); +} + +static auto bot_start(const td::string &bot_username, const td::string &start_parameter) { + return td::td_api::make_object(bot_username, start_parameter, false); +} + +static auto bot_start_in_group(const td::string &bot_username, const td::string &start_parameter, + td::td_api::object_ptr &&administrator_rights) { + return td::td_api::make_object(bot_username, start_parameter, + std::move(administrator_rights)); +} + +static auto change_phone_number() { + return td::td_api::make_object(); +} + +static auto chat_invite(const td::string &hash) { + return td::td_api::make_object("tg:join?invite=" + hash); +} + +static auto default_message_auto_delete_timer_settings() { + return td::td_api::make_object(); +} + +static auto edit_profile_settings() { + return td::td_api::make_object(); +} + +static auto filter_settings() { + return td::td_api::make_object(); +} + +static auto game(const td::string &bot_username, const td::string &game_short_name) { + return td::td_api::make_object(bot_username, game_short_name); +} + +static auto instant_view(const td::string &url, const td::string &fallback_url) { + return td::td_api::make_object(url, fallback_url); +} + +static auto invoice(const td::string &invoice_name) { + return td::td_api::make_object(invoice_name); +} + +static auto language_pack(const td::string &language_pack_name) { + return td::td_api::make_object(language_pack_name); +} + +static auto language_settings() { + return td::td_api::make_object(); +} + +static auto message(const td::string &url) { + return td::td_api::make_object(url); +} + +static auto message_draft(td::string text, bool contains_url) { + auto formatted_text = td::td_api::make_object(); + formatted_text->text_ = std::move(text); + return td::td_api::make_object(std::move(formatted_text), contains_url); +} + +static auto passport_data_request(td::int32 bot_user_id, const td::string &scope, const td::string &public_key, + const td::string &nonce, const td::string &callback_url) { + return td::td_api::make_object(bot_user_id, scope, public_key, nonce, + callback_url); +} + +static auto phone_number_confirmation(const td::string &hash, const td::string &phone_number) { + return td::td_api::make_object(hash, phone_number); +} + +static auto premium_features(const td::string &referrer) { + return td::td_api::make_object(referrer); +} + +static auto privacy_and_security_settings() { + return td::td_api::make_object(); +} + +static auto proxy_mtproto(const td::string &server, td::int32 port, const td::string &secret) { + return td::td_api::make_object( + server, port, td::td_api::make_object(secret)); +} + +static auto proxy_socks(const td::string &server, td::int32 port, const td::string &username, + const td::string &password) { + return td::td_api::make_object( + server, port, td::td_api::make_object(username, password)); +} + +static auto public_chat(const td::string &chat_username) { + return td::td_api::make_object(chat_username); +} + +static auto qr_code_authentication() { + return td::td_api::make_object(); +} + +static auto restore_purchases() { + return td::td_api::make_object(); +} + +static auto settings() { + return td::td_api::make_object(); +} + +static auto sticker_set(const td::string &sticker_set_name, bool expect_custom_emoji) { + return td::td_api::make_object(sticker_set_name, expect_custom_emoji); +} + +static auto theme(const td::string &theme_name) { + return td::td_api::make_object(theme_name); +} + +static auto theme_settings() { + return td::td_api::make_object(); +} + +static auto unknown_deep_link(const td::string &link) { + return td::td_api::make_object(link); +} + +static auto unsupported_proxy() { + return td::td_api::make_object(); +} + +static auto user_phone_number(const td::string &phone_number) { + return td::td_api::make_object(phone_number); +} + +static auto user_token(const td::string &token) { + return td::td_api::make_object(token); +} + +static auto video_chat(const td::string &chat_username, const td::string &invite_hash, bool is_live_stream) { + return td::td_api::make_object(chat_username, invite_hash, is_live_stream); +} + +static auto web_app(const td::string &bot_username, const td::string &web_app_short_name, + const td::string &start_parameter) { + return td::td_api::make_object(bot_username, web_app_short_name, start_parameter); +} + +TEST(Link, parse_internal_link_part1) { parse_internal_link("t.me/levlam/1", message("tg://resolve?domain=levlam&post=1")); parse_internal_link("telegram.me/levlam/1", message("tg://resolve?domain=levlam&post=1")); parse_internal_link("telegram.dog/levlam/1", message("tg://resolve?domain=levlam&post=1")); @@ -523,7 +560,9 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.me/bg//", nullptr); parse_internal_link("t.me/bg/%20/", background("%20")); parse_internal_link("t.me/bg/", nullptr); +} +TEST(Link, parse_internal_link_part2) { parse_internal_link("t.me/invoice?slug=abcdef", nullptr); parse_internal_link("t.me/invoice", nullptr); parse_internal_link("t.me/invoice/", nullptr); @@ -710,7 +749,9 @@ TEST(Link, parse_internal_link) { parse_internal_link("tg:addemoji?set=abcdef", sticker_set("abcdef", true)); parse_internal_link("tg:addemoji?set=abc%30ef", sticker_set("abc0ef", true)); parse_internal_link("tg://addemoji?set=", unknown_deep_link("tg://addemoji?set=")); +} +TEST(Link, parse_internal_link_part3) { parse_internal_link("t.me/confirmphone?hash=abc%30ef&phone=", nullptr); parse_internal_link("t.me/confirmphone/123456/123123/12/31/a/s//21w/?hash=abc%30ef&phone=123456789", phone_number_confirmation("abc0ef", "123456789")); @@ -954,7 +995,9 @@ TEST(Link, parse_internal_link) { "restrict_members+pin_messages+manage_topics+promote_members+manage_video_chats+anonymous", bot_add_to_channel("username", chat_administrator_rights(true, true, true, true, true, true, true, false, false, true, true, false))); +} +TEST(Link, parse_internal_link_part4) { parse_internal_link("tg:resolve?domain=username&game=aasdasd", game("username", "aasdasd")); parse_internal_link("TG://resolve?domain=username&game=", public_chat("username")); parse_internal_link("TG://test@resolve?domain=username&game=asd", nullptr);