Commit Graph

65 Commits

Author SHA1 Message Date
Jussi Pakkanen c20ca0ad3d Try to use 2x the number of cores. 2017-08-31 21:55:35 +03:00
Jussi Pakkanen c2e40650e8 Turned mesontest into on internal module. 2017-08-02 22:00:09 +03:00
Jussi Pakkanen ea3e03ffdd Handle objc compiler missing more reliably. 2017-08-02 18:01:39 +03:00
Jon Turney 3fa3922cea Support implibs for executables on Windows
Add a boolean 'implib' kwarg to executable().  If true, it is permitted to
use the returned build target object in link_with:

On platforms where this makes sense (e.g. Windows), an implib is generated
for the executable and used when linking.  Otherwise, it has no effect.

(Rather than checking if it is a StaticLibrary or SharedLibary, BuildTarget
subclasses gain the is_linkable_target method to test if they can appear in
link_with:)

Also install any executable implib in a similar way to a shared library
implib, i.e. placing the implib in the appropriate place

Add tests of:
- a shared_module containing a reference to a symbol which is known (at link
time) to be provided by the executable
- trying to link with non-implib executables (should fail)
- installing the implib

(This last one needs a little enhancement of the installed file checking as
this is the first install test we have which needs to work with either
MSVC-style or GCC-style implib filenames)
2017-07-20 21:11:56 +01:00
Jussi Pakkanen db34a3a701 Close files reliably. 2017-07-18 00:33:08 +02:00
Alistair Thomas 117f4ab8b5 Split out languages from compilers.py 2017-06-23 00:42:41 +01:00
Elliott Sales de Andrade a681348b05 Add some colour to test output.
Bold the section names and colourize errors&skips.
2017-06-22 06:04:59 -04:00
Jussi Pakkanen 2d659b649b Merge pull request #1924 from mesonbuild/tingping/yelp-fixes
Various yelp fixes
2017-06-21 04:36:30 -04:00
Patrick Griffis 733aee123d tests: Always consider symlink as valid installed file
An installed symlink might point to a non-existing file
(because DESTDIR is set) so just always accept them.
2017-06-17 08:39:30 -04:00
Nirbheek Chauhan 9308a6d923 tests: Add Boost unit tests and project tests on Windows
Boost tests are disabled on Windows for now because the detection
is actually completely broken. Once that's fixed (after the release)
we can enable it again.
2017-06-10 18:55:50 +05:30
Nirbheek Chauhan c1e9c757eb tests: Increase dependencies coverage a bit more 2017-06-10 00:20:03 +05:30
Nirbheek Chauhan 3a33a8ef49 unit tests: Add class to generate failing tests
It is not feasible to test all failure modes by creating projects in
`test cases/failing` that would be an explosion of files, and that
mechanism is too coarse anyway. We have no way to ensure that the
expected error is being raised.

See FailureTests.test_dependency for an example.
2017-06-09 20:21:01 +05:30
Jussi Pakkanen effe4fb134 Create helper function for a rmtree that works reliably on Windows. 2017-05-21 21:47:24 +03:00
Elliott Sales de Andrade ea636fcd51 Remove unused variables. 2017-05-17 04:41:54 -04:00
Elliott Sales de Andrade faf114299b Remove unnecessary __init__ methods. 2017-05-17 03:54:49 -04:00
Tim-Philipp Müller 076ce56425 Skip ObjectiveC/C++ tests if ObjC compiler is not available 2017-05-13 23:34:27 +03:00
Nirbheek Chauhan 1570a90822 project tests: Also regen before building
This actually caught a cached-dependency related bug for me that the
test-time regen did not. I also increased the ninja wait time to
1 second because that's actually how long you need to sleep to be
guaranteed that a change will be detected.

Must poke upstream about https://github.com/ninja-build/ninja/issues/371
2017-05-09 14:23:15 +05:30
Jussi Pakkanen c96557c9ed Store and print test logs of executed projects. 2017-05-05 17:17:09 +02:00
Dylan Baker a8173630ea Don't use len() to test emptiness vs not emptiness
Meson has a common pattern of using 'if len(foo) == 0:' or
'if len(foo) != 0:', however, this is a common anti-pattern in python.
Instead tests for emptiness/non-emptiness should be done with a simple
'if foo:' or 'if not foo:'

