def testSort(self): """ test sort logic """ w = QTreeWidget() i1 = QgsTreeWidgetItem(w) i2 = QgsTreeWidgetItem(w) # should default to search by display text i1.setText(0, '2') i1.setText(1, 'b') i1.setText(2, 'c') i2.setText(0, '1') i2.setText(1, 'a') i2.setText(2, 'd') w.sortItems(0, Qt.AscendingOrder) self.assertEqual(i1 < i2, False) self.assertEqual(i2 < i1, True) w.sortItems(1, Qt.AscendingOrder) self.assertEqual(i1 < i2, False) self.assertEqual(i2 < i1, True) w.sortItems(2, Qt.AscendingOrder) self.assertEqual(i1 < i2, True) self.assertEqual(i2 < i1, False) # sortData should take precedence over display text i1.setText(1, '2') i1.setSortData(1, '200') i2.setText(1, '3') w.sortItems(1, Qt.AscendingOrder) self.assertEqual(i1 < i2, False) self.assertEqual(i2 < i1, True) i2.setSortData(1, '300') self.assertEqual(i1 < i2, True) self.assertEqual(i2 < i1, False) # test that nulls are sorted before other values i1.setSortData(0, '2') i2.setSortData(0, NULL) w.sortItems(0, Qt.AscendingOrder) self.assertEqual(i1 < i2, False) self.assertEqual(i2 < i1, True) # test numeric sorting i1.setSortData(0, '02') i2.setSortData(0, '005') w.sortItems(0, Qt.AscendingOrder) self.assertEqual(i1 < i2, True) self.assertEqual(i2 < i1, False) # numbers should come first i2.setSortData(0, 'a') self.assertEqual(i1 < i2, True) self.assertEqual(i2 < i1, False) i1.setSortData(0, 'a') i2.setSortData(0, '5') self.assertEqual(i1 < i2, False) self.assertEqual(i2 < i1, True) # always on top items should be first i1.setSortData(0, 'a') i2.setSortData(0, 'b') i2.setAlwaysOnTopPriority(5) self.assertEqual(i1 < i2, False) self.assertEqual(i2 < i1, True) i1.setAlwaysOnTopPriority(3) self.assertEqual(i1 < i2, True) self.assertEqual(i2 < i1, False) # otherwise fall back to sort order i2.setAlwaysOnTopPriority(3) i1.setSortData(0, 'c') self.assertEqual(i1 < i2, False) self.assertEqual(i2 < i1, True)