format_utils_test.cpp revision ea468cc9de468b6574f98b3a7614decfcb7e456e
1ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson/*
2ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * Copyright (C) 2014 The Android Open Source Project
3ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson *
4ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * Licensed under the Apache License, Version 2.0 (the "License");
5ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * you may not use this file except in compliance with the License.
6ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * You may obtain a copy of the License at
7ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson *
8ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson *      http://www.apache.org/licenses/LICENSE-2.0
9ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson *
10ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * Unless required by applicable law or agreed to in writing, software
11ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * distributed under the License is distributed on an "AS IS" BASIS,
12ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * See the License for the specific language governing permissions and
14ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson * limitations under the License.
15ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson */
16ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
17ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include "suggest/policyimpl/dictionary/utils/format_utils.h"
18ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
19ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <gtest/gtest.h>
20ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
21ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include <vector>
22ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
23ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson#include "utils/byte_array_view.h"
24ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
25ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonnamespace latinime {
26ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonnamespace {
27ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
28ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon WilsonTEST(FormatUtilsTest, TestMagicNumber) {
29ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    EXPECT_EQ(0x9BC13AFE, FormatUtils::MAGIC_NUMBER) << "Magic number must not be changed.";
30ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}
31ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
32ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilsonconst std::vector<uint8_t> getBuffer(const int magicNumber, const int version, const uint16_t flags,
33ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson        const size_t headerSize) {
34ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    std::vector<uint8_t> buffer;
35ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    buffer.push_back(magicNumber >> 24);
36ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    buffer.push_back(magicNumber >> 16);
37ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    buffer.push_back(magicNumber >> 8);
38ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    buffer.push_back(magicNumber);
39ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
40ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    buffer.push_back(version >> 8);
41ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    buffer.push_back(version);
42ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
43ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    buffer.push_back(flags >> 8);
44ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    buffer.push_back(flags);
45ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
46ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    buffer.push_back(headerSize >> 24);
47ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    buffer.push_back(headerSize >> 16);
48ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    buffer.push_back(headerSize >> 8);
49ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    buffer.push_back(headerSize);
50ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    return buffer;
51ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}
52a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson
53ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon WilsonTEST(FormatUtilsTest, TestDetectFormatVersion) {
54ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    EXPECT_EQ(FormatUtils::UNKNOWN_VERSION,
55ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson            FormatUtils::detectFormatVersion(ReadOnlyByteArrayView()));
56ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
57ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    {
58ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson        const std::vector<uint8_t> buffer =
59ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson                getBuffer(FormatUtils::MAGIC_NUMBER, FormatUtils::VERSION_2, 0, 0);
60a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson        EXPECT_EQ(FormatUtils::VERSION_2, FormatUtils::detectFormatVersion(
61a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson                ReadOnlyByteArrayView(buffer.data(), buffer.size())));
62ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    }
63ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    {
64ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson        const std::vector<uint8_t> buffer =
65ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson                getBuffer(FormatUtils::MAGIC_NUMBER, FormatUtils::VERSION_402, 0, 0);
66ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson        EXPECT_EQ(FormatUtils::VERSION_402, FormatUtils::detectFormatVersion(
67ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson                ReadOnlyByteArrayView(buffer.data(), buffer.size())));
68ab05b00fefd34a761dfaf1ccaf8ad14d325873f4radhakrishna    }
69ab05b00fefd34a761dfaf1ccaf8ad14d325873f4radhakrishna    {
70ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson        const std::vector<uint8_t> buffer =
71ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson                getBuffer(FormatUtils::MAGIC_NUMBER, FormatUtils::VERSION_403, 0, 0);
72ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson        EXPECT_EQ(FormatUtils::VERSION_403, FormatUtils::detectFormatVersion(
73ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson                ReadOnlyByteArrayView(buffer.data(), buffer.size())));
74ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    }
75ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
76ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    {
77ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson        const std::vector<uint8_t> buffer =
78ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson                getBuffer(FormatUtils::MAGIC_NUMBER - 1, FormatUtils::VERSION_2, 0, 0);
79ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson        EXPECT_EQ(FormatUtils::UNKNOWN_VERSION, FormatUtils::detectFormatVersion(
80ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson                ReadOnlyByteArrayView(buffer.data(), buffer.size())));
81ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    }
820bc6186c13bed6530aadad53308916869871aa8cSaurabh Shah    {
830bc6186c13bed6530aadad53308916869871aa8cSaurabh Shah        const std::vector<uint8_t> buffer =
84ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson                getBuffer(FormatUtils::MAGIC_NUMBER, 100, 0, 0);
85ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson        EXPECT_EQ(FormatUtils::UNKNOWN_VERSION, FormatUtils::detectFormatVersion(
86ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson                ReadOnlyByteArrayView(buffer.data(), buffer.size())));
87ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    }
88ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson    {
89a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson        const std::vector<uint8_t> buffer =
90a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson                getBuffer(FormatUtils::MAGIC_NUMBER, FormatUtils::VERSION_2, 0, 0);
91ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson        EXPECT_EQ(FormatUtils::UNKNOWN_VERSION, FormatUtils::detectFormatVersion(
92ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson                ReadOnlyByteArrayView(buffer.data(), buffer.size() - 1)));
93a653efede03423aa840da24634f1ec6f20796f1eSimon Wilson    }
94ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}
95ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson
96ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}  // namespace
97ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson}  // namespace latinime
98ef53c1c84ec55ed50f607d52b7abfbb86239408eSimon Wilson