Skip to content

Commit 0736bf7

Browse files
committedJul 14, 2016
Rename edit buffer methods to is..., add tests
1 parent dc10c8f commit 0736bf7

File tree

7 files changed

+415
-23
lines changed

7 files changed

+415
-23
lines changed
 

‎python/core/qgsvectorlayereditbuffer.sip

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,42 +70,70 @@ class QgsVectorLayerEditBuffer : QObject
7070
/** Stop editing and discard the edits */
7171
virtual void rollBack();
7272

73-
/** Returns a map of new features which are not committed. */
73+
/** Returns a map of new features which are not committed.
74+
* @see isFeatureAdded()
75+
*/
7476
QgsFeatureMap addedFeatures() const;
7577

7678
/** Returns true if the specified feature ID has been added but not committed.
7779
* @param id feature ID
7880
* @note added in QGIS 3.0
81+
* @see addedFeatures()
7982
*/
80-
bool featureIsAdded( QgsFeatureId id ) const;
83+
bool isFeatureAdded( QgsFeatureId id ) const;
8184

82-
/** Returns a map of features with changed attributes values which are not committed */
85+
/** Returns a map of features with changed attributes values which are not committed.
86+
* @see isFeatureAttributesChanged()
87+
*/
8388
QgsChangedAttributesMap changedAttributeValues() const;
8489

8590
/** Returns true if the specified feature ID has had an attribute changed but not committed.
8691
* @param id feature ID
8792
* @note added in QGIS 3.0
93+
* @see changedAttributeValues()
8894
*/
89-
bool featureHasAttributeChanges( QgsFeatureId id ) const;
95+
bool isFeatureAttributesChanged( QgsFeatureId id ) const;
9096

91-
/** Returns a list of deleted attributes fields which are not committed. The list is kept sorted. */
97+
/** Returns a list of deleted attributes fields which are not committed. The list is kept sorted.
98+
* @see isAttributeDeleted()
99+
*/
92100
QgsAttributeList deletedAttributeIds() const;
93101

102+
/** Returns true if the specified attribute has been deleted but not committed.
103+
* @param index attribute index
104+
* @note added in QGIS 3.0
105+
* @see deletedAttributeIds()
106+
*/
107+
bool isAttributeDeleted( int index ) const;
108+
94109
/** Returns a list of added attributes fields which are not committed */
95110
QList<QgsField> addedAttributes() const;
96111

97-
/** Returns a map of features with changed geometries which are not committed. */
112+
/** Returns a map of features with changed geometries which are not committed.
113+
* @see hasFeatureGeometryChange()
114+
*/
98115
QgsGeometryMap changedGeometries() const;
99116

100117
/** Returns true if the specified feature ID has had its geometry changed but not committed.
101118
* @param id feature ID
102119
* @note added in QGIS 3.0
120+
* @see changedGeometries()
103121
*/
104-
bool featureHasGeometryChange( QgsFeatureId id ) const;
122+
bool isFeatureGeometryChanged( QgsFeatureId id ) const;
105123

106-
/** Returns a list of deleted feature IDs which are not committed. */
124+
/** Returns a list of deleted feature IDs which are not committed.
125+
* @see isFeatureDeleted()
126+
*/
107127
QgsFeatureIds deletedFeatureIds() const;
108128

129+
/** Returns true if the specified feature ID has been deleted but not committed.
130+
* @param id feature ID
131+
* @note added in QGIS 3.0
132+
* @see deletedFeatureIds()
133+
*/
134+
bool isFeatureDeleted( QgsFeatureId id ) const;
135+
136+
109137
//QString dumpEditBuffer();
110138

111139
protected slots:

‎src/core/qgsvectorlayereditbuffer.h

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -99,42 +99,70 @@ class CORE_EXPORT QgsVectorLayerEditBuffer : public QObject
9999
/** Stop editing and discard the edits */
100100
virtual void rollBack();
101101

102-
/** Returns a map of new features which are not committed. */
102+
/** Returns a map of new features which are not committed.
103+
* @see isFeatureAdded()
104+
*/
103105
QgsFeatureMap addedFeatures() const { return mAddedFeatures; }
104106

105107
/** Returns true if the specified feature ID has been added but not committed.
106108
* @param id feature ID
107109
* @note added in QGIS 3.0
110+
* @see addedFeatures()
108111
*/
109-
bool featureIsAdded( QgsFeatureId id ) const { return mAddedFeatures.contains( id ); }
112+
bool isFeatureAdded( QgsFeatureId id ) const { return mAddedFeatures.contains( id ); }
110113

