blob: a7d48d85fab17faeaa643dd40ff2f999d5959df6 [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.2
import QtQuick.Controls.Private 1.0
import QtTest 1.0
Item {
id: container
TestCase {
id: testcase
name: "Tests_RangedDate"
when: true
property var rangedDate
readonly property string importsStr: "import QtQuick.Controls 1.2; import QtQuick.Controls.Private 1.0; "
function init() {
rangedDate = Qt.createQmlObject(importsStr + " RangedDate {}", container, "");
}
function test_defaultConstruction() {
// rangedDate.date should be the current date.
var expectedDate = new Date();
compare(rangedDate.date.getFullYear(), expectedDate.getFullYear());
compare(rangedDate.date.getMonth(), expectedDate.getMonth());
compare(rangedDate.date.getDate(), expectedDate.getDate());
}
function test_minMax() {
skip("QTBUG-36846");
rangedDate.minimumDate = CalendarUtils.minimumCalendarDate;
rangedDate.maximumDate = CalendarUtils.maximumCalendarDate;
compare(rangedDate.minimumDate.getTime(), CalendarUtils.minimumCalendarDate.getTime());
compare(rangedDate.maximumDate.getTime(), CalendarUtils.maximumCalendarDate.getTime());
}
function test_constructionPropertyOrder() {
// Minimum date needs to be at least 1921-05-01 due to date problems in < JS7 which
// causes problems with the Finnish timezone in CI. So use 1922 to avoid those
// causing an invalid failure
// All values are valid; fine.
rangedDate = Qt.createQmlObject(importsStr + " RangedDate { "
+ "date: new Date(1922, 0, 2); "
+ "minimumDate: new Date(1922, 0, 1); "
+ "maximumDate: new Date(1922, 0, 3); "
+ " }", container, "");
compare(rangedDate.date.getTime(), new Date(1922, 0, 2).getTime());
compare(rangedDate.minimumDate.getTime(), new Date(1922, 0, 1).getTime());
compare(rangedDate.maximumDate.getTime(), new Date(1922, 0, 3, 23, 59, 59, 999).getTime());
// All values are the same; doesn't make sense, but is fine [1].
rangedDate = Qt.createQmlObject(importsStr + " RangedDate { "
+ "date: new Date(1922, 0, 1);"
+ "minimumDate: new Date(1922, 0, 1);"
+ "maximumDate: new Date(1922, 0, 1);"
+ " }", container, "");
compare(rangedDate.date.getTime(), new Date(1922, 0, 1).getTime());
compare(rangedDate.minimumDate.getTime(), new Date(1922, 0, 1).getTime());
compare(rangedDate.maximumDate.getTime(), new Date(1922, 0, 1, 23, 59, 59, 999).getTime());
// date is lower than min - should be clamped to min.
rangedDate = Qt.createQmlObject(importsStr + " RangedDate { "
+ "date: new Date(1899, 0, 1);"
+ "minimumDate: new Date(1922, 0, 1);"
+ "maximumDate: new Date(1922, 0, 1);"
+ " }", container, "");
compare(rangedDate.date.getTime(), new Date(1922, 0, 1).getTime());
compare(rangedDate.minimumDate.getTime(), new Date(1922, 0, 1).getTime());
compare(rangedDate.maximumDate.getTime(), new Date(1922, 0, 1, 23, 59, 59, 999).getTime());
// date is higher than max - should be clamped to max.
rangedDate = Qt.createQmlObject(importsStr + " RangedDate { "
+ "date: new Date(1922, 0, 2);"
+ "minimumDate: new Date(1922, 0, 1);"
+ "maximumDate: new Date(1922, 0, 1);"
+ " }", container, "");
compare(rangedDate.date.getTime(), new Date(1922, 0, 1, 23, 59, 59, 999).getTime());
compare(rangedDate.minimumDate.getTime(), new Date(1922, 0, 1).getTime());
compare(rangedDate.maximumDate.getTime(), new Date(1922, 0, 1, 23, 59, 59, 999).getTime());
// If the order of property construction is undefined (as it should be if it's declarative),
// then is min considered higher than max or max lower than min? Which should be changed?
// For now, max will always be the one that's changed. It will be set to min,
// as min may already be the largest possible date (See [1]).
rangedDate = Qt.createQmlObject(importsStr + " RangedDate { "
+ "date: new Date(1922, 0, 1);"
+ "minimumDate: new Date(1922, 0, 2);"
+ "maximumDate: new Date(1922, 0, 1);"
+ " }", container, "");
compare(rangedDate.date.getTime(), new Date(1922, 0, 2).getTime());
compare(rangedDate.minimumDate.getTime(), new Date(1922, 0, 2).getTime());
compare(rangedDate.maximumDate.getTime(), new Date(1922, 0, 2, 23, 59, 59, 999).getTime());
// [1] Do we want to enforce min and max being different? E.g. if min
// is (1900, 0, 1) and max is (1900, 0, 1), max should be set (1900, 0, 2).
// Another e.g.: if min is the largest possible date and max is the same,
// min should be set to the previous day, and vice versa.
// Currently, I'm assuming that it's fine for them to be the same,
// even if it means date can only ever be one value.
}
// "Flickering" is the effect that changing the min/max has on the date;
// setting the minimum to be higher than the date will force the date to
// be changed, and the same applies to the maximum.
function test_flickering() {
// MIN DATE MAX
// [ 1990 | 1995 | 1999 ]
rangedDate.date = new Date(1995, 0, 1);
compare(rangedDate.date.getTime(), new Date(1995, 0, 1).getTime());
rangedDate.minimumDate = new Date(1990, 0, 1);
compare(rangedDate.minimumDate.getTime(), new Date(1990, 0, 1).getTime());
rangedDate.maximumDate = new Date(1999, 0, 1);
compare(rangedDate.maximumDate.getTime(), new Date(1999, 0, 1, 23, 59, 59, 999).getTime());
// MIN DATE MAX
// [ 1996 | 1996 | 1999 ]
rangedDate.minimumDate = new Date(1996, 0, 1);
compare(rangedDate.date.getTime(), new Date(1996, 0, 1).getTime());
compare(rangedDate.minimumDate.getTime(), new Date(1996, 0, 1).getTime());
// MIN DATE MAX
// [ 1990 | 1996 | 1999 ]
rangedDate.minimumDate = new Date(1990, 0, 1);
compare(rangedDate.date.getTime(), new Date(1996, 0, 1).getTime());
compare(rangedDate.minimumDate.getTime(), new Date(1990, 0, 1).getTime());
}
function test_nullValues() {
var expected = new Date(rangedDate.date);
rangedDate.date = undefined;
compare(rangedDate.date.getTime(), expected.getTime());
expected = new Date(rangedDate.minimumDate);
rangedDate.minimumDate = undefined;
compare(rangedDate.minimumDate.getTime(), expected.getTime());
expected = new Date(rangedDate.maximumDate);
rangedDate.maximumDate = undefined;
compare(rangedDate.maximumDate.getTime(), expected.getTime());
}
}
}