2022-06-13 01:58:20 +03:00
|
|
|
/****************************************************************************
|
|
|
|
**
|
|
|
|
** Copyright (C) 2015 The Qt Company Ltd.
|
|
|
|
** Copyright (C) 2016 Ivailo Monev
|
|
|
|
**
|
|
|
|
** This file is part of the test suite of the Katie Toolkit.
|
|
|
|
**
|
|
|
|
** $QT_BEGIN_LICENSE:LGPL$
|
|
|
|
**
|
|
|
|
** GNU Lesser General Public License Usage
|
|
|
|
** This file may be used under the terms of the GNU Lesser
|
|
|
|
** General Public License version 2.1 as published by the Free Software
|
|
|
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
|
|
|
** packaging of this file. Please review the following information to
|
|
|
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
|
|
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
|
|
**
|
|
|
|
** $QT_END_LICENSE$
|
|
|
|
**
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
#include <QtTest/QtTest>
|
|
|
|
|
|
|
|
#include <qcalendarwidget.h>
|
|
|
|
#include <qtoolbutton.h>
|
|
|
|
#include <qspinbox.h>
|
|
|
|
#include <qmenu.h>
|
|
|
|
#include <qdebug.h>
|
|
|
|
#include <qdatetime.h>
|
|
|
|
#include <qtextformat.h>
|
|
|
|
|
|
|
|
//TESTED_CLASS=
|
|
|
|
//TESTED_FILES=
|
|
|
|
|
2022-10-30 03:04:43 +02:00
|
|
|
#ifndef QT_NO_CALENDARWIDGET
|
2022-06-13 01:58:20 +03:00
|
|
|
class tst_QCalendarWidget : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
tst_QCalendarWidget();
|
|
|
|
virtual ~tst_QCalendarWidget();
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
void getSetCheck();
|
|
|
|
void buttonClickCheck();
|
|
|
|
|
|
|
|
void setTextFormat();
|
|
|
|
void resetTextFormat();
|
|
|
|
|
|
|
|
void setWeekendTextFormat();
|
|
|
|
void showPrevNext_data();
|
|
|
|
void showPrevNext();
|
|
|
|
};
|
|
|
|
|
|
|
|
// Testing get/set functions
|
|
|
|
void tst_QCalendarWidget::getSetCheck()
|
|
|
|
{
|
|
|
|
QWidget topLevel;
|
|
|
|
QCalendarWidget object(&topLevel);
|
|
|
|
|
|
|
|
//horizontal header formats
|
|
|
|
object.setHorizontalHeaderFormat(QCalendarWidget::NoHorizontalHeader);
|
|
|
|
QCOMPARE(QCalendarWidget::NoHorizontalHeader, object.horizontalHeaderFormat());
|
|
|
|
object.setHorizontalHeaderFormat(QCalendarWidget::SingleLetterDayNames);
|
|
|
|
QCOMPARE(QCalendarWidget::SingleLetterDayNames, object.horizontalHeaderFormat());
|
|
|
|
object.setHorizontalHeaderFormat(QCalendarWidget::ShortDayNames);
|
|
|
|
QCOMPARE(QCalendarWidget::ShortDayNames, object.horizontalHeaderFormat());
|
|
|
|
object.setHorizontalHeaderFormat(QCalendarWidget::LongDayNames);
|
|
|
|
QCOMPARE(QCalendarWidget::LongDayNames, object.horizontalHeaderFormat());
|
|
|
|
//vertical header formats
|
|
|
|
object.setVerticalHeaderFormat(QCalendarWidget::ISOWeekNumbers);
|
|
|
|
QCOMPARE(QCalendarWidget::ISOWeekNumbers, object.verticalHeaderFormat());
|
|
|
|
object.setVerticalHeaderFormat(QCalendarWidget::NoVerticalHeader);
|
|
|
|
QCOMPARE(QCalendarWidget::NoVerticalHeader, object.verticalHeaderFormat());
|
|
|
|
//maximum Date
|
|
|
|
QDate maxDate(2006, 7, 3);
|
|
|
|
object.setMaximumDate(maxDate);
|
|
|
|
QCOMPARE(maxDate, object.maximumDate());
|
|
|
|
//minimum date
|
|
|
|
QDate minDate(2004, 7, 3);
|
|
|
|
object.setMinimumDate(minDate);
|
|
|
|
QCOMPARE(minDate, object.minimumDate());
|
|
|
|
//grid visible
|
|
|
|
object.setGridVisible(true);
|
|
|
|
QVERIFY(object.isGridVisible());
|
|
|
|
object.setGridVisible(false);
|
|
|
|
QVERIFY(!object.isGridVisible());
|
|
|
|
//header visible
|
|
|
|
object.setNavigationBarVisible(true);
|
|
|
|
QVERIFY(object.isNavigationBarVisible());
|
|
|
|
object.setNavigationBarVisible(false);
|
|
|
|
QVERIFY(!object.isNavigationBarVisible());
|
|
|
|
//selection mode
|
|
|
|
QCOMPARE(QCalendarWidget::SingleSelection, object.selectionMode());
|
|
|
|
object.setSelectionMode(QCalendarWidget::NoSelection);
|
|
|
|
QCOMPARE(QCalendarWidget::NoSelection, object.selectionMode());
|
|
|
|
object.setSelectionMode(QCalendarWidget::SingleSelection);
|
|
|
|
QCOMPARE(QCalendarWidget::SingleSelection, object.selectionMode());
|
|
|
|
//selected date
|
|
|
|
QDate selectedDate(2005, 7, 3);
|
|
|
|
QSignalSpy spy(&object, SIGNAL(selectionChanged()));
|
|
|
|
object.setSelectedDate(selectedDate);
|
|
|
|
QCOMPARE(spy.count(), 1);
|
|
|
|
QCOMPARE(selectedDate, object.selectedDate());
|
|
|
|
//month and year
|
|
|
|
object.setCurrentPage(2004, 1);
|
|
|
|
QCOMPARE(1, object.monthShown());
|
|
|
|
QCOMPARE(2004, object.yearShown());
|
|
|
|
object.showNextMonth();
|
|
|
|
QCOMPARE(2, object.monthShown());
|
|
|
|
object.showPreviousMonth();
|
|
|
|
QCOMPARE(1, object.monthShown());
|
|
|
|
object.showNextYear();
|
|
|
|
QCOMPARE(2005, object.yearShown());
|
|
|
|
object.showPreviousYear();
|
|
|
|
QCOMPARE(2004, object.yearShown());
|
|
|
|
//date range
|
|
|
|
minDate = QDate(2006,1,1);
|
|
|
|
maxDate = QDate(2010,12,31);
|
|
|
|
object.setDateRange(minDate, maxDate);
|
|
|
|
QCOMPARE(maxDate, object.maximumDate());
|
|
|
|
QCOMPARE(minDate, object.minimumDate());
|
|
|
|
|
|
|
|
//date should not go beyond the minimum.
|
|
|
|
selectedDate = minDate.addDays(-10);
|
|
|
|
object.setSelectedDate(selectedDate);
|
|
|
|
QCOMPARE(minDate, object.selectedDate());
|
|
|
|
QVERIFY(selectedDate != object.selectedDate());
|
|
|
|
//date should not go beyond the maximum.
|
|
|
|
selectedDate = maxDate.addDays(10);
|
|
|
|
object.setSelectedDate(selectedDate);
|
|
|
|
QCOMPARE(maxDate, object.selectedDate());
|
|
|
|
QVERIFY(selectedDate != object.selectedDate());
|
|
|
|
//show today
|
|
|
|
QDate today = QDate::currentDate();
|
|
|
|
object.showToday();
|
|
|
|
QCOMPARE(today.month(), object.monthShown());
|
|
|
|
QCOMPARE(today.year(), object.yearShown());
|
|
|
|
//slect a different date and move.
|
|
|
|
object.setSelectedDate(minDate);
|
|
|
|
object.showSelectedDate();
|
|
|
|
QCOMPARE(minDate.month(), object.monthShown());
|
|
|
|
QCOMPARE(minDate.year(), object.yearShown());
|
|
|
|
}
|
|
|
|
|
|
|
|
void tst_QCalendarWidget::buttonClickCheck()
|
|
|
|
{
|
|
|
|
QCalendarWidget object;
|
|
|
|
QSize size = object.sizeHint();
|
|
|
|
object.setGeometry(0,0,size.width(), size.height());
|
|
|
|
object.show();
|
2022-06-13 19:28:13 +03:00
|
|
|
QTest::qWaitForWindowShown(&object);
|
2022-06-13 20:23:45 +03:00
|
|
|
object.activateWindow();
|
2022-06-13 01:58:20 +03:00
|
|
|
|
|
|
|
QDate selectedDate(2005, 1, 1);
|
|
|
|
//click on the month buttons
|
|
|
|
int month = object.monthShown();
|
|
|
|
QToolButton *button = object.findChild<QToolButton *>("qt_calendar_prevmonth");
|
|
|
|
QTest::mouseClick(button, Qt::LeftButton);
|
|
|
|
QCOMPARE(month > 1 ? month-1 : 12, object.monthShown());
|
|
|
|
button = object.findChild<QToolButton *>("qt_calendar_nextmonth");
|
|
|
|
QTest::mouseClick(button, Qt::LeftButton);
|
|
|
|
QCOMPARE(month, object.monthShown());
|
|
|
|
|
|
|
|
button = object.findChild<QToolButton *>("qt_calendar_yearbutton");
|
|
|
|
QTest::mouseClick(button, Qt::LeftButton, Qt::NoModifier, button->rect().center(), 2);
|
|
|
|
QVERIFY(!button->isVisible());
|
|
|
|
QSpinBox *spinbox = object.findChild<QSpinBox *>("qt_calendar_yearedit");
|
|
|
|
QTest::qWait(500);
|
|
|
|
QTest::keyClick(spinbox, '2');
|
|
|
|
QTest::keyClick(spinbox, '0');
|
|
|
|
QTest::keyClick(spinbox, '0');
|
|
|
|
QTest::keyClick(spinbox, '6');
|
|
|
|
QTest::qWait(500);
|
|
|
|
QWidget *widget = object.findChild<QWidget *>("qt_calendar_calendarview");
|
|
|
|
QTest::mouseMove(widget);
|
|
|
|
QTest::mouseClick(widget, Qt::LeftButton);
|
|
|
|
QCOMPARE(2006, object.yearShown());
|
|
|
|
object.setSelectedDate(selectedDate);
|
|
|
|
object.showSelectedDate();
|
|
|
|
QTest::keyClick(widget, Qt::Key_Down);
|
|
|
|
QVERIFY(selectedDate != object.selectedDate());
|
|
|
|
|
|
|
|
object.setDateRange(QDate(2006,1,1), QDate(2006,2,28));
|
|
|
|
object.setSelectedDate(QDate(2006,1,1));
|
|
|
|
object.showSelectedDate();
|
|
|
|
button = object.findChild<QToolButton *>("qt_calendar_prevmonth");
|
|
|
|
QTest::mouseClick(button, Qt::LeftButton);
|
|
|
|
QCOMPARE(1, object.monthShown());
|
|
|
|
|
|
|
|
button = object.findChild<QToolButton *>("qt_calendar_nextmonth");
|
|
|
|
QTest::mouseClick(button, Qt::LeftButton);
|
|
|
|
QCOMPARE(2, object.monthShown());
|
|
|
|
QTest::mouseClick(button, Qt::LeftButton);
|
|
|
|
QCOMPARE(2, object.monthShown());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void tst_QCalendarWidget::setTextFormat()
|
|
|
|
{
|
|
|
|
QCalendarWidget calendar;
|
|
|
|
QTextCharFormat format;
|
|
|
|
format.setFontItalic(true);
|
|
|
|
format.setForeground(Qt::green);
|
|
|
|
|
|
|
|
const QDate date(1984, 10, 20);
|
|
|
|
calendar.setDateTextFormat(date, format);
|
|
|
|
QCOMPARE(calendar.dateTextFormat(date), format);
|
|
|
|
}
|
|
|
|
|
|
|
|
void tst_QCalendarWidget::resetTextFormat()
|
|
|
|
{
|
|
|
|
QCalendarWidget calendar;
|
|
|
|
QTextCharFormat format;
|
|
|
|
format.setFontItalic(true);
|
|
|
|
format.setForeground(Qt::green);
|
|
|
|
|
|
|
|
const QDate date(1984, 10, 20);
|
|
|
|
calendar.setDateTextFormat(date, format);
|
|
|
|
|
|
|
|
calendar.setDateTextFormat(QDate(), QTextCharFormat());
|
|
|
|
QCOMPARE(calendar.dateTextFormat(date), QTextCharFormat());
|
|
|
|
}
|
|
|
|
|
|
|
|
void tst_QCalendarWidget::setWeekendTextFormat()
|
|
|
|
{
|
|
|
|
QCalendarWidget calendar;
|
|
|
|
|
|
|
|
QTextCharFormat format;
|
|
|
|
format.setFontItalic(true);
|
|
|
|
format.setForeground(Qt::green);
|
|
|
|
|
|
|
|
calendar.setWeekendTextFormat(format);
|
|
|
|
QCOMPARE(calendar.weekendTextFormat(), format);
|
|
|
|
}
|
|
|
|
|
|
|
|
tst_QCalendarWidget::tst_QCalendarWidget()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
tst_QCalendarWidget::~tst_QCalendarWidget()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
typedef void (QCalendarWidget::*ShowFunc)();
|
|
|
|
Q_DECLARE_METATYPE(ShowFunc)
|
|
|
|
|
|
|
|
void tst_QCalendarWidget::showPrevNext_data()
|
|
|
|
{
|
|
|
|
QTest::addColumn<ShowFunc>("function");
|
|
|
|
QTest::addColumn<QDate>("dateOrigin");
|
|
|
|
QTest::addColumn<QDate>("expectedDate");
|
|
|
|
|
|
|
|
QTest::newRow("showNextMonth") << &QCalendarWidget::showNextMonth << QDate(1984,7,30) << QDate(1984,8,30);
|
|
|
|
QTest::newRow("showPrevMonth") << &QCalendarWidget::showPreviousMonth << QDate(1984,7,30) << QDate(1984,6,30);
|
|
|
|
QTest::newRow("showNextYear") << &QCalendarWidget::showNextYear << QDate(1984,7,30) << QDate(1985,7,30);
|
|
|
|
QTest::newRow("showPrevYear") << &QCalendarWidget::showPreviousYear << QDate(1984,7,30) << QDate(1983,7,30);
|
|
|
|
|
|
|
|
QTest::newRow("showNextMonth limit") << &QCalendarWidget::showNextMonth << QDate(2007,12,4) << QDate(2008,1,4);
|
|
|
|
QTest::newRow("showPreviousMonth limit") << &QCalendarWidget::showPreviousMonth << QDate(2006,1,23) << QDate(2005,12,23);
|
|
|
|
|
|
|
|
QTest::newRow("showNextMonth now") << &QCalendarWidget::showNextMonth << QDate() << QDate::currentDate().addMonths(1);
|
|
|
|
QTest::newRow("showNextYear now") << &QCalendarWidget::showNextYear << QDate() << QDate::currentDate().addYears(1);
|
|
|
|
QTest::newRow("showPrevieousMonth now") << &QCalendarWidget::showPreviousMonth << QDate() << QDate::currentDate().addMonths(-1);
|
|
|
|
QTest::newRow("showPreviousYear now") << &QCalendarWidget::showPreviousYear << QDate() << QDate::currentDate().addYears(-1);
|
|
|
|
|
|
|
|
QTest::newRow("showToday now") << &QCalendarWidget::showToday << QDate(2000,1,31) << QDate::currentDate();
|
|
|
|
QTest::newRow("showNextMonth 31") << &QCalendarWidget::showNextMonth << QDate(2000,1,31) << QDate(2000,2,28);
|
|
|
|
QTest::newRow("selectedDate") << &QCalendarWidget::showSelectedDate << QDate(2008,2,29) << QDate(2008,2,29);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void tst_QCalendarWidget::showPrevNext()
|
|
|
|
{
|
|
|
|
QFETCH(ShowFunc, function);
|
|
|
|
QFETCH(QDate, dateOrigin);
|
|
|
|
QFETCH(QDate, expectedDate);
|
|
|
|
|
|
|
|
QCalendarWidget calWidget;
|
|
|
|
calWidget.show();
|
|
|
|
QTest::qWaitForWindowShown(&calWidget);
|
|
|
|
if (!dateOrigin.isNull()) {
|
|
|
|
calWidget.setSelectedDate(dateOrigin);
|
|
|
|
calWidget.setCurrentPage(dateOrigin.year(), dateOrigin.month());
|
|
|
|
|
|
|
|
QCOMPARE(calWidget.yearShown(), dateOrigin.year());
|
|
|
|
QCOMPARE(calWidget.monthShown(), dateOrigin.month());
|
|
|
|
} else {
|
|
|
|
QCOMPARE(calWidget.yearShown(), QDate::currentDate().year());
|
|
|
|
QCOMPARE(calWidget.monthShown(), QDate::currentDate().month());
|
|
|
|
}
|
|
|
|
|
|
|
|
(calWidget.*function)();
|
|
|
|
|
|
|
|
QCOMPARE(calWidget.yearShown(), expectedDate.year());
|
|
|
|
QCOMPARE(calWidget.monthShown(), expectedDate.month());
|
|
|
|
|
|
|
|
// QTBUG-4058
|
|
|
|
QTest::qWait(20);
|
|
|
|
QToolButton *button = calWidget.findChild<QToolButton *>("qt_calendar_prevmonth");
|
|
|
|
QTest::mouseClick(button, Qt::LeftButton);
|
|
|
|
expectedDate = expectedDate.addMonths(-1);
|
|
|
|
QCOMPARE(calWidget.yearShown(), expectedDate.year());
|
|
|
|
QCOMPARE(calWidget.monthShown(), expectedDate.month());
|
|
|
|
|
|
|
|
if (!dateOrigin.isNull()) {
|
|
|
|
//the selectedDate should not have changed
|
|
|
|
QCOMPARE(calWidget.selectedDate(), dateOrigin);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
QTEST_MAIN(tst_QCalendarWidget)
|
|
|
|
|
|
|
|
#include "moc_tst_qcalendarwidget.cpp"
|
2022-10-30 03:04:43 +02:00
|
|
|
|
|
|
|
#else // QT_NO_CALENDARWIDGET
|
|
|
|
|
|
|
|
QTEST_NOOP_MAIN
|
|
|
|
|
|
|
|
#endif // QT_NO_CALENDARWIDGET
|