From da19703bc3e290f1da7e05c78d91340b9a72dcb4 Mon Sep 17 00:00:00 2001 From: "rohitrao@chromium.org" Date: Tue, 17 Jul 2012 14:15:34 +0000 Subject: Adds a way to specify test data files for unittests. BUG=None TEST=None Review URL: https://chromiumcodereview.appspot.com/10790008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@146995 0039d316-1c4b-4281-b951-d872f2087c98 --- build/copy_test_data_ios.py | 98 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100755 build/copy_test_data_ios.py (limited to 'build/copy_test_data_ios.py') diff --git a/build/copy_test_data_ios.py b/build/copy_test_data_ios.py new file mode 100755 index 0000000..e6c6a38 --- /dev/null +++ b/build/copy_test_data_ios.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python +# 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. + +"""Copies test data files or directories into a given output directory.""" + +import optparse +import os +import shutil +import sys + +class WrongNumberOfArgumentsException(Exception): + pass + +def ListFilesForPath(path): + """Returns a list of all the files under a given path.""" + output = [] + # Files get returned without modification. + if not os.path.isdir(path): + output.append(path) + return output + + # Directories get recursively expanded. + contents = os.listdir(path) + for item in contents: + full_path = os.path.join(path, item) + output.extend(ListFilesForPath(full_path)) + return output + +def CalcInputs(inputs): + """Computes the full list of input files for a set of command-line arguments. + """ + # |inputs| is a list of strings, each of which may contain muliple paths + # separated by spaces. + output = [] + for input in inputs: + tokens = input.split() + for token in tokens: + output.extend(ListFilesForPath(token)) + return output + +def CopyFiles(relative_filenames, output_basedir): + """Copies files to the given output directory.""" + for file in relative_filenames: + relative_dirname = os.path.dirname(file) + output_dir = os.path.join(output_basedir, relative_dirname) + output_filename = os.path.join(output_basedir, file) + + # In cases where a directory has turned into a file or vice versa, delete it + # before copying it below. + if os.path.exists(output_dir) and not os.path.isdir(output_dir): + os.remove(output_dir) + if os.path.exists(output_filename) and os.path.isdir(output_filename): + shutil.rmtree(output_filename) + + if not os.path.exists(output_dir): + os.makedirs(output_dir) + shutil.copy(file, output_filename) + +def DoMain(argv): + parser = optparse.OptionParser() + usage = 'Usage: %prog -o [--inputs] [--outputs] ' + parser.set_usage(usage) + parser.add_option('-o', dest='output_dir') + parser.add_option('--inputs', action='store_true', dest='list_inputs') + parser.add_option('--outputs', action='store_true', dest='list_outputs') + options, arglist = parser.parse_args(argv) + + if len(arglist) == 0: + raise WrongNumberOfArgumentsException(' required.') + + files_to_copy = CalcInputs(arglist) + if options.list_inputs: + return '\n'.join(files_to_copy) + + if not options.output_dir: + raise WrongNumberOfArgumentsException('-o required.') + + if options.list_outputs: + outputs = [os.path.join(options.output_dir, x) for x in files_to_copy] + return '\n'.join(outputs) + + CopyFiles(files_to_copy, options.output_dir) + return + +def main(argv): + try: + result = DoMain(argv[1:]) + except WrongNumberOfArgumentsException, e: + print >>sys.stderr, e + return 1 + if result: + print result + return 0 + +if __name__ == '__main__': + sys.exit(main(sys.argv)) -- cgit v1.1