111-
/** Returns a map of features with changed attributes values which are not committed */
114+
/** Returns a map of features with changed attributes values which are not committed.
115+
* @see isFeatureAttributesChanged()
116+
*/
112117
QgsChangedAttributesMap changedAttributeValues() const { return mChangedAttributeValues; }
113118

114119
/** Returns true if the specified feature ID has had an attribute changed but not committed.
115120
* @param id feature ID
116121
* @note added in QGIS 3.0
122+
* @see changedAttributeValues()
117123
*/
118-
bool featureHasAttributeChanges( QgsFeatureId id ) const { return mChangedAttributeValues.contains( id ); }
124+
bool isFeatureAttributesChanged( QgsFeatureId id ) const { return mChangedAttributeValues.contains( id ); }
119125

120-
/** Returns a list of deleted attributes fields which are not committed. The list is kept sorted. */
126+
/** Returns a list of deleted attributes fields which are not committed. The list is kept sorted.
127+
* @see isAttributeDeleted()
128+
*/
121129
QgsAttributeList deletedAttributeIds() const { return mDeletedAttributeIds; }
122130

123-
/** Returns a list of added attributes fields which are not committed */
131+
/** Returns true if the specified attribute has been deleted but not committed.
132+
* @param index attribute index
133+
* @note added in QGIS 3.0
134+
* @see deletedAttributeIds()
135+
*/
136+
bool isAttributeDeleted( int index ) const { return mDeletedAttributeIds.contains( index ); }
137+
138+
/** Returns a list of added attributes fields which are not committed.
139+
*/
124140
QList<QgsField> addedAttributes() const { return mAddedAttributes; }
125141

126-
/** Returns a map of features with changed geometries which are not committed. */
142+
/** Returns a map of features with changed geometries which are not committed.
143+
* @see hasFeatureGeometryChange()
144+
*/
127145
QgsGeometryMap changedGeometries() const { return mChangedGeometries; }
128146

129147
/** Returns true if the specified feature ID has had its geometry changed but not committed.
130148
* @param id feature ID
131149
* @note added in QGIS 3.0
150+
* @see changedGeometries()
132151
*/
133-
bool featureHasGeometryChange( QgsFeatureId id ) const { return mChangedGeometries.contains( id ); }
152+
bool isFeatureGeometryChanged( QgsFeatureId id ) const { return mChangedGeometries.contains( id ); }
134153

135-
/** Returns a list of deleted feature IDs which are not committed. */
154+
/** Returns a list of deleted feature IDs which are not committed.
155+
* @see isFeatureDeleted()
156+
*/
136157
QgsFeatureIds deletedFeatureIds() const { return mDeletedFeatureIds; }
137158

159+
/** Returns true if the specified feature ID has been deleted but not committed.
160+
* @param id feature ID
161+
* @note added in QGIS 3.0
162+
* @see deletedFeatureIds()
163+
*/
164+
bool isFeatureDeleted( QgsFeatureId id ) const { return mDeletedFeatureIds.contains( id ); }
165+
138166
//QString dumpEditBuffer();
139167

140168
protected slots:

