summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMats Wichmann <mats@linux.com>2021-06-29 13:12:27 -0600
committerMats Wichmann <mats@linux.com>2021-06-29 13:21:09 -0600
commitff835090edf443bce3f1b11802a4b34e631f6111 (patch)
tree723bee615b6315f1f23b814920da2e21b9def4cf
parent91e5157a06441158c410cea86fe7a4728e3fca81 (diff)
downloadscons-git-ff835090edf443bce3f1b11802a4b34e631f6111.tar.gz
Add AddOption tests and fix runtest.py
The two tests originally proposed in #3436, now withdrawn, are added along with a new .exclude_tests to not run them, since they'd currently be in a failing state. Needed to fix runtest.py, wasn't completely correctly processing .exclude_tests files. Signed-off-by: Mats Wichmann <mats@linux.com>
-rwxr-xr-xruntest.py14
-rw-r--r--test/AddOption/.exclude_tests4
-rw-r--r--test/AddOption/args-and-targets.py65
-rw-r--r--test/AddOption/multi-arg.py124
4 files changed, 204 insertions, 3 deletions
diff --git a/runtest.py b/runtest.py
index 69b3a611b..d9696f7f3 100755
--- a/runtest.py
+++ b/runtest.py
@@ -563,11 +563,19 @@ def find_e2e_tests(directory):
# Skip folders containing a sconstest.skip file
if 'sconstest.skip' in filenames:
continue
+
+ p = Path(dirpath).joinpath( ".exclude_tests")
try:
- with open(os.path.join(dirpath, ".exclude_tests")) as f:
- excludes = scanlist(f)
- except EnvironmentError:
+ if sys.version_info.major == 3 and sys.version_info.minor < 6:
+ excludefile = p.resolve()
+ else:
+ excludefile = p.resolve(strict=True)
+ except FileNotFoundError:
excludes = []
+ else:
+ with excludefile.open() as f:
+ excludes = scanlist(f)
+
for fname in filenames:
if fname.endswith(".py") and fname not in excludes:
result.append(os.path.join(dirpath, fname))
diff --git a/test/AddOption/.exclude_tests b/test/AddOption/.exclude_tests
new file mode 100644
index 000000000..0cd7be334
--- /dev/null
+++ b/test/AddOption/.exclude_tests
@@ -0,0 +1,4 @@
+# for now, thee tests showing problems with processing space-separated
+# arguments are excluded, pending an implementation that doesn't fail.
+args-and-targets.py
+multi-arg.py
diff --git a/test/AddOption/args-and-targets.py b/test/AddOption/args-and-targets.py
new file mode 100644
index 000000000..56bdd8502
--- /dev/null
+++ b/test/AddOption/args-and-targets.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+#
+# MIT License
+#
+# Copyright The SCons Foundation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+"""
+Verify that when an option is specified which takes args,
+those do not end up treated as targets.
+"""
+
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+test.write(
+ 'SConstruct',
+ """\
+env = Environment()
+AddOption(
+ '--extra',
+ nargs=1,
+ dest='extra',
+ action='store',
+ type='string',
+ metavar='ARG1',
+ default=(),
+ help='An argument to the option',
+)
+print(str(GetOption('extra')))
+print(COMMAND_LINE_TARGETS)
+""",
+)
+
+# arg using =
+test.run('-Q -q --extra=A TARG', status=1, stdout="A\n['TARG']\n")
+# arg not using =
+test.run('-Q -q --extra A TARG', status=1, stdout="A\n['TARG']\n")
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4:
diff --git a/test/AddOption/multi-arg.py b/test/AddOption/multi-arg.py
new file mode 100644
index 000000000..44928c49a
--- /dev/null
+++ b/test/AddOption/multi-arg.py
@@ -0,0 +1,124 @@
+#!/usr/bin/env python
+#
+# MIT License
+#
+# Copyright The SCons Foundation
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
+# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+"""
+Verify that when an option is specified with nargs > 1,
+SCons consumes those correctly into the args.
+"""
+
+import TestSCons
+
+test = TestSCons.TestSCons()
+
+# First, test an option with nargs=2 and no others:
+test.write(
+ 'SConstruct',
+ """\
+env = Environment()
+AddOption('--extras',
+ nargs=2,
+ dest='extras',
+ action='store',
+ type='string',
+ metavar='FILE1 FILE2',
+ default=(),
+ help='two extra files to install')
+print(str(GetOption('extras')))
+""",
+)
+
+# no args
+test.run('-Q -q .', stdout="()\n")
+# one arg, should fail
+test.run(
+ '-Q -q . --extras A',
+ status=2,
+ stderr="""\
+usage: scons [OPTION] [TARGET] ...
+
+SCons Error: --extras option requires 2 arguments
+""",
+)
+# two args
+test.run('-Q -q . --extras A B', status=1, stdout="('A', 'B')\n")
+# -- means the rest are not processed as args
+test.run('-Q -q . -- --extras A B', status=1, stdout="()\n")
+
+# Now test what has been a bug: another option is
+# also defined, this impacts the collection of args for the nargs>1 opt
+test.write(
+ 'SConstruct',
+ """\
+env = Environment()
+AddOption(
+ '--prefix',
+ nargs=1,
+ dest='prefix',
+ action='store',
+ type='string',
+ metavar='DIR',
+ help='installation prefix',
+)
+AddOption(
+ '--extras',
+ nargs=2,
+ dest='extras',
+ action='store',
+ type='string',
+ metavar='FILE1 FILE2',
+ default=(),
+ help='two extra files to install',
+)
+print(str(GetOption('prefix')))
+print(str(GetOption('extras')))
+""",
+)
+
+# no options
+test.run('-Q -q .', stdout="None\n()\n")
+# one single-arg option
+test.run('-Q -q . --prefix=/home/foo', stdout="/home/foo\n()\n")
+# one two-arg option
+test.run('-Q -q . --extras A B', status=1, stdout="None\n('A', 'B')\n")
+# single-arg option followed by two-arg option
+test.run(
+ '-Q -q . --prefix=/home/foo --extras A B',
+ status=1,
+ stdout="/home/foo\n('A', 'B')\n",
+)
+# two-arg option followed by single-arg option
+test.run(
+ '-Q -q . --extras A B --prefix=/home/foo',
+ status=1,
+ stdout="/home/foo\n('A', 'B')\n",
+)
+
+test.pass_test()
+
+# Local Variables:
+# tab-width:4
+# indent-tabs-mode:nil
+# End:
+# vim: set expandtab tabstop=4 shiftwidth=4: