blob: 3894c0a7ec7898f83fa99a5b52602608b8437d07 [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <string>
#include "build/blink_buildflags.h"
#include "mojo/public/cpp/base/shared_memory_mojom_traits.h"
#include "mojo/public/cpp/test_support/test_utils.h"
#include "mojo/public/mojom/base/shared_memory.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
TEST(SharedMemoryMojomTest, ReadOnly) {
auto region = base::ReadOnlySharedMemoryRegion::Create(64);
const std::string kTestData = "Hello, world!";
base::as_writable_chars(base::span(region.mapping))
.copy_prefix_from(kTestData);
base::ReadOnlySharedMemoryRegion read_only_out;
ASSERT_TRUE(mojo::test::SerializeAndDeserialize<
mojo_base::mojom::ReadOnlySharedMemoryRegion>(region.region,
read_only_out));
base::ReadOnlySharedMemoryMapping mapping = read_only_out.Map();
EXPECT_EQ(base::as_chars(base::span(region.mapping)).first(kTestData.size()),
kTestData);
}
#if BUILDFLAG(USE_BLINK)
TEST(SharedMemoryMojomTest, Writable) {
auto region = base::WritableSharedMemoryRegion::Create(64);
auto mapping = region.Map();
const std::string kTestData = "Hello, world!";
base::as_writable_chars(base::span(mapping)).copy_prefix_from(kTestData);
base::WritableSharedMemoryRegion writable_out;
ASSERT_TRUE(
mojo::test::SerializeAndDeserialize<
mojo_base::mojom::WritableSharedMemoryRegion>(region, writable_out));
mapping = writable_out.Map();
EXPECT_EQ(base::as_chars(base::span(mapping)).first(kTestData.size()),
kTestData);
}
#endif // BUILDFLAG(USE_BLINK)
TEST(SharedMemoryMojomTest, Unsafe) {
auto region = base::UnsafeSharedMemoryRegion::Create(64);
auto mapping = region.Map();
const std::string kTestData = "Hello, world!";
base::as_writable_chars(base::span(mapping)).copy_prefix_from(kTestData);
base::UnsafeSharedMemoryRegion unsafe_out;
ASSERT_TRUE(mojo::test::SerializeAndDeserialize<
mojo_base::mojom::UnsafeSharedMemoryRegion>(region, unsafe_out));
mapping = unsafe_out.Map();
EXPECT_EQ(base::as_chars(base::span(mapping)).first(kTestData.size()),
kTestData);
}