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