blob: 0ef288eea2f947ecdd1d0e21df4f558d82ab648d [file] [log] [blame]
// Copyright 2016 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 <memory>
#include "ash/shell.h"
#include "ash/system/palette/mock_palette_tool_delegate.h"
#include "ash/system/palette/palette_ids.h"
#include "ash/system/palette/palette_tool.h"
#include "ash/system/palette/tools/capture_region_mode.h"
#include "ash/system/palette/tools/capture_screen_action.h"
#include "ash/test/ash_test_base.h"
#include "ash/test_screenshot_delegate.h"
#include "ash/utility/screenshot_controller.h"
#include "base/macros.h"
#include "ui/events/test/event_generator.h"
namespace ash {
// Base class for all screenshot pallette tools tests.
class ScreenshotToolTest : public AshTestBase {
public:
ScreenshotToolTest() = default;
~ScreenshotToolTest() override = default;
void SetUp() override {
AshTestBase::SetUp();
palette_tool_delegate_ = std::make_unique<MockPaletteToolDelegate>();
}
protected:
std::unique_ptr<MockPaletteToolDelegate> palette_tool_delegate_;
bool IsPartialScreenshotActive() {
return static_cast<bool>(
Shell::Get()->screenshot_controller()->on_screenshot_session_done_);
}
private:
DISALLOW_COPY_AND_ASSIGN(ScreenshotToolTest);
};
// Verifies that capturing a region triggers the partial screenshot delegate
// method. Invoking the callback passed to the delegate disables the tool.
TEST_F(ScreenshotToolTest, EnablingCaptureRegionCallsDelegateAndDisablesTool) {
std::unique_ptr<PaletteTool> tool =
std::make_unique<CaptureRegionMode>(palette_tool_delegate_.get());
// Starting a partial screenshot calls the calls the palette delegate to start
// a screenshot session and hides the palette.
EXPECT_CALL(*palette_tool_delegate_.get(), HidePalette());
tool->OnEnable();
EXPECT_TRUE(IsPartialScreenshotActive());
testing::Mock::VerifyAndClearExpectations(palette_tool_delegate_.get());
// Simulate region selection.
EXPECT_CALL(*palette_tool_delegate_.get(),
DisableTool(PaletteToolId::CAPTURE_REGION));
const gfx::Rect selection(100, 200, 300, 399);
ui::test::EventGenerator* event_generator = GetEventGenerator();
event_generator->EnterPenPointerMode();
event_generator->MoveTouch(selection.origin());
event_generator->PressTouch();
event_generator->MoveTouch(gfx::Point(selection.right(), selection.bottom()));
event_generator->ReleaseTouch();
EXPECT_FALSE(IsPartialScreenshotActive());
EXPECT_EQ(1, GetScreenshotDelegate()->handle_take_partial_screenshot_count());
EXPECT_EQ(selection.ToString(),
GetScreenshotDelegate()->last_rect().ToString());
testing::Mock::VerifyAndClearExpectations(palette_tool_delegate_.get());
// Enable the tool again
tool->OnEnable();
EXPECT_TRUE(IsPartialScreenshotActive());
// Calling the associated callback (partial screenshot finished) will disable
// the tool.
EXPECT_CALL(*palette_tool_delegate_.get(),
DisableTool(PaletteToolId::CAPTURE_REGION));
Shell::Get()->screenshot_controller()->CancelScreenshotSession();
EXPECT_FALSE(IsPartialScreenshotActive());
}
// Verifies that capturing the screen triggers the screenshot delegate method,
// disables the tool, and hides the palette.
TEST_F(ScreenshotToolTest, EnablingCaptureScreenCallsDelegateAndDisablesTool) {
std::unique_ptr<PaletteTool> tool =
std::make_unique<CaptureScreenAction>(palette_tool_delegate_.get());
EXPECT_CALL(*palette_tool_delegate_.get(),
DisableTool(PaletteToolId::CAPTURE_SCREEN));
EXPECT_CALL(*palette_tool_delegate_.get(), HidePaletteImmediately());
tool->OnEnable();
EXPECT_EQ(1, GetScreenshotDelegate()->handle_take_screenshot_count());
}
} // namespace ash