| Index: ppapi/native_client/tests/ppapi_browser/ppb_file_system/ppapi_ppb_file_system.cc
|
| ===================================================================
|
| --- ppapi/native_client/tests/ppapi_browser/ppb_file_system/ppapi_ppb_file_system.cc (revision 0)
|
| +++ ppapi/native_client/tests/ppapi_browser/ppb_file_system/ppapi_ppb_file_system.cc (revision 0)
|
| @@ -0,0 +1,192 @@
|
| +// Copyright (c) 2011 The Native Client 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 "native_client/tests/ppapi_test_lib/get_browser_interface.h"
|
| +#include "native_client/tests/ppapi_test_lib/test_interface.h"
|
| +#include "native_client/src/shared/platform/nacl_check.h"
|
| +#include "ppapi/c/ppb_core.h"
|
| +#include "ppapi/c/ppb_file_system.h"
|
| +#include "ppapi/c/ppb_url_request_info.h"
|
| +#include "ppapi/c/pp_errors.h"
|
| +
|
| +namespace {
|
| +
|
| +void OpenCallback(void* /*data*/, int32_t /*result*/) {
|
| +}
|
| +
|
| +const PP_FileSystemType kFileSystemTypes[] = {
|
| + PP_FILESYSTEMTYPE_EXTERNAL,
|
| + PP_FILESYSTEMTYPE_LOCALPERSISTENT,
|
| + PP_FILESYSTEMTYPE_LOCALTEMPORARY
|
| +};
|
| +
|
| +const size_t kNumFileSystemTypes =
|
| + sizeof(kFileSystemTypes) / sizeof(kFileSystemTypes[0]);
|
| +
|
| +void TestCreate() {
|
| + PP_Resource file_system = kInvalidResource;
|
| + const PPB_FileSystem* ppb_file_system = PPBFileSystem();
|
| + // Test to see if PPB_FileSystem::Create returns PP_Resource value of 0
|
| + // if the instance parameter is invalid.
|
| + file_system = ppb_file_system->Create(kInvalidInstance,
|
| + PP_FILESYSTEMTYPE_EXTERNAL);
|
| + EXPECT(file_system == kInvalidResource);
|
| + file_system = ppb_file_system->Create(kInvalidInstance,
|
| + PP_FILESYSTEMTYPE_LOCALPERSISTENT);
|
| + EXPECT(file_system == kInvalidResource);
|
| + file_system = ppb_file_system->Create(kInvalidInstance,
|
| + PP_FILESYSTEMTYPE_LOCALTEMPORARY);
|
| + EXPECT(file_system == kInvalidResource);
|
| +
|
| + // Test for failure when an invalid file system type is requested.
|
| + file_system = ppb_file_system->Create(pp_instance(),
|
| + PP_FILESYSTEMTYPE_INVALID);
|
| + EXPECT(file_system == kInvalidResource);
|
| +
|
| + // Test to see if PPB_FileSystem::Create returns a valid PP_Resource
|
| + // value when given a valid PP_Instance value parameter. Test for all
|
| + // three file system types PPB_FileSystem supports.
|
| + for (size_t i = 0; i < kNumFileSystemTypes; ++i) {
|
| + file_system = ppb_file_system->Create(pp_instance(), kFileSystemTypes[i]);
|
| + EXPECT(file_system != kInvalidResource);
|
| + PPBCore()->ReleaseResource(file_system);
|
| + }
|
| + TEST_PASSED;
|
| +}
|
| +
|
| +void TestIsFileSystem() {
|
| + const PPB_Core* ppb_core = PPBCore();
|
| + const PPB_FileSystem* ppb_file_system = PPBFileSystem();
|
| + PP_Resource file_system = kInvalidResource;
|
| + PP_Bool is_file_system = PP_FALSE;
|
| +
|
| + // Test fail for invalid resource.
|
| + EXPECT(ppb_file_system->IsFileSystem(kInvalidResource) != PP_TRUE);
|
| +
|
| + // Test pass for the different valid system types, and test fail against a
|
| + // resource that has been released.
|
| + for (size_t i = 0; i < kNumFileSystemTypes; ++i) {
|
| + file_system = ppb_file_system->Create(pp_instance(), kFileSystemTypes[i]);
|
| + CHECK(file_system != kInvalidResource);
|
| +
|
| + is_file_system = ppb_file_system->IsFileSystem(file_system);
|
| + ppb_core->ReleaseResource(file_system);
|
| +
|
| + EXPECT(is_file_system == PP_TRUE);
|
| +
|
| + is_file_system = ppb_file_system->IsFileSystem(file_system);
|
| + EXPECT(is_file_system == PP_FALSE);
|
| + }
|
| +
|
| + // Test fail against a non-filesystem resource.
|
| + PP_Resource url_request_info = PPBURLRequestInfo()->Create(pp_instance());
|
| + CHECK(url_request_info != kInvalidResource);
|
| + is_file_system = ppb_file_system->IsFileSystem(url_request_info);
|
| + ppb_core->ReleaseResource(url_request_info);
|
| + EXPECT(is_file_system == PP_FALSE);
|
| +
|
| + TEST_PASSED;
|
| +}
|
| +
|
| +void TestOpen() {
|
| + const PPB_Core* ppb_core = PPBCore();
|
| + const PPB_FileSystem* ppb_file_system = PPBFileSystem();
|
| + PP_Resource file_system = kInvalidResource;
|
| + PP_CompletionCallback nop_callback =
|
| + MakeTestableCompletionCallback("NopCallback", OpenCallback);
|
| + PP_CompletionCallback open_callback =
|
| + MakeTestableCompletionCallback("OpenCallback", OpenCallback, NULL);
|
| + int32_t pp_error = PP_ERROR_FAILED;
|
| + int64_t kSize = 1024; // Dummy value.
|
| +
|
| + // Test to make sure opening an invalid file system fails.
|
| + pp_error = ppb_file_system->Open(kInvalidResource, kSize, nop_callback);
|
| + EXPECT(pp_error == PP_ERROR_BADRESOURCE);
|
| +
|
| + // Test to make sure external file system is not supported.
|
| + // TODO(sanga): Once Chrome supports external file systems, change this test
|
| + // to reflect the change.
|
| + file_system = ppb_file_system->Create(pp_instance(),
|
| + PP_FILESYSTEMTYPE_EXTERNAL);
|
| + pp_error = ppb_file_system->Open(file_system, kSize, nop_callback);
|
| + ppb_core->ReleaseResource(file_system);
|
| + EXPECT(pp_error == PP_ERROR_FAILED);
|
| +
|
| + // Test local temporary and local persistant file systems.
|
| + for (size_t i = 1; i < kNumFileSystemTypes; ++i) {
|
| +#ifdef __native_client__
|
| + // Test fail for blocking open.
|
| + //
|
| + // Only conduct this test with nexe. Trusted ppapi plugin does not work
|
| + // with synchronous Open call.
|
| + // See http://code.google.com/p/chromium/issues/detail?id=78449
|
| + file_system = ppb_file_system->Create(pp_instance(), kFileSystemTypes[i]);
|
| + pp_error = ppb_file_system->Open(file_system, kSize,
|
| + PP_BlockUntilComplete());
|
| + ppb_core->ReleaseResource(file_system);
|
| + EXPECT(pp_error == PP_ERROR_BADARGUMENT);
|
| +#endif
|
| +
|
| + // Test success for asynchronous open.
|
| + file_system = ppb_file_system->Create(pp_instance(), kFileSystemTypes[i]);
|
| + pp_error = ppb_file_system->Open(file_system, kSize, open_callback);
|
| + ppb_core->ReleaseResource(file_system);
|
| + EXPECT(pp_error == PP_OK_COMPLETIONPENDING);
|
| + open_callback =
|
| + MakeTestableCompletionCallback("OpenCallback", OpenCallback);
|
| +
|
| + // Test fail for multiple opens.
|
| + file_system = ppb_file_system->Create(pp_instance(), kFileSystemTypes[i]);
|
| + pp_error = ppb_file_system->Open(file_system, kSize, open_callback);
|
| + CHECK(pp_error == PP_OK_COMPLETIONPENDING); // Previously tested.
|
| + pp_error = ppb_file_system->Open(file_system, kSize, nop_callback);
|
| + ppb_core->ReleaseResource(file_system);
|
| + // TODO(polina, sanga): take out PP_ERROR_FAILED when chrome is fixed.
|
| + EXPECT(pp_error == PP_ERROR_FAILED || pp_error == PP_ERROR_INPROGRESS);
|
| + }
|
| + TEST_PASSED;
|
| +}
|
| +
|
| +void TestGetType() {
|
| + const PPB_Core* ppb_core = PPBCore();
|
| + const PPB_FileSystem* ppb_file_system = PPBFileSystem();
|
| + PP_Resource file_system = kInvalidResource;
|
| + PP_FileSystemType type = PP_FILESYSTEMTYPE_INVALID;
|
| +
|
| + // Test for invalid resource.
|
| + EXPECT(PP_FILESYSTEMTYPE_INVALID == ppb_file_system->GetType(0));
|
| +
|
| + // Test pass for the different valid system types.
|
| + for (size_t i = 0; i < kNumFileSystemTypes; ++i) {
|
| + file_system = ppb_file_system->Create(pp_instance(), kFileSystemTypes[i]);
|
| + CHECK(file_system != kInvalidResource);
|
| +
|
| + type = ppb_file_system->GetType(file_system);
|
| + ppb_core->ReleaseResource(file_system);
|
| +
|
| + EXPECT(type == kFileSystemTypes[i]);
|
| + }
|
| +
|
| + // Test fail against a non-filesystem resource.
|
| + PP_Resource url_request_info = PPBURLRequestInfo()->Create(pp_instance());
|
| + CHECK(url_request_info != kInvalidResource);
|
| + type = ppb_file_system->GetType(url_request_info);
|
| + ppb_core->ReleaseResource(url_request_info);
|
| + EXPECT(type == PP_FILESYSTEMTYPE_INVALID);
|
| +
|
| + TEST_PASSED;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +void SetupTests() {
|
| + RegisterTest("TestCreate", TestCreate);
|
| + RegisterTest("TestIsFileSystem", TestIsFileSystem);
|
| + RegisterTest("TestOpen", TestOpen);
|
| + RegisterTest("TestGetType", TestGetType);
|
| +}
|
| +
|
| +void SetupPluginInterfaces() {
|
| + /* No PPP interface to test. */
|
| +}
|
|
|