Refactor for testing and a unit test.
authorMax Waterman <davidmaxwaterman+maemogit@fastmail.co.uk>
Wed, 24 Feb 2010 18:27:11 +0000 (20:27 +0200)
committerMax Waterman <davidmaxwaterman+maemogit@fastmail.co.uk>
Wed, 24 Feb 2010 18:53:05 +0000 (20:53 +0200)
zouba/qt/httpclient.cpp
zouba/qt/httpclient.h
zouba/qt/httpclient_p.cpp [new file with mode: 0644]
zouba/qt/httpclient_p.h [new file with mode: 0644]
zouba/qt/qt.pro
zouba/qt/routedata.h [new file with mode: 0644]
zouba/qt/tests/ut_httpclient/ut_httpclient.cpp [new file with mode: 0644]
zouba/qt/tests/ut_httpclient/ut_httpclient.h [new file with mode: 0644]
zouba/qt/tests/ut_httpclient/ut_httpclient.pro [new file with mode: 0644]

index 8a66c95..b77c00f 100644 (file)
@@ -1,5 +1,8 @@
+#include "httpclient_p.h"
 #include "httpclient.h"
 
+#include "routedata.h"
+
 #include "ui_zouba.h"
 
 #include <QNetworkAccessManager>
@@ -26,6 +29,7 @@ namespace {
 }
   
 HttpClient::HttpClient( Ui::MainWindow *ui ) :
