ExperimentalFeature.cpp (2970B)
1 // Copyright (c) Microsoft Corporation. 2 // Licensed under the MIT License. 3 #include "pch.h" 4 #include "TestCommon.h" 5 #include "TestSettings.h" 6 #include <winget/ExperimentalFeature.h> 7 #include <winget/Settings.h> 8 9 #include <AppInstallerErrors.h> 10 11 using namespace AppInstaller::Settings; 12 using namespace TestCommon; 13 14 TEST_CASE("ExperimentalFeature None", "[experimentalFeature]") 15 { 16 // Make sure Feature::None is always enabled. 17 REQUIRE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::None)); 18 19 // Make sure to throw requesting Feature::None 20 REQUIRE_THROWS_HR(ExperimentalFeature::GetFeature(ExperimentalFeature::Feature::None), E_UNEXPECTED); 21 22 // Make sure Feature::None is not disabled by Group Policy 23 auto policiesKey = RegCreateVolatileTestRoot(); 24 SetRegistryValue(policiesKey.get(), ExperimentalFeaturesPolicyValueName, false); 25 GroupPolicyTestOverride policies{ policiesKey.get() }; 26 REQUIRE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::None)); 27 } 28 29 TEST_CASE("ExperimentalFeature ExperimentalCmd", "[experimentalFeature]") 30 { 31 auto again = DeleteUserSettingsFiles(); 32 33 SECTION("Feature off default") 34 { 35 UserSettingsTest userSettingTest; 36 37 REQUIRE_FALSE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::ExperimentalCmd, userSettingTest)); 38 } 39 SECTION("Feature on") 40 { 41 std::string_view json = R"({ "experimentalFeatures": { "experimentalCmd": true } })"; 42 SetSetting(Stream::PrimaryUserSettings, json); 43 UserSettingsTest userSettingTest; 44 45 REQUIRE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::ExperimentalCmd, userSettingTest)); 46 } 47 SECTION("Feature off") 48 { 49 std::string_view json = R"({ "experimentalFeatures": { "experimentalCmd": false } })"; 50 SetSetting(Stream::PrimaryUserSettings, json); 51 UserSettingsTest userSettingTest; 52 53 REQUIRE_FALSE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::ExperimentalCmd, userSettingTest)); 54 } 55 SECTION("Invalid value") 56 { 57 std::string_view json = R"({ "experimentalFeatures": { "experimentalCmd": "string" } })"; 58 SetSetting(Stream::PrimaryUserSettings, json); 59 UserSettingsTest userSettingTest; 60 61 REQUIRE_FALSE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::ExperimentalCmd, userSettingTest)); 62 } 63 SECTION("Disabled by group policy") 64 { 65 auto policiesKey = RegCreateVolatileTestRoot(); 66 SetRegistryValue(policiesKey.get(), ExperimentalFeaturesPolicyValueName, false); 67 GroupPolicyTestOverride policies{ policiesKey.get() }; 68 69 std::string_view json = R"({ "experimentalFeatures": { "experimentalCmd": true } })"; 70 SetSetting(Stream::PrimaryUserSettings, json); 71 UserSettingsTest userSettingTest; 72 73 REQUIRE_FALSE(ExperimentalFeature::IsEnabled(ExperimentalFeature::Feature::ExperimentalCmd, userSettingTest)); 74 } 75 }