File indexing completed on 2024-04-21 14:55:18
0001 /* This file is part of the KDE libraries 0002 Copyright (c) 2005-2007 David Jarvie <djarvie@kde.org> 0003 0004 This library is free software; you can redistribute it and/or 0005 modify it under the terms of the GNU Library General Public 0006 License as published by the Free Software Foundation; either 0007 version 2 of the License, or (at your option) any later version. 0008 0009 This library is distributed in the hope that it will be useful, 0010 but WITHOUT ANY WARRANTY; without even the implied warranty of 0011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0012 Library General Public License for more details. 0013 0014 You should have received a copy of the GNU Library General Public License 0015 along with this library; see the file COPYING.LIB. If not, write to 0016 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0017 Boston, MA 02110-1301, USA. 0018 */ 0019 0020 #ifndef KTIMEZONESTEST_P_H 0021 #define KTIMEZONESTEST_P_H 0022 0023 #include <kconfig.h> 0024 #include <kconfiggroup.h> 0025 #include <qstandardpaths.h> 0026 #include <QDebug> 0027 #include <QDir> 0028 #include <qtest.h> 0029 0030 class TimeZoneTestData 0031 { 0032 public: 0033 QString dataDir() const 0034 { 0035 return mDataDir; 0036 } 0037 0038 void cleanupTimeZoneTest() 0039 { 0040 removeDir(QLatin1String("ktimezonestest/Africa")); 0041 removeDir(QLatin1String("ktimezonestest/America")); 0042 removeDir(QLatin1String("ktimezonestest/Asia")); 0043 removeDir(QLatin1String("ktimezonestest/Europe")); 0044 removeDir(QLatin1String("ktimezonestest")); 0045 QFile::remove(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QLatin1Char('/') + "ktimezonedrc"); 0046 } 0047 0048 void setupTimeZoneTest() 0049 { 0050 cleanupTimeZoneTest(); 0051 0052 mDataDir = QDir::homePath() + "/.kde-unit-test/ktimezonestest"; 0053 QVERIFY(QDir().mkpath(mDataDir)); 0054 writeZoneTab(false); 0055 QDir dir(mDataDir); 0056 QVERIFY(dir.mkdir("Africa")); 0057 QVERIFY(QFile::copy(QFINDTESTDATA("Cairo"), mDataDir + QLatin1String("/Africa/Cairo"))); 0058 QVERIFY(QFile::copy(QFINDTESTDATA("Johannesburg"), mDataDir + QLatin1String("/Africa/Johannesburg"))); 0059 QVERIFY(dir.mkdir("America")); 0060 QFile::copy(QFINDTESTDATA("Los_Angeles"), mDataDir + QLatin1String("/America/Los_Angeles")); 0061 QVERIFY(dir.mkdir("Asia")); 0062 QFile::copy(QFINDTESTDATA("Dili"), mDataDir + QLatin1String("/Asia/Dili")); 0063 QVERIFY(dir.mkdir("Europe")); 0064 QFile::copy(QFINDTESTDATA("Berlin"), mDataDir + QLatin1String("/Europe/Berlin")); 0065 QFile::copy(QFINDTESTDATA("London"), mDataDir + QLatin1String("/Europe/London")); 0066 QFile::copy(QFINDTESTDATA("Paris"), mDataDir + QLatin1String("/Europe/Paris")); 0067 0068 KConfig config("ktimezonedrc"); 0069 KConfigGroup group(&config, "TimeZones"); 0070 group.writeEntry("ZoneinfoDir", mDataDir); 0071 group.writeEntry("Zonetab", QString(mDataDir + QString::fromLatin1("/zone.tab"))); 0072 group.writeEntry("LocalZone", QString::fromLatin1("Europe/Paris")); 0073 config.sync(); 0074 } 0075 0076 private: 0077 void removeDir(const QString &subdir) 0078 { 0079 QDir local(QDir::homePath() + QLatin1String("/.kde-unit-test/") + subdir); 0080 foreach (const QString &file, local.entryList(QDir::Files)) 0081 if (!local.remove(file)) { 0082 qWarning("%s: removing failed", qPrintable(file)); 0083 } 0084 QCOMPARE((int)local.entryList(QDir::Files).count(), 0); 0085 local.cdUp(); 0086 QString subd = subdir; 0087 subd.remove(QRegExp("^.*/")); 0088 local.rmpath(subd); 0089 } 0090 0091 public: 0092 void writeZoneTab(bool testcase) 0093 { 0094 QFile f(mDataDir + QLatin1String("/zone.tab")); 0095 qDebug() << "Writing" << f.fileName(); 0096 QVERIFY(f.open(QIODevice::WriteOnly)); 0097 QTextStream fStream(&f); 0098 if (testcase) 0099 fStream << "DE +5230+01322 Europe/Berlin\n" 0100 "EG +3003+03115 Africa/Cairo\n" 0101 "FR +4852+00220 Europe/Paris\n" 0102 "XX -512830+0001845 Europe/London Greater Britain\n" 0103 "TL -0833+12535 Asia/Dili\n" 0104 "US +340308-1181434 America/Los_Angeles Pacific Time\n" 0105 "ZA -2615+02800 Africa/Johannesburg\n"; 0106 else 0107 fStream << "EG +3003+03115 Africa/Cairo\n" 0108 "FR +4852+00220 Europe/Paris\n" 0109 "GB +512830-0001845 Europe/London Great Britain\n" 0110 "US +340308-1181434 America/Los_Angeles Pacific Time\n" 0111 "ZA -2615+02800 Africa/Johannesburg\n"; 0112 f.close(); 0113 } 0114 0115 QString mDataDir; 0116 }; 0117 0118 #endif //KTIMEZONESTEST_P_H