Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

119 lines
4.8 KiB
C
Raw Normal View History

/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include <stdio.h>
#ifndef TEST_TESTSUPPORT_FILEUTILS_H_
#define TEST_TESTSUPPORT_FILEUTILS_H_
#include <string>
#include <vector>
#include "absl/types/optional.h"
namespace webrtc {
namespace test {
// This is the "directory" returned if the ProjectPath() function fails
// to find the project root.
extern const char* kCannotFindProjectRootDir;
// Creates and returns the absolute path to the output directory where log files
// and other test artifacts should be put. The output directory is generally a
// directory named "out" at the top-level of the project, i.e. a subfolder to
// the path returned by ProjectRootPath(). The exception is Android where we use
// /sdcard/ instead.
//
// If symbolic links occur in the path they will be resolved and the actual
// directory will be returned.
//
// Returns the path WITH a trailing path delimiter. If the project root is not
// found, the current working directory ("./") is returned as a fallback.
std::string OutputPath();
// Generates an empty file with a unique name in the specified directory and
// returns the file name and path.
// TODO(titovartem) rename to TempFile and next method to TempFilename
std::string TempFilename(const std::string& dir, const std::string& prefix);
// Generates a unique file name that can be used for file creation. Doesn't
// create any files.
std::string GenerateTempFilename(const std::string& dir,
const std::string& prefix);
// Returns a path to a resource file for the currently executing platform.
// Adapts to what filenames are currently present in the
// [project-root]/resources/ dir.
// Returns an absolute path according to this priority list (the directory
// part of the path is left out for readability):
// 1. [name]_[platform]_[architecture].[extension]
// 2. [name]_[platform].[extension]
// 3. [name]_[architecture].[extension]
// 4. [name].[extension]
// Where
// * platform is either of "win", "mac" or "linux".
// * architecture is either of "32" or "64".
//
// Arguments:
// name - Name of the resource file. If a plain filename (no directory path)
// is supplied, the file is assumed to be located in resources/
// If a directory path is prepended to the filename, a subdirectory
// hierarchy reflecting that path is assumed to be present.
// extension - File extension, without the dot, i.e. "bmp" or "yuv".
std::string ResourcePath(const std::string& name, const std::string& extension);
// Joins directory name and file name, separated by the path delimiter.
std::string JoinFilename(const std::string& dir, const std::string& name);
// Gets the current working directory for the executing program.
// Returns "./" if for some reason it is not possible to find the working
// directory.
std::string WorkingDir();
// Reads the content of a directory and, in case of success, returns a vector
// of strings with one element for each found file or directory. Each element is
// a path created by prepending |dir| to the file/directory name. "." and ".."
// are never added in the returned vector.
absl::optional<std::vector<std::string>> ReadDirectory(std::string path);
// Creates a directory if it not already exists.
// Returns true if successful. Will print an error message to stderr and return
// false if a file with the same name already exists.
bool CreateDir(const std::string& directory_name);
Reland of reduce dependencies on rtc::FileSystem in FileRotatingStream tests... (patchset #1 id:1 of https://codereview.webrtc.org/2885393002/ ) Reason for revert: Downstream project now fixed. Original issue's description: > Revert of Reduce dependencies on rtc::FileSystem in FileRotatingStream tests, adding helpers in webrtc::test:: (patchset #7 id:120001 of https://codereview.webrtc.org/2872283002/ ) > > Reason for revert: > Fails to compile successfully. > > > Original issue's description: > > Reduce dependencies on rtc::FileSystem in FileRotatingStream tests. > > > > Use webrtc::test::OutputPath instead of Filesystem::GetAppTempFolder. > > Added functions RemoveFile and RemoveDir in the webrtc::test namespace, > > to replace use of Filesystem::DeleteFolderAndContents. > > > > This makes Filesystem::DeleteFolderAndContents unused, to be deleted > > together with related code in a followup cl. > > > > BUG=webrtc:7345 > > > > Review-Url: https://codereview.webrtc.org/2872283002 > > Cr-Commit-Position: refs/heads/master@{#18173} > > Committed: https://chromium.googlesource.com/external/webrtc/+/dd7b5f32b59d9def668b9e9487589a572f20f6e0 > > TBR=pthatcher@webrtc.org,kjellander@webrtc.org,tommi@webrtc.org,nisse@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:7345 > > Review-Url: https://codereview.webrtc.org/2885393002 > Cr-Commit-Position: refs/heads/master@{#18180} > Committed: https://chromium.googlesource.com/external/webrtc/+/deaa33d2f59783e849ddc01428be807d92431983 TBR=pthatcher@webrtc.org,kjellander@webrtc.org,tommi@webrtc.org,ehmaldonado@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:7345 Review-Url: https://codereview.webrtc.org/2885413002 Cr-Commit-Position: refs/heads/master@{#18193}
2017-05-18 03:55:59 -07:00
// Removes a directory, which must already be empty.
bool RemoveDir(const std::string& directory_name);
// Removes a file.
bool RemoveFile(const std::string& file_name);
// Checks if a file exists.
bool FileExists(const std::string& file_name);
// Checks if a directory exists.
bool DirExists(const std::string& directory_name);
// File size of the supplied file in bytes. Will return 0 if the file is
// empty or if the file does not exist/is readable.
size_t GetFileSize(const std::string& filename);
// Sets the executable path, i.e. the path to the executable that is being used
// when launching it. This is usually the path relative to the working directory
// but can also be an absolute path. The intention with this function is to pass
// the argv[0] being sent into the main function to make it possible for
// fileutils.h to find the correct project paths even when the working directory
// is outside the project tree (which happens in some cases).
void SetExecutablePath(const std::string& path_to_executable);
Improving the way fileutil.h finds test resources. Adding the argv[0] path to the working directory to make it possible find the project root even when the test is executed from outside the project dir (like it is on some buildbots). Removed tests that moves into directories since they no longer work with this approach. The new functionality have been verified by manual tests of the following cases, example with a checkout root dir called webrtc/: Working dir: Command line: webrtc trunk/out/Debug/test webrtc/trunk out/Debug/test webrtc/trunk/out Debug/test webrtc/trunk/out ./Debug/test webrtc/trunk/out/Debug ./test webrtc/trunk/out/Debug/subdir ../test webrtc/trunk/out/Debug/subdir ./../test I also made another program with its own main method (only links with 'test_support', not 'test_support_main') and made sure that it was still possible to use as before (i.e. works within the project tree but not above it): #include "testsupport/fileutils.h" int main(int argc, char** argv) { printf("Working dir: %s\n", webrtc::test::WorkingDir().c_str()); printf("Project root: %s\n", webrtc::test::ProjectRootPath().c_str()); printf("Output path: %s\n", webrtc::test::OutputPath().c_str()); } BUG=Existing implementation cannot handle when the working directory is outside the project checkout. TEST=test_support_unittests and manual tests with video_codecs_test_framework_integration_tests + passing all trybots + memcheck tool Review URL: https://webrtc-codereview.appspot.com/858014 git-svn-id: http://webrtc.googlecode.com/svn/trunk@2927 4adac7df-926f-26a2-2b94-8c16560cd09d
2012-10-15 18:14:12 +00:00
} // namespace test
} // namespace webrtc
#endif // TEST_TESTSUPPORT_FILEUTILS_H_