Consider the following:
>>> import timeit
>>> timeit.timeit('if len([]) == 0: pass')
0.10730923599840025
>>> timeit.timeit('if not []: pass')
0.030033907998586074
>>> timeit.timeit('if len(['a', 'b', 'c', 'd']) == 0: pass')
0.1154778649979562
>>> timeit.timeit("if not ['a', 'b', 'c', 'd']: pass")
0.08259823200205574
>>> timeit.timeit('if len("") == 0: pass')
0.089759664999292
>>> timeit.timeit('if not "": pass')
0.02340641999762738
>>> timeit.timeit('if len("foo") == 0: pass')
0.08848102600313723
>>> timeit.timeit('if not "foo": pass')
0.04032287199879647

And for the one additional case of 'if len(foo.strip()) == 0', which can
be replaced with 'if not foo.isspace()'
>>> timeit.timeit('if len("   ".strip()) == 0: pass')
0.15294511600222904
>>> timeit.timeit('if "   ".isspace(): pass')
0.09413968399894657
>>> timeit.timeit('if len("   abc".strip()) == 0: pass')
0.2023209120015963
>>> timeit.timeit('if "   abc".isspace(): pass')
0.09571301700270851

In other words, it's always a win to not use len(), when you don't
actually want to check the length.
2017-05-02 21:57:26 +03:00
Elliott Sales de Andrade 8706d7d098 Warn when directory numbers are non-unique. 2017-04-29 21:40:37 -04:00
Elliott Sales de Andrade 59c5955169 Shorten detect_tests_to_run.
Remove some duplication with a list comprehension, and invert conditions
instead of long ternary statements.
2017-04-29 21:40:37 -04:00
Nirbheek Chauhan 4f0d42967e tests: Move appveyor platform workaround to run_tests.py
This is also needed for the unit tests
2017-04-09 23:11:36 +05:30
Nirbheek Chauhan f80d471345 unit tests: Fix running specific targets with MSBuild
/t:targetname syntax doesn't work, but running the vcxproj does work

Also use the Backend enum everywhere.
2017-04-09 23:11:36 +05:30
Nirbheek Chauhan 7e4a67c790 run_project_tests: Clean on backends that can't install
Also sets more groundwork for running unit tests with backends other
that Ninja.

Transferring global state to executors is totally broken in Python 3.4
so just serialize all the commands.
2017-04-09 23:11:05 +05:30
Nirbheek Chauhan 388e5a63dc project tests: Add a new BuildStep called validate 2017-04-09 23:10:12 +05:30
Nirbheek Chauhan 323fe43413 run_project_tests: Clean-up backend detection a bit
Set a global variable that has it so other places can use it, and
error out on unknown backends
2017-04-09 23:10:12 +05:30
Nirbheek Chauhan d755228afe tests: Factor out common code to run_tests
And use generic build/clean/test/install commands in the unit tests,
just like project tests. This sets the groundwork for running the unit
tests with all backends.
2017-04-09 23:08:42 +05:30
Jon Turney 2930d3bda6 Ignore missing .pdb files when not using MSVS
This fixes 'test cases/windows/1 basic' on Cygwin
2017-04-06 22:48:02 +01:00
Jon Turney 85f989f744 Don't run framework tests on Cygwin 2017-04-06 22:48:02 +01:00
Jon Turney 6c9260c47f Run test cases/windows/ tests on Cygwin
Also, always run 'test cases/windows/5 resources' on Cygwin since it can
handle args containing spaces correctly.
2017-04-06 22:48:02 +01:00
Jon Turney fd47ef3a27 Use '.exe' extension for executables for Cygwin
Use '.exe' extension for executables for Cygwin when building and installing
2017-04-06 22:47:15 +01:00
Jon Turney 5af98a5ee8 Use correct shared library naming for Cygwin
Use correct shared library naming for Cygwin when building and installing
2017-04-06 22:47:15 +01:00
Nirbheek Chauhan f4f9272e87 project tests: Don't look for PDB files on MinGW/GCC 2017-03-28 14:47:55 +05:30
Nirbheek Chauhan 52e1b0a3c9 project tests: DummyExecutor for MSYS2 and OpenBSD
Added and tested on MSYS2/MinGW which doesn't implement the required
semaphore locks in the multiprocessing module:

Traceback (most recent call last):
  File "C:/msys64/mingw64/lib/python3.5\multiprocessing\synchronize.py", line 29, in <module>
    from _multiprocessing import SemLock, sem_unlink
