14df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni/* 24df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * Copyright 2017, The Android Open Source Project 34df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * 44df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * Licensed under the Apache License, Version 2.0 (the "License"); 54df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * you may not use this file except in compliance with the License. 64df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * You may obtain a copy of the License at 74df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * 84df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * http://www.apache.org/licenses/LICENSE-2.0 94df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * 104df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * Unless required by applicable law or agreed to in writing, software 114df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * distributed under the License is distributed on an "AS IS" BASIS, 124df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * See the License for the specific language governing permissions and 144df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni * limitations under the License. 154df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni */ 164df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 174df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni#ifndef TEST_UTILS_H 184df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni#define TEST_UTILS_H 194df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 204df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni#include "gtest/gtest.h" 214df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 224df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ninamespace android { 234df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ninamespace spirit { 244df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 254df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Nitemplate <typename T> class EntityCounter : public DoNothingVisitor { 264df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Nipublic: 274df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni EntityCounter() : mCount(0) {} 284df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 294df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni void visit(T *) override { mCount++; } 304df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 314df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni int getCount() const { return mCount; } 324df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 334df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Niprivate: 344df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni int mCount; 354df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni}; 364df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 374df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Nitemplate <typename T> int countEntity(Entity *e) { 384df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni EntityCounter<T> v; 394df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni e->accept(&v); 404df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni return v.getCount(); 414df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} 424df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 434df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni// Returns a caller owned string for the full path to the relative path inside 444df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni// the Android source tree 454df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Nistatic inline std::string getAbsolutePath(const std::string &relativePath) { 464df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni std::string full(getenv("ANDROID_BUILD_TOP")); 474df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni return full.append("/").append(relativePath); 484df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} 494df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 504df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} // namespace spirit 514df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni} // namespace android 524df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni 534df77d18bf57187f8e7142c6f7a70a9cdd3d581eYang Ni#endif // TEST_UTILS_H 54