Engauge Digitizer  2
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 DEBUG_FLAG = false;
38  const QStringList NO_LOAD_STARTUP_FILES;
39 
40  initializeLogging ("engauge_test",
41  "engauge_test.log",
42  DEBUG_FLAG);
43 
44  MainWindow m (NO_ERROR_REPORT_LOG_FILE,
45  NO_REGRESSION_OPEN_FILE,
46  NO_GNUPLOT_LOG_FILES,
47  NO_REGRESSION_IMPORT,
48  NO_LOAD_STARTUP_FILES);
49  m.show ();
50 }
51 
52 void TestSegmentFill::testFindSegments()
53 {
54  const bool NO_GNUPLOT = false;
55  const bool NO_DLG = false;
56  const QString OUT_FILE_ACTUAL ("../test/test_segment_fill.gnuplot_actual");
57  const QString OUT_FILE_EXPECTED ("../test/test_segment_fill.gnuplot_expected");
58 
59  QList<Segment*> segments;
60 
61  // The relative paths in this method will fail unless the directory is correct
62  QDir::setCurrent (QApplication::applicationDirPath());
63 
64  QImage img ("../samples/corners.png");
65 
66  QGraphicsScene *scene = new QGraphicsScene;
67  SegmentFactory segmentFactory (*scene,
68  NO_GNUPLOT);
69 
70  DocumentModelSegments modelSegments;
71 
72  segmentFactory.clearSegments (segments);
73 
74  // This will crash if dialog box appears since QApplication is not executing and therefore cannot process events
75  segmentFactory.makeSegments (img,
76  modelSegments,
77  segments,
78  NO_DLG);
79 
80  // Open output file
81  QFile out (OUT_FILE_ACTUAL);
82  QTextStream outStr (&out);
83 
84  out.open(QIODevice::WriteOnly | QIODevice::Text);
85 
86  // Output to file
87  for (int indexS = 0; indexS < segments.count(); indexS++) {
88  Segment* segment = segments [indexS];
89 
90  QList<QPoint> points = segment->fillPoints (modelSegments);
91 
92  // Skip segments with only one point since they are apparently random
93  if (points.count() > 1) {
94 
95  for (int indexP = 0; indexP < points.count(); indexP++) {
96  QPoint point = points [indexP];
97 
98  // Output in gnuplot format for plotting. A space precedes each field. This can be plotted with
99  // plot "../test/test_segment_fill.gnuplot_actual" w lp
100  outStr << point.x() << " " << point.y() << endl;
101  }
102 
103  // Blank line between curves
104  outStr << endl;
105  }
106  }
107 
108  out.close();
109 
110  // Hash values
111  QCryptographicHash hashActual (QCryptographicHash::Sha1);
112  QCryptographicHash hashExpected (QCryptographicHash::Sha1);
113  QFile fileActual (OUT_FILE_ACTUAL);
114  QFile fileExpected (OUT_FILE_EXPECTED);
115 
116  bool success = false;
117  if (fileActual.open(QIODevice::ReadOnly) && fileExpected.open(QIODevice::ReadOnly)) {
118  hashActual.addData (fileActual.readAll());
119  hashExpected.addData (fileExpected.readAll());
120  QByteArray signatureActual = hashActual.result();
121  QByteArray signatureExpected = hashExpected.result();
122 
123  // Compare
124  success = (signatureActual == signatureExpected);
125  }
126 
127  QVERIFY (success);
128 }
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:208
Model for DlgSettingsSegments and CmdSettingsSegments.
Main window consisting of menu, graphics scene, status bar and optional toolbars as a Single Document...
Definition: MainWindow.h:82