* fixing compilation of tests that cannot build bracket code with the corresponding wxUSE… macros * adding directive for iOS * adding a switch for skipping the run - not the build of tests right now I don’t know yet, how to run the test binary in the iOS simulator, but building it is still a good test in itself * adding skipping of tests * increasing minimum deployment to get proper c++17 support * using --disable-sys-libs, restoring other targets even when the zlib in -isysroot is used, due to deployment on lower iOS versions inflateValidate may not be available and crash. The guards are evaluated using macros from the zlib from the SDK, not from the lowest version supported.
175 lines
3.9 KiB
C++
175 lines
3.9 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: tests/controls/dialogtest.cpp
|
|
// Purpose: wxWindow unit test
|
|
// Author: Vaclav Slavik
|
|
// Created: 2012-08-30
|
|
// Copyright: (c) 2012 Vaclav Slavik
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "testprec.h"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#include "wx/testing.h"
|
|
|
|
#ifdef HAVE_VARIADIC_MACROS
|
|
|
|
#include "wx/msgdlg.h"
|
|
#include "wx/filedlg.h"
|
|
|
|
// This test suite tests helpers from wx/testing.h intended for testing of code
|
|
// that calls modal dialogs. It does not test the implementation of wxWidgets'
|
|
// dialogs.
|
|
class ModalDialogsTestCase : public CppUnit::TestCase
|
|
{
|
|
public:
|
|
ModalDialogsTestCase() { }
|
|
|
|
private:
|
|
CPPUNIT_TEST_SUITE( ModalDialogsTestCase );
|
|
// wxInfoBar has bug under x11. It will cause the dialog crash
|
|
// Disable it for now.
|
|
#if !defined (__WXX11__)
|
|
CPPUNIT_TEST( MessageDialog );
|
|
#endif
|
|
#if wxUSE_FILEDLG
|
|
CPPUNIT_TEST( FileDialog );
|
|
#endif
|
|
CPPUNIT_TEST( CustomDialog );
|
|
CPPUNIT_TEST( InitDialog );
|
|
CPPUNIT_TEST_SUITE_END();
|
|
|
|
void MessageDialog();
|
|
void FileDialog();
|
|
void CustomDialog();
|
|
void InitDialog();
|
|
|
|
wxDECLARE_NO_COPY_CLASS(ModalDialogsTestCase);
|
|
};
|
|
|
|
// register in the unnamed registry so that these tests are run by default
|
|
CPPUNIT_TEST_SUITE_REGISTRATION( ModalDialogsTestCase );
|
|
|
|
// also include in its own registry so that these tests can be run alone
|
|
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( ModalDialogsTestCase, "ModalDialogsTestCase" );
|
|
|
|
void ModalDialogsTestCase::MessageDialog()
|
|
{
|
|
int rc;
|
|
|
|
wxTEST_DIALOG
|
|
(
|
|
rc = wxMessageBox("Should I fail?", "Question", wxYES|wxNO),
|
|
wxExpectModal<wxMessageDialog>(wxNO)
|
|
#if wxUSE_FILEDLG
|
|
,wxExpectModal<wxFileDialog>(wxGetCwd() + "/test.txt").Optional()
|
|
#endif
|
|
);
|
|
|
|
CPPUNIT_ASSERT_EQUAL(wxNO, rc);
|
|
}
|
|
|
|
#if wxUSE_FILEDLG
|
|
void ModalDialogsTestCase::FileDialog()
|
|
{
|
|
wxFileDialog dlg(NULL);
|
|
int rc;
|
|
|
|
wxTEST_DIALOG
|
|
(
|
|
rc = dlg.ShowModal(),
|
|
wxExpectModal<wxFileDialog>(wxGetCwd() + "/test.txt")
|
|
);
|
|
|
|
CPPUNIT_ASSERT_EQUAL((int)wxID_OK, rc);
|
|
|
|
CPPUNIT_ASSERT_EQUAL("test.txt", dlg.GetFilename());
|
|
|
|
#ifdef __WXGTK3__
|
|
// The native file dialog in GTK+ 3 launches an async operation which tries
|
|
// to dereference the already deleted dialog object if we don't let it to
|
|
// complete before leaving this function.
|
|
wxYield();
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
class MyDialog : public wxDialog
|
|
{
|
|
public:
|
|
MyDialog(wxWindow *parent) : wxDialog(parent, wxID_ANY, "Entry"), m_value(-1)
|
|
{
|
|
// Dummy. Imagine it's a real dialog that shows some number-entry
|
|
// controls.
|
|
}
|
|
|
|
int m_value;
|
|
};
|
|
|
|
|
|
template<>
|
|
class wxExpectModal<MyDialog> : public wxExpectModalBase<MyDialog>
|
|
{
|
|
public:
|
|
wxExpectModal(int valueToSet) : m_valueToSet(valueToSet) {}
|
|
|
|
protected:
|
|
virtual int OnInvoked(MyDialog *dlg) const wxOVERRIDE
|
|
{
|
|
// Simulate the user entering the expected number:
|
|
dlg->m_value = m_valueToSet;
|
|
return wxID_OK;
|
|
}
|
|
|
|
int m_valueToSet;
|
|
};
|
|
|
|
void ModalDialogsTestCase::CustomDialog()
|
|
{
|
|
MyDialog dlg(NULL);
|
|
|
|
wxTEST_DIALOG
|
|
(
|
|
dlg.ShowModal(),
|
|
wxExpectModal<MyDialog>(42)
|
|
);
|
|
|
|
CPPUNIT_ASSERT_EQUAL( 42, dlg.m_value );
|
|
}
|
|
|
|
|
|
class MyModalDialog : public wxDialog
|
|
{
|
|
public:
|
|
MyModalDialog() : wxDialog (NULL, wxID_ANY, "Modal Dialog")
|
|
{
|
|
m_wasModal = false;
|
|
Bind( wxEVT_INIT_DIALOG, &MyModalDialog::OnInit, this );
|
|
}
|
|
|
|
void OnInit(wxInitDialogEvent& WXUNUSED(event))
|
|
{
|
|
m_wasModal = IsModal();
|
|
CallAfter( &MyModalDialog::EndModal, wxID_OK );
|
|
}
|
|
|
|
bool WasModal() const
|
|
{
|
|
return m_wasModal;
|
|
}
|
|
|
|
private:
|
|
bool m_wasModal;
|
|
};
|
|
|
|
void ModalDialogsTestCase::InitDialog()
|
|
{
|
|
MyModalDialog dlg;
|
|
dlg.ShowModal();
|
|
CPPUNIT_ASSERT( dlg.WasModal() );
|
|
}
|
|
|
|
#endif // HAVE_VARIADIC_MACROS
|