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