1f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski/* 2f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * Copyright (C) 2014 The Android Open Source Project 3f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * 4f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * you may not use this file except in compliance with the License. 6f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * You may obtain a copy of the License at 7f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * 8f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 9f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * 10f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * Unless required by applicable law or agreed to in writing, software 11f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * See the License for the specific language governing permissions and 14f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * limitations under the License. 15f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski */ 16f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 17f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski#include <androidfw/ResourceTypes.h> 18f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski#include <androidfw/TypeWrappers.h> 19f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski#include <utils/String8.h> 20f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 21f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski#include <gtest/gtest.h> 22f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 23f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinskinamespace android { 24f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 25f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinskivoid* createTypeData() { 26f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable_type t; 27f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memset(&t, 0, sizeof(t)); 28f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski t.header.type = RES_TABLE_TYPE_TYPE; 29f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski t.header.headerSize = sizeof(t); 30f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski t.id = 1; 31f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski t.entryCount = 3; 32f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 33f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski uint32_t offsets[3]; 34f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski t.entriesStart = t.header.headerSize + sizeof(offsets); 35f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski t.header.size = t.entriesStart; 36f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 37f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski offsets[0] = 0; 38f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable_entry e1; 39f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memset(&e1, 0, sizeof(e1)); 40f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski e1.size = sizeof(e1); 41f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski e1.key.index = 0; 42f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski t.header.size += sizeof(e1); 43f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 44f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski Res_value v1; 45f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memset(&v1, 0, sizeof(v1)); 46f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski t.header.size += sizeof(v1); 47f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 48f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski offsets[1] = ResTable_type::NO_ENTRY; 49f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 50f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski offsets[2] = sizeof(e1) + sizeof(v1); 51f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable_entry e2; 52f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memset(&e2, 0, sizeof(e2)); 53f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski e2.size = sizeof(e2); 54f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski e2.key.index = 1; 55f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski t.header.size += sizeof(e2); 56f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 57f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski Res_value v2; 58f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memset(&v2, 0, sizeof(v2)); 59f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski t.header.size += sizeof(v2); 60f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 61f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski uint8_t* data = (uint8_t*)malloc(t.header.size); 62f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski uint8_t* p = data; 63f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memcpy(p, &t, sizeof(t)); 64f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski p += sizeof(t); 65f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memcpy(p, offsets, sizeof(offsets)); 66f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski p += sizeof(offsets); 67f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memcpy(p, &e1, sizeof(e1)); 68f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski p += sizeof(e1); 69f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memcpy(p, &v1, sizeof(v1)); 70f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski p += sizeof(v1); 71f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memcpy(p, &e2, sizeof(e2)); 72f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski p += sizeof(e2); 73f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memcpy(p, &v2, sizeof(v2)); 74f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski p += sizeof(v2); 75f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski return data; 76f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 77f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 78f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam LesinskiTEST(TypeVariantIteratorTest, shouldIterateOverTypeWithoutErrors) { 79f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable_type* data = (ResTable_type*) createTypeData(); 80f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 81f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski TypeVariant v(data); 82f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 83f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski TypeVariant::iterator iter = v.beginEntries(); 84f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_EQ(uint32_t(0), iter.index()); 85f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_TRUE(NULL != *iter); 86f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_EQ(uint32_t(0), iter->key.index); 87f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_NE(v.endEntries(), iter); 88f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 89f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski iter++; 90f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 91f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_EQ(uint32_t(1), iter.index()); 92f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_TRUE(NULL == *iter); 93f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_NE(v.endEntries(), iter); 94f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 95f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski iter++; 96f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 97f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_EQ(uint32_t(2), iter.index()); 98f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_TRUE(NULL != *iter); 99f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_EQ(uint32_t(1), iter->key.index); 100f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_NE(v.endEntries(), iter); 101f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 102f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski iter++; 103f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 104f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_EQ(v.endEntries(), iter); 105f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 106f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski free(data); 107f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 108f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 109f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} // namespace android 110