blob: f765c067a6d86cd145b3d6304a480e44a7e19611 [file] [log] [blame]
#!/usr/bin/env python
#
# getopt_tests.py: testing the svn command line processing
#
# Subversion is a tool for revision control.
# See http://subversion.tigris.org for more information.
#
# ====================================================================
# Copyright (c) 2000-2002 CollabNet. All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://subversion.tigris.org/license-1.html.
# If newer versions of this license are posted there, you may use a
# newer version instead, at your option.
#
######################################################################
# General modules
import string, sys, re, os.path
# Our testing module
import svntest
######################################################################
# Tests
#
# Each test must return 0 on success or non-zero on failure.
#----------------------------------------------------------------------
# This directory contains all the expected output from svn.
getopt_output_dir = os.path.join(os.path.dirname(sys.argv[0]),
'getopt_tests_data')
# Naming convention for golden files: take the svn command line as a
# single string and apply the following sed transformations:
# echo svn option1 option2 ... | sed -e 's/ /_/g' -e 's/_--/--/g'
# Then append either _stdout or _stderr for the file descriptor to
# compare against.
def load_expected_output(basename):
"load the expected standard output and standard error"
stdout_filename = os.path.join(getopt_output_dir, basename + '_stdout')
stderr_filename = os.path.join(getopt_output_dir, basename + '_stderr')
exp_stdout = open(stdout_filename, 'r').readlines()
exp_stderr = open(stderr_filename, 'r').readlines()
return exp_stdout, exp_stderr
# This is a list of lines to delete.
del_lines_res = [ re.compile(r'\s+compiled\s+'),
re.compile(r"- handles '(https|file)' schema"),
]
# This is a list of lines to search and replace text on.
rep_lines_res = [ (re.compile(r'version \d+\.\d+\.\d+ '), 'version X.Y.Z '),
]
def process_lines(lines):
"delete lines that should not be compared and search and replace the rest"
output = [ ]
for line in lines:
# Skip these lines from the output list.
delete_line = 0
for delete_re in del_lines_res:
if delete_re.search(line, 1):
delete_line = 1
break
if delete_line:
continue
# Search and replace text on the rest.
for replace_re, replace_str in rep_lines_res:
line = replace_re.sub(replace_str, line)
output.append(line)
return output
def run_one_test(sbox, basename, *varargs):
"run svn with args and compare against the specified output files"
if sbox.build():
return 1
exp_stdout, exp_stderr = load_expected_output(basename)
actual_stdout, actual_stderr = apply(svntest.main.run_svn, (1,) + varargs)
# Delete and perform search and replaces on the lines from the
# actual and expected output that may differ between build
# environments.
exp_stdout = process_lines(exp_stdout)
exp_stderr = process_lines(exp_stderr)
actual_stdout = process_lines(actual_stdout)
actual_stderr = process_lines(actual_stderr)
if exp_stdout != actual_stdout:
print "Standard output does not match."
print "Expected standard output:\n", exp_stdout, "\n"
print "Actual standard output:\n", actual_stdout, "\n"
return 1
if exp_stderr != actual_stderr:
print "Standard error does not match."
print "Expected standard output:\n", exp_stderr, "\n"
print "Actual standard output:\n", actual_stderr, "\n"
return 1
return 0
def getopt_no_args(sbox):
"run svn with no arguments"
return run_one_test(sbox, 'svn')
def getopt__version(sbox):
"run svn --version"
return run_one_test(sbox, 'svn--version', '--version')
def getopt__help(sbox):
"run svn --help"
return run_one_test(sbox, 'svn--help', '--help')
def getopt_help(sbox):
"run svn help"
return run_one_test(sbox, 'svn_help', 'help')
def getopt_help__version(sbox):
"run svn help --version"
return run_one_test(sbox, 'svn_help--version', 'help', '--version')
def getopt_help_log_switch(sbox):
"run svn help log switch"
return run_one_test(sbox, 'svn_help_log_switch', 'help', 'log', 'switch')
def getopt_help_bogus_cmd(sbox):
"run svn help bogus-cmd"
return run_one_test(sbox, 'svn_help_bogus-cmd', 'help', 'bogus-cmd')
########################################################################
# Run the tests
# list all tests here, starting with None:
test_list = [ None,
getopt_no_args,
getopt__version,
getopt__help,
getopt_help,
getopt_help__version,
getopt_help_bogus_cmd,
getopt_help_log_switch
]
if __name__ == '__main__':
svntest.main.run_tests(test_list)
# NOTREACHED
### End of file.
# local variables:
# eval: (load-file "../../../../tools/dev/svn-dev.el")
# end: