diff options
author | George Hazan <george.hazan@gmail.com> | 2023-06-04 19:24:05 +0300 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2023-06-04 19:24:05 +0300 |
commit | efc336e60cf1331bf5f3213d296981b87b8b2a6c (patch) | |
tree | ea59ea1a324f45f6e8a06cc0887b376bfba90ca9 /protocols/Telegram/tdlib/td/test/link.cpp | |
parent | 6e83622d2af1cec3c759f4cff6efe4df2fe3328c (diff) |
fixes #3537 (Telegram: 32-разрядная версия падает в 64-разрядной Windows) + update to the fresh TDLIB
Diffstat (limited to 'protocols/Telegram/tdlib/td/test/link.cpp')
-rw-r--r-- | protocols/Telegram/tdlib/td/test/link.cpp | 681 |
1 files changed, 441 insertions, 240 deletions
diff --git a/protocols/Telegram/tdlib/td/test/link.cpp b/protocols/Telegram/tdlib/td/test/link.cpp index 13c4613174..67b81c1354 100644 --- a/protocols/Telegram/tdlib/td/test/link.cpp +++ b/protocols/Telegram/tdlib/td/test/link.cpp @@ -1,5 +1,5 @@ // -// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2022 +// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2023 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -81,14 +81,74 @@ TEST(Link, check_link) { check_link("https://.", ""); } +static td::td_api::object_ptr<td::td_api::InternalLinkType> get_internal_link_type_object( + const td::unique_ptr<td::LinkManager::InternalLink> &link) { + auto object = link->get_internal_link_type_object(); + if (object->get_id() == td::td_api::internalLinkTypeMessageDraft::ID) { + static_cast<td::td_api::internalLinkTypeMessageDraft *>(object.get())->text_->entities_.clear(); + } + return object; +} + static void parse_internal_link(const td::string &url, td::td_api::object_ptr<td::td_api::InternalLinkType> expected) { auto result = td::LinkManager::parse_internal_link(url); if (result != nullptr) { - auto object = result->get_internal_link_type_object(); - if (object->get_id() == td::td_api::internalLinkTypeMessageDraft::ID) { - static_cast<td::td_api::internalLinkTypeMessageDraft *>(object.get())->text_->entities_.clear(); - } + auto object = get_internal_link_type_object(result); ASSERT_STREQ(url + ' ' + to_string(expected), url + ' ' + to_string(object)); + + for (auto is_internal : {true, false}) { + if (!is_internal && expected->get_id() == td::td_api::internalLinkTypeMessage::ID) { + // external message links must be generated with getMessageLink + continue; + } + if (expected->get_id() == td::td_api::internalLinkTypeQrCodeAuthentication::ID) { + // QR code authentication links must never be generated manually + continue; + } + auto r_link = td::LinkManager::get_internal_link(expected, is_internal); + if (r_link.is_error()) { + if (r_link.error().message() == "HTTP link is unavailable for the link type") { + // some links are tg-only + continue; + } + if (r_link.error().message() == "Deep link is unavailable for the link type") { + // some links are HTTP-only + continue; + } + if (r_link.error().message() == "WALLPAPER_INVALID") { + continue; + } + LOG(ERROR) << url << ' ' << r_link.error() << ' ' << to_string(expected); + ASSERT_TRUE(r_link.is_ok()); + } + auto new_result = td::LinkManager::parse_internal_link(r_link.ok()); + ASSERT_TRUE(new_result != nullptr); + auto new_object = get_internal_link_type_object(new_result); + + auto new_object_str = to_string(new_object); + auto expected_str = to_string(expected); + if (expected->get_id() == td::td_api::internalLinkTypeBackground::ID) { + for (auto &c : expected_str) { + if (c == '~') { + // getInternalLink always use '-' + c = '-'; + } + } + if (new_object_str != expected_str && td::ends_with(expected_str, "\"\n}\n")) { + // getInternalLink always adds rotation parameter, because default value differs between apps + expected_str = expected_str.substr(0, expected_str.size() - 4) + "?rotation=0\"\n}\n"; + } + } + ASSERT_EQ(new_object_str, expected_str); + + r_link = td::LinkManager::get_internal_link(new_object, is_internal); + ASSERT_TRUE(r_link.is_ok()); + new_result = td::LinkManager::parse_internal_link(r_link.ok()); + ASSERT_TRUE(new_result != nullptr); + + // the object must be the same after 2 round of conversion + ASSERT_STREQ(to_string(new_object), to_string(get_internal_link_type_object(new_result))); + } } else { LOG_IF(ERROR, expected != nullptr) << url; ASSERT_TRUE(expected == nullptr); @@ -97,159 +157,215 @@ static void parse_internal_link(const td::string &url, td::td_api::object_ptr<td check_find_urls(url, result != nullptr); } -TEST(Link, parse_internal_link) { - auto chat_administrator_rights = [](bool can_manage_chat, bool can_change_info, bool can_post_messages, +static auto chat_administrator_rights(bool can_manage_chat, bool can_change_info, bool can_post_messages, bool can_edit_messages, bool can_delete_messages, bool can_invite_users, bool can_restrict_members, bool can_pin_messages, bool can_manage_topics, bool can_promote_members, bool can_manage_video_chats, bool is_anonymous) { - return td::td_api::make_object<td::td_api::chatAdministratorRights>( - 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<td::td_api::targetChatChosen>(allow_users, allow_bots, allow_groups, allow_channels); - }; - - auto active_sessions = [] { - return td::td_api::make_object<td::td_api::internalLinkTypeActiveSessions>(); - }; - auto attachment_menu_bot = [](td::td_api::object_ptr<td::td_api::targetChatChosen> chat_types, + return td::td_api::make_object<td::td_api::chatAdministratorRights>( + 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); +} + +static auto target_chat_chosen(bool allow_users, bool allow_bots, bool allow_groups, bool allow_channels) { + return td::td_api::make_object<td::td_api::targetChatChosen>(allow_users, allow_bots, allow_groups, allow_channels); +} + +static auto active_sessions() { + return td::td_api::make_object<td::td_api::internalLinkTypeActiveSessions>(); +} + +static auto attachment_menu_bot(td::td_api::object_ptr<td::td_api::targetChatChosen> chat_types, td::td_api::object_ptr<td::td_api::InternalLinkType> chat_link, const td::string &bot_username, const td::string &start_parameter) { - td::td_api::object_ptr<td::td_api::TargetChat> target_chat; - if (chat_link != nullptr) { - target_chat = td::td_api::make_object<td::td_api::targetChatInternalLink>(std::move(chat_link)); - } else if (chat_types != nullptr) { - target_chat = std::move(chat_types); - } else { - target_chat = td::td_api::make_object<td::td_api::targetChatCurrent>(); - } - return td::td_api::make_object<td::td_api::internalLinkTypeAttachmentMenuBot>( - 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<td::td_api::internalLinkTypeAuthenticationCode>(code); - }; - auto background = [](const td::string &background_name) { - return td::td_api::make_object<td::td_api::internalLinkTypeBackground>(background_name); - }; - auto bot_add_to_channel = [](const td::string &bot_username, + td::td_api::object_ptr<td::td_api::TargetChat> target_chat; + if (chat_link != nullptr) { + target_chat = td::td_api::make_object<td::td_api::targetChatInternalLink>(std::move(chat_link)); + } else if (chat_types != nullptr) { + target_chat = std::move(chat_types); + } else { + target_chat = td::td_api::make_object<td::td_api::targetChatCurrent>(); + } + return td::td_api::make_object<td::td_api::internalLinkTypeAttachmentMenuBot>( + 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<td::td_api::internalLinkTypeAuthenticationCode>(code); +} + +static auto background(const td::string &background_name) { + return td::td_api::make_object<td::td_api::internalLinkTypeBackground>(background_name); +} + +static auto bot_add_to_channel(const td::string &bot_username, td::td_api::object_ptr<td::td_api::chatAdministratorRights> &&administrator_rights) { - return td::td_api::make_object<td::td_api::internalLinkTypeBotAddToChannel>(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<td::td_api::internalLinkTypeBotStart>(bot_username, start_parameter, false); - }; - auto bot_start_in_group = [](const td::string &bot_username, const td::string &start_parameter, + return td::td_api::make_object<td::td_api::internalLinkTypeBotAddToChannel>(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<td::td_api::internalLinkTypeBotStart>(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<td::td_api::chatAdministratorRights> &&administrator_rights) { - return td::td_api::make_object<td::td_api::internalLinkTypeBotStartInGroup>(bot_username, start_parameter, - std::move(administrator_rights)); - }; - auto change_phone_number = [] { - return td::td_api::make_object<td::td_api::internalLinkTypeChangePhoneNumber>(); - }; - auto chat_invite = [](const td::string &hash) { - return td::td_api::make_object<td::td_api::internalLinkTypeChatInvite>("tg:join?invite=" + hash); - }; - auto filter_settings = [] { - return td::td_api::make_object<td::td_api::internalLinkTypeFilterSettings>(); - }; - auto game = [](const td::string &bot_username, const td::string &game_short_name) { - return td::td_api::make_object<td::td_api::internalLinkTypeGame>(bot_username, game_short_name); - }; - auto instant_view = [](const td::string &url, const td::string &fallback_url) { - return td::td_api::make_object<td::td_api::internalLinkTypeInstantView>(url, fallback_url); - }; - auto invoice = [](const td::string &invoice_name) { - return td::td_api::make_object<td::td_api::internalLinkTypeInvoice>(invoice_name); - }; - auto language_pack = [](const td::string &language_pack_name) { - return td::td_api::make_object<td::td_api::internalLinkTypeLanguagePack>(language_pack_name); - }; - auto language_settings = [] { - return td::td_api::make_object<td::td_api::internalLinkTypeLanguageSettings>(); - }; - auto message = [](const td::string &url) { - return td::td_api::make_object<td::td_api::internalLinkTypeMessage>(url); - }; - auto message_draft = [](td::string text, bool contains_url) { - auto formatted_text = td::td_api::make_object<td::td_api::formattedText>(); - formatted_text->text_ = std::move(text); - return td::td_api::make_object<td::td_api::internalLinkTypeMessageDraft>(std::move(formatted_text), contains_url); - }; - auto passport_data_request = [](td::int32 bot_user_id, const td::string &scope, const td::string &public_key, + return td::td_api::make_object<td::td_api::internalLinkTypeBotStartInGroup>(bot_username, start_parameter, + std::move(administrator_rights)); +} + +static auto change_phone_number() { + return td::td_api::make_object<td::td_api::internalLinkTypeChangePhoneNumber>(); +} + +static auto chat_folder_invite(const td::string &slug) { + return td::td_api::make_object<td::td_api::internalLinkTypeChatFolderInvite>("tg:addlist?slug=" + slug); +} + +static auto chat_folder_settings() { + return td::td_api::make_object<td::td_api::internalLinkTypeChatFolderSettings>(); +} + +static auto chat_invite(const td::string &hash) { + return td::td_api::make_object<td::td_api::internalLinkTypeChatInvite>("tg:join?invite=" + hash); +} + +static auto default_message_auto_delete_timer_settings() { + return td::td_api::make_object<td::td_api::internalLinkTypeDefaultMessageAutoDeleteTimerSettings>(); +} + +static auto edit_profile_settings() { + return td::td_api::make_object<td::td_api::internalLinkTypeEditProfileSettings>(); +} + +static auto game(const td::string &bot_username, const td::string &game_short_name) { + return td::td_api::make_object<td::td_api::internalLinkTypeGame>(bot_username, game_short_name); +} + +static auto instant_view(const td::string &url, const td::string &fallback_url) { + return td::td_api::make_object<td::td_api::internalLinkTypeInstantView>(url, fallback_url); +} + +static auto invoice(const td::string &invoice_name) { + return td::td_api::make_object<td::td_api::internalLinkTypeInvoice>(invoice_name); +} + +static auto language_pack(const td::string &language_pack_name) { + return td::td_api::make_object<td::td_api::internalLinkTypeLanguagePack>(language_pack_name); +} + +static auto language_settings() { + return td::td_api::make_object<td::td_api::internalLinkTypeLanguageSettings>(); +} + +static auto message(const td::string &url) { + return td::td_api::make_object<td::td_api::internalLinkTypeMessage>(url); +} + +static auto message_draft(td::string text, bool contains_url) { + auto formatted_text = td::td_api::make_object<td::td_api::formattedText>(); + formatted_text->text_ = std::move(text); + return td::td_api::make_object<td::td_api::internalLinkTypeMessageDraft>(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<td::td_api::internalLinkTypePassportDataRequest>(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<td::td_api::internalLinkTypePhoneNumberConfirmation>(hash, phone_number); - }; - auto premium_features = [](const td::string &referrer) { - return td::td_api::make_object<td::td_api::internalLinkTypePremiumFeatures>(referrer); - }; - auto privacy_and_security_settings = [] { - return td::td_api::make_object<td::td_api::internalLinkTypePrivacyAndSecuritySettings>(); - }; - auto proxy_mtproto = [](const td::string &server, td::int32 port, const td::string &secret) { - return td::td_api::make_object<td::td_api::internalLinkTypeProxy>( - server, port, td::td_api::make_object<td::td_api::proxyTypeMtproto>(secret)); - }; - auto proxy_socks = [](const td::string &server, td::int32 port, const td::string &username, + return td::td_api::make_object<td::td_api::internalLinkTypePassportDataRequest>(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<td::td_api::internalLinkTypePhoneNumberConfirmation>(hash, phone_number); +} + +static auto premium_features(const td::string &referrer) { + return td::td_api::make_object<td::td_api::internalLinkTypePremiumFeatures>(referrer); +} + +static auto privacy_and_security_settings() { + return td::td_api::make_object<td::td_api::internalLinkTypePrivacyAndSecuritySettings>(); +} + +static auto proxy_mtproto(const td::string &server, td::int32 port, const td::string &secret) { + return td::td_api::make_object<td::td_api::internalLinkTypeProxy>( + server, port, td::td_api::make_object<td::td_api::proxyTypeMtproto>(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<td::td_api::internalLinkTypeProxy>( - server, port, td::td_api::make_object<td::td_api::proxyTypeSocks5>(username, password)); - }; - auto public_chat = [](const td::string &chat_username) { - return td::td_api::make_object<td::td_api::internalLinkTypePublicChat>(chat_username); - }; - auto qr_code_authentication = [] { - return td::td_api::make_object<td::td_api::internalLinkTypeQrCodeAuthentication>(); - }; - auto restore_purchases = [] { - return td::td_api::make_object<td::td_api::internalLinkTypeRestorePurchases>(); - }; - auto settings = [] { - return td::td_api::make_object<td::td_api::internalLinkTypeSettings>(); - }; - auto sticker_set = [](const td::string &sticker_set_name) { - return td::td_api::make_object<td::td_api::internalLinkTypeStickerSet>(sticker_set_name); - }; - auto theme = [](const td::string &theme_name) { - return td::td_api::make_object<td::td_api::internalLinkTypeTheme>(theme_name); - }; - auto theme_settings = [] { - return td::td_api::make_object<td::td_api::internalLinkTypeThemeSettings>(); - }; - auto unknown_deep_link = [](const td::string &link) { - return td::td_api::make_object<td::td_api::internalLinkTypeUnknownDeepLink>(link); - }; - auto unsupported_proxy = [] { - return td::td_api::make_object<td::td_api::internalLinkTypeUnsupportedProxy>(); - }; - auto user_phone_number = [](const td::string &phone_number) { - return td::td_api::make_object<td::td_api::internalLinkTypeUserPhoneNumber>(phone_number); - }; - auto video_chat = [](const td::string &chat_username, const td::string &invite_hash, bool is_live_stream) { - return td::td_api::make_object<td::td_api::internalLinkTypeVideoChat>(chat_username, invite_hash, is_live_stream); - }; - - 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")); - parse_internal_link("www.t.me/levlam/1", message("tg:resolve?domain=levlam&post=1")); - parse_internal_link("www%2etelegram.me/levlam/1", message("tg:resolve?domain=levlam&post=1")); - parse_internal_link("www%2Etelegram.dog/levlam/1", message("tg:resolve?domain=levlam&post=1")); + return td::td_api::make_object<td::td_api::internalLinkTypeProxy>( + server, port, td::td_api::make_object<td::td_api::proxyTypeSocks5>(username, password)); +} + +static auto public_chat(const td::string &chat_username) { + return td::td_api::make_object<td::td_api::internalLinkTypePublicChat>(chat_username); +} + +static auto qr_code_authentication() { + return td::td_api::make_object<td::td_api::internalLinkTypeQrCodeAuthentication>(); +} + +static auto restore_purchases() { + return td::td_api::make_object<td::td_api::internalLinkTypeRestorePurchases>(); +} + +static auto settings() { + return td::td_api::make_object<td::td_api::internalLinkTypeSettings>(); +} + +static auto sticker_set(const td::string &sticker_set_name, bool expect_custom_emoji) { + return td::td_api::make_object<td::td_api::internalLinkTypeStickerSet>(sticker_set_name, expect_custom_emoji); +} + +static auto theme(const td::string &theme_name) { + return td::td_api::make_object<td::td_api::internalLinkTypeTheme>(theme_name); +} + +static auto theme_settings() { + return td::td_api::make_object<td::td_api::internalLinkTypeThemeSettings>(); +} + +static auto unknown_deep_link(const td::string &link) { + return td::td_api::make_object<td::td_api::internalLinkTypeUnknownDeepLink>(link); +} + +static auto unsupported_proxy() { + return td::td_api::make_object<td::td_api::internalLinkTypeUnsupportedProxy>(); +} + +static auto user_phone_number(const td::string &phone_number) { + return td::td_api::make_object<td::td_api::internalLinkTypeUserPhoneNumber>(phone_number); +} + +static auto user_token(const td::string &token) { + return td::td_api::make_object<td::td_api::internalLinkTypeUserToken>(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<td::td_api::internalLinkTypeVideoChat>(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<td::td_api::internalLinkTypeWebApp>(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")); + parse_internal_link("www.t.me/levlam/1", message("tg://resolve?domain=levlam&post=1")); + parse_internal_link("www%2etelegram.me/levlam/1", message("tg://resolve?domain=levlam&post=1")); + parse_internal_link("www%2Etelegram.dog/levlam/1", message("tg://resolve?domain=levlam&post=1")); parse_internal_link("www%252Etelegram.dog/levlam/1", nullptr); - parse_internal_link("www.t.me/s/s/s/s/s/joinchat/1", chat_invite("1")); - parse_internal_link("www.t.me/s/%73/%73/s/%73/joinchat/1", chat_invite("1")); - parse_internal_link("http://t.me/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/joinchat/1", chat_invite("1")); - parse_internal_link("http://t.me/levlam/1", message("tg:resolve?domain=levlam&post=1")); - parse_internal_link("https://t.me/levlam/1", message("tg:resolve?domain=levlam&post=1")); - parse_internal_link("hTtp://www.t.me:443/levlam/1", message("tg:resolve?domain=levlam&post=1")); - parse_internal_link("httPs://t.me:80/levlam/1", message("tg:resolve?domain=levlam&post=1")); + parse_internal_link("www.t.me/s/s/s/s/s/joinchat/1", nullptr); + parse_internal_link("www.t.me/s/s/s/s/s/joinchat/a", chat_invite("a")); + parse_internal_link("www.t.me/s/%73/%73/s/%73/joinchat/a", chat_invite("a")); + parse_internal_link("http://t.me/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/joinchat/a", chat_invite("a")); + parse_internal_link("http://t.me/levlam/1", message("tg://resolve?domain=levlam&post=1")); + parse_internal_link("https://t.me/levlam/1", message("tg://resolve?domain=levlam&post=1")); + parse_internal_link("hTtp://www.t.me:443/levlam/1", message("tg://resolve?domain=levlam&post=1")); + parse_internal_link("httPs://t.me:80/levlam/1", message("tg://resolve?domain=levlam&post=1")); parse_internal_link("https://t.me:200/levlam/1", nullptr); parse_internal_link("http:t.me/levlam/1", nullptr); parse_internal_link("t.dog/levlam/1", nullptr); @@ -257,13 +373,13 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.men/levlam/1", nullptr); parse_internal_link("tg:resolve?domain=username&post=12345&single", - message("tg:resolve?domain=username&post=12345&single")); + message("tg://resolve?domain=username&post=12345&single")); parse_internal_link("tg:resolve?domain=username&post=12345&single&startattach=1&attach=test", - message("tg:resolve?domain=username&post=12345&single")); + message("tg://resolve?domain=username&post=12345&single")); parse_internal_link("tg:resolve?domain=user%31name&post=%312345&single&comment=456&t=789&single&thread=123%20%31", - message("tg:resolve?domain=user1name&post=12345&single&thread=123%201&comment=456&t=789")); + message("tg://resolve?domain=user1name&post=12345&single&thread=123%201&comment=456&t=789")); parse_internal_link("TG://resolve?domain=username&post=12345&single&voicechat=aasd", - message("tg:resolve?domain=username&post=12345&single")); + message("tg://resolve?domain=username&post=12345&single")); parse_internal_link("TG://test@resolve?domain=username&post=12345&single", nullptr); parse_internal_link("tg:resolve:80?domain=username&post=12345&single", nullptr); parse_internal_link("tg:http://resolve?domain=username&post=12345&single", nullptr); @@ -318,20 +434,33 @@ TEST(Link, parse_internal_link) { parse_internal_link("tg:resolve?phone=+123", unknown_deep_link("tg://resolve?phone=+123")); parse_internal_link("tg:resolve?phone=123456 ", unknown_deep_link("tg://resolve?phone=123456 ")); - parse_internal_link("t.me/username/12345?single", message("tg:resolve?domain=username&post=12345&single")); - parse_internal_link("t.me/username/12345?asdasd", message("tg:resolve?domain=username&post=12345")); - parse_internal_link("t.me/username/12345", message("tg:resolve?domain=username&post=12345")); - parse_internal_link("t.me/username/12345/", message("tg:resolve?domain=username&post=12345")); - parse_internal_link("t.me/username/12345#asdasd", message("tg:resolve?domain=username&post=12345")); + parse_internal_link("tg:contact?token=1", user_token("1")); + parse_internal_link("tg:contact?token=123456", user_token("123456")); + parse_internal_link("tg:contact?token=123456&startattach", user_token("123456")); + parse_internal_link("tg:contact?token=123456&startattach=123", user_token("123456")); + parse_internal_link("tg:contact?token=123456&attach=", user_token("123456")); + parse_internal_link("tg:contact?token=123456&attach=&startattach", user_token("123456")); + parse_internal_link("tg:contact?token=123456&attach=&startattach=123", user_token("123456")); + parse_internal_link("tg:contact?token=01234567890123456789012345678912", + user_token("01234567890123456789012345678912")); + parse_internal_link("tg:contact?token=012345678901234567890123456789123", + user_token("012345678901234567890123456789123")); + parse_internal_link("tg:contact?token=", unknown_deep_link("tg://contact?token=")); + parse_internal_link("tg:contact?token=+123", user_token(" 123")); + + parse_internal_link("t.me/username/12345?single", message("tg://resolve?domain=username&post=12345&single")); + parse_internal_link("t.me/username/12345?asdasd", message("tg://resolve?domain=username&post=12345")); + parse_internal_link("t.me/username/12345", message("tg://resolve?domain=username&post=12345")); + parse_internal_link("t.me/username/12345/", message("tg://resolve?domain=username&post=12345")); + parse_internal_link("t.me/username/12345#asdasd", message("tg://resolve?domain=username&post=12345")); parse_internal_link("t.me/username/12345//?voicechat=&single", - message("tg:resolve?domain=username&post=12345&single")); + message("tg://resolve?domain=username&post=12345&single")); parse_internal_link("t.me/username/12345/asdasd//asd/asd/asd/?single", - message("tg:resolve?domain=username&post=12345&single")); + message("tg://resolve?domain=username&post=12345&single")); parse_internal_link("t.me/username/12345/67890/asdasd//asd/asd/asd/?single", - message("tg:resolve?domain=username&post=67890&single&thread=12345")); + message("tg://resolve?domain=username&post=67890&single&thread=12345")); parse_internal_link("t.me/username/1asdasdas/asdasd//asd/asd/asd/?single", - message("tg:resolve?domain=username&post=1&single")); - parse_internal_link("t.me/username/asd", public_chat("username")); + message("tg://resolve?domain=username&post=1&single")); parse_internal_link("t.me/username/0", public_chat("username")); parse_internal_link("t.me/username/-12345", public_chat("username")); parse_internal_link("t.me//12345?single", nullptr); @@ -364,19 +493,19 @@ TEST(Link, parse_internal_link) { parse_internal_link("tg:privatepost?channel=username/12345&single", unknown_deep_link("tg://privatepost?channel=username/12345&single")); parse_internal_link("tg:privatepost?channel=username&post=12345", - message("tg:privatepost?channel=username&post=12345")); + message("tg://privatepost?channel=username&post=12345")); parse_internal_link("t.me/c/12345?single", nullptr); parse_internal_link("t.me/c/1/c?single", nullptr); parse_internal_link("t.me/c/c/1?single", nullptr); parse_internal_link("t.me/c//1?single", nullptr); - parse_internal_link("t.me/c/12345/123", message("tg:privatepost?channel=12345&post=123")); - parse_internal_link("t.me/c/12345/123?single", message("tg:privatepost?channel=12345&post=123&single")); - parse_internal_link("t.me/c/12345/123/asd/asd////?single", message("tg:privatepost?channel=12345&post=123&single")); + parse_internal_link("t.me/c/12345/123", message("tg://privatepost?channel=12345&post=123")); + parse_internal_link("t.me/c/12345/123?single", message("tg://privatepost?channel=12345&post=123&single")); + parse_internal_link("t.me/c/12345/123/asd/asd////?single", message("tg://privatepost?channel=12345&post=123&single")); parse_internal_link("t.me/c/12345/123/456/asd/asd////?single", - message("tg:privatepost?channel=12345&post=456&single&thread=123")); + message("tg://privatepost?channel=12345&post=456&single&thread=123")); parse_internal_link("t.me/c/%312345/%3123?comment=456&t=789&single&thread=123%20%31", - message("tg:privatepost?channel=12345&post=123&single&thread=123%201&comment=456&t=789")); + message("tg://privatepost?channel=12345&post=123&single&thread=123%201&comment=456&t=789")); parse_internal_link("tg:bg?color=111111#asdasd", background("111111")); parse_internal_link("tg:bg?color=11111%31", background("111111")); @@ -386,16 +515,16 @@ TEST(Link, parse_internal_link) { background("111111-222222%20?rotation=180%20")); parse_internal_link("tg:bg?gradient=111111~222222", background("111111~222222")); parse_internal_link("tg:bg?gradient=abacaba", background("abacaba")); - parse_internal_link("tg:bg?slug=111111~222222#asdasd", background("111111~222222")); - parse_internal_link("tg:bg?slug=111111~222222&mode=12", background("111111~222222?mode=12")); - parse_internal_link("tg:bg?slug=111111~222222&mode=12&text=1", background("111111~222222?mode=12")); - parse_internal_link("tg:bg?slug=111111~222222&mode=12&mode=1", background("111111~222222?mode=12")); - parse_internal_link("tg:bg?slug=test&mode=12&rotation=4&intensity=2&bg_color=3", - background("test?mode=12&intensity=2&bg_color=3&rotation=4")); - parse_internal_link("tg:bg?mode=12&&slug=test&intensity=2&bg_color=3", - background("test?mode=12&intensity=2&bg_color=3")); - parse_internal_link("tg:bg?mode=12&intensity=2&bg_color=3", - unknown_deep_link("tg://bg?mode=12&intensity=2&bg_color=3")); + parse_internal_link("tg:bg?slug=test#asdasd", background("test")); + parse_internal_link("tg:bg?slug=test&mode=blur", background("test?mode=blur")); + parse_internal_link("tg:bg?slug=test&mode=blur&text=1", background("test?mode=blur")); + parse_internal_link("tg:bg?slug=test&mode=blur&mode=1", background("test?mode=blur")); + parse_internal_link("tg:bg?slug=test&mode=blur&rotation=4&intensity=2&bg_color=3", + background("test?mode=blur&intensity=2&bg_color=3&rotation=4")); + parse_internal_link("tg:bg?mode=blur&&slug=test&intensity=2&bg_color=3", + background("test?mode=blur&intensity=2&bg_color=3")); + parse_internal_link("tg:bg?mode=blur&intensity=2&bg_color=3", + unknown_deep_link("tg://bg?mode=blur&intensity=2&bg_color=3")); parse_internal_link("tg:bg?color=111111#asdasd", background("111111")); parse_internal_link("tg:bg?color=11111%31", background("111111")); @@ -403,18 +532,18 @@ TEST(Link, parse_internal_link) { parse_internal_link("tg:bg?gradient=111111-222222", background("111111-222222")); parse_internal_link("tg:bg?rotation=180%20&gradient=111111-222222%20", background("111111-222222%20?rotation=180%20")); - parse_internal_link("tg:bg?gradient=111111~222222", background("111111~222222")); + parse_internal_link("tg:bg?gradient=111111~222222&mode=blur", background("111111~222222")); parse_internal_link("tg:bg?gradient=abacaba", background("abacaba")); - parse_internal_link("tg:bg?slug=111111~222222#asdasd", background("111111~222222")); - parse_internal_link("tg:bg?slug=111111~222222&mode=12", background("111111~222222?mode=12")); - parse_internal_link("tg:bg?slug=111111~222222&mode=12&text=1", background("111111~222222?mode=12")); - parse_internal_link("tg:bg?slug=111111~222222&mode=12&mode=1", background("111111~222222?mode=12")); - parse_internal_link("tg:bg?slug=test&mode=12&rotation=4&intensity=2&bg_color=3", - background("test?mode=12&intensity=2&bg_color=3&rotation=4")); - parse_internal_link("tg:bg?mode=12&&slug=test&intensity=2&bg_color=3", - background("test?mode=12&intensity=2&bg_color=3")); - parse_internal_link("tg:bg?mode=12&intensity=2&bg_color=3", - unknown_deep_link("tg://bg?mode=12&intensity=2&bg_color=3")); + parse_internal_link("tg:bg?slug=test#asdasd", background("test")); + parse_internal_link("tg:bg?slug=test&mode=blur", background("test?mode=blur")); + parse_internal_link("tg:bg?slug=test&mode=blur&text=1", background("test?mode=blur")); + parse_internal_link("tg:bg?slug=test&mode=blur&mode=1", background("test?mode=blur")); + parse_internal_link("tg:bg?slug=test&mode=blur&rotation=4&intensity=2&bg_color=3", + background("test?mode=blur&intensity=2&bg_color=3&rotation=4")); + parse_internal_link("tg:bg?mode=blur&&slug=test&intensity=2&bg_color=3", + background("test?mode=blur&intensity=2&bg_color=3")); + parse_internal_link("tg:bg?mode=blur&intensity=2&bg_color=3", + unknown_deep_link("tg://bg?mode=blur&intensity=2&bg_color=3")); parse_internal_link("%54.me/bg/111111#asdasd", background("111111")); parse_internal_link("t.me/bg/11111%31", background("111111")); @@ -423,19 +552,21 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.me/bg/111111-222222%20?rotation=180%20", background("111111-222222%20?rotation=180%20")); parse_internal_link("t.me/bg/111111~222222", background("111111~222222")); parse_internal_link("t.me/bg/abacaba", background("abacaba")); - parse_internal_link("t.me/Bg/abacaba", public_chat("Bg")); + parse_internal_link("t.me/Bg/abacaba", web_app("Bg", "abacaba", "")); parse_internal_link("t.me/bg/111111~222222#asdasd", background("111111~222222")); - parse_internal_link("t.me/bg/111111~222222?mode=12", background("111111~222222?mode=12")); - parse_internal_link("t.me/bg/111111~222222?mode=12&text=1", background("111111~222222?mode=12")); - parse_internal_link("t.me/bg/111111~222222?mode=12&mode=1", background("111111~222222?mode=12")); - parse_internal_link("t.me/bg/test?mode=12&rotation=4&intensity=2&bg_color=3", - background("test?mode=12&intensity=2&bg_color=3&rotation=4")); - parse_internal_link("t.me/%62g/test/?mode=12&&&intensity=2&bg_color=3", - background("test?mode=12&intensity=2&bg_color=3")); + parse_internal_link("t.me/bg/111111~222222?mode=blur", background("111111~222222")); + parse_internal_link("t.me/bg/111111~222222?mode=blur&text=1", background("111111~222222")); + parse_internal_link("t.me/bg/111111~222222?mode=blur&mode=1", background("111111~222222")); + parse_internal_link("t.me/bg/testteststststststststststststs?mode=blur&rotation=4&intensity=2&bg_color=3&mode=1", + background("testteststststststststststststs?mode=blur&intensity=2&bg_color=3&rotation=4")); + parse_internal_link("t.me/%62g/testteststststststststststststs/?mode=blur+motion&&&intensity=2&bg_color=3", + background("testteststststststststststststs?mode=blur%20motion&intensity=2&bg_color=3")); 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); @@ -540,12 +671,15 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.me/joinchat/?abcdef", nullptr); parse_internal_link("t.me/joinchat/#abcdef", nullptr); parse_internal_link("t.me/joinchat/abacaba", chat_invite("abacaba")); - parse_internal_link("t.me/joinchat/aba%20aba", chat_invite("aba%20aba")); + parse_internal_link("t.me/joinchat/aba%20aba", nullptr); parse_internal_link("t.me/joinchat/aba%30aba", chat_invite("aba0aba")); parse_internal_link("t.me/joinchat/123456a", chat_invite("123456a")); - parse_internal_link("t.me/joinchat/12345678901", chat_invite("12345678901")); - parse_internal_link("t.me/joinchat/123456", chat_invite("123456")); - parse_internal_link("t.me/joinchat/123456/123123/12/31/a/s//21w/?asdas#test", chat_invite("123456")); + parse_internal_link("t.me/joinchat/12345678901", nullptr); + parse_internal_link("t.me/joinchat/123456", nullptr); + parse_internal_link("t.me/joinchat/123456/123123/12/31/a/s//21w/?asdas#test", nullptr); + parse_internal_link("t.me/joinchat/12345678901a", chat_invite("12345678901a")); + parse_internal_link("t.me/joinchat/123456a", chat_invite("123456a")); + parse_internal_link("t.me/joinchat/123456a/123123/12/31/a/s//21w/?asdas#test", chat_invite("123456a")); parse_internal_link("t.me/+?invite=abcdef", nullptr); parse_internal_link("t.me/+a", chat_invite("a")); @@ -555,7 +689,7 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.me/+?abcdef", nullptr); parse_internal_link("t.me/+#abcdef", nullptr); parse_internal_link("t.me/ abacaba", chat_invite("abacaba")); - parse_internal_link("t.me/+aba%20aba", chat_invite("aba%20aba")); + parse_internal_link("t.me/+aba%20aba", nullptr); parse_internal_link("t.me/+aba%30aba", chat_invite("aba0aba")); parse_internal_link("t.me/+123456a", chat_invite("123456a")); parse_internal_link("t.me/%2012345678901", user_phone_number("12345678901")); @@ -573,11 +707,40 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.me/+123456?attach=bot&startattach=1", attachment_menu_bot(nullptr, user_phone_number("123456"), "bot", "1")); + parse_internal_link("t.me/addlist?invite=abcdef", nullptr); + parse_internal_link("t.me/addlist", nullptr); + parse_internal_link("t.me/addlist/", nullptr); + parse_internal_link("t.me/addlist//abcdef", nullptr); + parse_internal_link("t.me/addlist?/abcdef", nullptr); + parse_internal_link("t.me/addlist/?abcdef", nullptr); + parse_internal_link("t.me/addlist/#abcdef", nullptr); + parse_internal_link("t.me/addlist/abacaba", chat_folder_invite("abacaba")); + parse_internal_link("t.me/addlist/aba%20aba", nullptr); + parse_internal_link("t.me/addlist/aba%30aba", chat_folder_invite("aba0aba")); + parse_internal_link("t.me/addlist/123456a", chat_folder_invite("123456a")); + parse_internal_link("t.me/addlist/12345678901", chat_folder_invite("12345678901")); + parse_internal_link("t.me/addlist/123456", chat_folder_invite("123456")); + parse_internal_link("t.me/addlist/123456/123123/12/31/a/s//21w/?asdas#test", chat_folder_invite("123456")); + parse_internal_link("t.me/addlist/12345678901a", chat_folder_invite("12345678901a")); + parse_internal_link("t.me/addlist/123456a", chat_folder_invite("123456a")); + parse_internal_link("t.me/addlist/123456a/123123/12/31/a/s//21w/?asdas#test", chat_folder_invite("123456a")); + + parse_internal_link("t.me/contact/startattach/adasd", user_token("startattach")); + parse_internal_link("t.me/contact/startattach", user_token("startattach")); + parse_internal_link("t.me/contact/startattach=1", user_token("startattach=1")); + parse_internal_link("t.me/contact/", nullptr); + parse_internal_link("t.me/contact/?attach=&startattach", nullptr); + parse_internal_link("tg:join?invite=abcdef", chat_invite("abcdef")); - parse_internal_link("tg:join?invite=abc%20def", chat_invite("abc%20def")); + parse_internal_link("tg:join?invite=abc%20def", unknown_deep_link("tg://join?invite=abc%20def")); parse_internal_link("tg://join?invite=abc%30def", chat_invite("abc0def")); parse_internal_link("tg:join?invite=", unknown_deep_link("tg://join?invite=")); + parse_internal_link("tg:addlist?slug=abcdef", chat_folder_invite("abcdef")); + parse_internal_link("tg:addlist?slug=abc%20def", unknown_deep_link("tg://addlist?slug=abc%20def")); + parse_internal_link("tg://addlist?slug=abc%30def", chat_folder_invite("abc0def")); + parse_internal_link("tg:addlist?slug=", unknown_deep_link("tg://addlist?slug=")); + parse_internal_link("t.me/addstickers?set=abcdef", nullptr); parse_internal_link("t.me/addstickers", nullptr); parse_internal_link("t.me/addstickers/", nullptr); @@ -585,15 +748,15 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.me/addstickers?/abcdef", nullptr); parse_internal_link("t.me/addstickers/?abcdef", nullptr); parse_internal_link("t.me/addstickers/#abcdef", nullptr); - parse_internal_link("t.me/addstickers/abacaba", sticker_set("abacaba")); - parse_internal_link("t.me/addstickers/aba%20aba", sticker_set("aba aba")); - parse_internal_link("t.me/addstickers/123456a", sticker_set("123456a")); - parse_internal_link("t.me/addstickers/12345678901", sticker_set("12345678901")); - parse_internal_link("t.me/addstickers/123456", sticker_set("123456")); - parse_internal_link("t.me/addstickers/123456/123123/12/31/a/s//21w/?asdas#test", sticker_set("123456")); - - parse_internal_link("tg:addstickers?set=abcdef", sticker_set("abcdef")); - parse_internal_link("tg:addstickers?set=abc%30ef", sticker_set("abc0ef")); + parse_internal_link("t.me/addstickers/abacaba", sticker_set("abacaba", false)); + parse_internal_link("t.me/addstickers/aba%20aba", sticker_set("aba aba", false)); + parse_internal_link("t.me/addstickers/123456a", sticker_set("123456a", false)); + parse_internal_link("t.me/addstickers/12345678901", sticker_set("12345678901", false)); + parse_internal_link("t.me/addstickers/123456", sticker_set("123456", false)); + parse_internal_link("t.me/addstickers/123456/123123/12/31/a/s//21w/?asdas#test", sticker_set("123456", false)); + + parse_internal_link("tg:addstickers?set=abcdef", sticker_set("abcdef", false)); + parse_internal_link("tg:addstickers?set=abc%30ef", sticker_set("abc0ef", false)); parse_internal_link("tg://addstickers?set=", unknown_deep_link("tg://addstickers?set=")); parse_internal_link("t.me/addemoji?set=abcdef", nullptr); @@ -603,17 +766,19 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.me/addemoji?/abcdef", nullptr); parse_internal_link("t.me/addemoji/?abcdef", nullptr); parse_internal_link("t.me/addemoji/#abcdef", nullptr); - parse_internal_link("t.me/addemoji/abacaba", sticker_set("abacaba")); - parse_internal_link("t.me/addemoji/aba%20aba", sticker_set("aba aba")); - parse_internal_link("t.me/addemoji/123456a", sticker_set("123456a")); - parse_internal_link("t.me/addemoji/12345678901", sticker_set("12345678901")); - parse_internal_link("t.me/addemoji/123456", sticker_set("123456")); - parse_internal_link("t.me/addemoji/123456/123123/12/31/a/s//21w/?asdas#test", sticker_set("123456")); - - parse_internal_link("tg:addemoji?set=abcdef", sticker_set("abcdef")); - parse_internal_link("tg:addemoji?set=abc%30ef", sticker_set("abc0ef")); + parse_internal_link("t.me/addemoji/abacaba", sticker_set("abacaba", true)); + parse_internal_link("t.me/addemoji/aba%20aba", sticker_set("aba aba", true)); + parse_internal_link("t.me/addemoji/123456a", sticker_set("123456a", true)); + parse_internal_link("t.me/addemoji/12345678901", sticker_set("12345678901", true)); + parse_internal_link("t.me/addemoji/123456", sticker_set("123456", true)); + parse_internal_link("t.me/addemoji/123456/123123/12/31/a/s//21w/?asdas#test", sticker_set("123456", true)); + + 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")); @@ -683,9 +848,9 @@ TEST(Link, parse_internal_link) { parse_internal_link("tg://addtheme?slug=", unknown_deep_link("tg://addtheme?slug=")); parse_internal_link("t.me/proxy?server=1.2.3.4&port=80&secret=1234567890abcdef1234567890ABCDEF", - proxy_mtproto("1.2.3.4", 80, "1234567890abcdef1234567890ABCDEF")); + proxy_mtproto("1.2.3.4", 80, "1234567890abcdef1234567890abcdef")); parse_internal_link("t.me/proxy?server=1.2.3.4&port=80adasdas&secret=1234567890abcdef1234567890ABCDEF", - proxy_mtproto("1.2.3.4", 80, "1234567890abcdef1234567890ABCDEF")); + proxy_mtproto("1.2.3.4", 80, "1234567890abcdef1234567890abcdef")); parse_internal_link("t.me/proxy?server=1.2.3.4&port=adasdas&secret=1234567890abcdef1234567890ABCDEF", unsupported_proxy()); parse_internal_link("t.me/proxy?server=1.2.3.4&port=65536&secret=1234567890abcdef1234567890ABCDEF", @@ -693,9 +858,9 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.me/proxy?server=google.com&port=8%30&secret=", unsupported_proxy()); parse_internal_link("t.me/proxy?server=google.com&port=8%30&secret=12", unsupported_proxy()); parse_internal_link("t.me/proxy?server=google.com&port=8%30&secret=1234567890abcdef1234567890ABCDEF", - proxy_mtproto("google.com", 80, "1234567890abcdef1234567890ABCDEF")); + proxy_mtproto("google.com", 80, "1234567890abcdef1234567890abcdef")); parse_internal_link("t.me/proxy?server=google.com&port=8%30&secret=dd1234567890abcdef1234567890ABCDEF", - proxy_mtproto("google.com", 80, "dd1234567890abcdef1234567890ABCDEF")); + proxy_mtproto("google.com", 80, "dd1234567890abcdef1234567890abcdef")); parse_internal_link("t.me/proxy?server=google.com&port=8%30&secret=de1234567890abcdef1234567890ABCDEF", unsupported_proxy()); parse_internal_link("t.me/proxy?server=google.com&port=8%30&secret=ee1234567890abcdef1234567890ABCDEF", @@ -703,25 +868,25 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.me/proxy?server=google.com&port=8%30&secret=ee1234567890abcdef1234567890ABCDEF0", unsupported_proxy()); parse_internal_link("t.me/proxy?server=google.com&port=8%30&secret=ee1234567890abcdef1234567890ABCDEF%30%30", - proxy_mtproto("google.com", 80, "ee1234567890abcdef1234567890ABCDEF00")); + proxy_mtproto("google.com", 80, "7hI0VniQq83vEjRWeJCrze8A")); parse_internal_link( "t.me/proxy?server=google.com&port=8%30&secret=ee1234567890abcdef1234567890ABCDEF010101010101010101", - proxy_mtproto("google.com", 80, "ee1234567890abcdef1234567890ABCDEF010101010101010101")); + proxy_mtproto("google.com", 80, "7hI0VniQq83vEjRWeJCrze8BAQEBAQEBAQE")); parse_internal_link("t.me/proxy?server=google.com&port=8%30&secret=7tAAAAAAAAAAAAAAAAAAAAAAAAcuZ29vZ2xlLmNvbQ", proxy_mtproto("google.com", 80, "7tAAAAAAAAAAAAAAAAAAAAAAAAcuZ29vZ2xlLmNvbQ")); parse_internal_link("tg:proxy?server=1.2.3.4&port=80&secret=1234567890abcdef1234567890ABCDEF", - proxy_mtproto("1.2.3.4", 80, "1234567890abcdef1234567890ABCDEF")); + proxy_mtproto("1.2.3.4", 80, "1234567890abcdef1234567890abcdef")); parse_internal_link("tg:proxy?server=1.2.3.4&port=80adasdas&secret=1234567890abcdef1234567890ABCDEF", - proxy_mtproto("1.2.3.4", 80, "1234567890abcdef1234567890ABCDEF")); + proxy_mtproto("1.2.3.4", 80, "1234567890abcdef1234567890abcdef")); parse_internal_link("tg:proxy?server=1.2.3.4&port=adasdas&secret=1234567890abcdef1234567890ABCDEF", unsupported_proxy()); parse_internal_link("tg:proxy?server=1.2.3.4&port=65536&secret=1234567890abcdef1234567890ABCDEF", unsupported_proxy()); parse_internal_link("tg:proxy?server=google.com&port=8%30&secret=1234567890abcdef1234567890ABCDEF", - proxy_mtproto("google.com", 80, "1234567890abcdef1234567890ABCDEF")); + proxy_mtproto("google.com", 80, "1234567890abcdef1234567890abcdef")); parse_internal_link("tg:proxy?server=google.com&port=8%30&secret=dd1234567890abcdef1234567890ABCDEF", - proxy_mtproto("google.com", 80, "dd1234567890abcdef1234567890ABCDEF")); + proxy_mtproto("google.com", 80, "dd1234567890abcdef1234567890abcdef")); parse_internal_link("tg:proxy?server=google.com&port=8%30&secret=de1234567890abcdef1234567890ABCDEF", unsupported_proxy()); @@ -757,7 +922,7 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.me/username/0/a//s/as?voicechat=", video_chat("username", "", false)); parse_internal_link("t.me/username/0/a//s/as?videochat=2", video_chat("username", "2", false)); parse_internal_link("t.me/username/0/a//s/as?livestream=3", video_chat("username", "3", true)); - parse_internal_link("t.me/username/aasdas?test=1&voicechat=#12312", video_chat("username", "", false)); + parse_internal_link("t.me/username/aasdas/2?test=1&voicechat=#12312", video_chat("username", "", false)); parse_internal_link("t.me/username/0?voicechat=", video_chat("username", "", false)); parse_internal_link("t.me/username/-1?voicechat=asdasd", video_chat("username", "asdasd", false)); parse_internal_link("t.me/username?voicechat=", video_chat("username", "", false)); @@ -775,7 +940,7 @@ TEST(Link, parse_internal_link) { parse_internal_link("tg:resolve?domain=telegram&&&&&&&start=%30", bot_start("telegram", "0")); parse_internal_link("t.me/username/0/a//s/as?start=", bot_start("username", "")); - parse_internal_link("t.me/username/aasdas?test=1&start=#12312", bot_start("username", "")); + parse_internal_link("t.me/username/aasdas/2?test=1&start=#12312", bot_start("username", "")); parse_internal_link("t.me/username/0?start=", bot_start("username", "")); parse_internal_link("t.me/username/-1?start=asdasd", bot_start("username", "asdasd")); parse_internal_link("t.me/username?start=", bot_start("username", "")); @@ -821,7 +986,7 @@ TEST(Link, parse_internal_link) { true, true, false))); parse_internal_link("t.me/username/0/a//s/as?startgroup=", bot_start_in_group("username", "", nullptr)); - parse_internal_link("t.me/username/aasdas?test=1&startgroup=#12312", bot_start_in_group("username", "", nullptr)); + parse_internal_link("t.me/username/aasdas/2?test=1&startgroup=#12312", bot_start_in_group("username", "", nullptr)); parse_internal_link("t.me/username/0?startgroup=", bot_start_in_group("username", "", nullptr)); parse_internal_link("t.me/username/-1?startgroup=asdasd", bot_start_in_group("username", "asdasd", nullptr)); parse_internal_link("t.me/username?startgroup=", bot_start_in_group("username", "", nullptr)); @@ -857,7 +1022,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); @@ -865,10 +1032,12 @@ TEST(Link, parse_internal_link) { parse_internal_link("tg:http://resolve?domain=username&game=asd", nullptr); parse_internal_link("tg:https://resolve?domain=username&game=asd", nullptr); parse_internal_link("tg:resolve?domain=&game=asd", unknown_deep_link("tg://resolve?domain=&game=asd")); - parse_internal_link("tg:resolve?domain=telegram&&&&&&&game=%30", game("telegram", "0")); + parse_internal_link("tg:resolve?domain=telegram&&&&&&&game=%30", public_chat("telegram")); + parse_internal_link("tg:resolve?domain=telegram&&&&&&&game=%30ab", public_chat("telegram")); + parse_internal_link("tg:resolve?domain=telegram&&&&&&&game=ab%30", game("telegram", "ab0")); parse_internal_link("t.me/username/0/a//s/as?game=asd", game("username", "asd")); - parse_internal_link("t.me/username/aasdas?test=1&game=asd#12312", game("username", "asd")); + parse_internal_link("t.me/username/aasdas/2?test=1&game=asd#12312", game("username", "asd")); parse_internal_link("t.me/username/0?game=asd", game("username", "asd")); parse_internal_link("t.me/username/-1?game=asdasd", game("username", "asdasd")); parse_internal_link("t.me/username?game=asd", game("username", "asd")); @@ -877,6 +1046,35 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.me//username?game=asd", nullptr); parse_internal_link("https://telegram.dog/tele%63ram?game=t%63st", game("telecram", "tcst")); + parse_internal_link("tg:resolve?domain=username&appname=aasdasd&startapp=123asd", + web_app("username", "aasdasd", "123asd")); + parse_internal_link("TG://resolve?domain=username&appname=&startapp=123asd", public_chat("username")); + parse_internal_link("TG://test@resolve?domain=username&appname=asd", nullptr); + parse_internal_link("tg:resolve:80?domain=username&appname=asd", nullptr); + parse_internal_link("tg:http://resolve?domain=username&appname=asd", nullptr); + parse_internal_link("tg:https://resolve?domain=username&appname=asd", nullptr); + parse_internal_link("tg:resolve?domain=&appname=asd", unknown_deep_link("tg://resolve?domain=&appname=asd")); + parse_internal_link("tg:resolve?domain=telegram&&&&&&&appname=%41&startapp=", public_chat("telegram")); + parse_internal_link("tg:resolve?domain=telegram&&&&&&&appname=%41b&startapp=", public_chat("telegram")); + parse_internal_link("tg:resolve?domain=telegram&&&&&&&appname=%41bc&startapp=", web_app("telegram", "Abc", "")); + + parse_internal_link("t.me/username/0/a//s/as?appname=asd", public_chat("username")); + parse_internal_link("t.me/username/aasdas/2?test=1&appname=asd#12312", public_chat("username")); + parse_internal_link("t.me/username/0?appname=asd", public_chat("username")); + parse_internal_link("t.me/username/-1?appname=asdasd", public_chat("username")); + parse_internal_link("t.me/username?appname=asd", public_chat("username")); + parse_internal_link("t.me/username?appname=", public_chat("username")); + parse_internal_link("t.me/username#appname=asdas", public_chat("username")); + parse_internal_link("t.me//username?appname=asd", nullptr); + parse_internal_link("https://telegram.dog/tele%63ram?appname=t%63st", public_chat("telecram")); + parse_internal_link("t.me/username/def/asd", public_chat("username")); + parse_internal_link("t.me/username/asd#12312&startapp=qwe", web_app("username", "asd", "")); + parse_internal_link("t.me/username/asd?12312&startapp=qwe", web_app("username", "asd", "qwe")); + parse_internal_link("t.me/username/asdasd?startapp=0", web_app("username", "asdasd", "0")); + parse_internal_link("t.me/username/asd", web_app("username", "asd", "")); + parse_internal_link("t.me/username/", public_chat("username")); + parse_internal_link("https://telegram.dog/tele%63ram/t%63st", web_app("telecram", "tcst", "")); + parse_internal_link("tg:resolve?domain=username&Game=asd", public_chat("username")); parse_internal_link("TG://test@resolve?domain=username", nullptr); parse_internal_link("tg:resolve:80?domain=username", nullptr); @@ -898,7 +1096,7 @@ TEST(Link, parse_internal_link) { parse_internal_link("t.me/asdf0", public_chat("asdf0")); parse_internal_link("t.me/asd__fg", nullptr); parse_internal_link("t.me/username/0/a//s/as?gam=asd", public_chat("username")); - parse_internal_link("t.me/username/aasdas?test=1", public_chat("username")); + parse_internal_link("t.me/username/aasdas/2?test=1", public_chat("username")); parse_internal_link("t.me/username/0", public_chat("username")); parse_internal_link("t.me//username", nullptr); parse_internal_link("https://telegram.dog/tele%63ram", public_chat("telecram")); @@ -943,9 +1141,11 @@ TEST(Link, parse_internal_link) { parse_internal_link("tg://settings/themes/?as#rad", theme_settings()); parse_internal_link("tg://settings/themes/a", settings()); parse_internal_link("tg://settings/asdsathemesasdas/devices", settings()); + parse_internal_link("tg://settings/auto_delete", default_message_auto_delete_timer_settings()); parse_internal_link("tg://settings/devices", active_sessions()); parse_internal_link("tg://settings/change_number", change_phone_number()); - parse_internal_link("tg://settings/folders", filter_settings()); + parse_internal_link("tg://settings/edit_profile", edit_profile_settings()); + parse_internal_link("tg://settings/folders", chat_folder_settings()); parse_internal_link("tg://settings/filters", settings()); parse_internal_link("tg://settings/language", language_settings()); parse_internal_link("tg://settings/privacy", privacy_and_security_settings()); @@ -953,8 +1153,8 @@ TEST(Link, parse_internal_link) { parse_internal_link("username.t.me////0/a//s/as?start=", bot_start("username", "")); parse_internal_link("username.t.me?start=as", bot_start("username", "as")); parse_internal_link("username.t.me", public_chat("username")); - parse_internal_link("aAAb.t.me/12345?single", message("tg:resolve?domain=aaab&post=12345&single")); - parse_internal_link("telegram.t.me/195", message("tg:resolve?domain=telegram&post=195")); + parse_internal_link("aAAb.t.me/12345?single", message("tg://resolve?domain=aaab&post=12345&single")); + parse_internal_link("telegram.t.me/195", message("tg://resolve?domain=telegram&post=195")); parse_internal_link("shares.t.me", public_chat("shares")); parse_internal_link("c.t.me/12345?single", nullptr); @@ -963,6 +1163,7 @@ TEST(Link, parse_internal_link) { parse_internal_link("0aaa.t.me/12345?single", nullptr); parse_internal_link("_aaa.t.me/12345?single", nullptr); parse_internal_link("addemoji.t.me", nullptr); + parse_internal_link("addlist.t.me", nullptr); parse_internal_link("addstickers.t.me", nullptr); parse_internal_link("addtheme.t.me", nullptr); parse_internal_link("auth.t.me", nullptr); |