+  q( new HttpClientPrivate( this ) ),
   manager( new QNetworkAccessManager(this) ),
   ui( ui )
 {
@@ -57,41 +61,8 @@ void HttpClient::get()
 
 void HttpClient::replyFinished( QNetworkReply * reply )
 {
-  QXmlStreamReader xml( reply->readAll() );
-
-  bool inLine = false;
-  bool inStop = false;
-  while ( !xml.atEnd() ) {
-    xml.readNext();
-    //qDebug() << xml.name();
-    if ( xml.isStartElement() && xml.name() == "LINE" ) {
-      QString lineCode( xml.attributes().value("code").toString() );
-
-      qDebug() << "line code" << lineCode;
-      ui->BusNoDisplay->setText( lineCode );
-
-      inLine = true;
-    } else
-    if ( inLine && xml.name() == "STOP" ) {
-      inStop = true;
-    } else
-    if ( inLine && inStop && xml.name() == "ARRIVAL" ) {
-      QString arrivalTime( xml.attributes().value("time").toString() );
-
-      qDebug() << "arrival time" << arrivalTime;
-      ui->TimeDisplay->setText( arrivalTime );
-
-      inLine = false;
-    } else
-    if ( xml.isEndElement() && xml.name() == "STOP" ) {
-      inStop = false;
-    } else
-    if ( xml.isEndElement() && xml.name() == "LINE" ) {
-      inLine = false;
-    }
-  }
+  RouteData routeData = q->parseReply( reply->readAll() );
 
-  if ( xml.hasError() ) {
-    qDebug() << "xml error";
-  }
+  ui->BusNoDisplay->setText( routeData.lineCode );
+  ui->TimeDisplay->setText( routeData.arrivalTime );
 }
index 28aa9bf..ab648de 100644 (file)
@@ -7,6 +7,8 @@
 #include <QNetworkReply>
 #include <QNetworkAccessManager>
 
+class HttpClientPrivate;
+
 class HttpClient: public QObject
 {
   Q_OBJECT
@@ -21,7 +23,9 @@ public Q_SLOTS:
   void replyFinished(QNetworkReply*);
 
 private:
+  HttpClientPrivate *q;
   QNetworkAccessManager *manager;
   Ui::MainWindow *ui;
+
 };
 #endif // HTTPCLIENT_H
diff --git a/zouba/qt/httpclient_p.cpp b/zouba/qt/httpclient_p.cpp
new file mode 100644 (file)
index 0000000..25133f9
--- /dev/null
@@ -0,0 +1,54 @@
+#include "httpclient_p.h"
+
+#include <QXmlStreamReader>
+#include <QDebug>
+
+HttpClientPrivate::HttpClientPrivate( QObject *parent )
+{
+}
+
+HttpClientPrivate::~HttpClientPrivate()
+{
+}
+
+RouteData HttpClientPrivate::parseReply( const QByteArray &reply )
+{
+  RouteData retVal;
+
+  QXmlStreamReader xml( reply );
+
+  bool inLine = false;
+  bool inStop = false;
+  while ( !xml.atEnd() ) {
+    xml.readNext();
+    if ( xml.isStartElement() && xml.name() == "LINE" ) {
+      QString lineCode( xml.attributes().value("code").toString() );
+
+      retVal.lineCode = lineCode;
+
+      inLine = true;
+    } else
+    if ( inLine && xml.name() == "STOP" ) {
+      inStop = true;
+    } else
+    if ( inLine && inStop && xml.name() == "ARRIVAL" ) {
+      QString arrivalTime( xml.attributes().value("time").toString() );
+
+      retVal.arrivalTime = arrivalTime;
+
+      inLine = false;
+    } else
+    if ( xml.isEndElement() && xml.name() == "STOP" ) {
+      inStop = false;
+    } else
+    if ( xml.isEndElement() && xml.name() == "LINE" ) {
+      inLine = false;
+    }
+  }
+
+  if ( xml.hasError() ) {
+    qDebug() << "xml error";
+  }
+
+  return retVal;
+}
diff --git a/zouba/qt/httpclient_p.h b/zouba/qt/httpclient_p.h
new file mode 100644 (file)
index 0000000..9c04bd9
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef HTTPCLIENT_P_H
+#define HTTPCLIENT_P_H
+
+#include "routedata.h"
+
+#include <QObject>
+
+class HttpClientPrivate: public QObject
+{
+  Q_OBJECT
+
+public:
+  HttpClientPrivate( QObject *parent=0 );
+  ~HttpClientPrivate();
+
+  RouteData parseReply( const QByteArray &reply );
+};
+#endif // HTTPCLIENT_P_H
index 48c03b7..23f9158 100644 (file)
@@ -10,7 +10,9 @@ FORMS    = zouba.ui
 SOURCES  = \
   main.cpp \
   httpclient.cpp \
+  httpclient_p.cpp \
 
 HEADERS += \
   httpclient.h \
+  httpclient_p.h \
 
diff --git a/zouba/qt/routedata.h b/zouba/qt/routedata.h
new file mode 100644 (file)
index 0000000..a2abd31
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef ROUTEDATA_H
+#define ROUTEDATA_H
+
+#include <QString>
+
+struct RouteData
+{
+  QString lineCode;
+  QString arrivalTime;
+};
+
+#endif // ROUTEDATA_H
diff --git a/zouba/qt/tests/ut_httpclient/ut_httpclient.cpp b/zouba/qt/tests/ut_httpclient/ut_httpclient.cpp
new file mode 100644 (file)
index 0000000..0e00e06
--- /dev/null
@@ -0,0 +1,369 @@
+#include <QObject>
+#include <QtDebug>
+#include <QByteArray>
+#include "ut_httpclient.h"
+
+QByteArray sampleInput(
+"\
+<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\
+<MTRXML version=\"1.0\">\
+       <ROUTE from=\"start\" to=\"dest\">\
+               <LENGTH time=\"14.411\" dist=\"2510.063\"/>\
+               <POINT uid=\"start\" x=\"2551042.0\" y=\"6672829.0\">\
+                       <ARRIVAL date=\"20100207\" time=\"1815\"/>\
+                       <DEPARTURE date=\"20100207\" time=\"1815\"/>\
+               </POINT>\
+               <WALK>\
+                       <LENGTH time=\"4.475\" dist=\"357.069\"/>\
+                       <POINT uid=\"start\" x=\"2551042.0\" y=\"6672829.0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1815\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1815\"/>\
+                       </POINT>\
+                       <MAPLOC x=\"2551034.9\" y=\"6672875.6\" type=\"7\">\
+                               <ARRIVAL date=\"20100207\" time=\"1816\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1816\"/>\
+                               <NAME lang=\"1\" val=\"Porkkalankatu\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2550977.7\" y=\"6672869.1\" type=\"15\">\
+                               <ARRIVAL date=\"20100207\" time=\"1817\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1817\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2550949.3\" y=\"6672867.5\" type=\"7\">\
+                               <ARRIVAL date=\"20100207\" time=\"1817\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1817\"/>\
+                               <NAME lang=\"1\" val=\"Porkkalankatu\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2550817.2\" y=\"6672859.3\" type=\"7\">\
+                               <ARRIVAL date=\"20100207\" time=\"1819\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1819\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2550808.5\" y=\"6672889.3\" type=\"11\">\
+                               <ARRIVAL date=\"20100207\" time=\"1820\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1820\"/>\
+                               <NAME lang=\"1\" val=\"Porkkalankatu\"/>\
+                       </MAPLOC>\
+                       <STOP code=\"6:1201129\" x=\"2550765.0\" y=\"6672886.0\" id=\"745\">\
+                               <ARRIVAL date=\"20100207\" time=\"1820\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1820\"/>\
+                               <NAME lang=\"1\" val=\"Länsiväylä\"/>\
+                               <NAME lang=\"2\" val=\"Västerleden\"/>\
+                       </STOP>\
+               </WALK>\
+               <LINE id=\"200\" code=\"1065A 2\" type=\"1\" mobility=\"3\">\
+                       <LENGTH time=\"5.000\" dist=\"1760.931\"/>\
+                       <STOP code=\"6:1201129\" x=\"2550765.0\" y=\"6672886.0\" id=\"745\" ord=\"30\">\
+                               <ARRIVAL date=\"20100207\" time=\"1820\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1820\"/>\
+                               <NAME lang=\"1\" val=\"Länsiväylä\"/>\
+                               <NAME lang=\"2\" val=\"Västerleden\"/>\
+                       </STOP>\
+                       <STOP code=\"6:1201131\" x=\"2550385.0\" y=\"6672760.0\" id=\"747\">\
+                               <ARRIVAL date=\"20100207\" time=\"1821\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1821\"/>\
+                               <NAME lang=\"1\" val=\"Salmisaari\"/>\
+                               <NAME lang=\"2\" val=\"Sundholmen\"/>\
+                       </STOP>\
+                       <STOP code=\"6:1310101\" x=\"2549608.0\" y=\"6672522.0\" id=\"1356\">\
+                               <ARRIVAL date=\"20100207\" time=\"1824\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1824\"/>\
+                               <NAME lang=\"1\" val=\"Lauttasaaren silta\"/>\
+                               <NAME lang=\"2\" val=\"Drumsö bro\"/>\
+                       </STOP>\
+                       <STOP code=\"6:1310103\" x=\"2549247.0\" y=\"6672446.0\" id=\"1358\" ord=\"33\">\
+                               <ARRIVAL date=\"20100207\" time=\"1825\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1825\"/>\
+                               <NAME lang=\"1\" val=\"Koillisväylä\"/>\
+                               <NAME lang=\"2\" val=\"Nordostpassagen\"/>\
+                       </STOP>\
+               </LINE>\
+               <WALK>\
+                       <LENGTH time=\"4.936\" dist=\"392.062\"/>\
+                       <STOP code=\"6:1310103\" x=\"2549247.0\" y=\"6672446.0\" id=\"1358\">\
+                               <ARRIVAL date=\"20100207\" time=\"1825\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1825\"/>\
+                               <NAME lang=\"1\" val=\"Koillisväylä\"/>\
+                               <NAME lang=\"2\" val=\"Nordostpassagen\"/>\
+                       </STOP>\
+                       <MAPLOC x=\"2549200.4\" y=\"6672433.4\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1825\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1825\"/>\
+                               <NAME lang=\"1\" val=\"Taivaanvuohenkuja\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2549151.2\" y=\"6672527.3\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1827\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1827\"/>\
+                               <NAME lang=\"1\" val=\"Taivaanvuohentie\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2549105.4\" y=\"6672573.6\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1828\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1828\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2549115.4\" y=\"6672595.1\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1828\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1828\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2549162.6\" y=\"6672633.1\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1829\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1829\"/>\
+                       </MAPLOC>\
+                       <POINT uid=\"dest\" x=\"2549183.0\" y=\"6672570.0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1829\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1829\"/>\
+                       </POINT>\
+               </WALK>\
+               <POINT uid=\"dest\" x=\"2549183.0\" y=\"6672570.0\">\
+                       <ARRIVAL date=\"20100207\" time=\"1829\"/>\
+                       <DEPARTURE date=\"20100207\" time=\"1829\"/>\
+               </POINT>\
+       </ROUTE>\
+       <ROUTE from=\"start\" to=\"dest\">\
+               <LENGTH time=\"13.411\" dist=\"2501.497\"/>\
+               <POINT uid=\"start\" x=\"2551042.0\" y=\"6672829.0\">\
+                       <ARRIVAL date=\"20100207\" time=\"1821\"/>\
+                       <DEPARTURE date=\"20100207\" time=\"1821\"/>\
+               </POINT>\
+               <WALK>\
+                       <LENGTH time=\"4.475\" dist=\"357.069\"/>\
+                       <POINT uid=\"start\" x=\"2551042.0\" y=\"6672829.0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1821\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1821\"/>\
+                       </POINT>\
+                       <MAPLOC x=\"2551034.9\" y=\"6672875.6\" type=\"7\">\
+                               <ARRIVAL date=\"20100207\" time=\"1822\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1822\"/>\
+                               <NAME lang=\"1\" val=\"Porkkalankatu\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2550977.7\" y=\"6672869.1\" type=\"15\">\
+                               <ARRIVAL date=\"20100207\" time=\"1823\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1823\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2550949.3\" y=\"6672867.5\" type=\"7\">\
+                               <ARRIVAL date=\"20100207\" time=\"1823\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1823\"/>\
+                               <NAME lang=\"1\" val=\"Porkkalankatu\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2550817.2\" y=\"6672859.3\" type=\"7\">\
+                               <ARRIVAL date=\"20100207\" time=\"1825\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1825\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2550808.5\" y=\"6672889.3\" type=\"11\">\
+                               <ARRIVAL date=\"20100207\" time=\"1826\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1826\"/>\
+                               <NAME lang=\"1\" val=\"Porkkalankatu\"/>\
+                       </MAPLOC>\
+                       <STOP code=\"6:1201227\" x=\"2550765.0\" y=\"6672886.0\" id=\"755\">\
+                               <ARRIVAL date=\"20100207\" time=\"1826\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1826\"/>\
+                               <NAME lang=\"1\" val=\"Länsiväylä\"/>\
+                               <NAME lang=\"2\" val=\"Västerleden\"/>\
+                       </STOP>\
+               </WALK>\
+               <LINE id=\"579\" code=\"2102T 1\" type=\"5\" mobility=\"3\">\
+                       <LENGTH time=\"4.000\" dist=\"1751.582\"/>\
+                       <STOP code=\"6:1201227\" x=\"2550765.0\" y=\"6672886.0\" id=\"755\" ord=\"3\">\
+                               <ARRIVAL date=\"20100207\" time=\"1826\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1826\"/>\
+                               <NAME lang=\"1\" val=\"Länsiväylä\"/>\
+                               <NAME lang=\"2\" val=\"Västerleden\"/>\
+                       </STOP>\
+                       <STOP code=\"6:1201231\" x=\"2550387.0\" y=\"6672761.0\" id=\"759\">\
+                               <ARRIVAL date=\"20100207\" time=\"1827\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1827\"/>\
+                               <NAME lang=\"1\" val=\"Salmisaari\"/>\
+                               <NAME lang=\"2\" val=\"Sundholmen\"/>\
+                       </STOP>\
+                       <STOP code=\"6:1310201\" x=\"2549630.0\" y=\"6672524.0\" id=\"1402\">\
+                               <ARRIVAL date=\"20100207\" time=\"1829\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1829\"/>\
+                               <NAME lang=\"1\" val=\"Lauttasaaren silta\"/>\
+                               <NAME lang=\"2\" val=\"Drumsö bro\"/>\
+                       </STOP>\
+                       <STOP code=\"6:1310203\" x=\"2549248.0\" y=\"6672446.0\" id=\"1404\" ord=\"6\">\
+                               <ARRIVAL date=\"20100207\" time=\"1830\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1830\"/>\
+                               <NAME lang=\"1\" val=\"Koillisväylä\"/>\
+                               <NAME lang=\"2\" val=\"Nordostpassagen\"/>\
+                       </STOP>\
+               </LINE>\
+               <WALK>\
+                       <LENGTH time=\"4.936\" dist=\"392.846\"/>\
+                       <STOP code=\"6:1310203\" x=\"2549248.0\" y=\"6672446.0\" id=\"1404\">\
+                               <ARRIVAL date=\"20100207\" time=\"1830\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1830\"/>\
+                               <NAME lang=\"1\" val=\"Koillisväylä\"/>\
+                               <NAME lang=\"2\" val=\"Nordostpassagen\"/>\
+                       </STOP>\
+                       <MAPLOC x=\"2549200.4\" y=\"6672433.4\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1830\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1830\"/>\
+                               <NAME lang=\"1\" val=\"Taivaanvuohenkuja\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2549151.2\" y=\"6672527.3\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1832\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1832\"/>\
+                               <NAME lang=\"1\" val=\"Taivaanvuohentie\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2549105.4\" y=\"6672573.6\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1833\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1833\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2549115.4\" y=\"6672595.1\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1833\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1833\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2549162.6\" y=\"6672633.1\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1834\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1834\"/>\
+                       </MAPLOC>\
+                       <POINT uid=\"dest\" x=\"2549183.0\" y=\"6672570.0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1834\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1834\"/>\
+                       </POINT>\
+               </WALK>\
+               <POINT uid=\"dest\" x=\"2549183.0\" y=\"6672570.0\">\
+                       <ARRIVAL date=\"20100207\" time=\"1834\"/>\
+                       <DEPARTURE date=\"20100207\" time=\"1834\"/>\
+               </POINT>\
+       </ROUTE>\
+       <ROUTE from=\"start\" to=\"dest\">\
+               <LENGTH time=\"13.411\" dist=\"2501.497\"/>\
+               <POINT uid=\"start\" x=\"2551042.0\" y=\"6672829.0\">\
+                       <ARRIVAL date=\"20100207\" time=\"1829\"/>\
+                       <DEPARTURE date=\"20100207\" time=\"1829\"/>\
+               </POINT>\
+               <WALK>\
+                       <LENGTH time=\"4.475\" dist=\"357.069\"/>\
+                       <POINT uid=\"start\" x=\"2551042.0\" y=\"6672829.0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1829\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1829\"/>\
+                       </POINT>\
+                       <MAPLOC x=\"2551034.9\" y=\"6672875.6\" type=\"7\">\
+                               <ARRIVAL date=\"20100207\" time=\"1830\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1830\"/>\
+                               <NAME lang=\"1\" val=\"Porkkalankatu\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2550977.7\" y=\"6672869.1\" type=\"15\">\
+                               <ARRIVAL date=\"20100207\" time=\"1831\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1831\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2550949.3\" y=\"6672867.5\" type=\"7\">\
+                               <ARRIVAL date=\"20100207\" time=\"1831\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1831\"/>\
+                               <NAME lang=\"1\" val=\"Porkkalankatu\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2550817.2\" y=\"6672859.3\" type=\"7\">\
+                               <ARRIVAL date=\"20100207\" time=\"1833\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1833\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2550808.5\" y=\"6672889.3\" type=\"11\">\
+                               <ARRIVAL date=\"20100207\" time=\"1834\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1834\"/>\
+                               <NAME lang=\"1\" val=\"Porkkalankatu\"/>\
+                       </MAPLOC>\
+                       <STOP code=\"6:1201227\" x=\"2550765.0\" y=\"6672886.0\" id=\"755\">\
+                               <ARRIVAL date=\"20100207\" time=\"1834\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1834\"/>\
+                               <NAME lang=\"1\" val=\"Länsiväylä\"/>\
+                               <NAME lang=\"2\" val=\"Västerleden\"/>\
+                       </STOP>\
+               </WALK>\
+               <LINE id=\"603\" code=\"2110T 1\" type=\"5\" mobility=\"3\">\
+                       <LENGTH time=\"4.000\" dist=\"1751.582\"/>\
+                       <STOP code=\"6:1201227\" x=\"2550765.0\" y=\"6672886.0\" id=\"755\" ord=\"3\">\
+                               <ARRIVAL date=\"20100207\" time=\"1834\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1834\"/>\
+                               <NAME lang=\"1\" val=\"Länsiväylä\"/>\
+                               <NAME lang=\"2\" val=\"Västerleden\"/>\
+                       </STOP>\
+                       <STOP code=\"6:1201231\" x=\"2550387.0\" y=\"6672761.0\" id=\"759\">\
+                               <ARRIVAL date=\"20100207\" time=\"1835\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1835\"/>\
+                               <NAME lang=\"1\" val=\"Salmisaari\"/>\
+                               <NAME lang=\"2\" val=\"Sundholmen\"/>\
+                       </STOP>\
+                       <STOP code=\"6:1310201\" x=\"2549630.0\" y=\"6672524.0\" id=\"1402\">\
+                               <ARRIVAL date=\"20100207\" time=\"1837\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1837\"/>\
+                               <NAME lang=\"1\" val=\"Lauttasaaren silta\"/>\
+                               <NAME lang=\"2\" val=\"Drumsö bro\"/>\
+                       </STOP>\
+                       <STOP code=\"6:1310203\" x=\"2549248.0\" y=\"6672446.0\" id=\"1404\" ord=\"6\">\
+                               <ARRIVAL date=\"20100207\" time=\"1838\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1838\"/>\
+                               <NAME lang=\"1\" val=\"Koillisväylä\"/>\
+                               <NAME lang=\"2\" val=\"Nordostpassagen\"/>\
+                       </STOP>\
+               </LINE>\
+               <WALK>\
+                       <LENGTH time=\"4.936\" dist=\"392.846\"/>\
+                       <STOP code=\"6:1310203\" x=\"2549248.0\" y=\"6672446.0\" id=\"1404\">\
+                               <ARRIVAL date=\"20100207\" time=\"1838\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1838\"/>\
+                               <NAME lang=\"1\" val=\"Koillisväylä\"/>\
+                               <NAME lang=\"2\" val=\"Nordostpassagen\"/>\
+                       </STOP>\
+                       <MAPLOC x=\"2549200.4\" y=\"6672433.4\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1838\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1838\"/>\
+                               <NAME lang=\"1\" val=\"Taivaanvuohenkuja\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2549151.2\" y=\"6672527.3\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1840\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1840\"/>\
+                               <NAME lang=\"1\" val=\"Taivaanvuohentie\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2549105.4\" y=\"6672573.6\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1841\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1841\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2549115.4\" y=\"6672595.1\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1841\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1841\"/>\
+                       </MAPLOC>\
+                       <MAPLOC x=\"2549162.6\" y=\"6672633.1\" type=\"0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1842\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1842\"/>\
+                       </MAPLOC>\
+                       <POINT uid=\"dest\" x=\"2549183.0\" y=\"6672570.0\">\
+                               <ARRIVAL date=\"20100207\" time=\"1842\"/>\
+                               <DEPARTURE date=\"20100207\" time=\"1842\"/>\
+                       </POINT>\
+               </WALK>\
+               <POINT uid=\"dest\" x=\"2549183.0\" y=\"6672570.0\">\
+                       <ARRIVAL date=\"20100207\" time=\"1842\"/>\
+                       <DEPARTURE date=\"20100207\" time=\"1842\"/>\
+               </POINT>\
+       </ROUTE>\
+</MTRXML>\
+"
+
+);
+
+void Ut_HttpClient::init()
+{
+    m_subject = new HttpClientPrivate();
+}
+
+void Ut_HttpClient::cleanup()
+{
+    delete m_subject;
+    m_subject = 0;
+}
+
+void Ut_HttpClient::initTestCase()
+{
+}
+
+void Ut_HttpClient::cleanupTestCase()
+{
+}
+
+void Ut_HttpClient::testParseReply()
+{
+  RouteData routeData = m_subject->parseReply( sampleInput );
+
+  QCOMPARE( routeData.lineCode, QString( "2110T 1" ) );
+  QCOMPARE( routeData.arrivalTime, QString( "1834" ) );
+}
+
+QTEST_MAIN(Ut_HttpClient)
diff --git a/zouba/qt/tests/ut_httpclient/ut_httpclient.h b/zouba/qt/tests/ut_httpclient/ut_httpclient.h
new file mode 100644 (file)
index 0000000..b880e5a
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef UT_HTTPCLIENT_H
+#define UT_HTTPCLIENT_H
+
+#include <QtTest/QtTest>
+#include <QObject>
+
+#include <httpclient_p.h>
+
+Q_DECLARE_METATYPE(HttpClientPrivate*);
+
+class Ut_HttpClient : public QObject
+{
+    Q_OBJECT
+
+public:
+
+private slots:
+    void init();
+    void cleanup();
+    void initTestCase();
+    void cleanupTestCase();
+    void testParseReply();
+
+private:
+    HttpClientPrivate *m_subject;
+};
+#endif // UT_HTTPCLIENT_H
diff --git a/zouba/qt/tests/ut_httpclient/ut_httpclient.pro b/zouba/qt/tests/ut_httpclient/ut_httpclient.pro
new file mode 100644 (file)
index 0000000..a8d816d
--- /dev/null
@@ -0,0 +1,20 @@
+CONFIG += \
+  qt \
+  debug \
+
+QT += \
+  testlib \
+
+INCLUDEPATH += \
+  ../.. \
+
+TEMPLATE = app
+
+SOURCES  = \
+  ut_httpclient.cpp \
+  ../../httpclient_p.cpp \
+
+HEADERS += \
+  ut_httpclient.h \
+  ../../httpclient_p.h \
+