mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-27 00:03:38 -04:00
362 lines
18 KiB
Python
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()
|