Merge #8183 'build/msvc: Fix functional tests'

MSBuild still returns a non-zero exit code because it detects the word "error" in the stdout which is caused by some of the test names such as api/buf {get,set,del}_line get_line : out-of-bounds is an error. 

CMake mailing list thread:
https://cmake.org/pipermail/cmake-developers/2015-October/026775.html

There isn't any good solution for it, so I modified the build script to detect the error message printed by RunTests.cmake.
This commit is contained in:
Justin M. Keyes
2018-03-27 23:02:27 +02:00
committed by GitHub
4 changed files with 22 additions and 11 deletions

View File

@@ -3,14 +3,13 @@ environment:
APPVEYOR_CACHE_ENTRY_ZIP_ARGS: "-t7z -m0=lzma -mx=9" APPVEYOR_CACHE_ENTRY_ZIP_ARGS: "-t7z -m0=lzma -mx=9"
image: Visual Studio 2017 image: Visual Studio 2017
configuration: configuration:
- MSVC_64
- MSVC_32
- MINGW_64 - MINGW_64
- MINGW_32 - MINGW_32
- MSVC_64
# - MSVC_32
- MINGW_64-gcov - MINGW_64-gcov
matrix: matrix:
allow_failures: allow_failures:
- configuration: MSVC_64
- configuration: MINGW_64-gcov - configuration: MINGW_64-gcov
install: [] install: []
before_build: before_build:

View File

@@ -11,7 +11,6 @@ $depsCmakeVars = @{
$nvimCmakeVars = @{ $nvimCmakeVars = @{
CMAKE_BUILD_TYPE = $cmakeBuildType; CMAKE_BUILD_TYPE = $cmakeBuildType;
BUSTED_OUTPUT_TYPE = 'nvim'; BUSTED_OUTPUT_TYPE = 'nvim';
GPERF_PRG = 'C:\msys64\usr\bin\gperf.exe';
} }
function exitIfFailed() { function exitIfFailed() {
@@ -39,12 +38,10 @@ if ($compiler -eq 'MINGW') {
# Add MinGW to the PATH # Add MinGW to the PATH
$env:PATH = "C:\msys64\mingw$bits\bin;$env:PATH" $env:PATH = "C:\msys64\mingw$bits\bin;$env:PATH"
# Remove the Git sh.exe from the PATH
$env:PATH = $env:PATH.Replace('C:\Program Files\Git\usr\bin', '')
# Build third-party dependencies # Build third-party dependencies
C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm -Su" ; exitIfFailed C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm -Su" ; exitIfFailed
C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm --needed -S mingw-w64-$arch-cmake mingw-w64-$arch-perl mingw-w64-$arch-diffutils mingw-w64-$arch-unibilium gperf" ; exitIfFailed C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm --needed -S mingw-w64-$arch-cmake mingw-w64-$arch-perl mingw-w64-$arch-diffutils mingw-w64-$arch-unibilium" ; exitIfFailed
} }
elseif ($compiler -eq 'MSVC') { elseif ($compiler -eq 'MSVC') {
$cmakeGeneratorArgs = '/verbosity:normal' $cmakeGeneratorArgs = '/verbosity:normal'
@@ -56,6 +53,9 @@ elseif ($compiler -eq 'MSVC') {
} }
} }
# Remove Git Unix utilities from the PATH
$env:PATH = $env:PATH.Replace('C:\Program Files\Git\usr\bin', '')
# Setup python (use AppVeyor system python) # Setup python (use AppVeyor system python)
C:\Python27\python.exe -m pip install neovim ; exitIfFailed C:\Python27\python.exe -m pip install neovim ; exitIfFailed
C:\Python35\python.exe -m pip install neovim ; exitIfFailed C:\Python35\python.exe -m pip install neovim ; exitIfFailed
@@ -91,7 +91,18 @@ cmake --build . --config $cmakeBuildType -- $cmakeGeneratorArgs ; exitIfFailed
bin\nvim --version ; exitIfFailed bin\nvim --version ; exitIfFailed
# Functional tests # Functional tests
cmake --build . --config $cmakeBuildType --target functionaltest -- $cmakeGeneratorArgs ; exitIfFailed # The $LastExitCode from MSBuild can't be trusted
$failed = $false
# Temporarily turn off tracing to reduce log file output
Set-PSDebug -Off
cmake --build . --config $cmakeBuildType --target functionaltest -- $cmakeGeneratorArgs |
foreach { $failed = $failed -or
$_ -match 'Running functional tests failed with error'; $_ }
Set-PSDebug -Trace 1
if ($failed) {
exit $LastExitCode
}
if ($uploadToCodecov) { if ($uploadToCodecov) {
C:\msys64\usr\bin\bash -lc "cd /c/projects/neovim; bash <(curl -s https://codecov.io/bash) -c -F functionaltest || echo 'codecov upload failed.'" C:\msys64\usr\bin\bash -lc "cd /c/projects/neovim; bash <(curl -s https://codecov.io/bash) -c -F functionaltest || echo 'codecov upload failed.'"

View File

@@ -18,7 +18,8 @@ describe('mf_hash_grow()', function()
setup(clear) setup(clear)
-- Check to see if cksum exists, otherwise skip the test -- Check to see if cksum exists, otherwise skip the test
if os.execute('which cksum 2>&1 > /dev/null') ~= 0 then local null = helpers.iswin() and 'nul' or '/dev/null'
if os.execute('cksum --help >' .. null .. ' 2>&1') ~= 0 then
pending('was not tested because cksum was not found', function() end) pending('was not tested because cksum was not found', function() end)
else else
it('is working', function() it('is working', function()

View File

@@ -23,7 +23,7 @@ index 84299df..f9aabb3 100644
// We'll have at most len codepoints // We'll have at most len codepoints
- uint32_t codepoints[len]; - uint32_t codepoints[len];
+ uint32_t* codepoints = _alloca(len); + uint32_t* codepoints = _alloca(len * sizeof(uint32_t));
int npoints = 0; int npoints = 0;
size_t eaten = 0; size_t eaten = 0;
@@ -32,7 +32,7 @@ index 84299df..f9aabb3 100644
int width = 0; int width = 0;
- uint32_t chars[glyph_ends - glyph_starts + 1]; - uint32_t chars[glyph_ends - glyph_starts + 1];
+ uint32_t* chars = _alloca(glyph_ends - glyph_starts + 1); + uint32_t* chars = _alloca((glyph_ends - glyph_starts + 1) * sizeof(uint32_t));
for( ; i < glyph_ends; i++) { for( ; i < glyph_ends; i++) {
chars[i - glyph_starts] = codepoints[i]; chars[i - glyph_starts] = codepoints[i];