15d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi/* 25d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project 35d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * 45d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License"); 55d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * you may not use this file except in compliance with the License. 65d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * You may obtain a copy of the License at 75d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * 85d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * http://www.apache.org/licenses/LICENSE-2.0 95d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * 105d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software 115d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS, 125d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * See the License for the specific language governing permissions and 145d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi * limitations under the License. 155d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi */ 165d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 1788bc312ad34321fb3e81be2dc939a889d065f4a7Keisuke Kuroyanagi#include "dictionary/utils/format_utils.h" 185d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 195d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi#include <gtest/gtest.h> 205d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 215d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi#include <vector> 225d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 235d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi#include "utils/byte_array_view.h" 245d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 255d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanaginamespace latinime { 265d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanaginamespace { 275d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 285d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke KuroyanagiTEST(FormatUtilsTest, TestMagicNumber) { 295d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi EXPECT_EQ(0x9BC13AFE, FormatUtils::MAGIC_NUMBER) << "Magic number must not be changed."; 305d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi} 315d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 325d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagiconst std::vector<uint8_t> getBuffer(const int magicNumber, const int version, const uint16_t flags, 335d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi const size_t headerSize) { 345d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi std::vector<uint8_t> buffer; 355d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi buffer.push_back(magicNumber >> 24); 365d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi buffer.push_back(magicNumber >> 16); 375d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi buffer.push_back(magicNumber >> 8); 385d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi buffer.push_back(magicNumber); 395d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 405d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi buffer.push_back(version >> 8); 415d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi buffer.push_back(version); 425d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 435d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi buffer.push_back(flags >> 8); 445d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi buffer.push_back(flags); 455d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 465d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi buffer.push_back(headerSize >> 24); 475d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi buffer.push_back(headerSize >> 16); 485d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi buffer.push_back(headerSize >> 8); 495d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi buffer.push_back(headerSize); 505d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi return buffer; 515d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi} 525d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 535d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke KuroyanagiTEST(FormatUtilsTest, TestDetectFormatVersion) { 545d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi EXPECT_EQ(FormatUtils::UNKNOWN_VERSION, 555d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi FormatUtils::detectFormatVersion(ReadOnlyByteArrayView())); 565d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 575d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi { 585d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi const std::vector<uint8_t> buffer = 595d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi getBuffer(FormatUtils::MAGIC_NUMBER, FormatUtils::VERSION_2, 0, 0); 605d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi EXPECT_EQ(FormatUtils::VERSION_2, FormatUtils::detectFormatVersion( 615d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi ReadOnlyByteArrayView(buffer.data(), buffer.size()))); 625d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi } 635d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi { 645d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi const std::vector<uint8_t> buffer = 65ea468cc9de468b6574f98b3a7614decfcb7e456eKeisuke Kuroyanagi getBuffer(FormatUtils::MAGIC_NUMBER, FormatUtils::VERSION_402, 0, 0); 66ea468cc9de468b6574f98b3a7614decfcb7e456eKeisuke Kuroyanagi EXPECT_EQ(FormatUtils::VERSION_402, FormatUtils::detectFormatVersion( 675d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi ReadOnlyByteArrayView(buffer.data(), buffer.size()))); 685d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi } 695d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi { 705d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi const std::vector<uint8_t> buffer = 71ea468cc9de468b6574f98b3a7614decfcb7e456eKeisuke Kuroyanagi getBuffer(FormatUtils::MAGIC_NUMBER, FormatUtils::VERSION_403, 0, 0); 72ea468cc9de468b6574f98b3a7614decfcb7e456eKeisuke Kuroyanagi EXPECT_EQ(FormatUtils::VERSION_403, FormatUtils::detectFormatVersion( 735d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi ReadOnlyByteArrayView(buffer.data(), buffer.size()))); 745d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi } 755d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 765d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi { 775d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi const std::vector<uint8_t> buffer = 785d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi getBuffer(FormatUtils::MAGIC_NUMBER - 1, FormatUtils::VERSION_2, 0, 0); 795d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi EXPECT_EQ(FormatUtils::UNKNOWN_VERSION, FormatUtils::detectFormatVersion( 805d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi ReadOnlyByteArrayView(buffer.data(), buffer.size()))); 815d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi } 825d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi { 835d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi const std::vector<uint8_t> buffer = 845d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi getBuffer(FormatUtils::MAGIC_NUMBER, 100, 0, 0); 855d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi EXPECT_EQ(FormatUtils::UNKNOWN_VERSION, FormatUtils::detectFormatVersion( 865d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi ReadOnlyByteArrayView(buffer.data(), buffer.size()))); 875d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi } 885d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi { 895d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi const std::vector<uint8_t> buffer = 905d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi getBuffer(FormatUtils::MAGIC_NUMBER, FormatUtils::VERSION_2, 0, 0); 915d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi EXPECT_EQ(FormatUtils::UNKNOWN_VERSION, FormatUtils::detectFormatVersion( 925d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi ReadOnlyByteArrayView(buffer.data(), buffer.size() - 1))); 935d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi } 945d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi} 955d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi 965d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi} // namespace 975d95e8d747bbf83268f0a1b5aab964f73e5b1bd7Keisuke Kuroyanagi} // namespace latinime 98