QGIS/tests/src/python/test_qgsrange.py
Nyall Dawson 3d4f6f82bb Followup 0548f4, fixes to layer metadata and metadata widget
Address outstanding review requests so that this PR can be merged
2018-02-20 11:10:55 +10:00

362 lines
18 KiB
Python

# -*- coding: utf-8 -*-
"""QGIS Unit tests for QgsRange
.. note:: 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.
"""
__author__ = 'Nyall Dawson'
__date__ = '11.04.2017'
__copyright__ = 'Copyright 2017, The QGIS Project'
# This will get replaced with a git SHA1 when you do a git archive
__revision__ = '$Format:%H$'
import qgis # NOQA
from qgis.testing import unittest
from qgis.core import (QgsIntRange,
QgsDateRange)
from qgis.PyQt.QtCore import QDate
class TestQgsIntRange(unittest.TestCase):
def testGetters(self):
range = QgsIntRange(1, 11)
self.assertEqual(range.lower(), 1)
self.assertEqual(range.upper(), 11)
self.assertTrue(range.includeLower())
self.assertTrue(range.includeUpper())
range = QgsIntRange(-1, 3, False, False)
self.assertEqual(range.lower(), -1)
self.assertEqual(range.upper(), 3)
self.assertFalse(range.includeLower())
self.assertFalse(range.includeUpper())
def testIsEmpty(self):
range = QgsIntRange(1, 1)
# should not be empty because 1 is included
self.assertFalse(range.isEmpty())
range = QgsIntRange(1, 1, False, False)
# should be empty because 1 is NOT included
self.assertTrue(range.isEmpty())
# invalid range is empty
range = QgsIntRange(1, -1)
self.assertTrue(range.isEmpty())
def testIsSingleton(self):
range = QgsIntRange(1, 1)
self.assertTrue(range.isSingleton())
range = QgsIntRange(1, 10)
self.assertFalse(range.isSingleton())
range = QgsIntRange(1, 1, False, False)
# should not be singleton because 1 is NOT included
self.assertFalse(range.isSingleton())
# invalid range is not singleton
range = QgsIntRange(1, -1)
self.assertFalse(range.isSingleton())
def testContains(self):
# includes both ends
range = QgsIntRange(0, 10)
self.assertTrue(range.contains(QgsIntRange(1, 9)))
self.assertTrue(range.contains(QgsIntRange(1, 10)))
self.assertTrue(range.contains(QgsIntRange(0, 9)))
self.assertTrue(range.contains(QgsIntRange(0, 10)))
self.assertFalse(range.contains(QgsIntRange(-1, 9)))
self.assertFalse(range.contains(QgsIntRange(1, 11)))
# does not include left end
range = QgsIntRange(0, 10, False, True)
self.assertTrue(range.contains(QgsIntRange(1, 9)))
self.assertTrue(range.contains(QgsIntRange(1, 10)))
self.assertFalse(range.contains(QgsIntRange(0, 9)))
self.assertFalse(range.contains(QgsIntRange(0, 10)))
self.assertFalse(range.contains(QgsIntRange(-1, 9)))
self.assertFalse(range.contains(QgsIntRange(1, 11)))
# does not include right end
range = QgsIntRange(0, 10, True, False)
self.assertTrue(range.contains(QgsIntRange(1, 9)))
self.assertFalse(range.contains(QgsIntRange(1, 10)))
self.assertTrue(range.contains(QgsIntRange(0, 9)))
self.assertFalse(range.contains(QgsIntRange(0, 10)))
self.assertFalse(range.contains(QgsIntRange(-1, 9)))
self.assertFalse(range.contains(QgsIntRange(1, 11)))
def testContainsElement(self):
# includes both ends
range = QgsIntRange(0, 10)
self.assertTrue(range.contains(0))
self.assertTrue(range.contains(5))
self.assertTrue(range.contains(10))
self.assertFalse(range.contains(-1))
self.assertFalse(range.contains(11))
# includes left end
range = QgsIntRange(0, 10, True, False)
self.assertTrue(range.contains(0))
self.assertTrue(range.contains(5))
self.assertFalse(range.contains(10))
self.assertFalse(range.contains(-1))
self.assertFalse(range.contains(11))
# includes right end
range = QgsIntRange(0, 10, False, True)
self.assertFalse(range.contains(0))
self.assertTrue(range.contains(5))
self.assertTrue(range.contains(10))
self.assertFalse(range.contains(-1))
self.assertFalse(range.contains(11))
# includes neither end
range = QgsIntRange(0, 10, False, False)
self.assertFalse(range.contains(0))
self.assertTrue(range.contains(5))
self.assertFalse(range.contains(10))
self.assertFalse(range.contains(-1))
self.assertFalse(range.contains(11))
def testOverlaps(self):
# includes both ends
range = QgsIntRange(0, 10)
self.assertTrue(range.overlaps(QgsIntRange(1, 9)))
self.assertTrue(range.overlaps(QgsIntRange(1, 10)))
self.assertTrue(range.overlaps(QgsIntRange(1, 11)))
self.assertTrue(range.overlaps(QgsIntRange(0, 9)))
self.assertTrue(range.overlaps(QgsIntRange(0, 10)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 10)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 9)))
self.assertTrue(range.overlaps(QgsIntRange(1, 11)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 11)))
self.assertTrue(range.overlaps(QgsIntRange(10, 11)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 0)))
self.assertFalse(range.overlaps(QgsIntRange(-10, -1)))
self.assertFalse(range.overlaps(QgsIntRange(11, 12)))
# includes left end
range = QgsIntRange(0, 10, True, False)
self.assertTrue(range.overlaps(QgsIntRange(1, 9)))
self.assertTrue(range.overlaps(QgsIntRange(1, 10)))
self.assertTrue(range.overlaps(QgsIntRange(1, 11)))
self.assertTrue(range.overlaps(QgsIntRange(0, 9)))
self.assertTrue(range.overlaps(QgsIntRange(0, 10)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 10)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 9)))
self.assertTrue(range.overlaps(QgsIntRange(1, 11)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 11)))
self.assertFalse(range.overlaps(QgsIntRange(10, 11)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 0)))
self.assertFalse(range.overlaps(QgsIntRange(-10, -1)))
self.assertFalse(range.overlaps(QgsIntRange(11, 12)))
# includes right end
range = QgsIntRange(0, 10, False, True)
self.assertTrue(range.overlaps(QgsIntRange(1, 9)))
self.assertTrue(range.overlaps(QgsIntRange(1, 10)))
self.assertTrue(range.overlaps(QgsIntRange(1, 11)))
self.assertTrue(range.overlaps(QgsIntRange(0, 9)))
self.assertTrue(range.overlaps(QgsIntRange(0, 10)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 10)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 9)))
self.assertTrue(range.overlaps(QgsIntRange(1, 11)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 11)))
self.assertTrue(range.overlaps(QgsIntRange(10, 11)))
self.assertFalse(range.overlaps(QgsIntRange(-1, 0)))
self.assertFalse(range.overlaps(QgsIntRange(-10, -1)))
self.assertFalse(range.overlaps(QgsIntRange(11, 12)))
# includes neither end
range = QgsIntRange(0, 10, False, False)
self.assertTrue(range.overlaps(QgsIntRange(1, 9)))
self.assertTrue(range.overlaps(QgsIntRange(1, 10)))
self.assertTrue(range.overlaps(QgsIntRange(1, 11)))
self.assertTrue(range.overlaps(QgsIntRange(0, 9)))
self.assertTrue(range.overlaps(QgsIntRange(0, 10)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 10)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 9)))
self.assertTrue(range.overlaps(QgsIntRange(1, 11)))
self.assertTrue(range.overlaps(QgsIntRange(-1, 11)))
self.assertFalse(range.overlaps(QgsIntRange(10, 11)))
self.assertFalse(range.overlaps(QgsIntRange(-1, 0)))
self.assertFalse(range.overlaps(QgsIntRange(-10, -1)))
self.assertFalse(range.overlaps(QgsIntRange(11, 12)))
class TestQgsDateRange(unittest.TestCase):
def testGetters(self):
range = QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2))
self.assertEqual(range.begin(), QDate(2010, 3, 1))
self.assertEqual(range.end(), QDate(2010, 6, 2))
self.assertTrue(range.includeBeginning())
self.assertTrue(range.includeEnd())
range = QgsDateRange(QDate(), QDate(2010, 6, 2))
self.assertFalse(range.begin().isValid())
self.assertEqual(range.end(), QDate(2010, 6, 2))
range = QgsDateRange(QDate(2010, 3, 1), QDate())
self.assertEqual(range.begin(), QDate(2010, 3, 1))
self.assertFalse(range.end().isValid())
def testIsEmpty(self):
range = QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2))
self.assertFalse(range.isEmpty())
range = QgsDateRange(QDate(), QDate(2010, 6, 2))
self.assertFalse(range.isEmpty())
range = QgsDateRange(QDate(2010, 3, 1), QDate())
self.assertFalse(range.isEmpty())
range = QgsDateRange(QDate(), QDate())
self.assertTrue(range.isEmpty())
range = QgsDateRange(QDate(2017, 3, 1), QDate(2010, 6, 2))
self.assertTrue(range.isEmpty())
range = QgsDateRange(QDate(2010, 3, 1), QDate(2010, 3, 1))
self.assertFalse(range.isEmpty())
range = QgsDateRange(QDate(2010, 3, 1), QDate(2010, 3, 1), False, False)
self.assertTrue(range.isEmpty())
def testContains(self):
# includes both ends
range = QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 4, 1), QDate(2010, 4, 5))))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 4, 1), QDate(2010, 6, 2))))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 4, 5))))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2))))
self.assertFalse(range.contains(QgsDateRange(QDate(2009, 4, 1), QDate(2010, 4, 5))))
self.assertFalse(range.contains(QgsDateRange(QDate(2010, 4, 1), QDate(2017, 4, 5))))
self.assertFalse(range.contains(QgsDateRange(QDate(2010, 4, 1), QDate())))
self.assertFalse(range.contains(QgsDateRange(QDate(), QDate(2010, 4, 1))))
# infinite left end
range = QgsDateRange(QDate(), QDate(2010, 6, 2))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 4, 1), QDate(2010, 4, 5))))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 4, 1), QDate(2010, 6, 2))))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 4, 5))))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2))))
self.assertTrue(range.contains(QgsDateRange(QDate(2009, 4, 1), QDate(2010, 4, 5))))
self.assertFalse(range.contains(QgsDateRange(QDate(2010, 4, 1), QDate(2017, 4, 5))))
self.assertFalse(range.contains(QgsDateRange(QDate(2010, 4, 1), QDate())))
self.assertTrue(range.contains(QgsDateRange(QDate(), QDate(2010, 4, 1))))
# infinite right end
range = QgsDateRange(QDate(2010, 3, 1), QDate())
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 4, 1), QDate(2010, 4, 5))))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 4, 1), QDate(2010, 6, 2))))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 4, 5))))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2))))
self.assertFalse(range.contains(QgsDateRange(QDate(2009, 4, 1), QDate(2010, 4, 5))))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 4, 1), QDate(2017, 4, 5))))
self.assertTrue(range.contains(QgsDateRange(QDate(2010, 4, 1), QDate())))
self.assertFalse(range.contains(QgsDateRange(QDate(), QDate(2010, 4, 1))))
def testContainsElement(self):
# includes both ends
range = QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2))
self.assertTrue(range.contains(QDate(2010, 3, 1)))
self.assertTrue(range.contains(QDate(2010, 5, 2)))
self.assertTrue(range.contains(QDate(2010, 6, 2)))
self.assertFalse(range.contains(QDate(2009, 6, 2)))
self.assertFalse(range.contains(QDate(2017, 6, 2)))
self.assertFalse(range.contains(QDate()))
# infinite left end
range = QgsDateRange(QDate(), QDate(2010, 6, 2))
self.assertTrue(range.contains(QDate(2010, 3, 1)))
self.assertTrue(range.contains(QDate(2010, 5, 2)))
self.assertTrue(range.contains(QDate(2010, 6, 2)))
self.assertTrue(range.contains(QDate(2009, 6, 2)))
self.assertFalse(range.contains(QDate(2017, 6, 2)))
self.assertFalse(range.contains(QDate()))
# infinite right end
range = QgsDateRange(QDate(2010, 3, 1), QDate())
self.assertTrue(range.contains(QDate(2010, 3, 1)))
self.assertTrue(range.contains(QDate(2010, 5, 2)))
self.assertTrue(range.contains(QDate(2010, 6, 2)))
self.assertFalse(range.contains(QDate(2009, 6, 2)))
self.assertTrue(range.contains(QDate(2017, 6, 2)))
self.assertFalse(range.contains(QDate()))
def testOverlaps(self):
# includes both ends
range = QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 4, 1), QDate(2010, 4, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 4, 1), QDate(2010, 6, 2))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 4, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2009, 4, 1), QDate(2010, 4, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 4, 1), QDate(2017, 4, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 4, 1), QDate())))
self.assertTrue(range.overlaps(QgsDateRange(QDate(), QDate(2010, 4, 1))))
self.assertFalse(range.overlaps(QgsDateRange(QDate(2009, 4, 1), QDate(2009, 8, 5))))
self.assertFalse(range.overlaps(QgsDateRange(QDate(2019, 4, 1), QDate(2019, 8, 5))))
range = QgsDateRange(QDate(), QDate(2010, 6, 2))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 4, 1), QDate(2010, 4, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 4, 1), QDate(2010, 6, 2))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 4, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2009, 4, 1), QDate(2010, 4, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 4, 1), QDate(2017, 4, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 4, 1), QDate())))
self.assertTrue(range.overlaps(QgsDateRange(QDate(), QDate(2010, 4, 1))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2009, 4, 1), QDate(2009, 8, 5))))
self.assertFalse(range.overlaps(QgsDateRange(QDate(2019, 4, 1), QDate(2019, 8, 5))))
range = QgsDateRange(QDate(2010, 3, 1), QDate())
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 4, 1), QDate(2010, 4, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 4, 1), QDate(2010, 6, 2))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 4, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2009, 4, 1), QDate(2010, 4, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 4, 1), QDate(2017, 4, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2010, 4, 1), QDate())))
self.assertTrue(range.overlaps(QgsDateRange(QDate(), QDate(2010, 4, 1))))
self.assertFalse(range.overlaps(QgsDateRange(QDate(2009, 4, 1), QDate(2009, 8, 5))))
self.assertTrue(range.overlaps(QgsDateRange(QDate(2019, 4, 1), QDate(2019, 8, 5))))
def testIsInstant(self):
self.assertFalse(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2)).isInstant())
self.assertTrue(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 3, 1)).isInstant())
self.assertFalse(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 3, 1), False, False).isInstant())
self.assertFalse(QgsDateRange(QDate(), QDate()).isInstant())
def testIsInfinite(self):
self.assertFalse(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2)).isInfinite())
self.assertFalse(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 3, 1)).isInfinite())
self.assertFalse(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 3, 1), False, False).isInfinite())
self.assertTrue(QgsDateRange(QDate(), QDate()).isInfinite())
def testIsEmpty(self):
self.assertFalse(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2)).isEmpty())
self.assertFalse(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 3, 1)).isEmpty())
self.assertTrue(QgsDateRange(QDate(2010, 3, 1), QDate(2010, 3, 1), False, False).isEmpty())
self.assertTrue(QgsDateRange(QDate(2017, 3, 1), QDate(2010, 6, 2)).isEmpty())
self.assertFalse(QgsDateRange(QDate(), QDate()).isEmpty())
def testEquality(self):
range = QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2), False, False)
self.assertEqual(range, QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2), False, False))
self.assertNotEqual(range, QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2), False, True))
self.assertNotEqual(range, QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 2), True, False))
self.assertNotEqual(range, QgsDateRange(QDate(2010, 3, 1), QDate(2010, 6, 3), False, False))
self.assertNotEqual(range, QgsDateRange(QDate(2010, 3, 2), QDate(2010, 6, 2), False, False))
if __name__ == "__main__":
unittest.main()