‎src/gui/attributetable/qgsattributetablefiltermodel.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -326,13 +326,13 @@ bool QgsAttributeTableFilterModel::filterAcceptsRow( int sourceRow, const QModel
326326
{
327327
QgsFeatureId fid = masterModel()->rowToId( sourceRow );
328328

329-
if ( editBuffer->featureIsAdded( fid ) )
329+
if ( editBuffer->isFeatureAdded( fid ) )
330330
return true;
331331

332-
if ( editBuffer->featureHasAttributeChanges( fid ) )
332+
if ( editBuffer->isFeatureAttributesChanged( fid ) )
333333
return true;
334334

335-
if ( editBuffer->featureHasGeometryChange( fid ) )
335+
if ( editBuffer->isFeatureGeometryChanged( fid ) )
336336
return true;
337337

338338
return false;

‎src/gui/attributetable/qgsfeaturelistmodel.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,11 @@ QVariant QgsFeatureListModel::data( const QModelIndex &index, int role ) const
111111

112112
if ( editBuffer )
113113
{
114-
if ( editBuffer->featureIsAdded( feat.id() ) )
114+
if ( editBuffer->isFeatureAdded( feat.id() ) )
115115
{
116116
featInfo.isNew = true;
117117
}
118-
if ( editBuffer->featureHasAttributeChanges( feat.id() ) )
118+
if ( editBuffer->isFeatureAttributesChanged( feat.id() ) )
119119
{
120120
featInfo.isEdited = true;
121121
}

‎src/providers/grass/qgsgrassprovider.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1219,7 +1219,7 @@ void QgsGrassProvider::onFeatureAdded( QgsFeatureId fid )
12191219
}
12201220
// geometry
12211221
const QgsAbstractGeometryV2 *geometry = 0;
1222-
if ( !mEditBuffer->featureIsAdded( fid ) )
1222+
if ( !mEditBuffer->isFeatureAdded( fid ) )
12231223
{
12241224
#ifdef QGISDEBUG
12251225
QgsDebugMsg( "the feature is missing in buffer addedFeatures :" );

‎tests/src/python/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ ADD_PYTHON_TEST(PyQgsUnitTypes test_qgsunittypes.py)
9494
ADD_PYTHON_TEST(PyQgsVectorColorRamp test_qgsvectorcolorramp.py)
9595
ADD_PYTHON_TEST(PyQgsVectorFileWriter test_qgsvectorfilewriter.py)
9696
ADD_PYTHON_TEST(PyQgsVectorLayer test_qgsvectorlayer.py)
97+
ADD_PYTHON_TEST(PyQgsVectorLayerEditBuffer test_qgsvectorlayereditbuffer.py)
9798
ADD_PYTHON_TEST(PyQgsZonalStatistics test_qgszonalstatistics.py)
9899
ADD_PYTHON_TEST(PyQgsMapLayerRegistry test_qgsmaplayerregistry.py)
99100
ADD_PYTHON_TEST(PyQgsVirtualLayerProvider test_provider_virtual.py)
Lines changed: 335 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,335 @@
1+
# -*- coding: utf-8 -*-
2+
"""QGIS Unit tests for QgsVectorLayerEditBuffer.
3+
4+
.. note:: This program is free software; you can redistribute it and/or modify
5+
it under the terms of the GNU General Public License as published by
6+
the Free Software Foundation; either version 2 of the License, or
7+
(at your option) any later version.
8+
"""
9+
__author__ = 'Nyall Dawson'
10+
__date__ = '15/07/2016'
11+
__copyright__ = 'Copyright 2016, The QGIS Project'
12+
# This will get replaced with a git SHA1 when you do a git archive
13+
__revision__ = '$Format:%H$'
14+
15+
import qgis # NOQA
16+
17+
import os
18+
19+
from qgis.PyQt.QtCore import QVariant
20+
from qgis.PyQt.QtGui import QPainter
21+
22+
from qgis.core import (QGis,
23+
QgsVectorLayer,
24+
QgsRectangle,
25+
QgsFeature,
26+
QgsFeatureRequest,
27+
QgsGeometry,
28+
QgsPoint,
29+
QgsField,
30+
QgsFields,
31+
QgsMapLayerRegistry,
32+
QgsVectorJoinInfo,
33+
QgsSymbolV2,
34+
QgsSingleSymbolRendererV2,
35+
QgsCoordinateReferenceSystem,
36+
QgsProject,
37+
QgsUnitTypes,
38+
QgsAggregateCalculator)
39+
from qgis.testing import start_app, unittest
40+
from utilities import unitTestDataPath
41+
start_app()
42+
43+
44+
def createEmptyLayer():
45+
layer = QgsVectorLayer("Point?field=fldtxt:string&field=fldint:integer",
46+
"addfeat", "memory")
47+
assert layer.isValid()
48+
return layer
49+
50+
51+
def createLayerWithOnePoint():
52+
layer = QgsVectorLayer("Point?field=fldtxt:string&field=fldint:integer",
53+
"addfeat", "memory")
54+
pr = layer.dataProvider()
55+
f = QgsFeature()
56+
f.setAttributes(["test", 123])
57+
f.setGeometry(QgsGeometry.fromPoint(QgsPoint(100, 200)))
58+
assert pr.addFeatures([f])
59+
assert layer.pendingFeatureCount() == 1
60+
return layer
61+
62+
63+
class TestQgsVectorLayerEditBuffer(unittest.TestCase):
64+
65+
def testAddFeatures(self):
66+
# test adding features to an edit buffer
67+
layer = createEmptyLayer()
68+
self.assertTrue(layer.startEditing())
69+
70+
self.assertEqual(layer.editBuffer().addedFeatures(), {})
71+
self.assertFalse(layer.editBuffer().isFeatureAdded(1))
72+
self.assertFalse(layer.editBuffer().isFeatureAdded(3))
73+
74+
# add two features
75+
f1 = QgsFeature(layer.fields(), 1)
76+
f1.setGeometry(QgsGeometry.fromPoint(QgsPoint(1, 2)))
77+
f1.setAttributes(["test", 123])
78+
self.assertTrue(layer.addFeature(f1))
79+
80+
f2 = QgsFeature(layer.fields(), 2)
81+
f2.setGeometry(QgsGeometry.fromPoint(QgsPoint(2, 4)))
82+
f2.setAttributes(["test2", 246])
83+
84+
self.assertTrue(layer.addFeature(f2))
85+
86+
# test contents of buffer
87+
added = layer.editBuffer().addedFeatures()
88+
new_feature_ids = added.keys()
89+
self.assertEqual(added[new_feature_ids[0]]['fldtxt'], 'test2')
90+
self.assertEqual(added[new_feature_ids[0]]['fldint'], 246)
91+
self.assertEqual(added[new_feature_ids[1]]['fldtxt'], 'test')
92+
self.assertEqual(added[new_feature_ids[1]]['fldint'], 123)
93+
94+
self.assertTrue(layer.editBuffer().isFeatureAdded(new_feature_ids[0]))
95+
self.assertTrue(layer.editBuffer().isFeatureAdded(new_feature_ids[1]))
96+
97+
def testAddMultipleFeatures(self):
98+
# test adding multiple features to an edit buffer
99+
layer = createEmptyLayer()
100+
self.assertTrue(layer.startEditing())
101+
102+
self.assertEqual(layer.editBuffer().addedFeatures(), {})
103+
self.assertFalse(layer.editBuffer().isFeatureAdded(1))
104+
self.assertFalse(layer.editBuffer().isFeatureAdded(3))
105+
106+
# add two features
107+
f1 = QgsFeature(layer.fields(), 1)
108+
f1.setGeometry(QgsGeometry.fromPoint(QgsPoint(1, 2)))
109+
f1.setAttributes(["test", 123])
110+
f2 = QgsFeature(layer.fields(), 2)
111+
f2.setGeometry(QgsGeometry.fromPoint(QgsPoint(2, 4)))
112+
f2.setAttributes(["test2", 246])
113+
114+
self.assertTrue(layer.addFeatures([f1, f2]))
115+
116+
# test contents of buffer
117+
added = layer.editBuffer().addedFeatures()
118+
new_feature_ids = added.keys()
119+
self.assertEqual(added[new_feature_ids[0]]['fldtxt'], 'test2')
120+
self.assertEqual(added[new_feature_ids[0]]['fldint'], 246)
121+
self.assertEqual(added[new_feature_ids[1]]['fldtxt'], 'test')
122+
self.assertEqual(added[new_feature_ids[1]]['fldint'], 123)
123+
124+
self.assertTrue(layer.editBuffer().isFeatureAdded(new_feature_ids[0]))
125+
self.assertTrue(layer.editBuffer().isFeatureAdded(new_feature_ids[1]))
126+
127+
def testDeleteFeatures(self):
128+
# test deleting features from an edit buffer
129+
130+
# make a layer with two features
131+
layer = createEmptyLayer()
132+
self.assertTrue(layer.startEditing())
133+
134+
# add two features
135+
f1 = QgsFeature(layer.fields(), 1)
136+
f1.setGeometry(QgsGeometry.fromPoint(QgsPoint(1, 2)))
137+
f1.setAttributes(["test", 123])
138+
self.assertTrue(layer.addFeature(f1))
139+
140+
f2 = QgsFeature(layer.fields(), 2)
141+
f2.setGeometry(QgsGeometry.fromPoint(QgsPoint(2, 4)))
142+
f2.setAttributes(["test2", 246])
143+
self.assertTrue(layer.addFeature(f2))
144+
145+
layer.commitChanges()
146+
layer.startEditing()
147+
148+
self.assertEqual(layer.editBuffer().deletedFeatureIds(), [])
149+
self.assertFalse(layer.editBuffer().isFeatureDeleted(1))
150+
self.assertFalse(layer.editBuffer().isFeatureDeleted(2))
151+
152+
# delete a feature
153+
layer.deleteFeature(1)
154+
155+
# test contents of buffer
156+
self.assertEqual(layer.editBuffer().deletedFeatureIds(), [1])
157+
self.assertTrue(layer.editBuffer().isFeatureDeleted(1))
158+
self.assertFalse(layer.editBuffer().isFeatureDeleted(2))
159+
160+
# delete a feature
161+
layer.deleteFeature(2)
162+
163+
# test contents of buffer
164+
self.assertEqual(layer.editBuffer().deletedFeatureIds(), [1, 2])
165+
self.assertTrue(layer.editBuffer().isFeatureDeleted(1))
166+
self.assertTrue(layer.editBuffer().isFeatureDeleted(2))
167+
168+
def testDeleteMultipleFeatures(self):
169+
# test deleting multiple features from an edit buffer
170+
171+
# make a layer with two features
172+
layer = createEmptyLayer()
173+
self.assertTrue(layer.startEditing())
174+
175+
# add two features
176+
f1 = QgsFeature(layer.fields(), 1)
177+
f1.setGeometry(QgsGeometry.fromPoint(QgsPoint(1, 2)))
178+
f1.setAttributes(["test", 123])
179+
self.assertTrue(layer.addFeature(f1))
180+
181+
f2 = QgsFeature(layer.fields(), 2)
182+
f2.setGeometry(QgsGeometry.fromPoint(QgsPoint(2, 4)))
183+
f2.setAttributes(["test2", 246])
184+
self.assertTrue(layer.addFeature(f2))
185+
186+
layer.commitChanges()
187+
layer.startEditing()
188+
189+
self.assertEqual(layer.editBuffer().deletedFeatureIds(), [])
190+
self.assertFalse(layer.editBuffer().isFeatureDeleted(1))
191+
self.assertFalse(layer.editBuffer().isFeatureDeleted(2))
192+
193+
# delete features
194+
layer.deleteFeatures([1, 2])
195+
196+
# test contents of buffer
197+
self.assertEqual(layer.editBuffer().deletedFeatureIds(), [1, 2])
198+
self.assertTrue(layer.editBuffer().isFeatureDeleted(1))
199+
self.assertTrue(layer.editBuffer().isFeatureDeleted(2))
200+
201+
def testChangeAttributeValues(self):
202+
# test changing attributes values from an edit buffer
203+
204+
# make a layer with two features
205+
layer = createEmptyLayer()
206+
self.assertTrue(layer.startEditing())
207+
208+
# add two features
209+
f1 = QgsFeature(layer.fields(), 1)
210+
f1.setGeometry(QgsGeometry.fromPoint(QgsPoint(1, 2)))
211+
f1.setAttributes(["test", 123])
212+
self.assertTrue(layer.addFeature(f1))
213+
214+
f2 = QgsFeature(layer.fields(), 2)
215+
f2.setGeometry(QgsGeometry.fromPoint(QgsPoint(2, 4)))
216+
f2.setAttributes(["test2", 246])
217+
self.assertTrue(layer.addFeature(f2))
218+
219+
layer.commitChanges()
220+
layer.startEditing()
221+
222+
self.assertEqual(layer.editBuffer().changedAttributeValues(), {})
223+
self.assertFalse(layer.editBuffer().isFeatureAttributesChanged(1))
224+
self.assertFalse(layer.editBuffer().isFeatureAttributesChanged(2))
225+
226+
# change attribute values
227+
layer.changeAttributeValue(1, 0, 'a')
228+
229+
# test contents of buffer
230+
self.assertEqual(layer.editBuffer().changedAttributeValues().keys(), [1])
231+
self.assertEqual(layer.editBuffer().changedAttributeValues()[1], {0: 'a'})
232+
self.assertTrue(layer.editBuffer().isFeatureAttributesChanged(1))
233+
self.assertFalse(layer.editBuffer().isFeatureAttributesChanged(2))
234+
235+
layer.changeAttributeValue(2, 1, 5)
236+
237+
# test contents of buffer
238+
self.assertEqual(set(layer.editBuffer().changedAttributeValues().keys()), set([1, 2]))
239+
self.assertEqual(layer.editBuffer().changedAttributeValues()[1], {0: 'a'})
240+
self.assertEqual(layer.editBuffer().changedAttributeValues()[2], {1: 5})
241+
self.assertTrue(layer.editBuffer().isFeatureAttributesChanged(1))
242+
self.assertTrue(layer.editBuffer().isFeatureAttributesChanged(2))
243+
244+
def testChangeGeometry(self):
245+
# test changing geometries values from an edit buffer
246+
247+
# make a layer with two features
248+
layer = createEmptyLayer()
249+
self.assertTrue(layer.startEditing())
250+
251+
# add two features
252+
f1 = QgsFeature(layer.fields(), 1)
253+
f1.setGeometry(QgsGeometry.fromPoint(QgsPoint(1, 2)))
254+
f1.setAttributes(["test", 123])
255+
self.assertTrue(layer.addFeature(f1))
256+
257+
f2 = QgsFeature(layer.fields(), 2)
258+
f2.setGeometry(QgsGeometry.fromPoint(QgsPoint(2, 4)))
259+
f2.setAttributes(["test2", 246])
260+
self.assertTrue(layer.addFeature(f2))
261+
262+
layer.commitChanges()
263+
layer.startEditing()
264+
265+
self.assertEqual(layer.editBuffer().changedGeometries(), {})
266+
self.assertFalse(layer.editBuffer().isFeatureGeometryChanged(1))
267+
self.assertFalse(layer.editBuffer().isFeatureGeometryChanged(2))
268+
269+
# change attribute values
270+
layer.changeGeometry(1, QgsGeometry.fromPoint(QgsPoint(10, 20)))
271+
272+
# test contents of buffer
273+
self.assertEqual(layer.editBuffer().changedGeometries().keys(), [1])
274+
self.assertEqual(layer.editBuffer().changedGeometries()[1].geometry().x(), 10)
275+
self.assertTrue(layer.editBuffer().isFeatureGeometryChanged(1))
276+
self.assertFalse(layer.editBuffer().isFeatureGeometryChanged(2))
277+
278+
layer.changeGeometry(2, QgsGeometry.fromPoint(QgsPoint(20, 40)))
279+
280+
# test contents of buffer
281+
self.assertEqual(set(layer.editBuffer().changedGeometries().keys()), set([1, 2]))
282+
self.assertEqual(layer.editBuffer().changedGeometries()[1].geometry().x(), 10)
283+
self.assertEqual(layer.editBuffer().changedGeometries()[2].geometry().x(), 20)
284+
self.assertTrue(layer.editBuffer().isFeatureGeometryChanged(1))
285+
self.assertTrue(layer.editBuffer().isFeatureGeometryChanged(2))
286+
287+
def testDeleteAttribute(self):
288+
# test deleting attributes from an edit buffer
289+
290+
layer = createEmptyLayer()
291+
layer.startEditing()
292+
293+
self.assertEqual(layer.editBuffer().deletedAttributeIds(), [])
294+
self.assertFalse(layer.editBuffer().isAttributeDeleted(0))
295+
self.assertFalse(layer.editBuffer().isAttributeDeleted(1))
296+
297+
# delete attribute
298+
layer.deleteAttribute(0)
299+
300+
# test contents of buffer
301+
self.assertEqual(layer.editBuffer().deletedAttributeIds(), [0])
302+
self.assertTrue(layer.editBuffer().isAttributeDeleted(0))
303+
self.assertFalse(layer.editBuffer().isAttributeDeleted(1))
304+
305+
# delete remaining attribute (now at position 0)
306+
layer.deleteAttribute(0)
307+
308+
# test contents of buffer
309+
self.assertEqual(layer.editBuffer().deletedAttributeIds(), [0, 1])
310+
self.assertTrue(layer.editBuffer().isAttributeDeleted(0))
311+
self.assertTrue(layer.editBuffer().isAttributeDeleted(1))
312+
313+
def testAddAttribute(self):
314+
# test adding attributes to an edit buffer
315+
316+
layer = createEmptyLayer()
317+
layer.startEditing()
318+
319+
self.assertEqual(layer.editBuffer().addedAttributes(), [])
320+
321+
# add attribute
322+
layer.addAttribute(QgsField('new1', QVariant.String))
323+
324+
# test contents of buffer
325+
self.assertEqual(layer.editBuffer().addedAttributes()[0].name(), 'new1')
326+
327+
# add another attribute
328+
layer.addAttribute(QgsField('new2', QVariant.String))
329+
330+
# test contents of buffer
331+
self.assertEqual(layer.editBuffer().addedAttributes()[0].name(), 'new1')
332+
self.assertEqual(layer.editBuffer().addedAttributes()[1].name(), 'new2')
333+
334+
if __name__ == '__main__':
335+
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.