ManifestClassGenerator_test.cpp revision 467f171315f9c2037fcd3eb5edcfabc40671bf7b
1ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski/* 2ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * Copyright (C) 2015 The Android Open Source Project 3ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * 4ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * you may not use this file except in compliance with the License. 6ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * You may obtain a copy of the License at 7ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * 8ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 9ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * 10ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * Unless required by applicable law or agreed to in writing, software 11ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * See the License for the specific language governing permissions and 14ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * limitations under the License. 15ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski */ 16ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 17ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski#include "java/ManifestClassGenerator.h" 18ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski#include "test/Builders.h" 19ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski#include "test/Context.h" 20ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 21ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski#include <gtest/gtest.h> 22ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 23ca5638fd85098c3d0a699492751043545f75553aAdam Lesinskinamespace aapt { 24ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 25ca5638fd85098c3d0a699492751043545f75553aAdam LesinskiTEST(ManifestClassGeneratorTest, NameIsProperlyGeneratedFromSymbol) { 26ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski std::unique_ptr<IAaptContext> context = test::ContextBuilder().build(); 27467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski std::unique_ptr<xml::XmlResource> manifest = test::buildXmlDom(R"EOF( 28ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski <manifest xmlns:android="http://schemas.android.com/apk/res/android"> 29ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski <permission android:name="android.permission.ACCESS_INTERNET" /> 30ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski <permission android:name="android.DO_DANGEROUS_THINGS" /> 31ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski <permission android:name="com.test.sample.permission.HUH" /> 32ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski <permission-group android:name="foo.bar.PERMISSION" /> 33ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski </manifest>)EOF"); 34ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 35ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski std::stringstream out; 36ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski ManifestClassGenerator generator; 37ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski ASSERT_TRUE(generator.generate(context->getDiagnostics(), u"android", manifest.get(), &out)); 38ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 39ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski std::string actual = out.str(); 40ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 41b274e35abfbbd09e0fce983a215c11522c56cce2Adam Lesinski const size_t permissionClassPos = actual.find("public static final class permission {"); 42b274e35abfbbd09e0fce983a215c11522c56cce2Adam Lesinski const size_t permissionGroupClassPos = 43b274e35abfbbd09e0fce983a215c11522c56cce2Adam Lesinski actual.find("public static final class permission_group {"); 44ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski ASSERT_NE(std::string::npos, permissionClassPos); 45ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski ASSERT_NE(std::string::npos, permissionGroupClassPos); 46ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 47ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski // 48ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski // Make sure these permissions are in the permission class. 49ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski // 50ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 51ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski size_t pos = actual.find("public static final String ACCESS_INTERNET=" 52ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski "\"android.permission.ACCESS_INTERNET\";"); 53ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski EXPECT_GT(pos, permissionClassPos); 54ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski EXPECT_LT(pos, permissionGroupClassPos); 55ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 56ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski pos = actual.find("public static final String DO_DANGEROUS_THINGS=" 57ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski "\"android.DO_DANGEROUS_THINGS\";"); 58ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski EXPECT_GT(pos, permissionClassPos); 59ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski EXPECT_LT(pos, permissionGroupClassPos); 60ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 61ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski pos = actual.find("public static final String HUH=\"com.test.sample.permission.HUH\";"); 62ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski EXPECT_GT(pos, permissionClassPos); 63ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski EXPECT_LT(pos, permissionGroupClassPos); 64ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 65ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski // 66ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski // Make sure these permissions are in the permission_group class 67ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski // 68ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 69ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski pos = actual.find("public static final String PERMISSION=" 70ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski "\"foo.bar.PERMISSION\";"); 71ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski EXPECT_GT(pos, permissionGroupClassPos); 72ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski EXPECT_LT(pos, std::string::npos); 73ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski} 74ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 75ca5638fd85098c3d0a699492751043545f75553aAdam LesinskiTEST(ManifestClassGeneratorTest, CommentsAndAnnotationsArePresent) { 76ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski std::unique_ptr<IAaptContext> context = test::ContextBuilder().build(); 77467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski std::unique_ptr<xml::XmlResource> manifest = test::buildXmlDom(R"EOF( 78ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski <manifest xmlns:android="http://schemas.android.com/apk/res/android"> 79ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski <!-- Required to access the internet. 80ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski Added in API 1. --> 81ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski <permission android:name="android.permission.ACCESS_INTERNET" /> 82ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski <!-- @deprecated This permission is for playing outside. --> 83ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski <permission android:name="android.permission.PLAY_OUTSIDE" /> 84ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski <!-- This is a private permission for system only! 85ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski @hide 86ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski @SystemApi --> 87ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski <permission android:name="android.permission.SECRET" /> 88ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski </manifest>)EOF"); 89ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 90ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski std::stringstream out; 91ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski ManifestClassGenerator generator; 92ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski ASSERT_TRUE(generator.generate(context->getDiagnostics(), u"android", manifest.get(), &out)); 93ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 94ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski std::string actual = out.str(); 95ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 96ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski EXPECT_NE(std::string::npos, actual.find( 97ca5638fd85098c3d0a699492751043545f75553aAdam LesinskiR"EOF( /** 98ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * Required to access the internet. 99ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * Added in API 1. 100ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski */ 101ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski public static final String ACCESS_INTERNET="android.permission.ACCESS_INTERNET";)EOF")); 102ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 103ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski EXPECT_NE(std::string::npos, actual.find( 104ca5638fd85098c3d0a699492751043545f75553aAdam LesinskiR"EOF( /** 105ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * @deprecated This permission is for playing outside. 106ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski */ 107ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski @Deprecated 108ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski public static final String PLAY_OUTSIDE="android.permission.PLAY_OUTSIDE";)EOF")); 109ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 110ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski EXPECT_NE(std::string::npos, actual.find( 111ca5638fd85098c3d0a699492751043545f75553aAdam LesinskiR"EOF( /** 112ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * This is a private permission for system only! 113ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * @hide 114ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski * @SystemApi 115ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski */ 116b274e35abfbbd09e0fce983a215c11522c56cce2Adam Lesinski @android.annotation.SystemApi 117ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski public static final String SECRET="android.permission.SECRET";)EOF")); 118ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski} 119ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski 120ca5638fd85098c3d0a699492751043545f75553aAdam Lesinski} // namespace aapt 121