2
* Copyright (C) 2011 Andriy Rysin (rysin@kde.org)
4
* 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.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
#include <QtGui/QApplication>
21
#include <qtest_kde.h>
23
#include "../xkb_rules.h"
25
#include <QtXml/qdom.h>
26
#include <QtXml/qxml.h>
28
static const Rules::ExtrasFlag readExtras = Rules::NO_EXTRAS;
30
class RulesTest : public QObject
38
rules = Rules::readRules(readExtras);
41
void cleanupTestCase() {
46
QVERIFY( rules != NULL );
47
QVERIFY( rules->modelInfos.size() > 0 );
48
QVERIFY( rules->layoutInfos.size() > 0 );
49
QVERIFY( rules->optionGroupInfos.size() > 0 );
53
foreach(const ModelInfo* modelInfo, rules->modelInfos) {
54
QVERIFY( modelInfo != NULL);
55
QVERIFY( modelInfo->name.length() > 0 );
56
QVERIFY( modelInfo->description.length() > 0 );
57
// QVERIFY( ! modelInfo->vendor.isEmpty() );
62
foreach(const LayoutInfo* layoutInfo, rules->layoutInfos) {
63
QVERIFY( layoutInfo != NULL);
64
QVERIFY( ! layoutInfo->name.isEmpty() );
65
// const char* desc = layoutInfo->name.toUtf8() ;
66
// qDebug() << layoutInfo->name;
67
QVERIFY( ! layoutInfo->description.isEmpty() );
69
foreach(const VariantInfo* variantInfo, layoutInfo->variantInfos) {
70
QVERIFY( variantInfo != NULL );
71
QVERIFY( ! variantInfo->name.isEmpty() );
72
QVERIFY( ! variantInfo->description.isEmpty() );
74
foreach(const QString& language, layoutInfo->languages) {
75
QVERIFY( ! language.isEmpty() );
80
void testOptionGroups() {
81
foreach(const OptionGroupInfo* optionGroupInfo, rules->optionGroupInfos) {
82
QVERIFY( optionGroupInfo != NULL);
83
QVERIFY( ! optionGroupInfo->name.isEmpty() );
84
QVERIFY( ! optionGroupInfo->description.isEmpty() );
85
// optionGroupInfo->exclusive
87
foreach(const OptionInfo* optionInfo, optionGroupInfo->optionInfos) {
88
QVERIFY( optionInfo != NULL );
89
QVERIFY( ! optionInfo->name.isEmpty() );
90
QVERIFY( ! optionInfo->description.isEmpty() );
96
Rules* rulesWithExtras = Rules::readRules(Rules::READ_EXTRAS);
97
QVERIFY2(rulesWithExtras->layoutInfos.size() > rules->layoutInfos.size(), "Rules with extras should have more layouts");
99
foreach(const LayoutInfo* layoutInfo, rules->layoutInfos) {
100
QVERIFY( ! layoutInfo->fromExtras );
103
bool foundFromExtras = false, foundNonExtras = false;
104
foreach(const LayoutInfo* layoutInfo, rulesWithExtras->layoutInfos) {
105
if( layoutInfo->fromExtras ) foundFromExtras = true;
106
if( ! layoutInfo->fromExtras ) foundNonExtras = true;
107
layoutInfo->languages.size(); // make sure we can access all merged objects
108
layoutInfo->variantInfos.size(); // make sure we can access all merged objects
110
QVERIFY( foundNonExtras );
111
QVERIFY( foundFromExtras );
114
void testWriteNewXml() {
115
QDomDocument doc("xkbConfigRegistry");
116
QDomElement root = doc.createElement("xkbConfigRegistry");
117
root.setAttribute("version", "2.0");
118
doc.appendChild(root);
120
QDomElement modelList = doc.createElement("modelList");
121
root.appendChild(modelList);
122
foreach(const ModelInfo* modelInfo, rules->modelInfos) {
123
QDomElement model = doc.createElement("model");
124
model.setAttribute("name", modelInfo->name);
125
model.setAttribute("description", modelInfo->description);
126
model.setAttribute("vendor", modelInfo->vendor);
127
modelList.appendChild(model);
130
QDomElement layoutList = doc.createElement("layoutList");
131
foreach(const LayoutInfo* layoutInfo, rules->layoutInfos) {
132
QDomElement layout = doc.createElement("layout");
133
layout.setAttribute("name", layoutInfo->name);
134
layout.setAttribute("description", layoutInfo->description);
136
QDomElement langList = doc.createElement("languageList");
137
foreach(const QString& lang, layoutInfo->languages) {
138
QDomElement langNode = doc.createElement("lang");
139
langNode.setAttribute("iso639Id", lang);
140
langList.appendChild(langNode);
142
if( langList.hasChildNodes() ) {
143
layout.appendChild(langList);
146
QDomElement variantList = doc.createElement("variantList");
147
foreach(const VariantInfo* variantInfo, layoutInfo->variantInfos) {
148
QDomElement variant = doc.createElement("variant");
149
variant.setAttribute("name", variantInfo->name);
150
variant.setAttribute("description", variantInfo->description);
152
QDomElement langList = doc.createElement("languageList");
153
foreach(const QString& lang, variantInfo->languages) {
154
QDomElement langNode = doc.createElement("lang");
155
langNode.setAttribute("iso639Id", lang);
156
langList.appendChild(langNode);
158
if( langList.hasChildNodes() ) {
159
variant.appendChild(langList);
162
variantList.appendChild(variant);
164
if( variantList.hasChildNodes() ) {
165
layout.appendChild(variantList);
168
layoutList.appendChild(layout);
170
root.appendChild(layoutList);
172
QDomElement optionGroupList = doc.createElement("optionList");
173
foreach(const OptionGroupInfo* optionGroupInfo, rules->optionGroupInfos) {
174
QDomElement optionGroup = doc.createElement("optionGroup");
175
optionGroup.setAttribute("name", optionGroupInfo->name);
176
optionGroup.setAttribute("description", optionGroupInfo->description);
177
optionGroup.setAttribute("exclusive", optionGroupInfo->exclusive);
179
foreach(const OptionInfo* optionGroupInfo, optionGroupInfo->optionInfos) {
180
QDomElement option = doc.createElement("option");
181
option.setAttribute("name", optionGroupInfo->name);
182
option.setAttribute("description", optionGroupInfo->description);
183
optionGroup.appendChild(option);
186
optionGroupList.appendChild(optionGroup);
188
root.appendChild(optionGroupList);
190
QFile file("base2.xml");
191
if( ! file.open( QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text) ) {
192
kWarning() << "Failed to open layout memory xml file for writing" << file.fileName();
196
QTextStream out(&file);
197
out << doc.toString();
200
void loadRulesBenchmark() {
202
Rules* rules = Rules::readRules(readExtras);
209
// need kde libs for config-workspace.h used in xkb_rules.cpp
210
// need GUI for xkb protocol
211
QTEST_KDEMAIN( RulesTest, GUI )
213
#include "xkb_rules_test.moc"