Skip to content

Commit d372799

Browse files
committedJan 8, 2018
Remove some more redundant tests, add sip subclassing
1 parent 56f1c20 commit d372799

File tree

9 files changed

+62
-285
lines changed

9 files changed

+62
-285
lines changed
 

‎python/core/composer/qgslayoutmanager.sip

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,6 @@ Returns a DOM element representing the state of the manager.
139139
%Docstring
140140
Saves the composition with matching ``name`` in template format.
141141
Returns true if save was successful.
142-
%End
143-
144-
QgsComposition *duplicateComposition( const QString &name, const QString &newName );
145-
%Docstring
146-
Duplicates an existing composition from the manager. The new
147-
composition will automatically be stored in the manager.
148-
Returns new composition if duplication was successful.
149142
%End
150143

151144
QgsMasterLayoutInterface *duplicateLayout( const QgsMasterLayoutInterface *layout, const QString &newName );

‎python/core/layout/qgsmasterlayoutinterface.sip

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77
************************************************************************/
88

99

10+
%ModuleHeaderCode
11+
#include "qgsprintlayout.h"
12+
#include "qgsreport.h"
13+
%End
14+
1015
class QgsMasterLayoutInterface
1116
{
1217
%Docstring
@@ -17,6 +22,21 @@ class QgsMasterLayoutInterface
1722

1823
%TypeHeaderCode
1924
#include "qgsmasterlayoutinterface.h"
25+
%End
26+
%ConvertToSubClassCode
27+
switch ( sipCpp->layoutType() )
28+
{
29+
case QgsMasterLayoutInterface::PrintLayout:
30+
sipType = sipType_QgsPrintLayout;
31+
*sipCppRet = static_cast<QgsPrintLayout *>( sipCpp );
32+
break;
33+
case QgsMasterLayoutInterface::Report:
34+
*sipCppRet = static_cast<QgsReport *>( sipCpp );
35+
sipType = sipType_QgsReport;
36+
break;
37+
default:
38+
sipType = NULL;
39+
}
2040
%End
2141
public:
2242

‎src/core/composer/qgslayoutmanager.cpp

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -285,40 +285,11 @@ bool QgsLayoutManager::saveAsTemplate( const QString &name, QDomDocument &doc )
285285
return true;
286286
}
287287

288-
QgsComposition *QgsLayoutManager::duplicateComposition( const QString &name, const QString &newName )
288+
QgsMasterLayoutInterface *QgsLayoutManager::duplicateLayout( const QgsMasterLayoutInterface *layout, const QString &newName )
289289
{
290-
QDomDocument currentDoc;
291-
if ( !saveAsTemplate( name, currentDoc ) )
292-
return nullptr;
293-
294-
QDomElement compositionElem = currentDoc.documentElement().firstChildElement( QStringLiteral( "Composition" ) );
295-
if ( compositionElem.isNull() )
296-
{
297-
QgsDebugMsg( "selected composer could not be stored as temporary template" );
298-
return nullptr;
299-
}
300-
301-
QgsComposition *newComposition( new QgsComposition( mProject ) );
302-
if ( !newComposition->loadFromTemplate( currentDoc, nullptr, false, true ) )
303-
{
304-
delete newComposition;
305-
return nullptr;
306-
}
307-
308-
newComposition->setName( newName );
309-
if ( !addComposition( newComposition ) )
310-
{
311-
delete newComposition;
290+
if ( !layout )
312291
return nullptr;
313-
}
314-
else
315-
{
316-
return newComposition;
317-
}
318-
}
319292

