// 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 "chromeos/chromeos_test_utils.h"

#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/path_service.h"
#include "base/threading/thread_restrictions.h"

namespace chromeos {
namespace test_utils {

bool GetTestDataPath(const std::string& component,
                     const std::string& filename,
                     base::FilePath* data_dir) {
  base::FilePath path;
  if (!base::PathService::Get(base::DIR_SOURCE_ROOT, &path))
    return false;
  path = path.Append(FILE_PATH_LITERAL("chromeos"));
  path = path.Append(FILE_PATH_LITERAL("test"));
  path = path.Append(FILE_PATH_LITERAL("data"));
  {
    base::ScopedAllowBlockingForTesting allow_io;
    if (!base::PathExists(path))  // We don't want to create this.
      return false;
  }
  DCHECK(data_dir);
  path = path.Append(component);
  *data_dir = path.Append(filename);
  return true;
}

}  // namespace test_utils
}  // namespace chromeos
