15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/tests/test_mouse_cursor.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/image_data.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/tests/test_case.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/tests/testing_instance.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REGISTER_TEST_CASE(MouseCursor);
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestMouseCursor::TestMouseCursor(TestingInstance* instance)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : TestCase(instance) {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestMouseCursor::Init() {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_cursor_interface_ = static_cast<const PPB_MouseCursor*>(
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pp::Module::Get()->GetBrowserInterface(PPB_MOUSECURSOR_INTERFACE));
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return !!mouse_cursor_interface_;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestMouseCursor::RunTests(const std::string& filter) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RUN_TEST(Type, filter);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RUN_TEST(Custom, filter);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RUN_TEST(Point, filter);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string TestMouseCursor::TestType() {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(PP_ToBool(mouse_cursor_interface_->SetCursor(
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance_->pp_instance(), PP_MOUSECURSOR_TYPE_POINTER, 0, NULL)));
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(PP_ToBool(mouse_cursor_interface_->SetCursor(
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance_->pp_instance(), static_cast<PP_MouseCursor_Type>(-2),
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      0, NULL)));
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PASS();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string TestMouseCursor::TestCustom() {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // First test a valid image.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pp::ImageData valid_image(instance_,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            pp::ImageData::GetNativeImageDataFormat(),
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            pp::Size(16, 16), true);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Point point = { 0, 0 };
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(PP_ToBool(mouse_cursor_interface_->SetCursor(
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance_->pp_instance(), PP_MOUSECURSOR_TYPE_CUSTOM,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      valid_image.pp_resource(), &point)));
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // 0 image resource ID.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(PP_ToBool(mouse_cursor_interface_->SetCursor(
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance_->pp_instance(), PP_MOUSECURSOR_TYPE_CUSTOM, 0, NULL)));
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Image specified for predefined type.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(PP_ToBool(mouse_cursor_interface_->SetCursor(
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance_->pp_instance(), PP_MOUSECURSOR_TYPE_POINTER,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      valid_image.pp_resource(), &point)));
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A too-big image.
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pp::ImageData big_image(instance_, pp::ImageData::GetNativeImageDataFormat(),
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            pp::Size(65, 12), true);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(PP_ToBool(mouse_cursor_interface_->SetCursor(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance_->pp_instance(), PP_MOUSECURSOR_TYPE_CUSTOM,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      big_image.pp_resource(), &point)));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PASS();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string TestMouseCursor::TestPoint() {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pp::ImageData valid_image(instance_,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            pp::ImageData::GetNativeImageDataFormat(),
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            pp::Size(16, 16), true);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Point point = { -1, 0 };
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(PP_ToBool(mouse_cursor_interface_->SetCursor(
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance_->pp_instance(), PP_MOUSECURSOR_TYPE_CUSTOM,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      valid_image.pp_resource(), &point)));
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  point.x = 67;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  point.y = 5;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(PP_ToBool(mouse_cursor_interface_->SetCursor(
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      instance_->pp_instance(), PP_MOUSECURSOR_TYPE_CUSTOM,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      valid_image.pp_resource(), &point)));
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PASS();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
83