NCL Composer  0.1.5
 All Classes Functions Variables Pages
tst_ModuleProject.cpp
1 #include "tst_ModuleProject.h"
2 
3 #include "tst_Utils.h"
4 
5 #include <iostream>
6 #include <fstream>
7 using namespace std;
8 
9 void tst_ModuleProject::initTestCase()
10 {
11  pjControl = ProjectControl::getInstance();
12  resourceDir = "resources";
13  resourceDir = resourceDir+QDir::separator()+"documents"+QDir::separator();
14 
15  QString baseDir = "..";
16  profileDir = baseDir+QDir::separator()+"extensions"+QDir::separator();
17  // +"composer"+QDir::separator();
18  lgControl = LanguageControl::getInstance();
19 
20  pluginList = TestUtil::getPluginList();
21 
22  pgControl = PluginControl::getInstance();
23 
24  connect(pgControl,
25  SIGNAL(addPluginWidgetToWindow(IPluginFactory*,IPlugin*,Project*,int)),
26  &showWidgets,
27  SLOT(showPluginWidget(IPluginFactory*, IPlugin*, Project*, int)));
28 }
29 
30 void tst_ModuleProject::cleanupTestCase()
31 {
32  ProjectControl::releaseInstance();
33  pjControl = NULL;
34  LanguageControl::releaseInstance();
35  lgControl = NULL;
36  PluginControl::releaseInstance();
37  pgControl = NULL;
38 
39  QString projectDir = resourceDir + QDir::separator() + "projects";
40  QDir docDir(projectDir);
41  docDir.setFilter(QDir::Files | QDir::NoSymLinks);
42  QFileInfoList list = docDir.entryInfoList();
43 
44  for (int i = 0; i != list.size(); i++)
45  {
46  QFileInfo fileInfo = list.at(i);
47  cout << "Trying to remove " << fileInfo.absoluteFilePath().toStdString();
48  QFile file(fileInfo.absoluteFilePath());
49  file.remove();
50  }
51 }
52 
53 void tst_ModuleProject::init()
54 {
55 #ifdef Q_WS_MAC
56  QString filename = profileDir+QDir::separator()+
57  "NCL"+QDir::separator()+"libNCLLanguageProfile.dylib";
58 #elif WIN32
59  //TODO:
60 #else
61  QString filename = profileDir+QDir::separator()
62  +"NCL"+QDir::separator()+"libNCLLanguageProfile.so";
63 
64  // cout << filename.toStdString();
65 #endif
66 
67  QVERIFY(lgControl->loadProfile(filename));
68 
69 }
70 
71 void tst_ModuleProject::cleanup()
72 {
73  lgControl->removeProfile(NCL);
74 }
75 
76 void tst_ModuleProject::importFromExistingNCL_data()
77 {
78  QTest::addColumn<QString>("docFileName");
79  QTest::addColumn<QString>("projectFileName");
80  QTest::addColumn<int>("size");
81  QTest::addColumn<int>("numPlugins");
82 
83  QDir docDir(resourceDir);
84  docDir.setFilter(QDir::Files | QDir::NoSymLinks);
85  docDir.setSorting(QDir::Size | QDir::Reversed);
86 
87  QFileInfoList list = docDir.entryInfoList();
88 
89  for (int k = 1; k <= pluginList.size(); k++)
90  {
91  for (int i = 0; i != list.size(); i++)
92  {
93  QFileInfo docFile = list.at(i);
94  if (docFile.completeSuffix() != "ncl") continue;
95  QString absDocFile = docFile.absoluteFilePath();
96  QString absProjFile = docFile.absolutePath()+QDir::separator()+
97  "projects"+QDir::separator()+
98  docFile.baseName()+".cpr";
99  int size = docFile.size();
100  QString teste = "teste"+QString::number(k);
101  QTest::newRow(teste.toStdString().c_str())
102  << absDocFile << absProjFile << size << k;
103  //if(i==1) break;
104  }
105  }
106 }
107 
108 void tst_ModuleProject::importFromExistingNCL()
109 {
110  QFETCH(QString, docFileName);
111  QFETCH(QString, projectFileName);
112  QFETCH(int, size);
113  QFETCH(int, numPlugins);
114 
115  for (int i = 0; i < numPlugins ;i++)
116  {
117  QString pluginName = pluginList.at(i);
118  pgControl->loadPlugin(pluginName);
119  }
120 
121  ofstream myfile;
122  QString filename = "output/composer_";
123  filename += QString::number(numPlugins);
124  filename += "_plugins_importNCL_incremental.txt";
125  myfile.open(filename.toStdString().c_str());
126 
127  timeval begin, end;
128  // QVERIFY(pjControl->launchProject(projectFileName));
129  gettimeofday(&begin,NULL);
130  pjControl->importFromDocument(docFileName, projectFileName);
131  gettimeofday(&end, NULL);
132  long long int interval = TestUtil::timeval_subtract_micro(begin, end);
133  cout << numPlugins << " " << size << " " << (double)interval/1000.0 << " ";
134  gettimeofday(&begin,NULL);
135  pjControl->saveProject(projectFileName);
136  gettimeofday(&end,NULL);
137  interval = TestUtil::timeval_subtract_micro(begin, end);
138  cout << (double) interval / 1000.0 << endl;
139  QApplication::processEvents();
140 // showWidgets.redraw();
141  QVERIFY(pjControl->closeProject(projectFileName));
142  myfile.close();
143 }
144 
145 void tst_ModuleProject::importNCLForEachPlugin_data()
146 {
147  QTest::addColumn<QString>("docFileName");
148  QTest::addColumn<QString>("projectFileName");
149  QTest::addColumn<int>("size");
150  QTest::addColumn<int>("pluginPos");
151 
152  QDir docDir(resourceDir);
153  docDir.setFilter(QDir::Files | QDir::NoSymLinks);
154  docDir.setSorting(QDir::Size | QDir::Reversed);
155 
156  QFileInfoList list = docDir.entryInfoList();
157 
158  for (int k = 0; k <= pluginList.size(); k++)
159  {
160  for (int i = 0; i < list.size(); i++)
161  {
162  QFileInfo docFile = list.at(i);
163  if (docFile.completeSuffix() != "ncl") continue;
164  QString absDocFile = docFile.absoluteFilePath();
165  QString absProjFile = docFile.absolutePath()+QDir::separator()+
166  "projects"+QDir::separator()+
167  docFile.baseName()+".cpr";
168  int size = docFile.size();
169  QString teste = "teste"+k;
170  QTest::newRow(teste.toStdString().c_str())
171  << absDocFile << absProjFile << size << k;
172  //if(i==1) break;
173  }
174  }
175 }
176 
177 void tst_ModuleProject::importNCLForEachPlugin()
178 {
179  QFETCH(QString, docFileName);
180  QFETCH(QString, projectFileName);
181  QFETCH(int, size);
182  QFETCH(int, pluginPos);
183 
184  QString pluginName = pluginList.at(pluginPos);
185  pgControl->loadPlugin(pluginName);
186 
187  ofstream myfile;
188  QString filename = "output/composer_";
189  filename += QString::number(pluginPos);
190  filename += "_plugin_importForEachplugin.txt";
191  myfile.open(filename.toStdString().c_str());
192 
193  timeval begin, end;
194  gettimeofday(&begin,NULL);
195  pjControl->importFromDocument(docFileName, projectFileName);
196  gettimeofday(&end, NULL);
197  long long int interval = TestUtil::timeval_subtract_micro(begin, end);
198  myfile << pluginName.mid(pluginName.lastIndexOf("/")+1).toStdString().c_str()
199  << " " << size << " " << (double)interval/1000.0 << " ";
200  gettimeofday(&begin,NULL);
201  pjControl->saveProject(projectFileName);
202  gettimeofday(&end,NULL);
203  interval = TestUtil::timeval_subtract_micro(begin, end);
204  myfile << (double)interval / 1000.0 << endl;
205  QVERIFY(pjControl->closeProject(projectFileName));
206 
207  myfile.close();
208 }