diff options
Diffstat (limited to 'kword/tests/FrameViewTester.cpp')
-rw-r--r-- | kword/tests/FrameViewTester.cpp | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/kword/tests/FrameViewTester.cpp b/kword/tests/FrameViewTester.cpp new file mode 100644 index 00000000..652bc50e --- /dev/null +++ b/kword/tests/FrameViewTester.cpp @@ -0,0 +1,295 @@ +/* This file is part of the KOffice project + * Copyright (C) 2005 Thomas Zander <zander@kde.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; version 2. + + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ +#include <kunittest/runner.h> +#include <kunittest/module.h> +#include <kdebug.h> + +#include "FrameViewTester.h" +#include "FrameTester.h" + +#include <KWFrame.h> +#include <KWFrameSet.h> +#include <KWFrameViewManager.h> +#include <KWFrameView.h> +#include <defs.h> // for mousemeaning + +using namespace KUnitTest; + +KUNITTEST_MODULE(kunittest_FrameViewTester, "FrameView Tester"); +KUNITTEST_MODULE_REGISTER_TESTER(KWFrameViewTester); + +void KWFrameViewTester::allTests() { + testListeners(); + testGetView(); + testMouseMeaning(); +} + +class MockListener : public KWFramesListener { +public: + int fsa, fsr, fa,fr; + KWFrameSet *lastFs; + KWFrame *lastF; + MockListener() { + fsa=0; + fsr=0; + fa=0; + fr=0; + lastFs=0; + lastF=0; + } + void frameSetAdded(KWFrameSet *fs) { + fsa++; + lastFs=fs; + } + void frameSetRemoved(KWFrameSet *fs) { + fsr++; + lastFs=fs; + } + void frameAdded(KWFrame *f) { + fa++; + lastF=f; + } + void frameRemoved(KWFrame *f) { + fr++; + lastF=f; + } + void frameMoved(KWFrame *f) { + lastF=f; + } + void frameResized(KWFrame *f) { + lastF=f; + } +}; + +class TestFrameViewManager : public KWFrameViewManager { +public: + TestFrameViewManager() { + m_fireEventsRequested = false; + } + bool m_fireEventsRequested; + + void doFireEvents() { fireEvents(); } +protected: + void requestFireEvents() { + m_fireEventsRequested = true; + } +}; + +void KWFrameViewTester::testListeners() { + KWFrameSet *fs = new TestFrameSet(); + KWFrame *f = new KWFrame(fs, 0, 1, 10, 11); + + TestFrameViewManager *viewManager = new TestFrameViewManager(); + MockListener *listener = new MockListener(); + viewManager->addKWFramesListener(listener); + CHECK(listener->fsa, 0); + // frameSetAdded + viewManager->slotFrameSetAdded(fs); + CHECK(listener->fsa, 0); + CHECK(viewManager->m_fireEventsRequested, true); + viewManager->doFireEvents(); + CHECK(listener->fsa, 1); + CHECK(listener->fsr, 0); + CHECK(listener->fa, 0); + CHECK(listener->fr, 0); + CHECK(listener->lastFs, fs); + + // reset + listener->fsa = 0; + viewManager->m_fireEventsRequested = false; + // frameSetRemoved + viewManager->slotFrameSetRemoved(fs); + CHECK(viewManager->m_fireEventsRequested, true); + viewManager->doFireEvents(); + CHECK(listener->fsa, 0); + CHECK(listener->fsr, 1); + CHECK(listener->fa, 0); + CHECK(listener->fr, 0); + CHECK(listener->lastFs, fs); + + // reset + listener->fsr = 0; + viewManager->m_fireEventsRequested = false; + // frameSetRemoved + viewManager->slotFrameAdded(f); + CHECK(viewManager->m_fireEventsRequested, true); + viewManager->doFireEvents(); + CHECK(listener->fsr, 0); + CHECK(listener->fsa, 0); + CHECK(listener->fa, 1); + CHECK(listener->fr, 0); + CHECK(listener->lastF, f); + + // reset + listener->fa = 0; + viewManager->m_fireEventsRequested = false; + // frameSetRemoved + viewManager->slotFrameRemoved(f); + CHECK(viewManager->m_fireEventsRequested, true); + viewManager->doFireEvents(); + CHECK(listener->fsr, 0); + CHECK(listener->fsa, 0); + CHECK(listener->fa, 0); + CHECK(listener->fr, 1); + CHECK(listener->lastF, f); + + // reset + listener->fr = 0; + viewManager->m_fireEventsRequested = false; + // multiple + KWFrame *f2 = new KWFrame(fs, 0, 1, 2, 3); + viewManager->slotFrameRemoved(f); + viewManager->slotFrameSetAdded(fs); + viewManager->slotFrameAdded(f); + viewManager->slotFrameAdded(f); + viewManager->slotFrameAdded(f2); + viewManager->doFireEvents(); + CHECK(listener->fsr, 0); + CHECK(listener->fsa, 1); + CHECK(listener->fa, 3); + CHECK(listener->fr, 1); + CHECK(listener->lastF, f2); + + viewManager->slotFrameSetAdded(fs); + viewManager->removeKWFramesListener(listener); + viewManager->doFireEvents(); + CHECK(listener->fsr, 0); + + // frame moved + // frame resized +} + +void KWFrameViewTester::testGetView() { + TestFrameViewManager fvm; + KWFrameSet *fs = new TestFrameSet(); + KWFrame *frame = new KWFrame(fs, 0, 0, 100, 100); + fs->addFrame(frame); + + fvm.slotFrameAdded(frame); + KWFrameView *fv = fvm.view(frame); + CHECK(fv != 0, true); + if(!fv) return; + CHECK(fv->frame(), frame); + + fv = fvm.view( KoPoint(0,0), KWFrameViewManager::frameOnTop); + CHECK(fv != 0, true); // should exist + if(!fv) return; + CHECK(fv->frame(), frame); + + fv = fvm.view( KoPoint(1,1), KWFrameViewManager::frameOnTop); + CHECK(fv != 0, true); + if(!fv) return; + CHECK(fv->frame(), frame); + + fv = fvm.view( KoPoint(110,110), KWFrameViewManager::frameOnTop); + CHECK(fv == 0, true); + + fv = fvm.view( KoPoint(100,100), KWFrameViewManager::frameOnTop); // note that 100,100 _is_ inside 0,0 100x100 + CHECK(fv != 0, true); + if(!fv) return; + CHECK(fv->frame(), frame); + + fv->setSelected(true); + fv = fvm.view( KoPoint(1,1), KWFrameViewManager::unselected); + CHECK(fv == 0, true); + + frame->setZOrder(4); + KWFrame *frame2 = new KWFrame(fs, 80, 50, 60, 60); + frame2->setZOrder(2); + fvm.slotFrameAdded(frame2); + KWFrame *frame3 = new KWFrame(fs, 30, 60, 60, 60); + frame3->setZOrder(5); + fvm.slotFrameAdded(frame3); + KWFrame *frame4 = new KWFrame(fs, 200, 0, 100, 100); + fvm.slotFrameAdded(frame4); + frame4->setZOrder(1); + +kdDebug() << "frame:" << frame << ", frame2:" << frame2<< ", frame2:" << frame3<< ", frame2:" << frame4 << endl; + fv = fvm.view( KoPoint(90,60), KWFrameViewManager::frameOnTop); + CHECK(fv != 0, true); + if(!fv) return; + CHECK(fv->frame(), frame3); + fv = fvm.view( KoPoint(90,60), KWFrameViewManager::frameOnTop); // second time should give the same results + CHECK(fv != 0, true); + if(!fv) return; + CHECK(fv->frame(), frame3); + fv = fvm.view( KoPoint(90,60), KWFrameViewManager::selected); + CHECK(fv != 0, true); + if(!fv) return; + CHECK(fv->frame(), frame); + fv = fvm.view( KoPoint(90,60), KWFrameViewManager::selected); // second time should give the same results + CHECK(fv != 0, true); + if(!fv) return; + CHECK(fv->frame(), frame); + + fv = fvm.view( KoPoint(90,60), KWFrameViewManager::nextUnselected); + CHECK(fv != 0, true); + if(!fv) return; + CHECK(fv->frame(), frame2); // the one directly below the selected frame +} + +void KWFrameViewTester::testMouseMeaning() { + TestFrameViewManager fvm; + KWFrameSet *fs = new TestFrameSet(); + KWFrame *frame = new KWFrame(fs, 50, 50, 50, 50); + + fvm.slotFrameAdded(frame); + KWFrameView *fv = fvm.view(frame); + if(fv == 0) return; // means previous test already failed a lot. + + MouseMeaning answers[9 * 3] = { MEANING_TOPLEFT, MEANING_LEFT, MEANING_BOTTOMLEFT, + MEANING_TOPLEFT, MEANING_LEFT, MEANING_BOTTOMLEFT, + MEANING_TOPLEFT, MEANING_LEFT, MEANING_BOTTOMLEFT, + MEANING_TOP, MEANING_MOUSE_INSIDE_TEXT, MEANING_BOTTOM, + MEANING_TOP, MEANING_MOUSE_INSIDE_TEXT, MEANING_BOTTOM, + MEANING_TOP, MEANING_MOUSE_INSIDE_TEXT, MEANING_BOTTOM, + MEANING_TOPRIGHT, MEANING_RIGHT, MEANING_BOTTOMRIGHT, + MEANING_TOPRIGHT, MEANING_RIGHT, MEANING_BOTTOMRIGHT, + MEANING_TOPRIGHT, MEANING_RIGHT, MEANING_BOTTOMRIGHT }; + int count=0; + + KoPoint point(10, 10); + CHECK(fv->mouseMeaning(point, 0), MEANING_NONE); + for(int x = 50; x <= 100; x += 25) { + for(int offset=-6; offset <= 6; offset+=6) { + point.setX(x + offset); + for(int y = 50; y <= 100; y += 25) { + for(int offset2=-6; offset2 <= 6; offset2+=6) { + point.setY(y + offset2); + CHECK(fv->contains(point, true), true); + if(x < 50 || x > 100 || y < 50 || y > 100) + CHECK(fv->contains(point), false); + else + CHECK(fv->contains(point), true); + if(x > 60 && x < 90 && y > 60 && y < 90) + CHECK(fv->isBorderHit(point), false); + else + CHECK(fv->isBorderHit(point), true); + CHECK(fv->mouseMeaning(point, 0), answers[count]); + } + count++; + } + } + } + + point.setX(50); + point.setY(120); + CHECK(fv->mouseMeaning(point, 0), MEANING_NONE); + +} +// QCursor mouseCursor( const KoPoint &point, int keyState ) const; |