// Copyright (c) 2012 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 "ppapi/tests/test_resource_array.h" #include "ppapi/cpp/dev/resource_array_dev.h" #include "ppapi/cpp/image_data.h" #include "ppapi/cpp/input_event.h" #include "ppapi/tests/testing_instance.h" REGISTER_TEST_CASE(ResourceArray); namespace { pp::InputEvent CreateMouseEvent(pp::Instance* instance, PP_InputEvent_Type type, PP_InputEvent_MouseButton buttons) { return pp::MouseInputEvent( instance, type, 100, // time_stamp 0, // modifiers buttons, pp::Point(), // position 1, // click count pp::Point()); // movement } pp::ImageData CreateImageData(pp::Instance* instance) { return pp::ImageData( instance, PP_IMAGEDATAFORMAT_RGBA_PREMUL, pp::Size(1, 1), true); } } // namespace TestResourceArray::TestResourceArray(TestingInstance* instance) : TestCase(instance) { } TestResourceArray::~TestResourceArray() { } void TestResourceArray::RunTests(const std::string& filter) { RUN_TEST(Basics, filter); RUN_TEST(OutOfRangeAccess, filter); RUN_TEST(EmptyArray, filter); RUN_TEST(InvalidElement, filter); } std::string TestResourceArray::TestBasics() { pp::InputEvent mouse_event_1 = CreateMouseEvent( instance_, PP_INPUTEVENT_TYPE_MOUSEDOWN, PP_INPUTEVENT_MOUSEBUTTON_LEFT); pp::InputEvent mouse_event_2 = CreateMouseEvent( instance_, PP_INPUTEVENT_TYPE_MOUSEUP, PP_INPUTEVENT_MOUSEBUTTON_RIGHT); pp::ImageData image_data = CreateImageData(instance_); PP_Resource elements[] = { mouse_event_1.pp_resource(), mouse_event_2.pp_resource(), image_data.pp_resource() }; size_t size = sizeof(elements) / sizeof(elements[0]); pp::ResourceArray_Dev resource_array(instance_, elements, size); ASSERT_EQ(size, resource_array.size()); for (uint32_t index = 0; index < size; ++index) ASSERT_EQ(elements[index], resource_array[index]); PASS(); } std::string TestResourceArray::TestOutOfRangeAccess() { pp::InputEvent mouse_event_1 = CreateMouseEvent( instance_, PP_INPUTEVENT_TYPE_MOUSEDOWN, PP_INPUTEVENT_MOUSEBUTTON_LEFT); pp::InputEvent mouse_event_2 = CreateMouseEvent( instance_, PP_INPUTEVENT_TYPE_MOUSEUP, PP_INPUTEVENT_MOUSEBUTTON_RIGHT); pp::ImageData image_data = CreateImageData(instance_); PP_Resource elements[] = { mouse_event_1.pp_resource(), mouse_event_2.pp_resource(), image_data.pp_resource() }; size_t size = sizeof(elements) / sizeof(elements[0]); pp::ResourceArray_Dev resource_array(instance_, elements, size); ASSERT_EQ(0, resource_array[size]); ASSERT_EQ(0, resource_array[size + 1]); PASS(); } std::string TestResourceArray::TestEmptyArray() { pp::ResourceArray_Dev resource_array(instance_, NULL, 0); ASSERT_EQ(0, resource_array.size()); PASS(); } std::string TestResourceArray::TestInvalidElement() { pp::InputEvent mouse_event = CreateMouseEvent( instance_, PP_INPUTEVENT_TYPE_MOUSEDOWN, PP_INPUTEVENT_MOUSEBUTTON_LEFT); pp::ImageData image_data = CreateImageData(instance_); PP_Resource elements[] = { mouse_event.pp_resource(), 0, image_data.pp_resource() }; size_t size = sizeof(elements) / sizeof(elements[0]); pp::ResourceArray_Dev resource_array(instance_, elements, size); ASSERT_EQ(size, resource_array.size()); for (uint32_t index = 0; index < size; ++index) ASSERT_EQ(elements[index], resource_array[index]); PASS(); }