From a50541795c0d223119daff75d42a0333fe590d6c Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 22 Nov 2017 13:52:48 +0100 Subject: [PATCH 01/15] Compilation fix for VsnprintfTestCase with Catch Rewrite an assert using "||" as 2 asserts to allow it compile with Catch (this wasn't detected before as this code is only compiled when using our own vsnprintf() implementation, which is usually not the case). --- tests/strings/vsnprintf.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/strings/vsnprintf.cpp b/tests/strings/vsnprintf.cpp index f1ae32e8cd..3b082c53aa 100644 --- a/tests/strings/vsnprintf.cpp +++ b/tests/strings/vsnprintf.cpp @@ -552,8 +552,10 @@ void VsnprintfTestCase::DoMisc( std::string errMsg(errStr.mb_str()); std::string overflowMsg(overflowStr.mb_str()); - CPPUNIT_ASSERT_MESSAGE(errMsg, - (expectedLen == -1 && size_t(n) >= max) || expectedLen == n); + if ( size_t(n) < max ) + CPPUNIT_ASSERT_MESSAGE(errMsg, expectedLen == n); + else + CPPUNIT_ASSERT_MESSAGE(errMsg, expectedLen == -1); CPPUNIT_ASSERT_MESSAGE(errMsg, expectedString == buf); From bc100ff31e4e8743ba4427bd20714819d81ec8d8 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 22 Nov 2017 13:04:12 +0100 Subject: [PATCH 02/15] Build tests under AppVeyor too --- build/tools/appveyor.bat | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/build/tools/appveyor.bat b/build/tools/appveyor.bat index d703d23e0f..373ef3ead9 100644 --- a/build/tools/appveyor.bat +++ b/build/tools/appveyor.bat @@ -3,12 +3,17 @@ goto %TOOLSET% :msbuild cd build\msw msbuild /m:2 /v:n /p:Platform=%ARCH% /p:Configuration="%CONFIGURATION%" wx_vc12.sln +cd ..\..\tests +msbuild /m:2 /v:n /p:Platform=%ARCH% /p:Configuration="%CONFIGURATION%" test_vc12.sln +msbuild /m:2 /v:n /p:Platform=%ARCH% /p:Configuration="%CONFIGURATION%" test_gui_vc12.sln goto :eof :nmake cd build\msw call "C:\Program Files (x86)\Microsoft Visual Studio %VS%\VC\vcvarsall.bat" %ARCH% nmake -f makefile.vc BUILD=%BUILD% +cd ..\..\tests +nmake -f makefile.vc BUILD=%BUILD% goto :eof :mingw @@ -24,6 +29,8 @@ echo --- Starting the build echo. mingw32-make -f makefile.gcc setup_h BUILD=debug SHARED=0 mingw32-make -j3 -f makefile.gcc BUILD=debug SHARED=0 +cd ..\..\tests +mingw32-make -j3 -f makefile.gcc BUILD=debug SHARED=0 goto :eof :msys2 @@ -32,7 +39,7 @@ set CHERE_INVOKING=yes :: Workaround for "configure: Bad file descriptor" perl -i".bak" -pe "s/^test -n \".DJDIR\"/#$&/" configure bash -lc "g++ --version" -bash -lc "CXXFLAGS=-Wno-deprecated-declarations ./configure --disable-optimise && make -j3" +bash -lc "CXXFLAGS=-Wno-deprecated-declarations ./configure --disable-optimise && make -j3 && make -j3 -C tests" goto :eof :cygwin @@ -42,5 +49,5 @@ set CHERE_INVOKING=yes :: Workaround for "configure: Bad file descriptor" perl -i".bak" -pe "s/^test -n \".DJDIR\"/#$&/" configure bash -lc "g++ --version" -bash -lc "LDFLAGS=-L/usr/lib/w32api ./configure --disable-optimise --disable-shared && make -j3" +bash -lc "LDFLAGS=-L/usr/lib/w32api ./configure --disable-optimise --disable-shared && make -j3 && make -j3 -C tests" goto :eof From a68cb585cd08ae15654ad9b86acac7285bc53001 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 22 Nov 2017 21:03:18 +0100 Subject: [PATCH 03/15] Consistently use "unsigned" and "%u" in font unit test Don't mix "size_t" and "unsigned" and don't use "%lu" for printing "size_t" values as this doesn't work under Win64 where sizeof(size_t) is 8 while sizeof(unsigned long) is still just 4. --- tests/font/fonttest.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/font/fonttest.cpp b/tests/font/fonttest.cpp index 62a53de69d..247e7a47ca 100644 --- a/tests/font/fonttest.cpp +++ b/tests/font/fonttest.cpp @@ -242,7 +242,7 @@ void FontTestCase::NativeFontInfo() { unsigned numFonts; const wxFont *pf = GetTestFonts(numFonts); - for ( size_t n = 0; n < numFonts; n++ ) + for ( unsigned n = 0; n < numFonts; n++ ) { wxFont test(*pf++); @@ -254,7 +254,7 @@ void FontTestCase::NativeFontInfo() CPPUNIT_ASSERT( temp.SetNativeFontInfo(nid) ); CPPUNIT_ASSERT( temp.IsOk() ); WX_ASSERT_MESSAGE( - ("Test #%lu failed\ndump of test font: \"%s\"\ndump of temp font: \"%s\"", \ + ("Test #%u failed\ndump of test font: \"%s\"\ndump of temp font: \"%s\"", \ n, DumpFont(&test), DumpFont(&temp)), temp == test ); } @@ -296,7 +296,7 @@ void FontTestCase::NativeFontInfoUserDesc() { unsigned numFonts; const wxFont *pf = GetTestFonts(numFonts); - for ( size_t n = 0; n < numFonts; n++ ) + for ( unsigned n = 0; n < numFonts; n++ ) { wxFont test(*pf++); @@ -311,7 +311,7 @@ void FontTestCase::NativeFontInfoUserDesc() #ifdef __WXGTK__ // Pango saves/restores all font info in the user-friendly string: WX_ASSERT_MESSAGE( - ("Test #%lu failed; native info user desc was \"%s\" for test and \"%s\" for temp2", \ + ("Test #%u failed; native info user desc was \"%s\" for test and \"%s\" for temp2", \ n, niud, temp2.GetNativeFontInfoUserDesc()), temp2 == test ); #else From ba5a2031054bc150846ac87cf7d35a5f0e03f008 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 22 Nov 2017 21:13:10 +0100 Subject: [PATCH 04/15] Rewrite TLW unit test as a single function Get rid of the unnecessary test case class. No real changes yet. --- tests/toplevel/toplevel.cpp | 67 ++++++++++--------------------------- 1 file changed, 18 insertions(+), 49 deletions(-) diff --git a/tests/toplevel/toplevel.cpp b/tests/toplevel/toplevel.cpp index 53ea380960..68554f0749 100644 --- a/tests/toplevel/toplevel.cpp +++ b/tests/toplevel/toplevel.cpp @@ -23,55 +23,7 @@ #include "wx/toplevel.h" #endif // WX_PRECOMP -#include "wx/evtloop.h" - -// ---------------------------------------------------------------------------- -// test class -// ---------------------------------------------------------------------------- - -class TopLevelWindowTestCase : public CppUnit::TestCase -{ -public: - TopLevelWindowTestCase() { } - -private: - CPPUNIT_TEST_SUITE( TopLevelWindowTestCase ); - CPPUNIT_TEST( DialogShowTest ); - CPPUNIT_TEST( FrameShowTest ); - CPPUNIT_TEST_SUITE_END(); - - void DialogShowTest(); - void FrameShowTest(); - void TopLevelWindowShowTest(wxTopLevelWindow* tlw); - - wxDECLARE_NO_COPY_CLASS(TopLevelWindowTestCase); -}; - -// register in the unnamed registry so that these tests are run by default -//CPPUNIT_TEST_SUITE_REGISTRATION( TopLevelWindowTestCase ); - -// also include in its own registry so that these tests can be run alone -CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( TopLevelWindowTestCase, "fixme" ); - -// ---------------------------------------------------------------------------- -// tests themselves -// ---------------------------------------------------------------------------- - -void TopLevelWindowTestCase::DialogShowTest() -{ - wxDialog* dialog = new wxDialog(NULL, -1, "Dialog Test"); - TopLevelWindowShowTest(dialog); - dialog->Destroy(); -} - -void TopLevelWindowTestCase::FrameShowTest() -{ - wxFrame* frame = new wxFrame(NULL, -1, "Frame test"); - TopLevelWindowShowTest(frame); - frame->Destroy(); -} - -void TopLevelWindowTestCase::TopLevelWindowShowTest(wxTopLevelWindow* tlw) +static void TopLevelWindowShowTest(wxTopLevelWindow* tlw) { CHECK(!tlw->IsShown()); @@ -104,3 +56,20 @@ void TopLevelWindowTestCase::TopLevelWindowShowTest(wxTopLevelWindow* tlw) CHECK(tlw->IsActive()); #endif } + +TEST_CASE("wxTopLevel::Show", "[tlw][show]") +{ + SECTION("Dialog") + { + wxDialog* dialog = new wxDialog(NULL, -1, "Dialog Test"); + TopLevelWindowShowTest(dialog); + dialog->Destroy(); + } + + SECTION("Frame") + { + wxFrame* frame = new wxFrame(NULL, -1, "Frame test"); + TopLevelWindowShowTest(frame); + frame->Destroy(); + } +} From 0c29775d4ddefc2286653ba83b3f5f0dad589ed7 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 22 Nov 2017 21:23:35 +0100 Subject: [PATCH 05/15] Skip wxTopLevelWindow showing/activation tests in CI builds It doesn't seem to work when run unattended, for whatever reason. --- tests/toplevel/toplevel.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tests/toplevel/toplevel.cpp b/tests/toplevel/toplevel.cpp index 68554f0749..60722f0ce2 100644 --- a/tests/toplevel/toplevel.cpp +++ b/tests/toplevel/toplevel.cpp @@ -59,6 +59,13 @@ static void TopLevelWindowShowTest(wxTopLevelWindow* tlw) TEST_CASE("wxTopLevel::Show", "[tlw][show]") { + if ( IsAutomaticTest() ) + { + // For some reason, activation test doesn't work when running under + // AppVeyor, so skip it to avoid spurious failures. + return; + } + SECTION("Dialog") { wxDialog* dialog = new wxDialog(NULL, -1, "Dialog Test"); From 753aa757a44ee2694d6f1fcd841dd3fe5c9ad63a Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 22 Nov 2017 21:25:19 +0100 Subject: [PATCH 06/15] Recognize AppVeyor CI environment in unit tests Check for APPVEYOR environment variable in addition to TRAVIS one. --- tests/test.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/test.cpp b/tests/test.cpp index 4b5f492fa4..e8628ac591 100644 --- a/tests/test.cpp +++ b/tests/test.cpp @@ -350,9 +350,12 @@ extern bool IsAutomaticTest() s_isAutomatic = username == "buildbot" || username.Matches("sandbox*"); - // Also recognize Travis CI environment. + // Also recognize Travis and AppVeyor CI environments. if ( !s_isAutomatic ) - s_isAutomatic = wxGetEnv("TRAVIS", NULL); + { + s_isAutomatic = wxGetEnv("TRAVIS", NULL) || + wxGetEnv("APPVEYOR", NULL); + } } return s_isAutomatic == 1; From 3508e3a6237c6ba782728abe7136a38afe65f1af Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 23 Nov 2017 00:10:07 +0100 Subject: [PATCH 07/15] Disable test for clicking URLs under AppVeyor It fails, for whatever reason, even though it passes locally and other tests using wxUIActionSimulator work under AppVeyor too. --- tests/controls/textctrltest.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/controls/textctrltest.cpp b/tests/controls/textctrltest.cpp index 3abcbfe868..7264bc5d82 100644 --- a/tests/controls/textctrltest.cpp +++ b/tests/controls/textctrltest.cpp @@ -376,6 +376,12 @@ void TextCtrlTestCase::ProcessEnter() void TextCtrlTestCase::Url() { #if wxUSE_UIACTIONSIMULATOR && defined(__WXMSW__) + // For some unfathomable reason, this test consistently fails when run in + // AppVeyor CI environment, even though it passes locally, so skip it + // there. + if ( wxGetEnv("APPVEYOR", NULL) ) + return; + delete m_text; CreateText(wxTE_RICH | wxTE_AUTO_URL); From dd8155980ba24230a1e9596740e70202b2ca5cb0 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 24 Nov 2017 14:23:32 +0100 Subject: [PATCH 08/15] Enable building the unit tests for x64 in MSVS solutions For some reason (but probably accidentally), building tests was disabled for x64 platform. --- tests/test_vc10.sln | 48 ++++++++++++++++++++++++++++++--------------- tests/test_vc11.sln | 48 ++++++++++++++++++++++++++++++--------------- tests/test_vc12.sln | 48 ++++++++++++++++++++++++++++++--------------- tests/test_vc14.sln | 48 ++++++++++++++++++++++++++++++--------------- tests/test_vc15.sln | 48 ++++++++++++++++++++++++++++++--------------- 5 files changed, 160 insertions(+), 80 deletions(-) diff --git a/tests/test_vc10.sln b/tests/test_vc10.sln index 576464a5de..e6f9801ee9 100644 --- a/tests/test_vc10.sln +++ b/tests/test_vc10.sln @@ -28,52 +28,68 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|Win32.ActiveCfg = Debug|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|Win32.Build.0 = Debug|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.ActiveCfg = Debug|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.ActiveCfg = Debug|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.Build.0 = Debug|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.Build.0 = DLL Debug|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.Build.0 = DLL Release|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|Win32.ActiveCfg = Release|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|Win32.Build.0 = Release|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.ActiveCfg = Release|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.ActiveCfg = Release|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.Build.0 = Release|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.ActiveCfg = Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.Build.0 = Debug|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.ActiveCfg = Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.ActiveCfg = Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.Build.0 = Debug|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.Build.0 = DLL Debug|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.Build.0 = DLL Release|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.ActiveCfg = Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.Build.0 = Release|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.ActiveCfg = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.ActiveCfg = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.Build.0 = Release|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.ActiveCfg = Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.Build.0 = Debug|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.ActiveCfg = Debug|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.ActiveCfg = Debug|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.Build.0 = Debug|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.Build.0 = DLL Debug|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.Build.0 = DLL Release|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.ActiveCfg = Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.Build.0 = Release|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.ActiveCfg = Release|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.ActiveCfg = Release|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.Build.0 = Release|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.ActiveCfg = Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.Build.0 = Debug|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.ActiveCfg = Debug|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.ActiveCfg = Debug|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.Build.0 = Debug|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.Build.0 = DLL Debug|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.Build.0 = DLL Release|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.ActiveCfg = Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.Build.0 = Release|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.ActiveCfg = Release|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.ActiveCfg = Release|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/tests/test_vc11.sln b/tests/test_vc11.sln index 2a449bfbb9..b0ea4a9fbb 100644 --- a/tests/test_vc11.sln +++ b/tests/test_vc11.sln @@ -28,52 +28,68 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|Win32.ActiveCfg = Debug|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|Win32.Build.0 = Debug|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.ActiveCfg = Debug|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.ActiveCfg = Debug|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.Build.0 = Debug|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.Build.0 = DLL Debug|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.Build.0 = DLL Release|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|Win32.ActiveCfg = Release|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|Win32.Build.0 = Release|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.ActiveCfg = Release|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.ActiveCfg = Release|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.Build.0 = Release|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.ActiveCfg = Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.Build.0 = Debug|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.ActiveCfg = Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.ActiveCfg = Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.Build.0 = Debug|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.Build.0 = DLL Debug|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.Build.0 = DLL Release|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.ActiveCfg = Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.Build.0 = Release|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.ActiveCfg = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.ActiveCfg = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.Build.0 = Release|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.ActiveCfg = Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.Build.0 = Debug|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.ActiveCfg = Debug|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.ActiveCfg = Debug|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.Build.0 = Debug|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.Build.0 = DLL Debug|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.Build.0 = DLL Release|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.ActiveCfg = Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.Build.0 = Release|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.ActiveCfg = Release|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.ActiveCfg = Release|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.Build.0 = Release|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.ActiveCfg = Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.Build.0 = Debug|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.ActiveCfg = Debug|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.ActiveCfg = Debug|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.Build.0 = Debug|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.Build.0 = DLL Debug|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.Build.0 = DLL Release|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.ActiveCfg = Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.Build.0 = Release|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.ActiveCfg = Release|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.ActiveCfg = Release|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/tests/test_vc12.sln b/tests/test_vc12.sln index f09f43057b..933aa76596 100644 --- a/tests/test_vc12.sln +++ b/tests/test_vc12.sln @@ -30,52 +30,68 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|Win32.ActiveCfg = Debug|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|Win32.Build.0 = Debug|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.ActiveCfg = Debug|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.ActiveCfg = Debug|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.Build.0 = Debug|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.Build.0 = DLL Debug|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.Build.0 = DLL Release|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|Win32.ActiveCfg = Release|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|Win32.Build.0 = Release|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.ActiveCfg = Release|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.ActiveCfg = Release|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.Build.0 = Release|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.ActiveCfg = Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.Build.0 = Debug|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.ActiveCfg = Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.ActiveCfg = Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.Build.0 = Debug|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.Build.0 = DLL Debug|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.Build.0 = DLL Release|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.ActiveCfg = Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.Build.0 = Release|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.ActiveCfg = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.ActiveCfg = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.Build.0 = Release|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.ActiveCfg = Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.Build.0 = Debug|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.ActiveCfg = Debug|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.ActiveCfg = Debug|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.Build.0 = Debug|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.Build.0 = DLL Debug|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.Build.0 = DLL Release|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.ActiveCfg = Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.Build.0 = Release|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.ActiveCfg = Release|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.ActiveCfg = Release|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.Build.0 = Release|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.ActiveCfg = Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.Build.0 = Debug|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.ActiveCfg = Debug|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.ActiveCfg = Debug|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.Build.0 = Debug|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.Build.0 = DLL Debug|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.Build.0 = DLL Release|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.ActiveCfg = Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.Build.0 = Release|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.ActiveCfg = Release|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.ActiveCfg = Release|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/tests/test_vc14.sln b/tests/test_vc14.sln index ca590cd511..a0890664db 100644 --- a/tests/test_vc14.sln +++ b/tests/test_vc14.sln @@ -30,52 +30,68 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|Win32.ActiveCfg = Debug|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|Win32.Build.0 = Debug|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.ActiveCfg = Debug|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.ActiveCfg = Debug|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.Build.0 = Debug|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.Build.0 = DLL Debug|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.Build.0 = DLL Release|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|Win32.ActiveCfg = Release|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|Win32.Build.0 = Release|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.ActiveCfg = Release|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.ActiveCfg = Release|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.Build.0 = Release|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.ActiveCfg = Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.Build.0 = Debug|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.ActiveCfg = Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.ActiveCfg = Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.Build.0 = Debug|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.Build.0 = DLL Debug|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.Build.0 = DLL Release|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.ActiveCfg = Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.Build.0 = Release|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.ActiveCfg = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.ActiveCfg = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.Build.0 = Release|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.ActiveCfg = Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.Build.0 = Debug|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.ActiveCfg = Debug|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.ActiveCfg = Debug|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.Build.0 = Debug|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.Build.0 = DLL Debug|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.Build.0 = DLL Release|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.ActiveCfg = Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.Build.0 = Release|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.ActiveCfg = Release|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.ActiveCfg = Release|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.Build.0 = Release|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.ActiveCfg = Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.Build.0 = Debug|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.ActiveCfg = Debug|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.ActiveCfg = Debug|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.Build.0 = Debug|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.Build.0 = DLL Debug|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.Build.0 = DLL Release|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.ActiveCfg = Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.Build.0 = Release|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.ActiveCfg = Release|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.ActiveCfg = Release|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/tests/test_vc15.sln b/tests/test_vc15.sln index 27821483dd..c1afddd966 100644 --- a/tests/test_vc15.sln +++ b/tests/test_vc15.sln @@ -30,52 +30,68 @@ Global GlobalSection(ProjectConfigurationPlatforms) = postSolution {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|Win32.ActiveCfg = Debug|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|Win32.Build.0 = Debug|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.ActiveCfg = Debug|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.ActiveCfg = Debug|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Debug|x64.Build.0 = Debug|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Debug|x64.Build.0 = DLL Debug|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.DLL Release|x64.Build.0 = DLL Release|x64 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|Win32.ActiveCfg = Release|Win32 {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|Win32.Build.0 = Release|Win32 - {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.ActiveCfg = Release|Win32 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.ActiveCfg = Release|x64 + {2F45723C-ED6B-5F60-8BFF-6B3609464A7B}.Release|x64.Build.0 = Release|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.ActiveCfg = Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|Win32.Build.0 = Debug|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.ActiveCfg = Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.ActiveCfg = Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Debug|x64.Build.0 = Debug|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Debug|x64.Build.0 = DLL Debug|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.DLL Release|x64.Build.0 = DLL Release|x64 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.ActiveCfg = Release|Win32 {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|Win32.Build.0 = Release|Win32 - {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.ActiveCfg = Release|Win32 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.ActiveCfg = Release|x64 + {3FCC50C2-81E9-5DB2-B8D8-2129427568B1}.Release|x64.Build.0 = Release|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.ActiveCfg = Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|Win32.Build.0 = Debug|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.ActiveCfg = Debug|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.ActiveCfg = Debug|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Debug|x64.Build.0 = Debug|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Debug|x64.Build.0 = DLL Debug|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.DLL Release|x64.Build.0 = DLL Release|x64 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.ActiveCfg = Release|Win32 {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|Win32.Build.0 = Release|Win32 - {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.ActiveCfg = Release|Win32 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.ActiveCfg = Release|x64 + {69F2EDE4-7D21-5738-9BC0-F66F61C9AE00}.Release|x64.Build.0 = Release|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.ActiveCfg = Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|Win32.Build.0 = Debug|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.ActiveCfg = Debug|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.ActiveCfg = Debug|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Debug|x64.Build.0 = Debug|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.ActiveCfg = DLL Debug|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.ActiveCfg = DLL Debug|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Debug|x64.Build.0 = DLL Debug|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|Win32.ActiveCfg = DLL Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|Win32.Build.0 = DLL Release|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.ActiveCfg = DLL Release|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.ActiveCfg = DLL Release|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.DLL Release|x64.Build.0 = DLL Release|x64 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.ActiveCfg = Release|Win32 {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|Win32.Build.0 = Release|Win32 - {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.ActiveCfg = Release|Win32 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.ActiveCfg = Release|x64 + {3E6DCA27-5FA3-53EC-BBD6-2D42294B7AE6}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 471a7713820c96bb5615e6ae6f2b717d37729a1a Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 25 Nov 2017 11:02:52 +0100 Subject: [PATCH 09/15] Fix built-in wxPrintf() for repeated positional parameters Allow wxPrintf("%1$s %1$s", "foo") to work. Take into account the possibility that the number of format specifiers and the number of actual arguments can be different. Closes #9367. --- include/wx/private/wxprintf.h | 42 +++++++++++++++++++++++++++-------- src/common/wxprintf.cpp | 2 +- tests/strings/strings.cpp | 2 ++ 3 files changed, 36 insertions(+), 10 deletions(-) diff --git a/include/wx/private/wxprintf.h b/include/wx/private/wxprintf.h index e16b9f4e40..f34d68495e 100644 --- a/include/wx/private/wxprintf.h +++ b/include/wx/private/wxprintf.h @@ -797,6 +797,7 @@ struct wxPrintfConvSpecParser wxPrintfConvSpecParser(const CharType *fmt) { + nspecs = nargs = 0; posarg_present = nonposarg_present = false; @@ -817,7 +818,7 @@ struct wxPrintfConvSpecParser continue; } - ConvSpec *spec = &specs[nargs]; + ConvSpec *spec = &specs[nspecs]; spec->Init(); // attempt to parse this format specification @@ -838,7 +839,7 @@ struct wxPrintfConvSpecParser for ( unsigned n = 0; n < numAsterisks; n++ ) { - if ( ++nargs == wxMAX_SVNPRINTF_ARGUMENTS ) + if ( ++nspecs == wxMAX_SVNPRINTF_ARGUMENTS ) break; // TODO: we need to support specifiers of the form "%2$*1$s" @@ -861,19 +862,19 @@ struct wxPrintfConvSpecParser ); } - specs[nargs] = *spec; + specs[nspecs] = *spec; // make an entry for '*' and point to it from pspec spec->Init(); spec->m_type = wxPAT_STAR; - pspec[nargs - 1] = spec; + pspec[nargs++] = spec; - spec = &specs[nargs]; + spec = &specs[nspecs]; } // If we hit the maximal number of arguments inside the inner // loop, break out of the outer one as well. - if ( nargs == wxMAX_SVNPRINTF_ARGUMENTS ) + if ( nspecs == wxMAX_SVNPRINTF_ARGUMENTS ) break; } @@ -884,25 +885,44 @@ struct wxPrintfConvSpecParser // the positional arguments start from number 1 so we need // to adjust the index spec->m_pos--; + + // We could be reusing an already existing argument, only + // increment their number if it's really a new one. + if ( spec->m_pos >= nargs ) + { + nargs = spec->m_pos + 1; + } + else if ( pspec[spec->m_pos] ) // Had we seen it before? + { + // Check that the type specified this time is compatible + // with the previously-specified type. + wxASSERT_MSG + ( + pspec[spec->m_pos]->m_type == spec->m_type, + "Positional parameter specified multiple times " + "with incompatible types." + ); + } + posarg_present = true; } else // not a positional argument... { - spec->m_pos = nargs; + spec->m_pos = nargs++; nonposarg_present = true; } // this conversion specifier is tied to the pos-th argument... pspec[spec->m_pos] = spec; - if ( ++nargs == wxMAX_SVNPRINTF_ARGUMENTS ) + if ( ++nspecs == wxMAX_SVNPRINTF_ARGUMENTS ) break; } // warn if we lost any arguments (the program probably will crash // anyhow because of stack corruption...) - if ( nargs == wxMAX_SVNPRINTF_ARGUMENTS ) + if ( nspecs == wxMAX_SVNPRINTF_ARGUMENTS ) { wxFAIL_MSG ( @@ -919,6 +939,10 @@ struct wxPrintfConvSpecParser } // total number of valid elements in specs + unsigned nspecs; + + // total number of arguments, also number of valid elements in pspec, and + // always less than or (usually) equal to nspecs unsigned nargs; // all format specifications in this format string in order of their diff --git a/src/common/wxprintf.cpp b/src/common/wxprintf.cpp index 69cb20cbae..7e18b83e89 100644 --- a/src/common/wxprintf.cpp +++ b/src/common/wxprintf.cpp @@ -139,7 +139,7 @@ static int wxDoVsnprintf(CharType *buf, size_t lenMax, // finally, process each conversion specifier with its own argument const CharType *toparse = format; - for (i=0; i < parser.nargs; i++) + for (i=0; i < parser.nspecs; i++) { wxPrintfConvSpec& spec = parser.specs[i]; diff --git a/tests/strings/strings.cpp b/tests/strings/strings.cpp index bfcdb5e187..7e960ecb64 100644 --- a/tests/strings/strings.cpp +++ b/tests/strings/strings.cpp @@ -188,6 +188,8 @@ void StringTestCase::Format() "4 world hello world 3", wxString::Format("%4$d %2$s %1$s %2$s %3$d", "hello", "world", 3, 4) ); + + CHECK( wxString::Format("%1$o %1$d %1$x", 20) == "24 20 14" ); } void StringTestCase::FormatUnicode() From b630abffd2890b86de5dd49b0bbb1bd4f458955c Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 25 Nov 2017 11:07:49 +0100 Subject: [PATCH 10/15] Fix FormatConverterTestCase for MinGW and Cygwin Standard/Unix format strings are intentionally used when using these compilers/environments (see d62c535d4cadf9793f9639d1449c172e996430f3 for the former), so don't check for Windows/MSVC format strings in the test. --- tests/formatconverter/formatconvertertest.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/formatconverter/formatconvertertest.cpp b/tests/formatconverter/formatconvertertest.cpp index 4ad9180a0b..187fa30248 100644 --- a/tests/formatconverter/formatconvertertest.cpp +++ b/tests/formatconverter/formatconvertertest.cpp @@ -311,7 +311,9 @@ void FormatConverterTestCase::check(const wxString& input, #if wxUSE_UNICODE && !wxUSE_UTF8_LOCALE_ONLY result = (const wchar_t*)wxFormatString(input); -#ifdef __WINDOWS__ +#if defined(__WINDOWS__) && \ + !defined(__CYGWIN__) && \ + !defined(__MINGW32__) wxString expectedWchar(expectedWcharWindows); #else wxString expectedWchar(expectedWcharUnix); From 62f9438ad3df089da19015d296d0f42507a3bb7c Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 25 Nov 2017 12:08:40 +0100 Subject: [PATCH 11/15] Rewrite wxPathList unit test without CppUnit-compatible API Simplify the test by using a single function instead of all the machinery inherited from CppUnit. Also provide more information in case of test failure. --- tests/misc/pathlist.cpp | 36 +++++------------------------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/tests/misc/pathlist.cpp b/tests/misc/pathlist.cpp index 4a4e2a9c95..c869b63955 100644 --- a/tests/misc/pathlist.cpp +++ b/tests/misc/pathlist.cpp @@ -18,44 +18,18 @@ #include "wx/filefn.h" -// ---------------------------------------------------------------------------- -// test class -// ---------------------------------------------------------------------------- - -class PathListTestCase : public CppUnit::TestCase -{ -public: - PathListTestCase() { } - -private: - CPPUNIT_TEST_SUITE( PathListTestCase ); - CPPUNIT_TEST( FindValidPath ); - CPPUNIT_TEST_SUITE_END(); - - void FindValidPath(); - - wxDECLARE_NO_COPY_CLASS(PathListTestCase); -}; - -// register in the unnamed registry so that these tests are run by default -CPPUNIT_TEST_SUITE_REGISTRATION( PathListTestCase ); - -// also include in its own registry so that these tests can be run alone -CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( PathListTestCase, "PathListTestCase" ); - -void PathListTestCase::FindValidPath() +TEST_CASE("wxPathList::FindValidPath", "[file][path]") { #ifdef __UNIX__ - #define CMD_IN_PATH wxT("ls") + #define CMD_IN_PATH "ls" #else - #define CMD_IN_PATH wxT("cmd.exe") + #define CMD_IN_PATH "cmd.exe" #endif wxPathList pathlist; pathlist.AddEnvList(wxT("PATH")); wxString path = pathlist.FindValidPath(CMD_IN_PATH); - CPPUNIT_ASSERT( !path.empty() ); + INFO( CMD_IN_PATH " not found in " << wxGetenv("PATH") ); + CHECK( !path.empty() ); } - - From 01cd702ee381065f1df19385b17150b60317b5f9 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 25 Nov 2017 12:11:40 +0100 Subject: [PATCH 12/15] Test for wxXLocale availability directly in the unit test Apparently a locale can be available at MSW level, so that wxLocale::IsAvailable() returns true, but not supported by the MSVC CRT, so that constructing the corresponding wxXLocale fails, which resulted in wxXLocale unit test failures. Fix them by checking that wxXLocale can be constructed directly instead of using wxLocale::IsAvailable() as a proxy. This is not ideal and perhaps wxLocale::IsAvailable() should check that the locale is supported in wxXLocale too, but should at least allow unit tests to pass on AppVeyor for now. --- tests/xlocale/xlocale.cpp | 132 +++++++++++++++++++------------------- 1 file changed, 67 insertions(+), 65 deletions(-) diff --git a/tests/xlocale/xlocale.cpp b/tests/xlocale/xlocale.cpp index dda5c0e362..2c00722869 100644 --- a/tests/xlocale/xlocale.cpp +++ b/tests/xlocale/xlocale.cpp @@ -225,97 +225,99 @@ void XLocaleTestCase::TestStdlibFunctionsWith(const wxXLocale& loc) void XLocaleTestCase::TestCtypeFunctions() { - TestCtypeFunctionsWith(wxCLocale); + SECTION("C") + { + TestCtypeFunctionsWith(wxCLocale); + } #ifdef wxHAS_XLOCALE_SUPPORT + SECTION("French") + { + wxXLocale locFR(wxLANGUAGE_FRENCH); + if ( !locFR.IsOk() ) + { + // Not an error, not all systems have French locale support. + return; + } - // french + TestCtypeFunctionsWith(locFR); - if (!wxLocale::IsAvailable(wxLANGUAGE_FRENCH)) - return; // you should have french support installed to continue this test! + CPPUNIT_ASSERT( wxIsalpha_l(wxT('\xe9'), locFR) ); + CPPUNIT_ASSERT( wxIslower_l(wxT('\xe9'), locFR) ); + CPPUNIT_ASSERT( !wxIslower_l(wxT('\xc9'), locFR) ); + CPPUNIT_ASSERT( wxIsupper_l(wxT('\xc9'), locFR) ); + CPPUNIT_ASSERT( wxIsalpha_l(wxT('\xe7'), locFR) ); + CPPUNIT_ASSERT( wxIslower_l(wxT('\xe7'), locFR) ); + CPPUNIT_ASSERT( wxIsupper_l(wxT('\xc7'), locFR) ); + } - wxXLocale locFR(wxLANGUAGE_FRENCH); - CPPUNIT_ASSERT( locFR.IsOk() ); // doesn't make sense to continue otherwise + SECTION("Italian") + { + wxXLocale locIT(wxLANGUAGE_ITALIAN); + if ( !locIT.IsOk() ) + return; - TestCtypeFunctionsWith(locFR); + TestCtypeFunctionsWith(locIT); - CPPUNIT_ASSERT( wxIsalpha_l(wxT('\xe9'), locFR) ); - CPPUNIT_ASSERT( wxIslower_l(wxT('\xe9'), locFR) ); - CPPUNIT_ASSERT( !wxIslower_l(wxT('\xc9'), locFR) ); - CPPUNIT_ASSERT( wxIsupper_l(wxT('\xc9'), locFR) ); - CPPUNIT_ASSERT( wxIsalpha_l(wxT('\xe7'), locFR) ); - CPPUNIT_ASSERT( wxIslower_l(wxT('\xe7'), locFR) ); - CPPUNIT_ASSERT( wxIsupper_l(wxT('\xc7'), locFR) ); - - - // italian - - if (!wxLocale::IsAvailable(wxLANGUAGE_ITALIAN)) - return; // you should have italian support installed to continue this test! - - wxXLocale locIT(wxLANGUAGE_ITALIAN); - CPPUNIT_ASSERT( locIT.IsOk() ); // doesn't make sense to continue otherwise - - TestCtypeFunctionsWith(locIT); - - CPPUNIT_ASSERT( wxIsalpha_l(wxT('\xe1'), locIT) ); - CPPUNIT_ASSERT( wxIslower_l(wxT('\xe1'), locIT) ); -#endif + CPPUNIT_ASSERT( wxIsalpha_l(wxT('\xe1'), locIT) ); + CPPUNIT_ASSERT( wxIslower_l(wxT('\xe1'), locIT) ); + } +#endif // wxHAS_XLOCALE_SUPPORT } void XLocaleTestCase::TestStdlibFunctions() { - TestStdlibFunctionsWith(wxCLocale); + SECTION("C") + { + TestStdlibFunctionsWith(wxCLocale); #if wxUSE_UNICODE - wchar_t* endptr; + wchar_t* endptr; #else - char* endptr; + char* endptr; #endif - // strtod checks specific for C locale - endptr = NULL; - CPPUNIT_ASSERT_EQUAL( 0.0, wxStrtod_l(wxT("0.000"), NULL, wxCLocale) ); - CPPUNIT_ASSERT_EQUAL( 1.234, wxStrtod_l(wxT("1.234"), NULL, wxCLocale) ); - CPPUNIT_ASSERT_EQUAL( -1.234E-5, wxStrtod_l(wxT("-1.234E-5"), NULL, wxCLocale) ); - CPPUNIT_ASSERT_EQUAL( 365.24, wxStrtod_l(wxT("365.24 29.53"), &endptr, wxCLocale) ); - CPPUNIT_ASSERT_EQUAL( 29.53, wxStrtod_l(endptr, NULL, wxCLocale) ); + // strtod checks specific for C locale + endptr = NULL; + CPPUNIT_ASSERT_EQUAL( 0.0, wxStrtod_l(wxT("0.000"), NULL, wxCLocale) ); + CPPUNIT_ASSERT_EQUAL( 1.234, wxStrtod_l(wxT("1.234"), NULL, wxCLocale) ); + CPPUNIT_ASSERT_EQUAL( -1.234E-5, wxStrtod_l(wxT("-1.234E-5"), NULL, wxCLocale) ); + CPPUNIT_ASSERT_EQUAL( 365.24, wxStrtod_l(wxT("365.24 29.53"), &endptr, wxCLocale) ); + CPPUNIT_ASSERT_EQUAL( 29.53, wxStrtod_l(endptr, NULL, wxCLocale) ); + } #ifdef wxHAS_XLOCALE_SUPPORT + SECTION("French") + { + wxXLocale locFR(wxLANGUAGE_FRENCH); + if ( !locFR.IsOk() ) + return; - // french + TestCtypeFunctionsWith(locFR); - if (!wxLocale::IsAvailable(wxLANGUAGE_FRENCH)) - return; // you should have french support installed to continue this test! + // comma as decimal point: + CPPUNIT_ASSERT_EQUAL( 1.234, wxStrtod_l(wxT("1,234"), NULL, locFR) ); - wxXLocale locFR(wxLANGUAGE_FRENCH); - CPPUNIT_ASSERT( locFR.IsOk() ); // doesn't make sense to continue otherwise - - TestCtypeFunctionsWith(locFR); - - // comma as decimal point: - CPPUNIT_ASSERT_EQUAL( 1.234, wxStrtod_l(wxT("1,234"), NULL, locFR) ); - - // space as thousands separator is not recognized by wxStrtod_l(): - CPPUNIT_ASSERT( 1234.5 != wxStrtod_l(wxT("1 234,5"), NULL, locFR) ); + // space as thousands separator is not recognized by wxStrtod_l(): + CPPUNIT_ASSERT( 1234.5 != wxStrtod_l(wxT("1 234,5"), NULL, locFR) ); + } - // italian + SECTION("Italian") + { + wxXLocale locIT(wxLANGUAGE_ITALIAN); + if ( !locIT.IsOk() ) + return; - if (!wxLocale::IsAvailable(wxLANGUAGE_ITALIAN)) - return; // you should have italian support installed to continue this test! + TestStdlibFunctionsWith(locIT); - wxXLocale locIT(wxLANGUAGE_ITALIAN); - CPPUNIT_ASSERT( locIT.IsOk() ); // doesn't make sense to continue otherwise + // comma as decimal point: + CPPUNIT_ASSERT_EQUAL( 1.234, wxStrtod_l(wxT("1,234"), NULL, locIT) ); - TestStdlibFunctionsWith(locIT); - - // comma as decimal point: - CPPUNIT_ASSERT_EQUAL( 1.234, wxStrtod_l(wxT("1,234"), NULL, locIT) ); - - // dot as thousands separator is not recognized by wxStrtod_l(): - CPPUNIT_ASSERT( 1234.5 != wxStrtod_l(wxT("1.234,5"), NULL, locIT) ); -#endif + // dot as thousands separator is not recognized by wxStrtod_l(): + CPPUNIT_ASSERT( 1234.5 != wxStrtod_l(wxT("1.234,5"), NULL, locIT) ); + } +#endif // wxHAS_XLOCALE_SUPPORT } #endif // wxUSE_XLOCALE From 4e4617a9e6b5f8e9e4f09a03595ff1453561f9dd Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 25 Nov 2017 12:58:33 +0100 Subject: [PATCH 13/15] Show value if comparison fails in VarArgTestCase Use string comparison instead of wxStrcmp() to view the actual value of the string if it doesn't have the expected value. --- tests/strings/vararg.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/strings/vararg.cpp b/tests/strings/vararg.cpp index 70356bd2cf..a03c7b48c7 100644 --- a/tests/strings/vararg.cpp +++ b/tests/strings/vararg.cpp @@ -206,12 +206,12 @@ void VarArgTestCase::Sscanf() wxSscanf(input, "%d %s", &i, &str); CPPUNIT_ASSERT( i == 42 ); - CPPUNIT_ASSERT( wxStrcmp(str, "test") == 0 ); + CPPUNIT_ASSERT( wxString(str) == "test" ); i = 0; wxSscanf(input, L"%d %s", &i, &wstr); CPPUNIT_ASSERT( i == 42 ); - CPPUNIT_ASSERT( wxStrcmp(wstr, "test") == 0 ); + CPPUNIT_ASSERT( wxString(wstr) == "test" ); } void VarArgTestCase::RepeatedPrintf() From f10bd1279d1ba49e57eb2fa87605c22b94d631b9 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 25 Nov 2017 15:59:16 +0100 Subject: [PATCH 14/15] Remove the correct directory from PATH for MinGW AppVeyor builds We need to remove the directory containing sh.exe from the PATH as otherwise mingw32-make seems to use it and not cmd.exe for executing the commands in the makefile, but the wrong directory was being removed in appveyor.yml, having no effect. Fix this and undo 5f2ccde269278860d7afbe1ca101a1b69370fbfb which compensated for it by (almost) clearing the PATH entirely which, in turn, broke one of our unit tests (and could break other things in the future, as having an empty PATH is rather unexpected). Also use the full path for head program now that its directory is not in the PATH any more. Alternative could be to use PowerShell, but while powershell -Command "'gcc','mingw32-make','ar'|%%{ iex \"$_ --version\"|select -first 1 }" does work, it looks really ugly, so avoid it for now. See https://github.com/wxWidgets/wxWidgets/pull/142 See #17274. --- appveyor.yml | 2 +- build/tools/appveyor.bat | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 4dad5245ed..1ce5ccc578 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -33,7 +33,7 @@ install: git submodule update --init before_build: - ps: | - $env:PATH = $env:PATH -replace "C:\\Program Files \(x86\)\\Git\\bin","" + $env:PATH = $env:PATH -replace "C:\\Program Files\\Git\\usr\\bin","" if (($env:compiler -ne "msys2") -and ($env:compiler -ne "cygwin")) { gc include\wx\msw\setup0.h | %{$_ -replace "define wxUSE_STL 0", "define wxUSE_STL $env:wxUSE_STL"} | diff --git a/build/tools/appveyor.bat b/build/tools/appveyor.bat index 373ef3ead9..43135dc7d7 100644 --- a/build/tools/appveyor.bat +++ b/build/tools/appveyor.bat @@ -20,10 +20,9 @@ goto :eof cd build\msw path C:\MinGW\bin;%path% echo --- Tools versions: -g++ --version | head -1 -mingw32-make --version | head -1 -ar --version | head -1 -path C:\MinGW\bin; +g++ --version | "C:\Program Files\Git\usr\bin\head" -n 1 +mingw32-make --version | "C:\Program Files\Git\usr\bin\head" -n 1 +ar --version | "C:\Program Files\Git\usr\bin\head" -n 1 echo. echo --- Starting the build echo. From b29aa3f785fc64afe3ab048751f9740306b98fd6 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 22 Nov 2017 15:37:34 +0100 Subject: [PATCH 15/15] Run unit tests on AppVeyor too Launch the tests after building them. --- appveyor.yml | 4 +-- build/tools/appveyor-test.bat | 49 +++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) create mode 100755 build/tools/appveyor-test.bat diff --git a/appveyor.yml b/appveyor.yml index 1ce5ccc578..7b8ecada2b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -44,6 +44,6 @@ before_build: Where-Object pullRequestId -eq $env:APPVEYOR_PULL_REQUEST_NUMBER)[0].buildNumber) { ` throw "There are newer queued builds for this pull request, failing early." } -build_script: build\tools\appveyor.bat +build_script: c:\projects\wxwidgets\build\tools\appveyor.bat -test: off +test_script: c:\projects\wxwidgets\build\tools\appveyor-test.bat diff --git a/build/tools/appveyor-test.bat b/build/tools/appveyor-test.bat new file mode 100755 index 0000000000..797ec75d76 --- /dev/null +++ b/build/tools/appveyor-test.bat @@ -0,0 +1,49 @@ +echo. +echo --- Running tests. +echo. + +cd c:\projects\wxwidgets\tests + +goto %TOOLSET% + +:msbuild +PATH=C:\projects\wxwidgets\lib\vc_x64_dll;%PATH% +.\vc_x64_mswudll\test.exe +if errorlevel 1 goto :error +.\vc_x64_mswudll\test_gui.exe +goto :eof + +:nmake +if "%BUILD%"=="debug" set debug_suffix=d +.\vc_mswu%debug_suffix%\test.exe +if errorlevel 1 goto :error +.\vc_mswu%debug_suffix%\test_gui.exe +goto :eof + +:mingw +.\gcc_mswud\test.exe +if errorlevel 1 goto :error +.\gcc_mswud\test_gui.exe +goto :eof + +:msys2 +PATH=C:\projects\wxwidgets\lib;%PATH% +.\test.exe +if errorlevel 1 goto :error +.\test_gui.exe +goto :eof + +:cygwin +PATH=C:\projects\wxwidgets\lib;%PATH% +.\test.exe +.\test_gui.exe +echo. +echo --- Note: ignoring possible test failures under Cygwin +echo. +exit /b 0 + +:error +echo. +echo !!! Non-GUI test failed. +echo. +goto :eof