def testBasic(self):
        item = QgsAnnotationLineItem(
            QgsLineString(
                [QgsPoint(12, 13),
                 QgsPoint(14, 13),
                 QgsPoint(14, 15)]))

        self.assertEqual(item.geometry().asWkt(),
                         'LineString (12 13, 14 13, 14 15)')

        item.setGeometry(
            QgsLineString(
                [QgsPoint(22, 23),
                 QgsPoint(24, 23),
                 QgsPoint(24, 25)]))
        item.setZIndex(11)
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (22 23, 24 23, 24 25)')
        self.assertEqual(item.zIndex(), 11)

        item.setSymbol(
            QgsLineSymbol.createSimple({
                'color': '#ffff00',
                'line_width': '3'
            }))
        self.assertEqual(item.symbol()[0].color(), QColor(255, 255, 0))
    def test_transform(self):
        item = QgsAnnotationLineItem(
            QgsLineString(
                [QgsPoint(12, 13),
                 QgsPoint(14, 13),
                 QgsPoint(14, 15)]))
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (12 13, 14 13, 14 15)')

        self.assertEqual(
            item.applyEdit(
                QgsAnnotationItemEditOperationTranslateItem('', 100, 200)),
            Qgis.AnnotationItemEditOperationResult.Success)
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (112 213, 114 213, 114 215)')
    def test_apply_add_node_edit(self):
        item = QgsAnnotationLineItem(
            QgsLineString([
                QgsPoint(12, 13),
                QgsPoint(14, 13),
                QgsPoint(14, 15),
                QgsPoint(16, 17)
            ]))
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (12 13, 14 13, 14 15, 16 17)')

        self.assertEqual(
            item.applyEdit(
                QgsAnnotationItemEditOperationAddNode('', QgsPoint(15, 16))),
            Qgis.AnnotationItemEditOperationResult.Success)
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (12 13, 14 13, 14 15, 15 16, 16 17)')
    def test_transient_translate_operation(self):
        item = QgsAnnotationLineItem(
            QgsLineString(
                [QgsPoint(12, 13),
                 QgsPoint(14, 13),
                 QgsPoint(14, 15)]))
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (12 13, 14 13, 14 15)')

        res = item.transientEditResults(
            QgsAnnotationItemEditOperationTranslateItem('', 100, 200))
        self.assertEqual(res.representativeGeometry().asWkt(),
                         'LineString (112 213, 114 213, 114 215)')
    def test_transient_move_operation(self):
        item = QgsAnnotationLineItem(
            QgsLineString(
                [QgsPoint(12, 13),
                 QgsPoint(14, 13),
                 QgsPoint(14, 15)]))
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (12 13, 14 13, 14 15)')

        res = item.transientEditResults(
            QgsAnnotationItemEditOperationMoveNode('', QgsVertexId(0, 0, 1),
                                                   QgsPoint(14, 13),
                                                   QgsPoint(17, 18)))
        self.assertEqual(res.representativeGeometry().asWkt(),
                         'LineString (12 13, 17 18, 14 15)')
    def test_apply_delete_node_edit(self):
        item = QgsAnnotationLineItem(
            QgsLineString([
                QgsPoint(12, 13),
                QgsPoint(14, 13),
                QgsPoint(14, 15),
                QgsPoint(16, 17)
            ]))
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (12 13, 14 13, 14 15, 16 17)')

        self.assertEqual(
            item.applyEdit(
                QgsAnnotationItemEditOperationDeleteNode(
                    '', QgsVertexId(0, 0, 1), QgsPoint(14, 13))),
            Qgis.AnnotationItemEditOperationResult.Success)
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (12 13, 14 15, 16 17)')
        self.assertEqual(
            item.applyEdit(
                QgsAnnotationItemEditOperationDeleteNode(
                    '', QgsVertexId(0, 0, 0), QgsPoint(12, 13))),
            Qgis.AnnotationItemEditOperationResult.Success)
        self.assertEqual(item.geometry().asWkt(), 'LineString (14 15, 16 17)')
        self.assertEqual(
            item.applyEdit(
                QgsAnnotationItemEditOperationDeleteNode(
                    '', QgsVertexId(0, 0, 3), QgsPoint(14, 15))),
            Qgis.AnnotationItemEditOperationResult.Invalid)
        self.assertEqual(item.geometry().asWkt(), 'LineString (14 15, 16 17)')
        self.assertEqual(
            item.applyEdit(
                QgsAnnotationItemEditOperationDeleteNode(
                    '', QgsVertexId(0, 0, 1), QgsPoint(16, 17))),
            Qgis.AnnotationItemEditOperationResult.ItemCleared)
        self.assertEqual(item.geometry().asWkt(), 'LineString EMPTY')
    def test_apply_move_node_edit(self):
        item = QgsAnnotationLineItem(
            QgsLineString(
                [QgsPoint(12, 13),
                 QgsPoint(14, 13),
                 QgsPoint(14, 15)]))
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (12 13, 14 13, 14 15)')

        self.assertEqual(
            item.applyEdit(
                QgsAnnotationItemEditOperationMoveNode('',
                                                       QgsVertexId(0, 0, 1),
                                                       QgsPoint(14, 13),
                                                       QgsPoint(17, 18))),
            Qgis.AnnotationItemEditOperationResult.Success)
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (12 13, 17 18, 14 15)')
        self.assertEqual(
            item.applyEdit(
                QgsAnnotationItemEditOperationMoveNode('',
                                                       QgsVertexId(0, 0, 2),
                                                       QgsPoint(14, 15),
                                                       QgsPoint(19, 20))),
            Qgis.AnnotationItemEditOperationResult.Success)
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (12 13, 17 18, 19 20)')
        self.assertEqual(
            item.applyEdit(
                QgsAnnotationItemEditOperationMoveNode('',
                                                       QgsVertexId(0, 0, 3),
                                                       QgsPoint(14, 15),
                                                       QgsPoint(19, 20))),
            Qgis.AnnotationItemEditOperationResult.Invalid)
        self.assertEqual(item.geometry().asWkt(),
                         'LineString (12 13, 17 18, 19 20)')