OLD | NEW |
1 /* | 1 /* |
2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
3 * Copyright (C) 2006-2017 eyeo GmbH | 3 * Copyright (C) 2006-2017 eyeo GmbH |
4 * | 4 * |
5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
8 * | 8 * |
9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
721 | 721 |
722 TEST_F(FilterEngineWithFreshFolder, LangAndAASubscriptionsAreChosenOnFirstRun) | 722 TEST_F(FilterEngineWithFreshFolder, LangAndAASubscriptionsAreChosenOnFirstRun) |
723 { | 723 { |
724 AppInfo appInfo; | 724 AppInfo appInfo; |
725 appInfo.locale = "zh"; | 725 appInfo.locale = "zh"; |
726 const std::string langSubscriptionUrl = "https://easylist-downloads.adblockplu
s.org/easylistchina+easylist.txt"; | 726 const std::string langSubscriptionUrl = "https://easylist-downloads.adblockplu
s.org/easylistchina+easylist.txt"; |
727 auto jsEngine = createJsEngine(appInfo); | 727 auto jsEngine = createJsEngine(appInfo); |
728 auto filterEngine = AdblockPlus::FilterEngine::Create(jsEngine); | 728 auto filterEngine = AdblockPlus::FilterEngine::Create(jsEngine); |
729 const auto subscriptions = filterEngine->GetListedSubscriptions(); | 729 const auto subscriptions = filterEngine->GetListedSubscriptions(); |
730 ASSERT_EQ(2u, subscriptions.size()); | 730 ASSERT_EQ(2u, subscriptions.size()); |
731 const auto aaUrl = filterEngine->GetPref("subscriptions_exceptionsurl")->AsStr
ing(); | |
732 SubscriptionPtr aaSubscription; | 731 SubscriptionPtr aaSubscription; |
733 SubscriptionPtr langSubscription; | 732 SubscriptionPtr langSubscription; |
734 if (subscriptions[0]->GetProperty("url")->AsString() == aaUrl) | 733 if (subscriptions[0]->IsAA()) |
735 { | 734 { |
736 aaSubscription = subscriptions[0]; | 735 aaSubscription = subscriptions[0]; |
737 langSubscription = subscriptions[1]; | 736 langSubscription = subscriptions[1]; |
738 } | 737 } |
739 else if (subscriptions[1]->GetProperty("url")->AsString() == aaUrl) | 738 else if (subscriptions[1]->IsAA()) |
740 { | 739 { |
741 aaSubscription = subscriptions[1]; | 740 aaSubscription = subscriptions[1]; |
742 langSubscription = subscriptions[0]; | 741 langSubscription = subscriptions[0]; |
743 } | 742 } |
744 ASSERT_NE(nullptr, aaSubscription); | 743 ASSERT_NE(nullptr, aaSubscription); |
745 ASSERT_NE(nullptr, langSubscription); | 744 ASSERT_NE(nullptr, langSubscription); |
746 EXPECT_EQ(aaUrl, aaSubscription->GetProperty("url")->AsString()); | |
747 EXPECT_EQ(langSubscriptionUrl, langSubscription->GetProperty("url")->AsString(
)); | 745 EXPECT_EQ(langSubscriptionUrl, langSubscription->GetProperty("url")->AsString(
)); |
| 746 EXPECT_TRUE(filterEngine->IsAAEnabled()); |
748 } | 747 } |
749 | 748 |
750 TEST_F(FilterEngineWithFreshFolder, DisableSubscriptionsAutoSelectOnFirstRun) | 749 TEST_F(FilterEngineWithFreshFolder, DisableSubscriptionsAutoSelectOnFirstRun) |
751 { | 750 { |
752 auto jsEngine = createJsEngine(); | 751 auto jsEngine = createJsEngine(); |
753 FilterEngine::CreationParameters createParams; | 752 FilterEngine::CreationParameters createParams; |
754 createParams.preconfiguredPrefs["first_run_subscription_auto_select"] = jsEngi
ne->NewValue(false); | 753 createParams.preconfiguredPrefs["first_run_subscription_auto_select"] = jsEngi
ne->NewValue(false); |
755 auto filterEngine = AdblockPlus::FilterEngine::Create(jsEngine, createParams); | 754 auto filterEngine = AdblockPlus::FilterEngine::Create(jsEngine, createParams); |
756 const auto subscriptions = filterEngine->GetListedSubscriptions(); | 755 const auto subscriptions = filterEngine->GetListedSubscriptions(); |
757 EXPECT_EQ(0u, subscriptions.size()); | 756 EXPECT_EQ(0u, subscriptions.size()); |
| 757 EXPECT_FALSE(filterEngine->IsAAEnabled()); |
758 } | 758 } |
759 | 759 |
| 760 namespace AA_ApiTest |
| 761 { |
| 762 const std::string kOtherSubscriptionUrl = "https://non-existing-subscription.t
xt"; |
| 763 enum class AAStatus |
| 764 { |
| 765 absent, |
| 766 enabled, |
| 767 disabled_present |
| 768 }; |
| 769 |
| 770 ::std::ostream& operator<<(std::ostream& os, AAStatus aaStatus) |
| 771 { |
| 772 switch (aaStatus) |
| 773 { |
| 774 case AAStatus::absent: |
| 775 os << "absent"; |
| 776 break; |
| 777 case AAStatus::enabled: |
| 778 os << "enabled"; |
| 779 break; |
| 780 case AAStatus::disabled_present: |
| 781 os << "disabled_present"; |
| 782 break; |
| 783 default: |
| 784 ; |
| 785 } |
| 786 return os; |
| 787 } |
| 788 |
| 789 enum class Action |
| 790 { |
| 791 disable, enable, remove |
| 792 }; |
| 793 |
| 794 ::std::ostream& operator<<(std::ostream& os, Action action) |
| 795 { |
| 796 switch (action) |
| 797 { |
| 798 case Action::disable: |
| 799 os << "disable"; |
| 800 break; |
| 801 case Action::enable: |
| 802 os << "enable"; |
| 803 break; |
| 804 case Action::remove: |
| 805 os << "remove"; |
| 806 break; |
| 807 default: |
| 808 ; |
| 809 } |
| 810 return os; |
| 811 } |
| 812 |
| 813 struct Parameters |
| 814 { |
| 815 AAStatus initialAAStatus; |
| 816 Action action; |
| 817 AAStatus expectedAAStatus; |
| 818 Parameters(AAStatus aaStatus, Action action) |
| 819 { |
| 820 // if `expect` is not called then no effect is expected, initialize it now |
| 821 initialAAStatus = expectedAAStatus = aaStatus; |
| 822 this->action = action; |
| 823 } |
| 824 Parameters& expect(AAStatus aaStatus) |
| 825 { |
| 826 expectedAAStatus = aaStatus; |
| 827 return *this; |
| 828 } |
| 829 // it's merely to satisfy compiler (std::tuple requires default ctr) and |
| 830 // testing internals even calls it. |
| 831 Parameters() |
| 832 { |
| 833 } |
| 834 }; |
| 835 |
| 836 // human readable printing for failed tests |
| 837 ::std::ostream& operator<<(::std::ostream& os, const Parameters& params) |
| 838 { |
| 839 os << "initial AA: " << params.initialAAStatus |
| 840 << " action: " << params.action |
| 841 << " expected AA: " << params.expectedAAStatus; |
| 842 return os; |
| 843 } |
| 844 class Test : public FilterEngineTest |
| 845 , public ::testing::WithParamInterface<::testing::tuple<Parameters,
/*number of other subscriptions*/uint8_t>> |
| 846 { |
| 847 public: |
| 848 static std::vector<Parameters> VaryPossibleCases() |
| 849 { |
| 850 // AA API test matrix |
| 851 // each column but other-subs is about AA subscription |
| 852 // enabled exists other-subs action => expected |
| 853 // => everywhere no effect on other subs |
| 854 // 1. |
| 855 // false false false disable => no effect |
| 856 // false false false enable => add and enable |
| 857 // |
| 858 // false false true disable => no effect |
| 859 // false false true enable => add and enable |
| 860 // 2. |
| 861 // false true false disable => no effect |
| 862 // false true false enable => enable |
| 863 // |
| 864 // false true true disable => no effect |
| 865 // false true true enable => enable |
| 866 // 3. |
| 867 // true true false disable => disable |
| 868 // ture true false enable => no effect |
| 869 // |
| 870 // true true true disable => disable |
| 871 // ture true true enable => no effect |
| 872 // 4. |
| 873 // false true false remove => remove |
| 874 // false true true remove => remove |
| 875 // ture true false remove => remove |
| 876 // ture true true remove => remove |
| 877 std::vector<Parameters> retValue; |
| 878 // 1. |
| 879 retValue.emplace_back(Parameters(AAStatus::absent, Action::disable)); |
| 880 retValue.emplace_back(Parameters(AAStatus::absent, Action::enable).expect(
AAStatus::enabled)); |
| 881 // 2. |
| 882 retValue.emplace_back(Parameters(AAStatus::disabled_present, Action::disab
le)); |
| 883 retValue.emplace_back(Parameters(AAStatus::disabled_present, Action::enabl
e).expect(AAStatus::enabled)); |
| 884 // 3. |
| 885 retValue.emplace_back(Parameters(AAStatus::enabled, Action::disable).expec
t(AAStatus::disabled_present)); |
| 886 retValue.emplace_back(Parameters(AAStatus::enabled, Action::enable)); |
| 887 // 4. |
| 888 retValue.emplace_back(Parameters(AAStatus::disabled_present, Action::remov
e).expect(AAStatus::absent)); |
| 889 retValue.emplace_back(Parameters(AAStatus::enabled, Action::remove).expect
(AAStatus::absent)); |
| 890 // since AA should not affect other subscriptions, the number of other |
| 891 // subscriptions is not specified here, it goes as another item in test pa
rameters tuple. |
| 892 return retValue; |
| 893 } |
| 894 protected: |
| 895 void init(AAStatus aaStatus, uint8_t otherSubscriptionsNumber) |
| 896 { |
| 897 // for the sake of simplicity test only with one suplimentary subscription |
| 898 ASSERT_TRUE(otherSubscriptionsNumber == 0u || otherSubscriptionsNumber ==
1u); |
| 899 |
| 900 // this method also tests the result of intermediate steps. |
| 901 |
| 902 { |
| 903 // no subscription (because of preconfigured prefs.json and patterns.ini
), |
| 904 // though it should be enabled by default in a non-test environment, it'
s tested in |
| 905 // corresponding tests. |
| 906 const auto subscriptions = filterEngine->GetListedSubscriptions(); |
| 907 EXPECT_EQ(0u, subscriptions.size()); // no any subscription including AA |
| 908 EXPECT_FALSE(filterEngine->IsAAEnabled()); |
| 909 } |
| 910 if (otherSubscriptionsNumber == 1u) |
| 911 { |
| 912 auto subscription = filterEngine->GetSubscription(kOtherSubscriptionUrl)
; |
| 913 ASSERT_TRUE(subscription); |
| 914 subscription->AddToList(); |
| 915 const auto subscriptions = filterEngine->GetListedSubscriptions(); |
| 916 ASSERT_EQ(1u, subscriptions.size()); |
| 917 EXPECT_FALSE(subscriptions[0]->IsAA()); |
| 918 EXPECT_EQ(kOtherSubscriptionUrl, subscriptions[0]->GetProperty("url")->A
sString()); |
| 919 } |
| 920 if (isAASatusPresent(aaStatus)) |
| 921 { |
| 922 filterEngine->SetAAEnabled(true); // add AA by enabling it |
| 923 if (aaStatus == AAStatus::disabled_present) |
| 924 { |
| 925 filterEngine->SetAAEnabled(false); |
| 926 } |
| 927 testSubscriptionState(aaStatus, otherSubscriptionsNumber); |
| 928 } |
| 929 } |
| 930 bool isAASatusPresent(AAStatus aaStatus) |
| 931 { |
| 932 return aaStatus != AAStatus::absent; |
| 933 } |
| 934 void testSubscriptionState(AAStatus aaStatus, int otherSubscriptionsNumber) |
| 935 { |
| 936 if (aaStatus == AAStatus::enabled) |
| 937 EXPECT_TRUE(filterEngine->IsAAEnabled()); |
| 938 else |
| 939 EXPECT_FALSE(filterEngine->IsAAEnabled()); |
| 940 |
| 941 SubscriptionPtr aaSubscription; |
| 942 SubscriptionPtr otherSubscription; |
| 943 const auto subscriptions = filterEngine->GetListedSubscriptions(); |
| 944 for (const auto& subscription : subscriptions) |
| 945 { |
| 946 (subscription->IsAA() ? aaSubscription : otherSubscription) = subscripti
on; |
| 947 } |
| 948 if (otherSubscriptionsNumber == 1u) |
| 949 { |
| 950 if (isAASatusPresent(aaStatus)) |
| 951 { |
| 952 EXPECT_EQ(2u, subscriptions.size()); |
| 953 EXPECT_TRUE(aaSubscription); |
| 954 EXPECT_TRUE(otherSubscription); |
| 955 } |
| 956 else |
| 957 { |
| 958 EXPECT_EQ(1u, subscriptions.size()); |
| 959 EXPECT_FALSE(aaSubscription); |
| 960 EXPECT_TRUE(otherSubscription); |
| 961 } |
| 962 } |
| 963 else if (otherSubscriptionsNumber == 0u) |
| 964 { |
| 965 if (isAASatusPresent(aaStatus)) |
| 966 { |
| 967 EXPECT_EQ(1u, subscriptions.size()); |
| 968 EXPECT_TRUE(aaSubscription); |
| 969 EXPECT_FALSE(otherSubscription); |
| 970 } |
| 971 else |
| 972 { |
| 973 EXPECT_EQ(0u, subscriptions.size()); |
| 974 } |
| 975 } |
| 976 } |
| 977 }; |
| 978 |
| 979 INSTANTIATE_TEST_CASE_P(AA_ApiTests, Test, |
| 980 ::testing::Combine(::testing::ValuesIn(Test::VaryPossibleCases()), ::testing
::Values<uint8_t>(0, 1))); |
| 981 |
| 982 TEST_P(Test, VaryPossibleCases) { |
| 983 const auto parameter = ::testing::get<0>(GetParam()); |
| 984 uint8_t otherSubscriptionsNumber = ::testing::get<1>(GetParam()); |
| 985 init(parameter.initialAAStatus, otherSubscriptionsNumber); |
| 986 |
| 987 if (parameter.action == Action::enable) |
| 988 filterEngine->SetAAEnabled(true); |
| 989 else if (parameter.action == Action::disable) |
| 990 filterEngine->SetAAEnabled(false); |
| 991 else if (parameter.action == Action::remove) |
| 992 { |
| 993 SubscriptionPtr aaSubscription; |
| 994 for (const auto& subscription : filterEngine->GetListedSubscriptions()) |
| 995 { |
| 996 if (subscription->IsAA()) |
| 997 { |
| 998 aaSubscription = subscription; |
| 999 break; |
| 1000 } |
| 1001 } |
| 1002 ASSERT_TRUE(aaSubscription); |
| 1003 aaSubscription->RemoveFromList(); |
| 1004 } |
| 1005 |
| 1006 testSubscriptionState(parameter.expectedAAStatus, otherSubscriptionsNumber); |
| 1007 } |
| 1008 } |
| 1009 |
760 TEST_F(FilterEngineIsAllowedConnectionTest, AbsentCallbackAllowsUpdating) | 1010 TEST_F(FilterEngineIsAllowedConnectionTest, AbsentCallbackAllowsUpdating) |
761 { | 1011 { |
762 createParams.isConnectionAllowedCallback = FilterEngine::IsConnectionAllowedCa
llback(); | 1012 createParams.isConnectionAllowedCallback = FilterEngine::IsConnectionAllowedCa
llback(); |
763 auto subscription = EnsureExampleSubscriptionAndForceUpdate(); | 1013 auto subscription = EnsureExampleSubscriptionAndForceUpdate(); |
764 EXPECT_EQ("synchronize_ok", subscription->GetProperty("downloadStatus")->AsStr
ing()); | 1014 EXPECT_EQ("synchronize_ok", subscription->GetProperty("downloadStatus")->AsStr
ing()); |
765 EXPECT_EQ(1u, subscription->GetProperty("filters")->AsList().size()); | 1015 EXPECT_EQ(1u, subscription->GetProperty("filters")->AsList().size()); |
766 } | 1016 } |
767 | 1017 |
768 TEST_F(FilterEngineIsAllowedConnectionTest, AllowingCallbackAllowsUpdating) | 1018 TEST_F(FilterEngineIsAllowedConnectionTest, AllowingCallbackAllowsUpdating) |
769 { | 1019 { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
836 filterEngine->SetAllowedConnectionType(&testConnection); | 1086 filterEngine->SetAllowedConnectionType(&testConnection); |
837 auto subscription = EnsureExampleSubscriptionAndForceUpdate("subB"); | 1087 auto subscription = EnsureExampleSubscriptionAndForceUpdate("subB"); |
838 EXPECT_EQ("synchronize_ok", subscription->GetProperty("downloadStatus")->AsS
tring()); | 1088 EXPECT_EQ("synchronize_ok", subscription->GetProperty("downloadStatus")->AsS
tring()); |
839 EXPECT_EQ(1u, subscription->GetProperty("filters")->AsList().size()); | 1089 EXPECT_EQ(1u, subscription->GetProperty("filters")->AsList().size()); |
840 auto capturedConnectionTypes = this->capturedConnectionTypes.GetStrings(); | 1090 auto capturedConnectionTypes = this->capturedConnectionTypes.GetStrings(); |
841 ASSERT_EQ(1u, capturedConnectionTypes.size()); | 1091 ASSERT_EQ(1u, capturedConnectionTypes.size()); |
842 EXPECT_TRUE(capturedConnectionTypes[0].first); | 1092 EXPECT_TRUE(capturedConnectionTypes[0].first); |
843 EXPECT_EQ(testConnection, capturedConnectionTypes[0].second); | 1093 EXPECT_EQ(testConnection, capturedConnectionTypes[0].second); |
844 } | 1094 } |
845 } | 1095 } |
OLD | NEW |