diff --git a/src/demoreader.cpp b/src/demoreader.cpp --- a/src/demoreader.cpp +++ b/src/demoreader.cpp @@ -1,5 +1,5 @@ /* - Copyright © 2017 Hasan Yavuz Özderya + Copyright © 2018 Hasan Yavuz Özderya This file is part of serialplot. @@ -25,12 +25,11 @@ #define M_PI 3.14159265358979323846 #endif -DemoReader::DemoReader(QIODevice* device, ChannelManager* channelMan, - DataRecorder* recorder, QObject* parent) : - AbstractReader(device, channelMan, recorder, parent) +DemoReader::DemoReader(QIODevice* device, QObject* parent) : + AbstractReader(device, parent) { paused = false; - _numOfChannels = 1; + _numChannels = 1; count = 0; timer.setInterval(100); QObject::connect(&timer, &QTimer::timeout, @@ -51,17 +50,19 @@ void DemoReader::enable(bool enabled) else { timer.stop(); + disconnectSinks(); } } -unsigned DemoReader::numOfChannels() +unsigned DemoReader::numChannels() const { - return _numOfChannels; + return _numChannels; } void DemoReader::setNumOfChannels(unsigned value) { - _numOfChannels = value; + _numChannels = value; + updateNumChannels(); } void DemoReader::pause(bool enabled) @@ -77,13 +78,12 @@ void DemoReader::demoTimerTimeout() if (!paused) { - double* samples = new double[_numOfChannels]; - for (unsigned ci = 0; ci < _numOfChannels; ci++) + SamplePack samples(1, _numChannels); + for (unsigned ci = 0; ci < _numChannels; ci++) { // we are calculating the fourier components of square wave - samples[ci] = 4*sin(2*M_PI*double((ci+1)*count)/period)/((2*(ci+1))*M_PI); + samples.data(ci)[0] = 4*sin(2*M_PI*double((ci+1)*count)/period)/((2*(ci+1))*M_PI); } - addData(samples, _numOfChannels); - delete[] samples; + feedOut(samples); } } diff --git a/src/demoreader.h b/src/demoreader.h --- a/src/demoreader.h +++ b/src/demoreader.h @@ -1,5 +1,5 @@ /* - Copyright © 2017 Hasan Yavuz Özderya + Copyright © 2018 Hasan Yavuz Özderya This file is part of serialplot. @@ -38,13 +38,12 @@ class DemoReader : public AbstractReader Q_OBJECT public: - explicit DemoReader(QIODevice* device, ChannelManager* channelMan, - DataRecorder* recorder, QObject* parent = 0); + explicit DemoReader(QIODevice* device, QObject* parent = 0); /// Demo reader is an exception so this function returns NULL QWidget* settingsWidget(); - unsigned numOfChannels(); + unsigned numChannels() const; void enable(bool enabled = true); @@ -56,7 +55,7 @@ public slots: private: bool paused; - unsigned _numOfChannels; + unsigned _numChannels; QTimer timer; int count; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -61,6 +61,7 @@ add_executable(TestReaders EXCLUDE_FROM_ ../src/asciireadersettings.cpp ../src/framedreader.cpp ../src/framedreadersettings.cpp + ../src/demoreader.cpp ../src/commandedit.cpp ../src/endiannessbox.cpp ../src/numberformatbox.cpp diff --git a/tests/test_readers.cpp b/tests/test_readers.cpp --- a/tests/test_readers.cpp +++ b/tests/test_readers.cpp @@ -26,6 +26,7 @@ #include "binarystreamreader.h" #include "asciireader.h" #include "framedreader.h" +#include "demoreader.h" #include "test_helpers.h" @@ -165,6 +166,52 @@ TEST_CASE("FramedReader shouldn't read w REQUIRE(sink.totalFed == 0); } +TEST_CASE("DemoReader doesn't have a settings widget", "[reader, demo]") +{ + QBuffer bufferDev; // not actually used + DemoReader reader(&bufferDev); + + REQUIRE(reader.settingsWidget() == NULL); +} + +TEST_CASE("Generating data with DemoReader", "[reader, demo]") +{ + QBuffer bufferDev; // not actually used + DemoReader demoReader(&bufferDev); + demoReader.enable(true); + + TestSink sink; + demoReader.connectSink(&sink); + REQUIRE(sink._numChannels == 1); + + demoReader.setNumOfChannels(3); + REQUIRE(sink._numChannels == 3); + + // we need to wait somehow, we are not actually looking for signals + QSignalSpy spy(&bufferDev, SIGNAL(readyRead())); + REQUIRE_FALSE(spy.wait(1000)); // we need some time for demoreader to produce data + REQUIRE(sink.totalFed >= 9); +} + +TEST_CASE("DemoReader shouldn't generate data when paused", "[reader, demo]") +{ + QBuffer bufferDev; // not actually used + DemoReader demoReader(&bufferDev); // paused by default + + TestSink sink; + demoReader.connectSink(&sink); + REQUIRE(sink._numChannels == 1); + + demoReader.setNumOfChannels(3); + REQUIRE(sink._numChannels == 3); + + // we need to wait somehow, we are not actually looking for signals + QSignalSpy spy(&bufferDev, SIGNAL(readyRead())); + REQUIRE_FALSE(spy.wait(1000)); // we need some time for demoreader to produce data + REQUIRE(sink.totalFed == 0); +} + + // Note: this is added because `QApplication` must be created for widgets #include int main(int argc, char* argv[])