kicad-source/qa/common/test_hotkey_store.cpp
John Beard 4f0166e064 Add some hotkey store tests
This also adds some mocks to the libcommon test executable, which
hopefully will allow it to work with more of libcommon.
2018-09-28 08:27:57 -04:00

149 lines
4.2 KiB
C++

/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2018 KiCad Developers, see CHANGELOG.TXT for contributors.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <boost/test/unit_test.hpp>
#include <boost/test/test_case_template.hpp>
#include <hotkey_store.h>
// ----------------------------------------------------------------------------
// Dummy Hotkey definitions
static EDA_HOTKEY actionA1( _HKI("A1"), 1001, WXK_F1 );
static EDA_HOTKEY actionA2( _HKI("A2"), 1002, WXK_F2 );
static wxString sectionATag( "[a]" );
static wxString sectionATitle( "Section A" );
static EDA_HOTKEY actionB1( _HKI("B1"), 2001, WXK_F10 );
static EDA_HOTKEY actionB2( _HKI("B2"), 2002, WXK_F11 );
static wxString sectionBTag( "[b]" );
static wxString sectionBTitle( "Section B" );
// A keycode that is unused by any hotkey
static const int unused_keycode = WXK_F5;
// List of hotkey descriptors for library editor
static EDA_HOTKEY* sectionAHotkeyList[] =
{
&actionA1,
&actionA2,
NULL
};
static EDA_HOTKEY* sectionBHotkeyList[] =
{
&actionB1,
&actionB2,
NULL
};
static EDA_HOTKEY_CONFIG test_hokeys_descr[] =
{
{ &sectionATag, sectionAHotkeyList, &sectionATitle },
{ &sectionBTag, sectionBHotkeyList, &sectionBTitle },
{ NULL, NULL, NULL }
};
// Number of sections in the above table
static const unsigned num_cfg_sections =
sizeof( test_hokeys_descr ) / sizeof( EDA_HOTKEY_CONFIG ) - 1;
// ----------------------------------------------------------------------------
struct HotkeyStoreFixture
{
HotkeyStoreFixture():
m_hotkey_store( test_hokeys_descr )
{}
HOTKEY_STORE m_hotkey_store;
};
/**
* Declares a struct as the Boost test fixture.
*/
BOOST_FIXTURE_TEST_SUITE( HotkeyStore, HotkeyStoreFixture )
/**
* Check conflict detections
*/
BOOST_AUTO_TEST_CASE( StoreConstruction )
{
// Should have ingested two sections (A and B)
BOOST_CHECK_EQUAL( m_hotkey_store.GetSections().size(), num_cfg_sections );
}
/**
* Check conflict detections
*/
BOOST_AUTO_TEST_CASE( HotkeyConflict )
{
EDA_HOTKEY* conf_key = nullptr;
EDA_HOTKEY_CONFIG* conf_sect = nullptr;
bool conflict;
conflict = m_hotkey_store.CheckKeyConflicts( unused_keycode, sectionATag,
&conf_key, &conf_sect );
// No conflicts
BOOST_CHECK_EQUAL( conflict, true );
conflict = m_hotkey_store.CheckKeyConflicts( actionA1.m_KeyCode, sectionATag,
&conf_key, &conf_sect );
// See if we conflicted with the correct key in the correct section
BOOST_CHECK_EQUAL( conflict, false );
BOOST_CHECK_EQUAL( conf_key->m_Idcommand, actionA1.m_Idcommand );
BOOST_CHECK_EQUAL( conf_sect, &test_hokeys_descr[0] );
}
/**
* Check the undo works
*/
BOOST_AUTO_TEST_CASE( HotkeySetUndo )
{
CHANGED_HOTKEY* hk = m_hotkey_store.FindHotkey( sectionATag, actionA1.m_Idcommand );
// Found something
BOOST_CHECK( hk );
BOOST_CHECK_EQUAL( hk->GetCurrentValue().m_Idcommand, actionA1.m_Idcommand );
// Change the Key code
hk->GetCurrentValue().m_KeyCode = unused_keycode;
// Change everything back
m_hotkey_store.ResetAllHotkeysToDefault();
// Check it went back
BOOST_CHECK_EQUAL( hk->GetCurrentValue().m_Idcommand, actionA1.m_Idcommand );
}
BOOST_AUTO_TEST_SUITE_END()