320-
QgsMasterLayoutInterface *QgsLayoutManager::duplicateLayout( const QgsMasterLayoutInterface *layout, const QString &newName )
321-
{
322293
std::unique_ptr< QgsMasterLayoutInterface > newLayout( layout->clone() );
323294
if ( !newLayout )
324295
{

‎src/core/composer/qgslayoutmanager.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,6 @@ class CORE_EXPORT QgsLayoutManager : public QObject
140140
*/
141141
bool saveAsTemplate( const QString &name, QDomDocument &doc ) const;
142142

143-
/**
144-
* Duplicates an existing composition from the manager. The new
145-
* composition will automatically be stored in the manager.
146-
* Returns new composition if duplication was successful.
147-
*/
148-
QgsComposition *duplicateComposition( const QString &name, const QString &newName );
149-
150143
/**
151144
* Duplicates an existing \a layout from the manager. The new
152145
* layout will automatically be stored in the manager.

‎src/core/layout/qgsmasterlayoutinterface.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@
2121
#include <QString>
2222
#include <QIcon>
2323

24+
#ifdef SIP_RUN
25+
% ModuleHeaderCode
26+
#include "qgsprintlayout.h"
27+
#include "qgsreport.h"
28+
% End
29+
#endif
30+
2431
/**
2532
* \ingroup core
2633
* \class QgsMasterLayoutInterface
@@ -30,6 +37,24 @@
3037
class CORE_EXPORT QgsMasterLayoutInterface
3138
{
3239

40+
#ifdef SIP_RUN
41+
SIP_CONVERT_TO_SUBCLASS_CODE
42+
switch ( sipCpp->layoutType() )
43+
{
44+
case QgsMasterLayoutInterface::PrintLayout:
45+
sipType = sipType_QgsPrintLayout;
46+
*sipCppRet = static_cast<QgsPrintLayout *>( sipCpp );
47+
break;
48+
case QgsMasterLayoutInterface::Report:
49+
*sipCppRet = static_cast<QgsReport *>( sipCpp );
50+
sipType = sipType_QgsReport;
51+
break;
52+
default:
53+
sipType = NULL;
54+
}
55+
SIP_END
56+
#endif
57+
3358
public:
3459

3560
//! Master layout type

‎tests/src/python/qgscompositionchecker.py

Lines changed: 0 additions & 61 deletions
This file was deleted.

‎tests/src/python/test_qgslayoutmanager.py

Lines changed: 13 additions & 177 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@
1616

1717
from qgis.PyQt.QtXml import QDomDocument
1818

19-
from qgis.core import (QgsComposition,
20-
QgsPrintLayout,
19+
from qgis.core import (QgsPrintLayout,
2120
QgsLayoutManager,
2221
QgsProject,
2322
QgsReport,
@@ -43,38 +42,6 @@ def tearDown(self):
4342
"""Run after each test."""
4443
pass
4544

46-
def testAddComposition(self):
47-
project = QgsProject()
48-
composition = QgsComposition(project)
49-
composition.setName('test composition')
50-
51-
manager = QgsLayoutManager(project)
52-
53-
composition_about_to_be_added_spy = QSignalSpy(manager.compositionAboutToBeAdded)
54-
composition_added_spy = QSignalSpy(manager.compositionAdded)
55-
self.assertTrue(manager.addComposition(composition))
56-
self.assertEqual(len(composition_about_to_be_added_spy), 1)
57-
self.assertEqual(composition_about_to_be_added_spy[0][0], 'test composition')
58-
self.assertEqual(len(composition_added_spy), 1)
59-
self.assertEqual(composition_added_spy[0][0], 'test composition')
60-
61-
# adding it again should fail
62-
self.assertFalse(manager.addComposition(composition))
63-
64-
# try adding a second composition
65-
composition2 = QgsComposition(project)
66-
composition2.setName('test composition2')
67-
self.assertTrue(manager.addComposition(composition2))
68-
self.assertEqual(len(composition_added_spy), 2)
69-
self.assertEqual(composition_about_to_be_added_spy[1][0], 'test composition2')
70-
self.assertEqual(len(composition_about_to_be_added_spy), 2)
71-
self.assertEqual(composition_added_spy[1][0], 'test composition2')
72-
73-
# adding a composition with duplicate name should fail
74-
composition3 = QgsComposition(project)
75-
composition3.setName('test composition2')
76-
self.assertFalse(manager.addComposition(composition3))
77-
7845
def testAddLayout(self):
7946
project = QgsProject()
8047
layout = QgsPrintLayout(project)
@@ -107,23 +74,6 @@ def testAddLayout(self):
10774
layout3.setName('test layout2')
10875
self.assertFalse(manager.addLayout(layout3))
10976

110-
def testCompositions(self):
111-
project = QgsProject()
112-
manager = QgsLayoutManager(project)
113-
composition = QgsComposition(project)
114-
composition.setName('test composition')
115-
composition2 = QgsComposition(project)
116-
composition2.setName('test composition2')
117-
composition3 = QgsComposition(project)
118-
composition3.setName('test composition3')
119-
120-
manager.addComposition(composition)
121-
self.assertEqual(manager.compositions(), [composition])
122-
manager.addComposition(composition2)
123-
self.assertEqual(set(manager.compositions()), {composition, composition2})
124-
manager.addComposition(composition3)
125-
self.assertEqual(set(manager.compositions()), {composition, composition2, composition3})
126-
12777
def testLayouts(self):
12878
project = QgsProject()
12979
manager = QgsLayoutManager(project)
@@ -147,33 +97,6 @@ def aboutToBeRemoved(self, name):
14797
self.assertTrue(self.manager.compositionByName('test composition'))
14898
self.aboutFired = True
14999

150-
def testRemoveComposition(self):
151-
project = QgsProject()
152-
composition = QgsComposition(project)
153-
composition.setName('test composition')
154-
155-
self.manager = QgsLayoutManager(project)
156-
composition_removed_spy = QSignalSpy(self.manager.compositionRemoved)
157-
composition_about_to_be_removed_spy = QSignalSpy(self.manager.compositionAboutToBeRemoved)
158-
# tests that composition still exists when compositionAboutToBeRemoved is fired
159-
self.manager.compositionAboutToBeRemoved.connect(self.aboutToBeRemoved)
160-
161-
# not added, should fail
162-
self.assertFalse(self.manager.removeComposition(composition))
163-
self.assertEqual(len(composition_removed_spy), 0)
164-
self.assertEqual(len(composition_about_to_be_removed_spy), 0)
165-
166-
self.assertTrue(self.manager.addComposition(composition))
167-
self.assertEqual(self.manager.compositions(), [composition])
168-
self.assertTrue(self.manager.removeComposition(composition))
169-
self.assertEqual(len(self.manager.compositions()), 0)
170-
self.assertEqual(len(composition_removed_spy), 1)
171-
self.assertEqual(composition_removed_spy[0][0], 'test composition')
172-
self.assertEqual(len(composition_about_to_be_removed_spy), 1)
173-
self.assertEqual(composition_about_to_be_removed_spy[0][0], 'test composition')
174-
self.assertTrue(self.aboutFired)
175-
self.manager = None
176-
177100
def layoutAboutToBeRemoved(self, name):
178101
# layout should still exist at this time
179102
self.assertEqual(name, 'test layout')
@@ -211,13 +134,6 @@ def testClear(self):
211134
project = QgsProject()
212135
manager = QgsLayoutManager(project)
213136

214-
# add a bunch of compositions
215-
composition = QgsComposition(project)
216-
composition.setName('test composition')
217-
composition2 = QgsComposition(project)
218-
composition2.setName('test composition2')
219-
composition3 = QgsComposition(project)
220-
composition3.setName('test composition3')
221137
# add a bunch of layouts
222138
layout = QgsPrintLayout(project)
223139
layout.setName('test layout')
@@ -226,46 +142,17 @@ def testClear(self):
226142
layout3 = QgsPrintLayout(project)
227143
layout3.setName('test layout3')
228144

229-
manager.addComposition(composition)
230-
manager.addComposition(composition2)
231-
manager.addComposition(composition3)
232145
manager.addLayout(layout)
233146
manager.addLayout(layout2)
234147
manager.addLayout(layout3)
235148

236-
composition_removed_spy = QSignalSpy(manager.compositionRemoved)
237-
composition_about_to_be_removed_spy = QSignalSpy(manager.compositionAboutToBeRemoved)
238149
layout_removed_spy = QSignalSpy(manager.layoutRemoved)
239150
layout_about_to_be_removed_spy = QSignalSpy(manager.layoutAboutToBeRemoved)
240151
manager.clear()
241-
self.assertEqual(len(manager.compositions()), 0)
242-
self.assertEqual(len(composition_removed_spy), 3)
243-
self.assertEqual(len(composition_about_to_be_removed_spy), 3)
244152
self.assertEqual(len(manager.layouts()), 0)
245153
self.assertEqual(len(layout_removed_spy), 3)
246154
self.assertEqual(len(layout_about_to_be_removed_spy), 3)
247155

248-
def testCompositionByName(self):
249-
project = QgsProject()
250-
manager = QgsLayoutManager(project)
251-
252-
# add a bunch of compositions
253-
composition = QgsComposition(project)
254-
composition.setName('test composition')
255-
composition2 = QgsComposition(project)
256-
composition2.setName('test composition2')
257-
composition3 = QgsComposition(project)
258-
composition3.setName('test composition3')
259-
260-
manager.addComposition(composition)
261-
manager.addComposition(composition2)
262-
manager.addComposition(composition3)
263-
264-
self.assertFalse(manager.compositionByName('asdf'))
265-
self.assertEqual(manager.compositionByName('test composition'), composition)
266-
self.assertEqual(manager.compositionByName('test composition2'), composition2)
267-
self.assertEqual(manager.compositionByName('test composition3'), composition3)
268-
269156
def testLayoutsByName(self):
270157
project = QgsProject()
271158
manager = QgsLayoutManager(project)
@@ -294,18 +181,6 @@ def testReadWriteXml(self):
294181
project = QgsProject()
295182
manager = QgsLayoutManager(project)
296183

297-
# add a bunch of compositions
298-
composition = QgsComposition(project)
299-
composition.setName('test composition')
300-
composition2 = QgsComposition(project)
301-
composition2.setName('test composition2')
302-
composition3 = QgsComposition(project)
303-
composition3.setName('test composition3')
304-
305-
manager.addComposition(composition)
306-
manager.addComposition(composition2)
307-
manager.addComposition(composition3)
308-
309184
# add a bunch of layouts
310185
layout = QgsPrintLayout(project)
311186
layout.setName('test layout')
@@ -328,51 +203,32 @@ def testReadWriteXml(self):
328203
manager2 = QgsLayoutManager(project2)
329204
self.assertTrue(manager2.readXml(elem, doc))
330205

331-
self.assertEqual(len(manager2.compositions()), 3)
332-
names = [c.name() for c in manager2.compositions()]
333-
self.assertEqual(set(names), {'test composition', 'test composition2', 'test composition3'})
334-
335206
self.assertEqual(len(manager2.layouts()), 3)
336207
names = [c.name() for c in manager2.layouts()]
337208
self.assertCountEqual(names, ['test layout', 'test layout2', 'test layout3'])
338209

339-
def testSaveAsTemplate(self):
340-
"""
341-
Test saving composition as template
342-
"""
343-
project = QgsProject()
344-
manager = QgsLayoutManager(project)
345-
doc = QDomDocument("testdoc")
346-
self.assertFalse(manager.saveAsTemplate('not in manager', doc))
347-
348-
composition = QgsComposition(project)
349-
composition.setName('test composition')
350-
manager.addComposition(composition)
351-
self.assertTrue(manager.saveAsTemplate('test composition', doc))
352-
353-
def testDuplicateComposition(self):
210+
def testDuplicateLayout(self):
354211
"""
355-
Test duplicating compositions
212+
Test duplicating layouts
356213
"""
357214
project = QgsProject()
358215
manager = QgsLayoutManager(project)
359216
doc = QDomDocument("testdoc")
360-
self.assertFalse(manager.duplicateComposition('not in manager', 'dest'))
217+
self.assertFalse(manager.duplicateLayout(None, 'dest'))
361218

362-
composition = QgsComposition(project)
363-
composition.setName('test composition')
364-
composition.setPaperSize(100, 200)
365-
manager.addComposition(composition)
219+
layout = QgsPrintLayout(project)
220+
layout.setName('test layout')
221+
layout.initializeDefaults()
222+
manager.addLayout(layout)
366223
# duplicate name
367-
self.assertFalse(manager.duplicateComposition('test composition', 'test composition'))
224+
self.assertFalse(manager.duplicateLayout(layout, 'test layout'))
225+
result = manager.duplicateLayout(layout, 'dupe layout')
368226

369-
result = manager.duplicateComposition('test composition', 'dupe composition')
370227
self.assertTrue(result)
371228
# make sure result in stored in manager
372-
self.assertEqual(result, manager.compositionByName('dupe composition'))
373-
self.assertEqual(result.name(), 'dupe composition')
374-
self.assertEqual(result.paperHeight(), 200)
375-
self.assertEqual(result.paperWidth(), 100)
229+
self.assertEqual(result, manager.layoutByName('dupe layout'))
230+
self.assertEqual(result.name(), 'dupe layout')
231+
self.assertEqual(result.pageCollection().pageCount(), 1)
376232

377233
def testGenerateUniqueTitle(self):
378234
project = QgsProject()
@@ -401,26 +257,6 @@ def testGenerateUniqueTitle(self):
401257
self.assertEqual(manager.generateUniqueTitle(), 'Layout 1')
402258
self.assertEqual(manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 1')
403259

404-
def testRenameSignalCompositions(self):
405-
project = QgsProject()
406-
manager = QgsLayoutManager(project)
407-
composition = QgsComposition(project)
408-
composition.setName('c1')
409-
manager.addComposition(composition)
410-
composition2 = QgsComposition(project)
411-
composition2.setName('c2')
412-
manager.addComposition(composition2)
413-
414-
composition_renamed_spy = QSignalSpy(manager.compositionRenamed)
415-
composition.setName('d1')
416-
self.assertEqual(len(composition_renamed_spy), 1)
417-
self.assertEqual(composition_renamed_spy[0][0], composition)
418-
self.assertEqual(composition_renamed_spy[0][1], 'd1')
419-
composition2.setName('d2')
420-
self.assertEqual(len(composition_renamed_spy), 2)
421-
self.assertEqual(composition_renamed_spy[1][0], composition2)
422-
self.assertEqual(composition_renamed_spy[1][1], 'd2')
423-
424260
def testRenameSignal(self):
425261
project = QgsProject()
426262
manager = QgsLayoutManager(project)

‎tests/src/python/test_qgslayoutmap.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
TEST_DATA_DIR = unitTestDataPath()
4141

4242

43-
class TestQgsComposerMap(unittest.TestCase, LayoutItemTestCase):
43+
class TestQgsLayoutMap(unittest.TestCase, LayoutItemTestCase):
4444

4545
@classmethod
4646
def setUpClass(cls):

‎tests/src/python/test_qgslayoutmapgrid.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
TEST_DATA_DIR = unitTestDataPath()
3434

3535

36-
class TestQgsComposerMap(unittest.TestCase):
36+
class TestQgsLayoutMapGrid(unittest.TestCase):
3737

3838
def testGrid(self):
3939
layout = QgsLayout(QgsProject.instance())

0 commit comments

Comments
 (0)
Please sign in to comment.