blob: b8739f1d62b64d53d7f5b6f87ed19e24eec0d290 [file]
// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#include "formats/gif/embedder.h"
#include <cstdint>
#include <optional>
#include <string>
#include <vector>
#include "absl/status/status_matchers.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "riegeli/bytes/string_reader.h"
#include "riegeli/bytes/string_writer.h"
namespace credentio {
namespace {
TEST(EmbedderTest, Write10BytePayload) {
std::string image = "insert_@underscore";
riegeli::StringReader<> input(image);
std::string manifest_store = "0123456789";
std::vector<uint8_t> expected_output = {
'i', 'n', 's', 'e', 'r', 't', 0x21, 0xFF, 0x0B, 'C', '2',
'P', 'A', '_', 'G', 'I', 'F', 0x01, 0x00, 0x00, 0x0a, '0',
'1', '2', '3', '4', '5', '6', '7', '8', '9', 0x00, '_',
'@', 'u', 'n', 'd', 'e', 'r', 's', 'c', 'o', 'r', 'e',
};
std::string expected(expected_output.begin(), expected_output.end());
std::string output_s;
riegeli::StringWriter<> output(&output_s);
GifEmbedder embedder;
ABSL_ASSERT_OK(
embedder.CopyAndEmbed(input, manifest_store, 6, std::nullopt, output));
ASSERT_TRUE(output.Close());
EXPECT_EQ(output_s, expected);
}
TEST(EmbedderTest, ReplaceExistingPayload) {
std::string image = "before_OLD_C2PA_after";
riegeli::StringReader<> input(image);
std::string manifest_store = "0123456789";
std::vector<uint8_t> expected_output = {
'b', 'e', 'f', 'o', 'r', 'e', '_', 0x21, 0xFF, 0x0B, 'C', '2', 'P',
'A', '_', 'G', 'I', 'F', 0x01, 0x00, 0x00, 0x0a, '0', '1', '2', '3',
'4', '5', '6', '7', '8', '9', 0x00, 'a', 'f', 't', 'e', 'r',
};
std::string expected(expected_output.begin(), expected_output.end());
std::string output_s;
riegeli::StringWriter<> output(&output_s);
GifEmbedder embedder;
ABSL_ASSERT_OK(embedder.CopyAndEmbed(input, manifest_store, 7, 9, output));
ASSERT_TRUE(output.Close());
EXPECT_EQ(output_s, expected);
}
} // namespace
} // namespace credentio