blob: 9fc9216084c0d4c0c57a04b53c6c0113cd576289 [file] [log] [blame]
// Copyright 2018 The Chromium 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 "services/audio/user_input_monitor.h"
#include <memory>
#include <utility>
#include "media/base/user_input_monitor.h"
#include "mojo/public/cpp/system/platform_handle.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace audio {
namespace {
constexpr uint32_t kKeyPressCount = 10;
}
TEST(AudioServiceUserInputMonitorTest, CreateWithValidHandle) {
std::unique_ptr<base::MappedReadOnlyRegion> shmem =
std::make_unique<base::MappedReadOnlyRegion>(
base::ReadOnlySharedMemoryRegion::Create(sizeof(uint32_t)));
ASSERT_TRUE(shmem->IsValid());
mojo::ScopedSharedBufferHandle handle =
mojo::WrapReadOnlySharedMemoryRegion(shmem->region.Duplicate());
EXPECT_TRUE(UserInputMonitor::Create(std::move(handle)));
}
TEST(AudioServiceUserInputMonitorTest, CreateWithInvalidHandle_ReturnsNullptr) {
EXPECT_EQ(nullptr,
UserInputMonitor::Create(mojo::ScopedSharedBufferHandle()));
}
TEST(AudioServiceUserInputMonitorTest, GetKeyPressCount) {
std::unique_ptr<base::MappedReadOnlyRegion> shmem =
std::make_unique<base::MappedReadOnlyRegion>(
base::ReadOnlySharedMemoryRegion::Create(sizeof(uint32_t)));
ASSERT_TRUE(shmem->IsValid());
mojo::ScopedSharedBufferHandle handle =
mojo::WrapReadOnlySharedMemoryRegion(shmem->region.Duplicate());
std::unique_ptr<UserInputMonitor> monitor =
UserInputMonitor::Create(std::move(handle));
EXPECT_TRUE(monitor);
media::WriteKeyPressMonitorCount(shmem->mapping, kKeyPressCount);
EXPECT_EQ(kKeyPressCount, monitor->GetKeyPressCount());
}
TEST(AudioServiceUserInputMonitorTest, GetKeyPressCountAfterMemoryUnmap) {
std::unique_ptr<base::MappedReadOnlyRegion> shmem =
std::make_unique<base::MappedReadOnlyRegion>(
base::ReadOnlySharedMemoryRegion::Create(sizeof(uint32_t)));
ASSERT_TRUE(shmem->IsValid());
mojo::ScopedSharedBufferHandle handle =
mojo::WrapReadOnlySharedMemoryRegion(shmem->region.Duplicate());
std::unique_ptr<UserInputMonitor> monitor =
UserInputMonitor::Create(std::move(handle));
EXPECT_TRUE(monitor);
media::WriteKeyPressMonitorCount(shmem->mapping, kKeyPressCount);
EXPECT_EQ(kKeyPressCount, monitor->GetKeyPressCount());
// ReadOnlyMapping should still be valid, containing the last updated value,
// after shmem reset.
shmem.reset();
EXPECT_EQ(kKeyPressCount, monitor->GetKeyPressCount());
}
} // namespace audio