Engauge Digitizer  2
 All Classes Functions Variables Typedefs Enumerations Friends Pages
TestSegmentFill.cpp
1 #include <iostream>
2 #include "Logger.h"
3 #include "MainWindow.h"
4 #include <QCryptographicHash>
5 #include <QGraphicsScene>
6 #include <QGraphicsView>
7 #include <QList>
8 #include <qmath.h>
9 #include <QTextStream>
10 #include <QtTest/QtTest>
11 #include "Segment.h"
12 #include "SegmentFactory.h"
13 #include "Spline.h"
14 #include "SplinePair.h"
15 #include "Test/TestSegmentFill.h"
16 
17 QTEST_MAIN (TestSegmentFill)
18 
19 using namespace std;
20 
21 TestSegmentFill::TestSegmentFill(QObject *parent) :
22  QObject(parent)
23 {
24 }
25 
26 void TestSegmentFill::cleanupTestCase ()
27 {
28 
29 }
30 
31 void TestSegmentFill::initTestCase ()
32 {
33  const QString NO_ERROR_REPORT_LOG_FILE;
34  const QString NO_REGRESSION_OPEN_FILE;
35  const bool NO_GNUPLOT_LOG_FILES = false;
36  const bool NO_REGRESSION_IMPORT = false;
37  const bool NO_RESET = false;
38  const bool NO_EXPORT_ONLY = false;
39  const bool DEBUG_FLAG = false;
40  const QStringList NO_LOAD_STARTUP_FILES;
41 
42  initializeLogging ("engauge_test",
43  "engauge_test.log",
44  DEBUG_FLAG);
45 
46  MainWindow m (NO_ERROR_REPORT_LOG_FILE,
47  NO_REGRESSION_OPEN_FILE,
48  NO_REGRESSION_IMPORT,
49  NO_GNUPLOT_LOG_FILES,
50  NO_RESET,
51  NO_EXPORT_ONLY,
52  NO_LOAD_STARTUP_FILES);
53  m.show ();
54 }
55 
56 void TestSegmentFill::testFindSegments()
57 {
58  const bool NO_GNUPLOT = false;
59  const bool NO_DLG = false;
60  const QString OUT_FILE_ACTUAL ("../test/test_segment_fill.gnuplot_actual");
61  const QString OUT_FILE_EXPECTED ("../test/test_segment_fill.gnuplot_expected");
62 
63  QList<Segment*> segments;
64 
65  // The relative paths in this method will fail unless the directory is correct
66  QDir::setCurrent (QApplication::applicationDirPath());
67 
68  QImage img ("../samples/corners.png");
69 
70  QGraphicsScene *scene = new QGraphicsScene;
71  SegmentFactory segmentFactory (*scene,
72  NO_GNUPLOT);
73 
74  DocumentModelSegments modelSegments;
75 
76  segmentFactory.clearSegments (segments);
77 
78  // This will crash if dialog box appears since QApplication is not executing and therefore cannot process events
79  segmentFactory.makeSegments (img,
80  modelSegments,
81  segments,
82  NO_DLG);
83 
84  // Open output file
85  QFile out (OUT_FILE_ACTUAL);
86  QTextStream outStr (&out);
87 
88  out.open(QIODevice::WriteOnly | QIODevice::Text);
89 
90  // Output to file
91  for (int indexS = 0; indexS < segments.count(); indexS++) {
92  Segment* segment = segments [indexS];
93 
94  QList<QPoint> points = segment->fillPoints (modelSegments);
95 
96  // Skip segments with only one point since they are apparently random
97  if (points.count() > 1) {
98 
99  for (int indexP = 0; indexP < points.count(); indexP++) {
100  QPoint point = points [indexP];
101 
102  // Output in gnuplot format for plotting. A space precedes each field. This can be plotted with
103  // plot "../test/test_segment_fill.gnuplot_actual" w lp
104  outStr << point.x() << " " << point.y() << endl;
105  }
106 
107  // Blank line between curves
108  outStr << endl;
109  }
110  }
111 
112  out.close();
113 
114  // Hash values
115  QCryptographicHash hashActual (QCryptographicHash::Sha1);
116  QCryptographicHash hashExpected (QCryptographicHash::Sha1);
117  QFile fileActual (OUT_FILE_ACTUAL);
118  QFile fileExpected (OUT_FILE_EXPECTED);
119 
120  bool success = false;
121  if (fileActual.open(QIODevice::ReadOnly) && fileExpected.open(QIODevice::ReadOnly)) {
122  hashActual.addData (fileActual.readAll());
123  hashExpected.addData (fileExpected.readAll());
124  QByteArray signatureActual = hashActual.result();
125  QByteArray signatureExpected = hashExpected.result();
126 
127  // Compare
128  success = (signatureActual == signatureExpected);
129  }
130 
131  QVERIFY (success);
132 }
Factory class for Segment objects.
Unit test of segment fill feature.
Selectable piecewise-defined line that follows a filtered line in the image.
Definition: Segment.h:21
QList< QPoint > fillPoints(const DocumentModelSegments &modelSegments)
Create evenly spaced points along the segment.
Definition: Segment.cpp:209
Model for DlgSettingsSegments and CmdSettingsSegments.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:89