-
-
Notifications
You must be signed in to change notification settings - Fork 3k
/
regression1141.cpp
174 lines (147 loc) · 5.26 KB
/
regression1141.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/***************************************************************************
testqgsvectorfilewriter.cpp
--------------------------------------
Date : Sun Sep 16 12:22:54 AKDT 2007
Copyright : (C) 2007 by Tim Sutton
Email : tim @ linfiniti.com
***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#include <QtTest/QtTest>
#include <QObject>
#include <QString>
#include <QStringList>
#include <QObject>
#include <QPainter>
#include <QTime>
#include <QApplication>
#include <QDesktopServices>
//qgis includes...
#include <qgsvectorlayer.h> //defines QgsFieldMap
#include <qgsvectorfilewriter.h> //logic for writing shpfiles
#include <qgsfeature.h> //we will need to pass a bunch of these for each rec
#include <qgsgeometry.h> //each feature needs a geometry
#include <qgspoint.h> //we will use point geometry
#include <qgscoordinatereferencesystem.h> //needed for creating a srs
#include <qgsapplication.h> //search path for srs.db
#include <qgsfield.h>
#include <qgis.h> //defines GEOWkt
#include <qgsproviderregistry.h>
#include <qgslogger.h>
#if defined(linux)
#include <langinfo.h>
#endif
/** \ingroup UnitTests
* This is a regression test ticket 1141.
* broken Polish characters support since r8592
* http://hub.qgis.org/issues/1141
*
*/
class Regression1141: public QObject
{
Q_OBJECT
public:
Regression1141();
private slots:
void initTestCase();// will be called before the first testfunction is executed.
void cleanupTestCase();// will be called after the last testfunction was executed.
void init() {};// will be called before each testfunction is executed.
void cleanup() {};// will be called after every testfunction.
/** This method tests that we can create a shpfile with diacriticals in its name
* and with fields that have diacriticals in their names*/
void diacriticalTest();
private:
QString mEncoding;
QgsVectorFileWriter::WriterError mError;
QgsCoordinateReferenceSystem mCRS;
QgsFields mFields;
QString mFileName;
};
Regression1141::Regression1141()
: mError( QgsVectorFileWriter::NoError )
{
}
void Regression1141::initTestCase()
{
//
// Runs once before any tests are run
//
// init QGIS's paths - true means that all path will be inited from prefix
QgsApplication::init();
QgsApplication::initQgis();
QgsApplication::showSettings();
// compute our test file name:
QString myTmpDir = QDir::tempPath() + QDir::separator();
mFileName = myTmpDir + "ąęćń.shp";
}
void Regression1141::cleanupTestCase()
{
//
// Runs after all tests are done
//
QgsApplication::exitQgis();
}
void Regression1141::diacriticalTest()
{
#if defined(linux)
const char *cs = nl_langinfo( CODESET );
QgsDebugMsg( QString( "CODESET:%1" ).arg( cs ? cs : "unset" ) );
if ( !cs || strcmp( cs, "UTF-8" ) != 0 )
{
QSKIP( "This test requires a UTF-8 locale", SkipSingle );
return;
}
#endif
//create some objects that will be used in all tests...
mEncoding = "UTF-8";
QgsField myField( "ąęćń", QVariant::Int, "int", 10, 0, "Value on lon" );
mFields.append( myField );
mCRS = QgsCoordinateReferenceSystem( GEOWKT );
qDebug( "Checking test dataset exists...\n%s", mFileName.toLocal8Bit().constData() );
if ( !QFile::exists( mFileName ) )
{
qDebug( "Creating test dataset: " );
QgsVectorFileWriter myWriter( mFileName,
mEncoding,
mFields,
QGis::WKBPoint,
&mCRS );
QgsPoint myPoint = QgsPoint( 10.0, 10.0 );
// NOTE: don't delete this pointer again -
// ownership is passed to the feature which will
// delete it in its dtor!
QgsGeometry * mypPointGeometry = QgsGeometry::fromPoint( myPoint );
QgsFeature myFeature;
myFeature.setGeometry( mypPointGeometry );
myFeature.initAttributes( 1 );
myFeature.setAttribute( 0, 10 );
//
// Write the feature to the filewriter
// and check for errors
//
QVERIFY( myWriter.addFeature( myFeature ) );
mError = myWriter.hasError();
if ( mError == QgsVectorFileWriter::ErrDriverNotFound )
{
std::cout << "Driver not found error" << std::endl;
}
else if ( mError == QgsVectorFileWriter::ErrCreateDataSource )
{
std::cout << "Create data source error" << std::endl;
}
else if ( mError == QgsVectorFileWriter::ErrCreateLayer )
{
std::cout << "Create layer error" << std::endl;
}
QVERIFY( mError == QgsVectorFileWriter::NoError );
// Now check we can delete it again ok
QVERIFY( QgsVectorFileWriter::deleteShapeFile( mFileName ) );
} //file exists
}
QTEST_MAIN( Regression1141 )
#include "regression1141.moc"