summaryrefslogtreecommitdiffstats
path: root/testing/framework/TestCmd.py
Commit message (Collapse)AuthorAgeFilesLines
* Framework: fixture methods now handle lists for dstdirMats Wichmann2025-02-281-0/+5
| | | | | | | | | | | | | TestCmd.dir_fixture and TestCmd.file_fixture are described as accepting a list for both srcdir and dstdir. For example, the docstring for `dir_fixture`: srcdir or dstdir may be a list, in which case the elements are first joined into a pathname. However, the implementation only handled this for srcdir/srcfile. Added the same stanza for dstdir/dstfile.. Signed-off-by: Mats Wichmann <mats@linux.com>
* test framework: bulk reformatMats Wichmann2024-12-291-83/+110
| | | | | | Imcludes test snippets contained in docstrings, too. Signed-off-by: Mats Wichmann <mats@linux.com>
* Modernize stat usageMats Wichmann2024-12-151-7/+7
| | | | | | | | | | | Since Python 2.2, the object returned by an os.stat() call presents attributes matching the 10-tuple of stat values. Use these instead of indexing into the tuple. As usual for non-removed tests, minor tweaks made if needed - copyright header and DefautlEnvironment() call for performance. Signed-off-by: Mats Wichmann <mats@linux.com>
* updated so TestSCons.NINJA_BINARY is set and used by all such testsWilliam Deegan2024-11-251-0/+3
|
* Integrate `from __future__ import annotations`Thaddeus Crews2024-11-161-11/+13
|
* Move IS_ROOT definition to frameworkMats Wichmann2024-10-191-0/+4
| | | | Signed-off-by: Mats Wichmann <mats@linux.com>
* Adjust tests in case running as rootMats Wichmann2024-10-191-3/+7
| | | | | | | | | | | Although validation tests are not normally run as root, there may be cicrumstances when it happens - one known case is when the test suite is run as part of a particular Linux distros package construction. It isn't too hard to avoid the few places where we counted on something failing because of permissions, which don't if the user is root - added a few skips. Signed-off-by: Mats Wichmann <mats@linux.com>
* Some tweaks to testing framework.Mats Wichmann2024-09-101-47/+60
| | | | | | | | | | | | | | | | | | | | | | | Most interesting is an "api change" - the test methods test.must_exist() and test.must_exist_one_of() now take an optional 'message' keyword argument which is passed on to fail_test() if the test fails. The regex used to test an exception is now working for Python 3.13, and enabled conditionally - the "enhanced error reporting" changed, in a way that made it easy to reuse the existing regex (if somebody wants to take a shot at unifying them, more power!). Also one unexpected issue was found - one of the check routines does "output = os.newline.join(output)", but there is no os.newline. Could use os.linesep, but just changed it to the Python newline character. Some annotations added, and some cleanup done on possibly unsafe uses - mainly that self.stderr() and selt.stdout() *can* return None, but several places in the code just did string operations on the return unconditionally. There's already precendent- other places did do a check before using, so just extended the concept to possibly vulnerable palces. Signed-off-by: Mats Wichmann <mats@linux.com>
* Variables testing: confirm space-containing valuesMats Wichmann2024-08-271-6/+6
| | | | | | | | | | | | | The previous commit introduced a change to how the framework handled arguments, which necessitated some changes in the variables code. It got too complicated, too many places would need too much logic. Just accept that the test.run(arguments="...") will never be quite like the same arguments on the CLI, and just use lists to avoid things being broken on embedded spaces - those won't be split. Many tests arleady do this, so it's nothing new. Added a comment in TestCmd to make it more clear. Signed-off-by: Mats Wichmann <mats@linux.com>
* Fix ListVariable with a space-containing valueMats Wichmann2024-08-161-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix ListVariable handling of a quoted variable value containing spaces. As a side effect of splitting the former monolithic converter/validator for ListVariable into separate callbacks, it became possible for subst to be called twice. The ListVariable converter produces an instance of a _ListVariable container, and running subst on that result ends up losing information, so avoid doing so. While developing a test for this, it turned out the test framework also didn't handle a quoted argument containing a space, so that a test case passing arguments to scons via "run(arguments='...')" could end up with scons seeing a different (broken) command line than scons invoked with the same arguments typing to a shell prompt. A regex is now used to more accurately split the "arguments" parameter, and a unit test was added to the framework tests to validate. The framework fix had a side effect - it was possible that when run as part of the test suite, the Variables package could receive a value still wrapped in quotes, leading to string mismatches ('"with space"' is not equal to 'with space'), so ListVariable now strips wrapping quote marks. Also during testing it turned out that the earlier fix for #4241, allowing a Variable to declare the value should not be subst'd, introduced problems for two types which assumed they would always be passed a string. With subst=False, they could be passed a default value that had been specified as a bool. Fixed to not fail on that. Fixes #4585 Signed-off-by: Mats Wichmann <mats@linux.com>
* Back off test framework exception handlingMats Wichmann2024-04-011-20/+9
| | | | | | | | | | | | The try block in TestCmd.start() is removed, it interferes with other things. TestCommon.start is supposed to handle exceptions, so inserting more stuff at a lower level (parent class) made a mess of the framework tests. Clean up a complaint with later Pythons (3.12+), and include (incomplete) new regex for Python 3.13+. Signed-off-by: Mats Wichmann <mats@linux.com>
* Testing framework fixesMats Wichmann2024-04-011-22/+37
| | | | | | | | | | | | | | | | | | | | | | | - Test framework now reports a FAIL if the subprocess call to run the test was aborted by the operating system (this is particularly for Windows when antivirus could reject running a compiled test binary). Previously these failures were not recorded in the fails list and so were easy to miss. - Test framework now uses a subdirectory named "scons" below the base temporary directory. This gives something invariant to tell antivirus software to ignore without having to exclude the tmpdir itself. - MSVS "live" tests of project files (e.g. test/MSVS/vs-14.3-exec.py) adjusted to look for the generated executable with an exe sufffix. This had recently started failing on the line:: test.run(program=test.workpath('sub dir', 'foo'), stdout="foo.c\n") as somehow "sub dir\foo" was created, and then "foo.exe" was not matched causing the binary not to execute and failing the test. Signed-off-by: Mats Wichmann <mats@linux.com>
* Add unlink_files method to TestCmd, replace file deletion loops with method ↵Joseph Brill2023-12-281-0/+25
| | | | calls in msvs executable test scripts, re-order CHANGES.txt.
* Elminate http: referencesMats Wichmann2023-10-171-1/+1
| | | | | | | | | | Most remaining http: references are either changed to https: or removed or changed in case they were also stale links, and a replacement was findable. Does not affect schema and stylesheet references, which can remain http: Signed-off-by: Mats Wichmann <mats@linux.com>
* More conversions: {repr(var)} -> {var!r}Mats Wichmann2023-08-041-4/+4
| | | | | | | Some of these got done in the tool conversion, some not, so picked up the rest manually. Signed-off-by: Mats Wichmann <mats@linux.com>
* "Modernize" to Python 3.6 via toolMats Wichmann2023-08-041-3/+3
| | | | | | | | | | | | | | | | | | | | | $ pyupgrade --py36-plus $(<filelist) Here's mostly what it's done: - No more 'stringliteral'.encode('utf-8'): now b'stringliteral' - No more unicode literals - the default open mode is 'r', leaves out if default - some f-string conversions (if shorter) - catch OSError instead of subclasses - no more mention of "object" - generator expression instead of list comp. when safe - a few tests had a shebang but actually began with blank line - remove coding: utf-8 comment, per pep 3120 this is the default now Manually - if a file in test/ was modified, then did the copyright header conversion. Signed-off-by: Mats Wichmann <mats@linux.com>
* Add some cheap return and parameter annotationsMats Wichmann2023-05-011-54/+54
| | | | | | | | | | | | | | | | | Use: https://github.com/JelleZijlstra/autotyping to add "safe" return annotations. Where a parameter has a default value that is an obvious scalar type (bool, int, str, etc.) add those annotations as well. Also fixed two small bugs that popped up when sanity-checking with mypy. One in FortranCommon, where a return had been previously annotated to be a tuple of Action, which should be ActionBase - Action is the factory function, not the base class. The other was a typo in the error raised in _add_cppdefines - the message was formatted with the value of "define" which should have been "defines". Signed-off-by: Mats Wichmann <mats@linux.com>
* Use f-strings in framework and framework testsMats Wichmann2022-11-241-31/+31
| | | | | | | | | This is a mostly tool-based conversion (a couple added by hand), and other changes were not made, to try to keep the diff manageable. Adds a GitHub Action to run framework tests if framework changes. Signed-off-by: Mats Wichmann <mats@linux.com>
* [framewqork] use subprocess timeoutsMats Wichmann2022-08-061-36/+62
| | | | | | | | | | | | Since Python 3.3, the subprocess module has its own timeout implementation, so remove the test framework's custom one. Required a little rejigger since the subprocess timeout is done on the communicate() call, not set up before the test is started. Noted that the framework intends to support two levels: one for the testing class instance, and one for an individual start call, which should override the one in the instance. Signed-off-by: Mats Wichmann <mats@linux.com>
* framework psutil usage: let the kill proceedMats Wichmann2022-08-041-2/+2
| | | | | | | Instead of skipping the whole kill/check loop if psutil module is not found, instead just skip the check part - should be okay to issue the kill. Signed-off-by: Mats Wichmann <mats@linux.com>
* Let test framework still run if no psutilMats Wichmann2022-08-041-28/+37
| | | | | | | | | | | Some odd environments - the one I'm running into it is inside an msys2 POSIX shell on Windows, using msys Python - don't have a psutil module to install. Let the test framework continue to work even if this is the case. fixes #4199 Signed-off-by: Mats Wichmann <mats@linux.com>
* Test framework improvementsMats Wichmann2022-08-031-1/+1
| | | | | | | | | Replaces one custom function with one from Python stdlib (textwrap.dedent) Fixes one test case that did not check for None Changes "fill line with a character" implementations to use Python string formatting, which has this capability. Signed-off-by: Mats Wichmann <mats@linux.com>
* fix issue when deleting cleaning up deamonDaniel Moody2022-06-141-1/+1
|
* Fixed some typos. Added skip_test() if psutil is not present for new test. ↵William Deegan2022-06-141-0/+6
| | | | Added note to CHANGES.txt/RELEASE.txt that psutil is required for the new test for this function
* Merge branch 'master' into ninja_exit_daemonWilliam Deegan2022-06-141-0/+6
|\
| * Added test for test.run()'s arguments set to a dict which will expand into ↵William Deegan2022-06-131-0/+6
| | | | | | | | KEY=VAL for each item in that dict. Also changed to unittest.main() form TestSuite()
* | install psutil for testing and fix sider complaintsDaniel Moody2022-06-071-1/+1
| |
* | Added new alias 'shutdown-ninja-scons-daemon' to allow ninja to shutdown the ↵Daniel Moody2022-06-071-0/+32
|/ | | | daemon
* test framework: fix exception on timeoutMats Wichmann2022-04-051-5/+9
| | | | | | | | | | If the framework wait_for() method actually times out, it tries to return stdout and stderr by calling the framework methods of those names. The stdout() method was protected against the message not having been captured (as is the case on timeout). Updated the stderr() method to use the same technique. Signed-off-by: Mats Wichmann <mats@linux.com>
* Fix tests to not hang on Windows with bad .py assocMats Wichmann2021-11-261-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For systems where the association for .py files is not to an actual Python interpreter, those few cases where we need to run a Python script directly as a program don't work. This could be because the association was never set up, or because some other program (e.g. Visual Studio Code) has taken it over. In some cases may appear to "hang" because the alternate program is waiting for user interaction runtest.py now has a mechanism to check (thanks to Brett Cannon for providing this incantation). It isn't super precise (looks for the substring "py" in the queried association), but should work out. It sets an environment variable which the test framework can read and as a result set a flag which individual tests can read. Two tests in scons-time which had previously been set to skip-if-win32 now look at this flag instead. Three tests in sconsign now also look at this flag. This allows a clean run on my dev box with VS Code having taken over the .py association. Various things can break if the environment used to fire off Windows processes doesn't contain %UserProfile%. Added this to the short list of passthrough env vars. Apparently an environment without this value is now considered invalid (it blew up the erroneously launched VS Code, but we've apparently been lucky it hasn't blown up more things - believe there was also a report of a problem with the Visual Studio setup scripts). A little extra cleanup: - a couple of Py2-isms were cleaned out (Script/Main.py and in the test framework) - The paths to look for site-scons were rewritten (part of this was another Py2-ism), and the system path changed a bit - the old path is still checked, and the manpage updated to reflect this. - runtest.py dropped the unused whereis functions. - the three sconsign tests now use f-string formatting, mostly as an experiment to see how easy it is to convert. Fixes #4053 Signed-off-by: Mats Wichmann <mats@linux.com>
* Fix ninja tool rules for macos/ar for static libs to skip response files ↵William Deegan2021-04-131-0/+1
| | | | for now. Also fix build_libraries to have proper shlib suffix
* Test harness add a from_fw to skip callsMats Wichmann2021-04-131-27/+54
| | | | | | | | | | | | | | | | | | Main functional change is a new kwarg to skip_test() to allow calls from inside the framework to skip an additional line of traceback in the skip output - i.e. don't just skip the entry for skip_test, but also the function in the fw that called it. Other functional change is for the try block in skip_if_not_msvc() (which is one of the internal callers of skip_test() mentioned for the other change) to catch Exception, thus avoiding system-existing exceptions that were caught by the existing bare except, which caused the skip to not actually skip. The remainder of the patch is docstring reformatting, some minor code reformats, top-of-file license blocks, etc. Signed-off-by: Mats Wichmann <mats@linux.com>
* One more "drop py2"ism from test frameworkMats Wichmann2020-10-131-3/+3
| | | | Signed-off-by: Mats Wichmann <mats@linux.com>
* Run autoflake on codeMats Wichmann2020-09-211-1/+0
| | | | | | | | | | Eliminate unneeded imports, and a few unneeded statements - usually "pass" where it is not syntactically needed. A couple of import try blocks were eliminated or changed when they're "cannot happen" due to current floor Python version. Signed-off-by: Mats Wichmann <mats@linux.com>
* Fix testing subdir usageMats Wichmann2020-06-191-51/+55
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Various tests called subdir several times with the same directory, which is pointless. In previous code, this emitted a message though it did not fail. Stop doing that. The dir_fixture() method did some convoluted things to make sure the directories to write to exist, change this around to simplify. The subdir() method already combines the testdir, so dir_fixture doesn't need to. Also handle more cleanly the case of the target directory being an absolute path, which seems to have been intended, but would not work. Also clean up file_fixture() along the same principles. Change the subdir() method to not need to be given an ordered list of directories; instead call os.makedirs on each so intermediate steps are made automatically. Along the way, the print about making a directory that already existed vanishes. Tests which did os.path.join on directory pieces when calling file_fixture no longer do so, since file_fixture (and dir_fixture) do joining on an arg which is a list of paths like many other scons functions. The testing doc was updated to fix some wording and reflect the above changes. Signed-off-by: Mats Wichmann <mats@linux.com>
* Cleanups in tests and in frameworkMats Wichmann2020-06-141-186/+178
| | | | | | | | | | | | * Some Py2/Py3 compat blocks were simplified to Py3 only * some sequences of define-cleaup-function + atexit.register were changed to use the decorator (this works if func needs to take no arguments) * Lightly update a bunch of docstrings in TestCmd, and reformat a few places, towards the style we're generally using now. * call_python() in TestCmdTests was modernized to use subprocess.run Signed-off-by: Mats Wichmann <mats@linux.com>
* classes no longer explicitly inherit from objectMats Wichmann2020-05-241-2/+2
| | | | | | In Python3 this is the default. Signed-off-by: Mats Wichmann <mats@linux.com>
* [PR #3571] fix error and improve docsMats Wichmann2020-02-271-1/+1
| | | | | | | | | | | | sider spotted a cut-n-paste error introduced in the PR (srcdir set instead of srcfile) framework doc now uses directory consistently (over folder, which is a desktop concept rather than a filesystem concept) tweaked wording a bit more Signed-off-by: Mats Wichmann <mats@linux.com>
* Fix some test fixture-handling nits.Mats Wichmann2020-02-261-58/+53
| | | | | | | | | | | | | | | | | | | | | | | | dir-fixture() did not concatenate a source list into a path as the testing doc says it should. fix-fixture() did not either, and the doc didn't say so; now it does (docstring and external testing doc). There was a way to slip through both dir_fixtures and file_fixture with the path invalid - if you have fixture dirs defined, and the dir/file is not found in them, you'll come out of the loop set to the last fixture dir and not try the current dir. This doesn't break anything, just leads to a somewhat misleading message if the fixture really isn't found - the traceback indicates the fixture was not found in whatever the last passed-in fixture dir was. Now it looks like it was not found in the source testing dir. The message can still be improved to be more descriptive. A couple of minor Py2 removals. Testing doc didn't mention FIXTURE_DIRS, so this was added. A bunch of other doc fiddling. Signed-off-by: Mats Wichmann <mats@linux.com>
* rm-py2: Remove "from __future__" from more placesMats Wichmann2020-02-201-20/+23
| | | | | | | | | | | | | | | A couple of minor reformats along the way, most prominently, in tests, if being edited anyway, make sure the docstring most tests have is actually the docstring (sometimes the __revision__ line came before, which makes the string not be the docstring). Snuck in some minor framework changes that were orphaned when another draft PR was not needed: this almost all docstring changes, the functional part is using casefold instead of lower in a match func - a slightly better approach which is now possible that Py2 compatibility is not needed. Signed-off-by: Mats Wichmann <mats@linux.com>
* more unicode cleanup post py27William Deegan2020-02-181-10/+3
|
* [ci skip] Add logic to know when running in pypyWilliam Deegan2020-01-021-0/+1
|
* syntax fixups suggested by PyCharmMats Wichmann2019-12-231-1/+1
| | | | | | | | | | | | | | Drop unneeded parens. Drop trailing semicolons. Triple double-quote docstrings. Regexes drop unneeded escapes. Spaces around parens, braces: remove/add. Some one-tuples get their missing closing comma. A couple of sets use set init syntax {foo} instead of set([iter]) now. And a fiddle in Node to reduce lookup time on md5 signature functions (came about because of a line-too-long issue, initially) Signed-off-by: Mats Wichmann <mats@linux.com>
* checker fixes: None, trailing ws, list initMats Wichmann2019-12-211-1/+1
| | | | | | | | | | | checker-suggested fixes: Mostly, fix remaining instances of comparing none without "is" Some trailing whitespace on lines A couple of instances of list init followed immediately by several appends, turned into a single list init Some double comparisons turned into a single expression Signed-off-by: Mats Wichmann <mats@linux.com>
* Add test case with Latin-1 encoded Latex log file. Required fix in the test ↵maiphi2019-11-011-1/+1
| | | | | | | | | framework. In order to make the test work, it was necessary to handle the encoding issue also in the test framework. Otherwise, though the Latex builder can handle the case, the test framework chokes on it.
* test harness: fix TestCmd testsMats Wichmann2019-06-071-38/+106
| | | | | | | | | | | | | | | | | | | | | | This is the companion to PR #3382. The testing/harness/TestCmdTests.py unit tests do not currently pass. Note they are not run by the CI system, or in fact by doing runtests -a, since they're in a directory that is not searched. After these changes, there are no fails. This is a test-only change. The method simple_diff, modeled on difflib functions, is converted to a generator to match difflib, and now has a doctest as well. This means calls to it which aren't going to iterate needs to convert the return with list(), but that just makes usage more consistent, since the calls to difflib.context_diff and difflib.unified_diff already had to do so. Also, the methods that used Google-style docbook markup are changed to REsT-style markup. Our current doc producer, epydoc, does not understand the Google style, and we shouldn't mix styles; can convert them all in bulk later if we switch to Sphinx as the production tool. Signed-off-by: Mats Wichmann <mats@linux.com>
* PY38: Resolve duplicate creation of 'work' subdir which yielded warnings. ↵William Deegan2019-05-301-1/+1
| | | | Also improve exception handling message in test.subdir()
* Merge pull request #3359 from bdbaddog/fortran_issue_3135William Deegan2019-04-271-0/+6
|\ | | | | Fix Issue #3135 - Type Bound procedures in Fortran submodules
| * Remove debug logicWilliam Deegan2019-04-251-1/+0
| |
| * Add initializing fixture_dirs from shell variable FIXTURE_DIRSWilliam Deegan2019-04-251-0/+7
| |