ConfigurationParser_test.cpp revision 280be34fa6311de90dff6c595a147fd5a182223d
174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer/* 274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * Copyright (C) 2017 The Android Open Source Project 374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * 474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * Licensed under the Apache License, Version 2.0 (the "License"); 574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * you may not use this file except in compliance with the License. 674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * You may obtain a copy of the License at 774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * 874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * http://www.apache.org/licenses/LICENSE-2.0 974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * 1074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * Unless required by applicable law or agreed to in writing, software 1174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * distributed under the License is distributed on an "AS IS" BASIS, 1274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * See the License for the specific language governing permissions and 1474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer * limitations under the License. 1574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer */ 1674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 1774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer#include "configuration/ConfigurationParser.h" 1874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 1974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer#include <string> 2074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 2174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer#include <gmock/gmock.h> 2274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer#include <gtest/gtest.h> 2374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 2474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer#include "androidfw/ResourceTypes.h" 2574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 2674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer#include "test/Test.h" 2774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer#include "xml/XmlDom.h" 2874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 2974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmernamespace aapt { 3074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmernamespace { 3174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 3274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmerusing android::ResTable_config; 3374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmerusing configuration::Abi; 3474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmerusing configuration::AndroidSdk; 35280be34fa6311de90dff6c595a147fd5a182223dShane Farmerusing configuration::PostProcessingConfiguration; 3674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmerusing configuration::DeviceFeature; 3774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmerusing configuration::GlTexture; 3874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmerusing configuration::Locale; 3974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmerusing configuration::AndroidManifest; 4074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmerusing testing::ElementsAre; 4174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmerusing xml::Element; 4274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmerusing xml::NodeCast; 4374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 4474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmerconstexpr const char* kValidConfig = R"(<?xml version="1.0" encoding="utf-8" ?> 4574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer<post-process xmlns="http://schemas.android.com/tools/aapt"> 4674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <groups> 4774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <abi-group label="arm"> 4874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <abi>armeabi-v7a</abi> 4974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <abi>arm64-v8a</abi> 5074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </abi-group> 5174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <abi-group label="other"> 5274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <abi>x86</abi> 5374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <abi>mips</abi> 5474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </abi-group> 5574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density-group label="large"> 5674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density>xhdpi</screen-density> 5774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density>xxhdpi</screen-density> 5874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density>xxxhdpi</screen-density> 5974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </screen-density-group> 6074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density-group label="alldpi"> 6174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density>ldpi</screen-density> 6274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density>mdpi</screen-density> 6374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density>hdpi</screen-density> 6474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density>xhdpi</screen-density> 6574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density>xxhdpi</screen-density> 6674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density>xxxhdpi</screen-density> 6774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </screen-density-group> 6874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale-group label="europe"> 6974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale lang="en"/> 7074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale lang="es"/> 7174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale lang="fr"/> 7274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale lang="de"/> 7374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </locale-group> 7474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale-group label="north-america"> 7574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale lang="en"/> 7674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale lang="es" region="MX"/> 7774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale lang="fr" region="CA"/> 7874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </locale-group> 7974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale-group label="all"> 8074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale/> 8174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </locale-group> 8274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <android-sdk-group label="19"> 8374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <android-sdk 8474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer minSdkVersion="19" 8574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer targetSdkVersion="24" 8674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer maxSdkVersion="25"> 8774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <manifest> 8874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <!--- manifest additions here XSLT? TODO --> 8974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </manifest> 9074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </android-sdk> 9174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </android-sdk-group> 9274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <gl-texture-group label="dxt1"> 9374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <gl-texture name="GL_EXT_texture_compression_dxt1"> 9474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <texture-path>assets/dxt1/*</texture-path> 9574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </gl-texture> 9674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </gl-texture-group> 9774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <device-feature-group label="low-latency"> 9874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <supports-feature>android.hardware.audio.low_latency</supports-feature> 9974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </device-feature-group> 10074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </groups> 10174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <artifacts> 10274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <artifact-format> 10374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ${base}.${abi}.${screen-density}.${locale}.${sdk}.${gl}.${feature}.release 10474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </artifact-format> 10574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <artifact 10674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer name="art1" 10774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer abi-group="arm" 10874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer screen-density-group="large" 10974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer locale-group="europe" 11074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer android-sdk-group="19" 11174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer gl-texture-group="dxt1" 11274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer device-feature-group="low-latency"/> 11374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <artifact 11474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer name="art2" 11574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer abi-group="other" 11674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer screen-density-group="alldpi" 11774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer locale-group="north-america" 11874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer android-sdk-group="19" 11974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer gl-texture-group="dxt1" 12074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer device-feature-group="low-latency"/> 12174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </artifacts> 12274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer</post-process> 12374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer)"; 12474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 12574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmerclass ConfigurationParserTest : public ConfigurationParser, public ::testing::Test { 12674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer public: 12774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ConfigurationParserTest() : ConfigurationParser("") {} 12874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 12974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer protected: 13074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer StdErrDiagnostics diag_; 13174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer}; 13274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 133b102727771b9ac3d28d4f9b0a4a54b98bd1af958Shane FarmerTEST_F(ConfigurationParserTest, ForPath_NoFile) { 134b102727771b9ac3d28d4f9b0a4a54b98bd1af958Shane Farmer auto result = ConfigurationParser::ForPath("./does_not_exist.xml"); 135b102727771b9ac3d28d4f9b0a4a54b98bd1af958Shane Farmer EXPECT_FALSE(result); 136b102727771b9ac3d28d4f9b0a4a54b98bd1af958Shane Farmer} 137b102727771b9ac3d28d4f9b0a4a54b98bd1af958Shane Farmer 13874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane FarmerTEST_F(ConfigurationParserTest, ValidateFile) { 13974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto parser = ConfigurationParser::ForContents(kValidConfig).WithDiagnostics(&diag_); 14074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto result = parser.Parse(); 14174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_TRUE(result); 142280be34fa6311de90dff6c595a147fd5a182223dShane Farmer PostProcessingConfiguration& value = result.value(); 14374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(2ul, value.artifacts.size()); 14474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_TRUE(value.artifact_format); 14574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ( 14674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer "${base}.${abi}.${screen-density}.${locale}.${sdk}.${gl}.${feature}.release", 14774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer value.artifact_format.value() 14874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ); 14974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 15074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(2ul, value.abi_groups.size()); 15174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(2ul, value.abi_groups["arm"].size()); 15274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(2ul, value.abi_groups["other"].size()); 15374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 15474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(2ul, value.screen_density_groups.size()); 15574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(3ul, value.screen_density_groups["large"].size()); 15674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(6ul, value.screen_density_groups["alldpi"].size()); 15774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 15874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(3ul, value.locale_groups.size()); 15974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(4ul, value.locale_groups["europe"].size()); 16074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(3ul, value.locale_groups["north-america"].size()); 16174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(1ul, value.locale_groups["all"].size()); 16274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 16374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(1ul, value.android_sdk_groups.size()); 16474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(1ul, value.android_sdk_groups["19"].size()); 16574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 16674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(1ul, value.gl_texture_groups.size()); 16774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(1ul, value.gl_texture_groups["dxt1"].size()); 16874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 16974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(1ul, value.device_feature_groups.size()); 17074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(1ul, value.device_feature_groups["low-latency"].size()); 17174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer} 17274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 17374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane FarmerTEST_F(ConfigurationParserTest, InvalidNamespace) { 17474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer constexpr const char* invalid_ns = R"(<?xml version="1.0" encoding="utf-8" ?> 17574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <post-process xmlns="http://schemas.android.com/tools/another-unknown-tool" />)"; 17674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 17774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto result = ConfigurationParser::ForContents(invalid_ns).Parse(); 17874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_FALSE(result); 17974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer} 18074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 18174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane FarmerTEST_F(ConfigurationParserTest, ArtifactAction) { 18274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer static constexpr const char* xml = R"xml( 18374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <artifact 18474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer abi-group="arm" 18574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer screen-density-group="large" 18674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer locale-group="europe" 18774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer android-sdk-group="19" 18874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer gl-texture-group="dxt1" 18974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer device-feature-group="low-latency"/>)xml"; 19074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 19174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto doc = test::BuildXmlDom(xml); 19274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 193280be34fa6311de90dff6c595a147fd5a182223dShane Farmer PostProcessingConfiguration config; 19474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer bool ok = artifact_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_); 19574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_TRUE(ok); 19674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 19774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(1ul, config.artifacts.size()); 19874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 1995766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer auto& artifact = config.artifacts.front(); 20074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ("", artifact.name); // TODO: make this fail. 20174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ("arm", artifact.abi_group.value()); 20274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ("large", artifact.screen_density_group.value()); 20374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ("europe", artifact.locale_group.value()); 20474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ("19", artifact.android_sdk_group.value()); 20574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ("dxt1", artifact.gl_texture_group.value()); 20674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ("low-latency", artifact.device_feature_group.value()); 2075766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer 2085766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer // Perform a second action to ensure we get 2 artifacts. 2095766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer static constexpr const char* second = R"xml( 2105766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer <artifact 2115766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer abi-group="other" 2125766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer screen-density-group="large" 2135766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer locale-group="europe" 2145766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer android-sdk-group="19" 2155766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer gl-texture-group="dxt1" 2165766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer device-feature-group="low-latency"/>)xml"; 2175766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer doc = test::BuildXmlDom(second); 2185766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer 2195766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer ok = artifact_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_); 2205766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer ASSERT_TRUE(ok); 2215766943f558c8fccc714bb3d0a96af70816a5545Shane Farmer EXPECT_EQ(2ul, config.artifacts.size()); 22274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer} 22374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 22474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane FarmerTEST_F(ConfigurationParserTest, ArtifactFormatAction) { 22574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer static constexpr const char* xml = R"xml( 22674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <artifact-format> 22774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ${base}.${abi}.${screen-density}.${locale}.${sdk}.${gl}.${feature}.release 22874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </artifact-format>)xml"; 22974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 23074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto doc = test::BuildXmlDom(xml); 23174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 232280be34fa6311de90dff6c595a147fd5a182223dShane Farmer PostProcessingConfiguration config; 23374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer bool ok = artifact_format_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_); 23474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_TRUE(ok); 23574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_TRUE(config.artifact_format); 23674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ( 23774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer "${base}.${abi}.${screen-density}.${locale}.${sdk}.${gl}.${feature}.release", 23874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer static_cast<std::string>(config.artifact_format.value()) 23974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ); 24074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer} 24174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 24274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane FarmerTEST_F(ConfigurationParserTest, AbiGroupAction) { 24374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer static constexpr const char* xml = R"xml( 24474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <abi-group label="arm"> 24574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <!-- First comment. --> 24674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <abi> 24774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer armeabi-v7a 24874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </abi> 24974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <!-- Another comment. --> 25074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <abi>arm64-v8a</abi> 25174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </abi-group>)xml"; 25274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 25374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto doc = test::BuildXmlDom(xml); 25474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 255280be34fa6311de90dff6c595a147fd5a182223dShane Farmer PostProcessingConfiguration config; 25674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer bool ok = abi_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_); 25774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_TRUE(ok); 25874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 25974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(1ul, config.abi_groups.size()); 26074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_EQ(1u, config.abi_groups.count("arm")); 26174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 26274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto& out = config.abi_groups["arm"]; 26374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_THAT(out, ElementsAre(Abi::kArmV7a, Abi::kArm64V8a)); 26474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer} 26574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 26674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane FarmerTEST_F(ConfigurationParserTest, ScreenDensityGroupAction) { 26774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer static constexpr const char* xml = R"xml( 26874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density-group label="large"> 26974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density>xhdpi</screen-density> 27074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density> 27174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer xxhdpi 27274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </screen-density> 27374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <screen-density>xxxhdpi</screen-density> 27474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </screen-density-group>)xml"; 27574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 27674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto doc = test::BuildXmlDom(xml); 27774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 278280be34fa6311de90dff6c595a147fd5a182223dShane Farmer PostProcessingConfiguration config; 27974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer bool ok = 28074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer screen_density_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_); 28174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_TRUE(ok); 28274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 28374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(1ul, config.screen_density_groups.size()); 28474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_EQ(1u, config.screen_density_groups.count("large")); 28574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 28674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ConfigDescription xhdpi; 28774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer xhdpi.density = ResTable_config::DENSITY_XHIGH; 28874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ConfigDescription xxhdpi; 28974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer xxhdpi.density = ResTable_config::DENSITY_XXHIGH; 29074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ConfigDescription xxxhdpi; 29174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer xxxhdpi.density = ResTable_config::DENSITY_XXXHIGH; 29274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 29374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto& out = config.screen_density_groups["large"]; 29474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_THAT(out, ElementsAre(xhdpi, xxhdpi, xxxhdpi)); 29574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer} 29674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 29774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane FarmerTEST_F(ConfigurationParserTest, LocaleGroupAction) { 29874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer static constexpr const char* xml = R"xml( 29974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale-group label="europe"> 30074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale lang="en"/> 30174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale lang="es"/> 30274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale lang="fr"/> 30374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <locale lang="de"/> 30474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </locale-group>)xml"; 30574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 30674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto doc = test::BuildXmlDom(xml); 30774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 308280be34fa6311de90dff6c595a147fd5a182223dShane Farmer PostProcessingConfiguration config; 30974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer bool ok = locale_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_); 31074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_TRUE(ok); 31174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 31274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_EQ(1ul, config.locale_groups.size()); 31374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_EQ(1u, config.locale_groups.count("europe")); 31474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 31574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto& out = config.locale_groups["europe"]; 31674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 31774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer Locale en; 31874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer en.lang = std::string("en"); 31974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer Locale es; 32074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer es.lang = std::string("es"); 32174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer Locale fr; 32274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer fr.lang = std::string("fr"); 32374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer Locale de; 32474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer de.lang = std::string("de"); 32574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 32674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_THAT(out, ElementsAre(en, es, fr, de)); 32774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer} 32874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 32974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane FarmerTEST_F(ConfigurationParserTest, AndroidSdkGroupAction) { 33074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer static constexpr const char* xml = R"xml( 33174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <android-sdk-group label="19"> 33274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <android-sdk 33374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer minSdkVersion="19" 33474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer targetSdkVersion="24" 33574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer maxSdkVersion="25"> 33674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <manifest> 33774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <!--- manifest additions here XSLT? TODO --> 33874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </manifest> 33974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </android-sdk> 34074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </android-sdk-group>)xml"; 34174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 34274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto doc = test::BuildXmlDom(xml); 34374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 344280be34fa6311de90dff6c595a147fd5a182223dShane Farmer PostProcessingConfiguration config; 34574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer bool ok = android_sdk_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_); 34674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_TRUE(ok); 34774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 34874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_EQ(1ul, config.android_sdk_groups.size()); 34974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_EQ(1u, config.android_sdk_groups.count("19")); 35074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 35174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto& out = config.android_sdk_groups["19"]; 35274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 35374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer AndroidSdk sdk; 35474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer sdk.min_sdk_version = std::string("19"); 35574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer sdk.target_sdk_version = std::string("24"); 35674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer sdk.max_sdk_version = std::string("25"); 35774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer sdk.manifest = AndroidManifest(); 35874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 35974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_EQ(1ul, out.size()); 36074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_EQ(sdk, out[0]); 36174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer} 36274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 36374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane FarmerTEST_F(ConfigurationParserTest, GlTextureGroupAction) { 36474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer static constexpr const char* xml = R"xml( 36574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <gl-texture-group label="dxt1"> 36674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <gl-texture name="GL_EXT_texture_compression_dxt1"> 36774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <texture-path>assets/dxt1/main/*</texture-path> 36874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <texture-path> 36974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer assets/dxt1/test/* 37074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </texture-path> 37174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </gl-texture> 37274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </gl-texture-group>)xml"; 37374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 37474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto doc = test::BuildXmlDom(xml); 37574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 376280be34fa6311de90dff6c595a147fd5a182223dShane Farmer PostProcessingConfiguration config; 37774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer bool ok = gl_texture_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_); 37874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_TRUE(ok); 37974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 38074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(1ul, config.gl_texture_groups.size()); 38174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_EQ(1u, config.gl_texture_groups.count("dxt1")); 38274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 38374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto& out = config.gl_texture_groups["dxt1"]; 38474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 38574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer GlTexture texture{ 38674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer std::string("GL_EXT_texture_compression_dxt1"), 38774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer {"assets/dxt1/main/*", "assets/dxt1/test/*"} 38874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer }; 38974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 39074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_EQ(1ul, out.size()); 39174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_EQ(texture, out[0]); 39274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer} 39374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 39474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane FarmerTEST_F(ConfigurationParserTest, DeviceFeatureGroupAction) { 39574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer static constexpr const char* xml = R"xml( 39674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <device-feature-group label="low-latency"> 39774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <supports-feature>android.hardware.audio.low_latency</supports-feature> 39874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer <supports-feature> 39974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer android.hardware.audio.pro 40074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </supports-feature> 40174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer </device-feature-group>)xml"; 40274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 40374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto doc = test::BuildXmlDom(xml); 40474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 405280be34fa6311de90dff6c595a147fd5a182223dShane Farmer PostProcessingConfiguration config; 40674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer bool ok 40774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer = device_feature_group_handler_(&config, NodeCast<Element>(doc.get()->root.get()), &diag_); 40874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_TRUE(ok); 40974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 41074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer EXPECT_EQ(1ul, config.device_feature_groups.size()); 41174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_EQ(1u, config.device_feature_groups.count("low-latency")); 41274cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 41374cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer auto& out = config.device_feature_groups["low-latency"]; 41474cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 41574cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer DeviceFeature low_latency = "android.hardware.audio.low_latency"; 41674cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer DeviceFeature pro = "android.hardware.audio.pro"; 41774cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer ASSERT_THAT(out, ElementsAre(low_latency, pro)); 41874cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer} 41974cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer 42074cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer} // namespace 42174cdea34cd6dce8bf9b4adaa2cd7cb02330120d5Shane Farmer} // namespace aapt 422