blob: 611df8cb416e6b04049b3ee21fea402c0cf24f8f [file] [log] [blame]
// Copyright 2017 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 "base/atomicops.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/aura/env.h"
#include "ui/aura/test/aura_test_suite.h"
#include "ui/gfx/geometry/point.h"
namespace aura {
namespace {
gfx::Point Atomic32ToPoint(base::subtle::Atomic32 atomic) {
return gfx::Point(static_cast<int16_t>(atomic >> 16),
static_cast<int16_t>(atomic & 0xFFFF));
}
} // namespace
TEST(MouseLocationManagerTest, PositiveCoordinates) {
test::EnvReinstaller reinstaller;
auto env = Env::CreateInstance(Env::Mode::LOCAL);
env->CreateMouseLocationManager();
const gfx::Point point(100, 150);
env->SetLastMouseLocation(point);
base::subtle::Atomic32* cursor_location_memory = nullptr;
mojo::ScopedSharedBufferHandle handle = env->GetLastMouseLocationMemory();
ASSERT_TRUE(handle.is_valid());
mojo::ScopedSharedBufferMapping cursor_location_mapping =
handle->Map(sizeof(base::subtle::Atomic32));
ASSERT_TRUE(cursor_location_mapping);
cursor_location_memory =
reinterpret_cast<base::subtle::Atomic32*>(cursor_location_mapping.get());
base::subtle::Atomic32 location =
base::subtle::NoBarrier_Load(cursor_location_memory);
EXPECT_EQ(point, Atomic32ToPoint(location));
}
TEST(MouseLocationManagerTest, NegativeCoordinates) {
test::EnvReinstaller reinstaller;
auto env = Env::CreateInstance(Env::Mode::LOCAL);
env->CreateMouseLocationManager();
const gfx::Point point(-10, -11);
env->SetLastMouseLocation(point);
base::subtle::Atomic32* cursor_location_memory = nullptr;
mojo::ScopedSharedBufferHandle handle = env->GetLastMouseLocationMemory();
ASSERT_TRUE(handle.is_valid());
mojo::ScopedSharedBufferMapping cursor_location_mapping =
handle->Map(sizeof(base::subtle::Atomic32));
ASSERT_TRUE(cursor_location_mapping);
cursor_location_memory =
reinterpret_cast<base::subtle::Atomic32*>(cursor_location_mapping.get());
base::subtle::Atomic32 location =
base::subtle::NoBarrier_Load(cursor_location_memory);
EXPECT_EQ(point, Atomic32ToPoint(location));
}
} // namespace aura