arc_features_parser_unittest.cc 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/components/arc/arc_features_parser.h"
  5. #include "testing/gtest/include/gtest/gtest.h"
  6. namespace arc {
  7. namespace {
  8. class ArcFeaturesParserTest : public testing::Test {
  9. public:
  10. ArcFeaturesParserTest() = default;
  11. ArcFeaturesParserTest(const ArcFeaturesParserTest&) = delete;
  12. ArcFeaturesParserTest& operator=(const ArcFeaturesParserTest&) = delete;
  13. };
  14. constexpr const char kValidJson[] = R"json({"features": [
  15. {
  16. "name": "com.google.android.feature.GOOGLE_BUILD",
  17. "version": 0
  18. },
  19. {
  20. "name": "com.google.android.feature.GOOGLE_EXPERIENCE",
  21. "version": 2
  22. }
  23. ],
  24. "unavailable_features": [],
  25. "properties": {
  26. "ro.product.cpu.abilist": "x86_64,x86,armeabi-v7a,armeabi",
  27. "ro.build.version.sdk": "25"
  28. },
  29. "play_store_version": "81010860"})json";
  30. constexpr const char kValidJsonWithUnavailableFeature[] =
  31. R"json({"features": [
  32. {
  33. "name": "android.software.home_screen",
  34. "version": 0
  35. },
  36. {
  37. "name": "com.google.android.feature.GOOGLE_EXPERIENCE",
  38. "version": 0
  39. }
  40. ],
  41. "unavailable_features": ["android.software.location"],
  42. "properties": {},
  43. "play_store_version": "81010860"})json";
  44. constexpr const char kValidJsonFeatureEmptyName[] =
  45. R"json({"features": [
  46. {
  47. "name": "android.hardware.faketouch",
  48. "version": 0
  49. },
  50. {
  51. "name": "android.hardware.location",
  52. "version": 0
  53. },
  54. {
  55. "name": "",
  56. "version": 0
  57. }
  58. ],
  59. "unavailable_features": ["android.software.home_screen", ""],
  60. "properties": {},
  61. "play_store_version": "81010860"})json";
  62. constexpr const char kInvalidJsonWithMissingFields[] =
  63. R"json({"invalid_root": [
  64. {
  65. "name": "android.hardware.location"
  66. },
  67. {
  68. "name": "android.hardware.location.network"
  69. }
  70. ],
  71. "invalid_root_second": [],
  72. "invalid_root_third": {}})json";
  73. TEST_F(ArcFeaturesParserTest, ParseEmptyJson) {
  74. absl::optional<ArcFeatures> arc_features =
  75. ArcFeaturesParser::ParseFeaturesJsonForTesting(base::StringPiece());
  76. EXPECT_EQ(arc_features, absl::nullopt);
  77. }
  78. TEST_F(ArcFeaturesParserTest, ParseInvalidJson) {
  79. absl::optional<ArcFeatures> arc_features =
  80. ArcFeaturesParser::ParseFeaturesJsonForTesting(
  81. kInvalidJsonWithMissingFields);
  82. EXPECT_EQ(arc_features, absl::nullopt);
  83. }
  84. TEST_F(ArcFeaturesParserTest, ParseValidJson) {
  85. absl::optional<ArcFeatures> arc_features =
  86. ArcFeaturesParser::ParseFeaturesJsonForTesting(kValidJson);
  87. auto feature_map = arc_features->feature_map;
  88. auto unavailable_features = arc_features->unavailable_features;
  89. auto build_props = arc_features->build_props;
  90. auto play_store_version = arc_features->play_store_version;
  91. EXPECT_EQ(feature_map.size(), 2u);
  92. EXPECT_EQ(unavailable_features.size(), 0u);
  93. EXPECT_EQ(build_props.size(), 2u);
  94. EXPECT_EQ(play_store_version, "81010860");
  95. }
  96. TEST_F(ArcFeaturesParserTest, ParseValidJsonWithUnavailableFeature) {
  97. absl::optional<ArcFeatures> arc_features =
  98. ArcFeaturesParser::ParseFeaturesJsonForTesting(
  99. kValidJsonWithUnavailableFeature);
  100. auto feature_map = arc_features->feature_map;
  101. auto unavailable_features = arc_features->unavailable_features;
  102. auto build_props = arc_features->build_props;
  103. auto play_store_version = arc_features->play_store_version;
  104. EXPECT_EQ(feature_map.size(), 2u);
  105. EXPECT_EQ(unavailable_features.size(), 1u);
  106. EXPECT_EQ(build_props.size(), 0u);
  107. EXPECT_EQ(play_store_version, "81010860");
  108. }
  109. TEST_F(ArcFeaturesParserTest, ParseValidJsonWithEmptyFeatureName) {
  110. absl::optional<ArcFeatures> arc_features =
  111. ArcFeaturesParser::ParseFeaturesJsonForTesting(
  112. kValidJsonFeatureEmptyName);
  113. EXPECT_EQ(arc_features, absl::nullopt);
  114. }
  115. } // namespace
  116. } // namespace arc