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)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/test_file_set.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/platform_file.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/rand_util.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace fileapi {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const TestCaseRecord kRegularTestCases[] = {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {true, FILE_PATH_LITERAL("dir a"), 0},
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {true, FILE_PATH_LITERAL("dir a/dir A"), 0},
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {true, FILE_PATH_LITERAL("dir a/dir d"), 0},
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {true, FILE_PATH_LITERAL("dir a/dir d/dir e"), 0},
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {true, FILE_PATH_LITERAL("dir a/dir d/dir e/dir f"), 0},
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {true, FILE_PATH_LITERAL("dir a/dir d/dir e/dir g"), 0},
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {true, FILE_PATH_LITERAL("dir a/dir d/dir e/dir h"), 0},
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {true, FILE_PATH_LITERAL("dir b"), 0},
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {true, FILE_PATH_LITERAL("dir b/dir a"), 0},
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {true, FILE_PATH_LITERAL("dir c"), 0},
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {false, FILE_PATH_LITERAL("file 0"), 38},
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {false, FILE_PATH_LITERAL("file 2"), 60},
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {false, FILE_PATH_LITERAL("file 3"), 0},
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {false, FILE_PATH_LITERAL("dir a/file 0"), 39},
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {false, FILE_PATH_LITERAL("dir a/dir d/dir e/dir g/file 0"), 40},
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {false, FILE_PATH_LITERAL("dir a/dir d/dir e/dir g/file 1"), 41},
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {false, FILE_PATH_LITERAL("dir a/dir d/dir e/dir g/file 2"), 42},
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {false, FILE_PATH_LITERAL("dir a/dir d/dir e/dir g/file 3"), 50},
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const size_t kRegularTestCaseSize = arraysize(kRegularTestCases);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetUpOneTestCase(const base::FilePath& root_path,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const TestCaseRecord& test_case) {
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath path = root_path.Append(test_case.path);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (test_case.is_directory) {
46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    ASSERT_TRUE(base::CreateDirectory(path));
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::PlatformFileError error_code;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool created = false;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int file_flags = base::PLATFORM_FILE_CREATE_ALWAYS |
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    base::PLATFORM_FILE_WRITE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::PlatformFile file_handle =
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::CreatePlatformFile(path, file_flags, &created, &error_code);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(created);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(base::PLATFORM_FILE_OK, error_code);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(base::kInvalidPlatformFileValue, file_handle);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(base::ClosePlatformFile(file_handle));
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (test_case.data_file_size > 0U) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string content = base::RandBytesAsString(test_case.data_file_size);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(static_cast<int>(content.size()),
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              file_util::WriteFile(path, content.data(), content.size()));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetUpRegularTestCases(const base::FilePath& root_path) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < arraysize(kRegularTestCases); ++i) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE(testing::Message() << "Creating kRegularTestCases " << i);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetUpOneTestCase(root_path, kRegularTestCases[i]);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace test
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace fileapi
77