1198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka/*
2198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka * Copyright (C) 2015 The Android Open Source Project
3198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka *
4198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka * Licensed under the Apache License, Version 2.0 (the "License");
5198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka * you may not use this file except in compliance with the License.
6198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka * You may obtain a copy of the License at
7198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka *
8198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka *      http://www.apache.org/licenses/LICENSE-2.0
9198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka *
10198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka * Unless required by applicable law or agreed to in writing, software
11198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka * distributed under the License is distributed on an "AS IS" BASIS,
12198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka * See the License for the specific language governing permissions and
14198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka * limitations under the License.
15198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka */
16198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka
17198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka#ifndef MINIKIN_TEST_ICU_TEST_BASE_H
18198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka#define MINIKIN_TEST_ICU_TEST_BASE_H
19198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka
20198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka#include <gtest/gtest.h>
21198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka#include <unicode/uclean.h>
22198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka#include <unicode/udata.h>
23198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka
24198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka// low level file access for mapping ICU data
25198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka#include <fcntl.h>
26198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka#include <sys/stat.h>
27198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka#include <sys/mman.h>
28198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka
29198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonakaclass ICUTestBase : public testing::Test {
30198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonakaprotected:
31198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka    virtual void SetUp() override {
32198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka        const char* fn = "/system/usr/icu/" U_ICUDATA_NAME ".dat";
33198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka        int fd = open(fn, O_RDONLY);
34198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka        ASSERT_NE(-1, fd);
35198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka        struct stat sb;
36198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka        ASSERT_EQ(0, fstat(fd, &sb));
37198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka        void* data = mmap(NULL, sb.st_size, PROT_READ, MAP_SHARED, fd, 0);
38198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka
39198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka        UErrorCode errorCode = U_ZERO_ERROR;
40198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka        udata_setCommonData(data, &errorCode);
41198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka        ASSERT_TRUE(U_SUCCESS(errorCode));
42198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka        u_init(&errorCode);
43198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka        ASSERT_TRUE(U_SUCCESS(errorCode));
44198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka    }
45198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka
46198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka    virtual void TearDown() override {
47198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka        u_cleanup();
48198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka    }
49198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka};
50198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka
51198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka
52198b46f1fea3f47ef8eb6317799c0d77aaec52f6Seigo Nonaka#endif  //  MINIKIN_TEST_ICU_TEST_BASE_H
53