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