JavaClassGenerator_test.cpp revision ca5638fd85098c3d0a699492751043545f75553a
16f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/* 26f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Copyright (C) 2015 The Android Open Source Project 36f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 46f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 56f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * you may not use this file except in compliance with the License. 66f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * You may obtain a copy of the License at 76f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 86f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 96f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Unless required by applicable law or agreed to in writing, software 116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * See the License for the specific language governing permissions and 146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * limitations under the License. 156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 17ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski#include "java/JavaClassGenerator.h" 181ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include "util/Util.h" 191ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 201ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include "test/Builders.h" 216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <gtest/gtest.h> 236f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <sstream> 246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <string> 256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt { 276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 281ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(JavaClassGeneratorTest, FailWhenEntryIsJavaKeyword) { 291ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 301ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setPackageId(u"android", 0x01) 311ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addSimple(u"@android:id/class", ResourceId(0x01020000)) 321ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build(); 336f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 341ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski JavaClassGenerator generator(table.get(), {}); 356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski std::stringstream out; 371ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski EXPECT_FALSE(generator.generate(u"android", &out)); 386f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 396f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 401ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(JavaClassGeneratorTest, TransformInvalidJavaIdentifierCharacter) { 411ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 421ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setPackageId(u"android", 0x01) 431ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addSimple(u"@android:id/hey-man", ResourceId(0x01020000)) 441ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addSimple(u"@android:attr/cool.attr", ResourceId(0x01010000)) 451ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addValue(u"@android:styleable/hey.dude", ResourceId(0x01030000), 461ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski test::StyleableBuilder() 471ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addItem(u"@android:attr/cool.attr", ResourceId(0x01010000)) 481ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build()) 491ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build(); 506f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 511ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski JavaClassGenerator generator(table.get(), {}); 526f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 536f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski std::stringstream out; 541ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski EXPECT_TRUE(generator.generate(u"android", &out)); 551ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 566f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski std::string output = out.str(); 576f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 586f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_NE(std::string::npos, 596f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski output.find("public static final int hey_man = 0x01020000;")); 606f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 616f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_NE(std::string::npos, 626f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski output.find("public static final int[] hey_dude = {")); 636f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 646f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_NE(std::string::npos, 656f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski output.find("public static final int hey_dude_cool_attr = 0;")); 666f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 676f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 689e10ac70155c993e7053323ad36beaea7bf7d54fAdam LesinskiTEST(JavaClassGeneratorTest, CorrectPackageNameIsUsed) { 699e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 709e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski .setPackageId(u"android", 0x01) 719e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski .addSimple(u"@android:id/one", ResourceId(0x01020000)) 729e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski .addSimple(u"@android:id/com.foo$two", ResourceId(0x01020001)) 739e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski .build(); 749e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 759e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski JavaClassGenerator generator(table.get(), {}); 769e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::stringstream out; 779e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski ASSERT_TRUE(generator.generate(u"android", u"com.android.internal", &out)); 789e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 799e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::string output = out.str(); 809e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_NE(std::string::npos, output.find("package com.android.internal;")); 819e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_NE(std::string::npos, output.find("public static final int one = 0x01020000;")); 829e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_EQ(std::string::npos, output.find("two")); 839e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_EQ(std::string::npos, output.find("com_foo$two")); 849e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski} 859e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 869e10ac70155c993e7053323ad36beaea7bf7d54fAdam LesinskiTEST(JavaClassGeneratorTest, AttrPrivateIsWrittenAsAttr) { 879e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 889e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski .setPackageId(u"android", 0x01) 899e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski .addSimple(u"@android:^attr-private/one", ResourceId(0x01010000)) 909e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski .build(); 919e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 929e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski JavaClassGenerator generator(table.get(), {}); 939e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::stringstream out; 949e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski ASSERT_TRUE(generator.generate(u"android", &out)); 959e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 969e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::string output = out.str(); 979e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_NE(std::string::npos, output.find("public static final class attr")); 989e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_EQ(std::string::npos, output.find("public static final class ^attr-private")); 999e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski} 1009e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 1019e10ac70155c993e7053323ad36beaea7bf7d54fAdam LesinskiTEST(JavaClassGeneratorTest, OnlyWritePublicResources) { 1029e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski StdErrDiagnostics diag; 1039e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 1049e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski .setPackageId(u"android", 0x01) 1059e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski .addSimple(u"@android:id/one", ResourceId(0x01020000)) 1069e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski .addSimple(u"@android:id/two", ResourceId(0x01020001)) 1079e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski .addSimple(u"@android:id/three", ResourceId(0x01020002)) 108e78fd617ec60139a973a01925fa7adad31febb39Adam Lesinski .setSymbolState(u"@android:id/one", ResourceId(0x01020000), SymbolState::kPublic) 109e78fd617ec60139a973a01925fa7adad31febb39Adam Lesinski .setSymbolState(u"@android:id/two", ResourceId(0x01020001), SymbolState::kPrivate) 1109e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski .build(); 1119e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 1129e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski JavaClassGeneratorOptions options; 1139e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski options.types = JavaClassGeneratorOptions::SymbolTypes::kPublic; 1149e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski { 1159e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski JavaClassGenerator generator(table.get(), options); 1169e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::stringstream out; 1179e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski ASSERT_TRUE(generator.generate(u"android", &out)); 1189e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::string output = out.str(); 1199e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_NE(std::string::npos, output.find("public static final int one = 0x01020000;")); 1209e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_EQ(std::string::npos, output.find("two")); 1219e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_EQ(std::string::npos, output.find("three")); 1229e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski } 1239e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 1249e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski options.types = JavaClassGeneratorOptions::SymbolTypes::kPublicPrivate; 1259e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski { 1269e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski JavaClassGenerator generator(table.get(), options); 1279e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::stringstream out; 1289e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski ASSERT_TRUE(generator.generate(u"android", &out)); 1299e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::string output = out.str(); 1309e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_NE(std::string::npos, output.find("public static final int one = 0x01020000;")); 1319e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_NE(std::string::npos, output.find("public static final int two = 0x01020001;")); 1329e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_EQ(std::string::npos, output.find("three")); 1339e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski } 1349e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 1359e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski options.types = JavaClassGeneratorOptions::SymbolTypes::kAll; 1369e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski { 1379e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski JavaClassGenerator generator(table.get(), options); 1389e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::stringstream out; 1399e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski ASSERT_TRUE(generator.generate(u"android", &out)); 1409e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski std::string output = out.str(); 1419e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_NE(std::string::npos, output.find("public static final int one = 0x01020000;")); 1429e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_NE(std::string::npos, output.find("public static final int two = 0x01020001;")); 1439e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski EXPECT_NE(std::string::npos, output.find("public static final int three = 0x01020002;")); 1449e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski } 1459e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski} 1469e10ac70155c993e7053323ad36beaea7bf7d54fAdam Lesinski 1471ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski/* 1481ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * TODO(adamlesinski): Re-enable this once we get merging working again. 1491ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * TEST(JavaClassGeneratorTest, EmitPackageMangledSymbols) { 150769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski ASSERT_TRUE(addResource(ResourceName{ {}, ResourceType::kId, u"foo" }, 151769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski ResourceId{ 0x01, 0x02, 0x0000 })); 152769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski ResourceTable table; 153769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski table.setPackage(u"com.lib"); 154769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski ASSERT_TRUE(table.addResource(ResourceName{ {}, ResourceType::kId, u"test" }, {}, 1551ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski Source{ "lib.xml", 33 }, util::make_unique<Id>())); 156769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski ASSERT_TRUE(mTable->merge(std::move(table))); 157769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski 158330edcdf1316ed599fe0eb16a64330821fd92f18Adam Lesinski Linker linker(mTable, 159330edcdf1316ed599fe0eb16a64330821fd92f18Adam Lesinski std::make_shared<MockResolver>(mTable, std::map<ResourceName, ResourceId>()), 160330edcdf1316ed599fe0eb16a64330821fd92f18Adam Lesinski {}); 161769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski ASSERT_TRUE(linker.linkAndValidate()); 162769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski 163769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski JavaClassGenerator generator(mTable, {}); 164769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski 165769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski std::stringstream out; 166769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski EXPECT_TRUE(generator.generate(mTable->getPackage(), out)); 167769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski std::string output = out.str(); 168769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski EXPECT_NE(std::string::npos, output.find("int foo =")); 169769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski EXPECT_EQ(std::string::npos, output.find("int test =")); 170769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski 171769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski out.str(""); 172769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski EXPECT_TRUE(generator.generate(u"com.lib", out)); 173769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski output = out.str(); 174769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski EXPECT_NE(std::string::npos, output.find("int test =")); 175769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski EXPECT_EQ(std::string::npos, output.find("int foo =")); 1761ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski}*/ 1771ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 1781ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(JavaClassGeneratorTest, EmitOtherPackagesAttributesInStyleable) { 1791ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 1801ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setPackageId(u"android", 0x01) 1811ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setPackageId(u"com.lib", 0x02) 1821ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addSimple(u"@android:attr/bar", ResourceId(0x01010000)) 1831ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addSimple(u"@com.lib:attr/bar", ResourceId(0x02010000)) 1841ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addValue(u"@android:styleable/foo", ResourceId(0x01030000), 1851ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski test::StyleableBuilder() 1861ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addItem(u"@android:attr/bar", ResourceId(0x01010000)) 1871ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addItem(u"@com.lib:attr/bar", ResourceId(0x02010000)) 1881ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build()) 1891ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build(); 1901ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 1911ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski JavaClassGenerator generator(table.get(), {}); 192838a68705bc79527e592265371cbe4d8e888d9d9Adam Lesinski 193838a68705bc79527e592265371cbe4d8e888d9d9Adam Lesinski std::stringstream out; 1941ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski EXPECT_TRUE(generator.generate(u"android", &out)); 1951ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 196838a68705bc79527e592265371cbe4d8e888d9d9Adam Lesinski std::string output = out.str(); 1971ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski EXPECT_NE(std::string::npos, output.find("int foo_bar =")); 1981ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski EXPECT_NE(std::string::npos, output.find("int foo_com_lib_bar =")); 199838a68705bc79527e592265371cbe4d8e888d9d9Adam Lesinski} 200769de98f2dd41bfe39a1c9f76aefd1ad58942733Adam Lesinski 2016f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} // namespace aapt 202