15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "mojo/common/test/test_support_impl.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <stdlib.h>
8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <string.h>
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/files/file_enumerator.h"
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/files/file_path.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/path_service.h"
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/strings/string_split.h"
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/strings/string_util.h"
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/test/perf_log.h"
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace mojo {
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace test {
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace {
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)base::FilePath ResolveSourceRootRelativePath(const char* relative_path) {
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::FilePath path;
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (!PathService::Get(base::DIR_SOURCE_ROOT, &path))
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return base::FilePath();
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  std::vector<std::string> components;
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::SplitString(relative_path, '/', &components);
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  for (size_t i = 0; i < components.size(); ++i) {
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (!components[i].empty())
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      path = path.AppendASCII(components[i]);
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return path;
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TestSupportImpl::TestSupportImpl() {
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TestSupportImpl::~TestSupportImpl() {
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void TestSupportImpl::LogPerfResult(const char* test_name,
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    double value,
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    const char* units) {
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::LogPerfResult(test_name, value, units);
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)FILE* TestSupportImpl::OpenSourceRootRelativeFile(const char* relative_path) {
53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return base::OpenFile(ResolveSourceRootRelativePath(relative_path), "rb");
54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)char** TestSupportImpl::EnumerateSourceRootRelativeDirectory(
57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const char* relative_path) {
58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  std::vector<std::string> names;
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  base::FileEnumerator e(ResolveSourceRootRelativePath(relative_path), false,
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                         base::FileEnumerator::FILES);
61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  for (base::FilePath name = e.Next(); !name.empty(); name = e.Next())
62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    names.push_back(name.BaseName().AsUTF8Unsafe());
63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // |names.size() + 1| for null terminator.
65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  char** rv = static_cast<char**>(calloc(names.size() + 1, sizeof(char*)));
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  for (size_t i = 0; i < names.size(); ++i)
67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    rv[i] = base::strdup(names[i].c_str());
68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return rv;
69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace test
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace mojo
73