| Left: | ||
| Right: |
| 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 subscruption = filterEngine->GetSubscription(kOtherSubscriptionUrl) ; | |
|
hub
2017/04/05 14:52:47
'nit: I didn't see that one. There is a typo. It i
sergei
2017/04/05 16:54:45
Done. Good catch.
| |
| 913 ASSERT_TRUE(subscruption); | |
| 914 subscruption->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 |