1464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com/*
2464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * Copyright 2011 Google Inc. All Rights Reserved.
3464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com *
4464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * Licensed under the Apache License, Version 2.0 (the "License");
5464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * you may not use this file except in compliance with the License.
6464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * You may obtain a copy of the License at
7464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com *
8464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com *      http://www.apache.org/licenses/LICENSE-2.0
9464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com *
10464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * Unless required by applicable law or agreed to in writing, software
11464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * distributed under the License is distributed on an "AS IS" BASIS,
12464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * See the License for the specific language governing permissions and
14464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com * limitations under the License.
15464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com */
16464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
17464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com#include "gtest/gtest.h"
18464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com#include "sfntly/data/writable_font_data.h"
19464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com#include "sfntly/data/memory_byte_array.h"
20464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
21464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comnamespace sfntly {
22464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
23464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.comconst byte_t TEST_OTF_DATA[] =
24464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com    {0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
25464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
26246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.combool TestOTFRead() {
27464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  ByteVector bytes;
28464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  for (size_t i = 0; i < sizeof(TEST_OTF_DATA) / sizeof(byte_t); ++i) {
29464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com    bytes.push_back(TEST_OTF_DATA[i]);
30464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  }
31464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  ByteArrayPtr array = new MemoryByteArray(&(bytes[0]), bytes.size());
32464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  ReadableFontDataPtr data = new ReadableFontData(array);
33464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
34246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  EXPECT_EQ(-1, data->ReadByte(0));
35246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  EXPECT_EQ(0xff, data->ReadUByte(0));
36246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  EXPECT_EQ(0x01, data->ReadByte(1));
37246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  EXPECT_EQ(65281, data->ReadUShort(0));
38246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  EXPECT_EQ(-255, data->ReadShort(0));
39246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  EXPECT_EQ(16711937, data->ReadUInt24(0));
40246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  EXPECT_EQ(4278255873LL, data->ReadULong(0));
41246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  EXPECT_EQ(-16711423, data->ReadLong(0));
42464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  return true;
43464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
44464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
45246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.combool TestOTFCopy() {
46464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  ByteVector source_bytes(1024);
47464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  for (size_t i = 0; i < source_bytes.size(); ++i) {
48464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com    source_bytes[i] = (byte_t)(i & 0xff);
49464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  }
50464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  ByteArrayPtr source_array = new MemoryByteArray(&(source_bytes[0]), 1024);
51464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  ReadableFontDataPtr source = new ReadableFontData(source_array);
52464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
53464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  ByteVector destination_bytes(1024);
54464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  ByteArrayPtr destination_array =
55464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com      new MemoryByteArray(&(destination_bytes[0]), 1024);
56464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  WritableFontDataPtr destination = new WritableFontData(destination_array);
57464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
58246300f7fab1f2539c3207ce5ec28cc355465be8arthurhsu@google.com  int32_t length = source->CopyTo(destination);
59464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  EXPECT_EQ(1024, length);
60464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  EXPECT_TRUE(std::equal(source_bytes.begin(), source_bytes.end(),
61464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com                         destination_bytes.begin()));
62464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com  return true;
63464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}
64464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com
65464987db923362e596195f9eebd34fc508c9a41arthurhsu@google.com}  // namespace sfntly
666a22b959c06e66a039c630e6ac514234114b46cbarthurhsu@google.com
676a22b959c06e66a039c630e6ac514234114b46cbarthurhsu@google.comTEST(OpenTypeData, All) {
686a22b959c06e66a039c630e6ac514234114b46cbarthurhsu@google.com  ASSERT_TRUE(sfntly::TestOTFRead());
696a22b959c06e66a039c630e6ac514234114b46cbarthurhsu@google.com  ASSERT_TRUE(sfntly::TestOTFCopy());
706a22b959c06e66a039c630e6ac514234114b46cbarthurhsu@google.com}
71