17a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski/*
27a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski * Copyright (C) 2016 The Android Open Source Project
37a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski *
47a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
57a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski * you may not use this file except in compliance with the License.
67a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski * You may obtain a copy of the License at
77a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski *
87a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
97a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski *
107a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski * Unless required by applicable law or agreed to in writing, software
117a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
127a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski * See the License for the specific language governing permissions and
147a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski * limitations under the License.
157a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski */
167a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski
17ea7897954f6339dcc2e5af1584f72c6b2ecd7a67Adam Lesinski#ifndef TEST_HELPERS_H_
18ea7897954f6339dcc2e5af1584f72c6b2ecd7a67Adam Lesinski#define TEST_HELPERS_H_
197a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski
207a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski#include <ostream>
217a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski#include <string>
22c8f71aa67ea599cb80205496cb67e9e7a121299cAdam Lesinski#include <vector>
237a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski
24ea7897954f6339dcc2e5af1584f72c6b2ecd7a67Adam Lesinski#include "androidfw/ResourceTypes.h"
25ea7897954f6339dcc2e5af1584f72c6b2ecd7a67Adam Lesinski#include "gtest/gtest.h"
26ea7897954f6339dcc2e5af1584f72c6b2ecd7a67Adam Lesinski#include "utils/String16.h"
27ea7897954f6339dcc2e5af1584f72c6b2ecd7a67Adam Lesinski#include "utils/String8.h"
28f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski
294c67a475a334e4f65238d439a3339195e03c03beAdam Lesinskistatic inline ::std::ostream& operator<<(::std::ostream& out, const android::String8& str) {
307a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski  return out << str.string();
31f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski}
32f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski
334c67a475a334e4f65238d439a3339195e03c03beAdam Lesinskistatic inline ::std::ostream& operator<<(::std::ostream& out, const android::String16& str) {
347a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski  return out << android::String8(str).string();
35f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski}
36f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski
3731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinskinamespace android {
3831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
397ad1110ecd6a840fcd2895c62668828a1ca029c6Adam Lesinskivoid InitializeTest(int* argc, char** argv);
407ad1110ecd6a840fcd2895c62668828a1ca029c6Adam Lesinski
4160293197379e522c870c4a28462804207bab505dAdam Lesinskienum { MAY_NOT_BE_BAG = false };
4260293197379e522c870c4a28462804207bab505dAdam Lesinski
43ea7897954f6339dcc2e5af1584f72c6b2ecd7a67Adam Lesinskivoid SetTestDataPath(const std::string& path);
44ea7897954f6339dcc2e5af1584f72c6b2ecd7a67Adam Lesinski
45ea7897954f6339dcc2e5af1584f72c6b2ecd7a67Adam Lesinskiconst std::string& GetTestDataPath();
46ea7897954f6339dcc2e5af1584f72c6b2ecd7a67Adam Lesinski
474c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski::testing::AssertionResult ReadFileFromZipToString(const std::string& zip_path,
484c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski                                                   const std::string& file,
494c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski                                                   std::string* out_contents);
504c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski
514c67a475a334e4f65238d439a3339195e03c03beAdam Lesinskistatic inline bool operator==(const ResTable_config& a, const ResTable_config& b) {
527a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski  return a.compare(b) == 0;
5331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski}
5431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
554c67a475a334e4f65238d439a3339195e03c03beAdam Lesinskistatic inline ::std::ostream& operator<<(::std::ostream& out, const ResTable_config& c) {
567a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski  return out << c.toString().string();
5731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski}
5831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
594c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski::testing::AssertionResult IsStringEqual(const ResTable& table, uint32_t resource_id,
607a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski                                         const char* expected_str);
6160293197379e522c870c4a28462804207bab505dAdam Lesinski
627ad1110ecd6a840fcd2895c62668828a1ca029c6Adam Lesinskistd::string GetStringFromPool(const ResStringPool* pool, uint32_t idx);
637ad1110ecd6a840fcd2895c62668828a1ca029c6Adam Lesinski
647a37b74d37ff79e805c9e97d977e07bfec753c5aAdam Lesinski}  // namespace android
6531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski
66ea7897954f6339dcc2e5af1584f72c6b2ecd7a67Adam Lesinski#endif  // TEST_HELPERS_H_
67