// Copyright 2015 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "core/fpdfapi/page/cpdf_streamparser.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/base/span.h" TEST(cpdf_streamparser, ReadHexString) { { // Position out of bounds. uint8_t data[] = "12ab>"; CPDF_StreamParser parser(data); parser.SetPos(6); EXPECT_EQ("", parser.ReadHexString()); } { // Regular conversion. uint8_t data[] = "1A2b>abcd"; CPDF_StreamParser parser(data); EXPECT_EQ("\x1a\x2b", parser.ReadHexString()); EXPECT_EQ(5u, parser.GetPos()); } { // Missing ending > uint8_t data[] = "1A2b"; CPDF_StreamParser parser(data); EXPECT_EQ("\x1a\x2b", parser.ReadHexString()); EXPECT_EQ(5u, parser.GetPos()); } { // Uneven number of bytes. uint8_t data[] = "1A2>asdf"; CPDF_StreamParser parser(data); EXPECT_EQ("\x1a\x20", parser.ReadHexString()); EXPECT_EQ(4u, parser.GetPos()); } { uint8_t data[] = ">"; CPDF_StreamParser parser(data); EXPECT_EQ("", parser.ReadHexString()); EXPECT_EQ(1u, parser.GetPos()); } }