diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -1,8 +1,28 @@ include(ECMAddTests) include_directories(AFTER "${CMAKE_CURRENT_SOURCE_DIR}/..") +include_directories(AFTER "${CMAKE_CURRENT_BINARY_DIR}/..") ecm_add_test( shuffle_test.cpp TEST_NAME ShuffleTest LINK_LIBRARIES Qt5::Test NAME_PREFIX "kpat-" ) +ecm_add_test( + "../dealer.cpp" + "../dealerinfo.cpp" + "../golf.cpp" + "../patsolve/golfsolver.cpp" + "../patsolve/memory.cpp" + "../patsolve/patsolve.cpp" + "../messagebox.cpp" + "../kpat_debug.cpp" + "../patpile.cpp" + "../pileutils.cpp" + "../renderer.cpp" + solver_format.cpp + TEST_NAME SolverFormatTest + LINK_LIBRARIES Qt5::Test kcardgame + KF5KDEGames + ${BLACK_HOLE_SOLVER_LDFLAGS} + NAME_PREFIX "kpat-" +) diff --git a/golf.h b/autotests/solver_format.cpp copy from golf.h copy to autotests/solver_format.cpp --- a/golf.h +++ b/autotests/solver_format.cpp @@ -1,5 +1,6 @@ /* - * Copyright (C) 2001-2009 Stephan Kulow + * Copyright (C) 1995 Paul Olav Tvete + * Copyright (C) 2000-2009 Stephan Kulow * * License of original code: * ------------------------------------------------------------------------- @@ -20,7 +21,7 @@ * ------------------------------------------------------------------------- * 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 + * 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, @@ -32,40 +33,65 @@ * along with this program. If not, see . * ------------------------------------------------------------------------- */ - -#ifndef GOLF_H -#define GOLF_H - +// Based on main.cpp +#include #include "dealer.h" +#include "dealerinfo.h" +#include "golf.h" +#include "../kpat_debug.h" - -class Golf : public DealerScene +class TestSolverFormat: public QObject { Q_OBJECT +private slots: + void solverFormat_deal1(); +}; -public: - explicit Golf( const DealerInfo * di ); - void initialize() Q_DECL_OVERRIDE; -#ifdef WITH_BH_SOLVER - QString solverFormat() const; -#endif - -protected: - void setGameState( const QString & state ) Q_DECL_OVERRIDE; - bool checkAdd(const PatPile * pile, const QList & oldCards, const QList & newCards) const Q_DECL_OVERRIDE; - bool checkRemove(const PatPile * pile, const QList & cards) const Q_DECL_OVERRIDE; - void restart( const QList & cards ) Q_DECL_OVERRIDE; - bool drop() Q_DECL_OVERRIDE; +static DealerScene *getDealer( int wanted_game ) +{ + fprintf(stderr, "diuuuuu=\n"); + foreach ( DealerInfo * di, DealerInfoList::self()->games() ) + { + fprintf(stderr, "di=%p\n", di); + if ( di->providesId( wanted_game ) ) + { + DealerScene * d = di->createGame(); + Q_ASSERT( d ); + d->setDeck( new KCardDeck( KCardTheme(), d ) ); + d->initialize(); -protected slots: - bool newCards() Q_DECL_OVERRIDE; + if ( !d->solver() ) + { + qCCritical(KPAT_LOG) << "There is no solver for" << di->nameForId( wanted_game );; + return nullptr; + } -private: - PatPile* talon; - PatPile* stack[7]; - PatPile* waste; + return d; + } + } + return nullptr; +} - friend class GolfSolver; -}; +void TestSolverFormat::solverFormat_deal1() +{ + DealerScene *f = getDealer( DealerInfo::GolfId ); + assert(f); + f->deck()->stopAnimations(); + f->startNew( 1 ); + QString have = static_cast(f)->solverFormat(); + QString want( + "Foundations: TH\n" + "Talon: 8H 2C JH 7D 6D 8S 8D QS 6C 3D 8C TC 6S 9C 2H 6H\n" + "JD 5H KH AS 4H\n" + "2D KD 3H AH AC\n" + "9H KC 2S 3C 4D\n" + "JC 9S KS 4C 7S\n" + "5D 5S 9D 5C 3S\n" + "7H AD QD TS TD\n" + "7C QC JS QH 4S\n" + ); + QCOMPARE(have, want); +} -#endif +QTEST_MAIN(TestSolverFormat) +#include "solver_format.moc" diff --git a/golf.h b/golf.h --- a/golf.h +++ b/golf.h @@ -46,9 +46,7 @@ public: explicit Golf( const DealerInfo * di ); void initialize() Q_DECL_OVERRIDE; -#ifdef WITH_BH_SOLVER QString solverFormat() const; -#endif protected: void setGameState( const QString & state ) Q_DECL_OVERRIDE; diff --git a/golf.cpp b/golf.cpp --- a/golf.cpp +++ b/golf.cpp @@ -170,7 +170,6 @@ emit newCardsPossible( !talon->isEmpty() ); } -#ifdef WITH_BH_SOLVER QString Golf::solverFormat() const { QString output; @@ -192,13 +191,20 @@ for (int i = 0; i < 7 ; i++) { QList cards = stack[i]->cards(); + bool first = true; for (QList::ConstIterator it = cards.begin(); it != cards.end(); ++it) - output += rankToString((*it)->rank()) + suitToString((*it)->suit()) + ' '; + { + if (!first) + { + output += ' '; + } + first = false; + output += rankToString((*it)->rank()) + suitToString((*it)->suit()); + } output += '\n'; } return output; } -#endif static class GolfDealerInfo : public DealerInfo {