ImportError: cannot import name 'sem_unlink'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "run_project_tests.py", line 560, in <module>
    (passing_tests, failing_tests, skipped_tests) = run_tests(all_tests, 'meson-test-run', options.extra_args)
  File "run_project_tests.py", line 406, in run_tests
    executor = conc.ProcessPoolExecutor(max_workers=num_workers)
  File "F:/msys64/mingw64/lib/python3.5\concurrent\futures\process.py", line 390, in __init__
    EXTRA_QUEUED_CALLS)
  File "F:/msys64/mingw64/lib/python3.5\multiprocessing\context.py", line 101, in Queue
    return Queue(maxsize, ctx=self.get_context())
  File "F:/msys64/mingw64/lib/python3.5\multiprocessing\queues.py", line 42, in __init__
    self._rlock = ctx.Lock()
  File "F:/msys64/mingw64/lib/python3.5\multiprocessing\context.py", line 65, in Lock
    from .synchronize import Lock
  File "F:/msys64/mingw64/lib/python3.5\multiprocessing\synchronize.py", line 34, in <module>
    " function, see issue 3770.")
ImportError: This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.

See also:
https://bugs.python.org/issue3770
https://github.com/mesonbuild/meson/issues/1323

According to 3770, the same problem also exists on OpenBSD, so this
will potentially also be useful there.
2017-03-28 14:47:55 +05:30
Nirbheek Chauhan 665dd78ffe project tests: Print meson log instead of stdout for configure failures 2017-03-14 12:30:06 +05:30
Nirbheek Chauhan 2340fd3d8a tests/windows: Tests for #1444
Check that pdb files are installed
2017-03-03 15:52:31 +05:30
Nirbheek Chauhan 2e30912447 vs: Fix running of tests to use mesontest.py
Back in November when this broke, we didn't notice because our tests
are run in-process, so we don't check that `msbuild RUN_TESTS.vcxproj`
and `ninja test` actually work.

Now we do.
2017-01-28 01:05:21 +05:30
Jussi Pakkanen 0a2daf84eb No longer require a binary called python3 on Windows. The default name is "python". 2017-01-23 21:02:04 +02:00
Mike Sinkovsky 969be1f679 cleanup: Remove redundant parentheses 2017-01-18 21:22:47 +02:00
Mike Sinkovsky 0dd1e33898 style: [E251] unexpected spaces around keyword / parameter equals 2017-01-11 12:33:27 -05:00
Mike Sinkovsky 84902cb93a style: [E301] expected 1 blank line, found 0 2017-01-11 12:33:27 -05:00
Nirbheek Chauhan 747d4f2b03 We only need Ninja 1.5.x for the core code
This change helps us run on older distros such as Ubuntu LTS which is
very lazy in updating even non-core and stable packages such as Ninja.

Ninja 1.6.x is only needed for running the tests.
2017-01-09 14:03:03 -05:00
Nirbheek Chauhan a99732aaf2 Project tests: Also catch ValueError
It seems on Windows, deleting in a loop can cause a race where the
following error is raised:

Traceback (most recent call last):
  File "run_project_tests.py", line 550, in <module>
    (passing_tests, failing_tests, skipped_tests) = run_tests(all_tests, 'meson-test-run', options.extra_args)
  File "run_project_tests.py", line 416, in run_tests
    result = result.result()
  File "C:\python34-x64\lib\concurrent\futures\_base.py", line 402, in result
    return self.__get_result()
  File "C:\python34-x64\lib\concurrent\futures\_base.py", line 354, in __get_result
    raise self._exception
ValueError: I/O operation on closed file.

https://ci.appveyor.com/project/jpakkane/meson/build/1.0.1559/job/vsek754eu000kg3e
2017-01-04 00:42:06 +05:30
Nirbheek Chauhan 89ea236b02 project tests: Always print the logs of failing tests
There is never any reason to not do this since this script is supposed
to be run by developers and testers who are concerned with the details
of the problems.

It also helps with intermittent or hard-to-reproduce errors.
2017-01-02 17:18:07 -05:00
Jussi Pakkanen dc70916ca4 Catch permissionerrors too, since Windows seems to produce them occasionally. 2017-01-02 17:17:40 -05:00
Igor Gnatenko 116da33cdd style: fix E128 violations
E128: continuation line under-indented for visual indent

Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
2017-01-01 12:02:05 -05:00
Igor Gnatenko ea570bcb67 style: fix E265 violations
E265: block comment should start with '# '

Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
2017-01-01 12:02:05 -05:00
Igor Gnatenko 2017d8578a style: fix E226 violations
E226: missing whitespace around arithmetic operator

Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
2017-01-01 12:02:05 -05:00
Jussi Pakkanen b55235dfbd Fix space before :. 2016-12-31 16:28:15 +02:00
Nirbheek Chauhan a3c02262f9 Force a Ninja regeneration before each project test
We have no test coverage for regeneration at all, which is why issues
like #1246 slide by without us noticing. With this, we will run a regen
on every test during `ninja test` after it has been compiled. This will
not affect test times too much since the regen will not rebuild anything
at all since there have been no source changes.
2016-12-23 19:07:45 +02:00