Changeset - a402a433400e
[Not reviewed]
default
0 4 0
Hasan Yavuz ÖZDERYA - 7 years ago 2018-07-26 14:54:32
hy@ozderya.net
fix tests
4 files changed with 6 insertions and 18 deletions:
0 comments (0 inline, 0 general)
src/demoreadersettings.ui
Show inline comments
 
@@ -29,49 +29,49 @@
 
     <item row="0" column="1">
 
      <widget class="QSpinBox" name="spNumChannels">
 
       <property name="minimumSize">
 
        <size>
 
         <width>60</width>
 
         <height>0</height>
 
        </size>
 
       </property>
 
       <property name="toolTip">
 
        <string>Select number of channels or set to 0 for Auto (determined from incoming data)</string>
 
       </property>
 
       <property name="specialValueText">
 
        <string/>
 
       </property>
 
       <property name="keyboardTracking">
 
        <bool>false</bool>
 
       </property>
 
       <property name="minimum">
 
        <number>1</number>
 
       </property>
 
       <property name="maximum">
 
        <number>32</number>
 
       </property>
 
       <property name="value">
 
        <number>5</number>
 
        <number>1</number>
 
       </property>
 
      </widget>
 
     </item>
 
    </layout>
 
   </item>
 
   <item>
 
    <spacer name="verticalSpacer">
 
     <property name="orientation">
 
      <enum>Qt::Vertical</enum>
 
     </property>
 
     <property name="sizeHint" stdset="0">
 
      <size>
 
       <width>20</width>
 
       <height>40</height>
 
      </size>
 
     </property>
 
    </spacer>
 
   </item>
 
   <item>
 
    <widget class="QLabel" name="label">
 
     <property name="text">
 
      <string>Demo is enabled, exit demo for reader settings.</string>
 
     </property>
 
    </widget>
tests/CMakeLists.txt
Show inline comments
 
@@ -23,66 +23,68 @@ find_package(Qt5Test)
 

	
 
include_directories("../src")
 

	
 
add_executable(Test EXCLUDE_FROM_ALL
 
  test.cpp
 
  test_stream.cpp
 
  ../src/samplepack.cpp
 
  ../src/sink.cpp
 
  ../src/source.cpp
 
  ../src/indexbuffer.cpp
 
  ../src/linindexbuffer.cpp
 
  ../src/ringbuffer.cpp
 
  ../src/readonlybuffer.cpp
 
  ../src/stream.cpp
 
  ../src/streamchannel.cpp
 
  ../src/channelinfomodel.cpp
 
  )
 
add_test(NAME test1 COMMAND Test)
 
qt5_use_modules(Test Widgets)
 

	
 
qt5_wrap_ui(UI_FILES_T
 
  ../src/binarystreamreadersettings.ui
 
  ../src/asciireadersettings.ui
 
  ../src/framedreadersettings.ui
 
  ../src/demoreadersettings.ui
 
  ../src/numberformatbox.ui
 
  ../src/endiannessbox.ui
 
  )
 

	
 
# test for readers
 
add_executable(TestReaders EXCLUDE_FROM_ALL
 
  test_readers.cpp
 
  ../src/samplepack.cpp
 
  ../src/sink.cpp
 
  ../src/source.cpp
 
  ../src/abstractreader.cpp
 
  ../src/binarystreamreader.cpp
 
  ../src/binarystreamreadersettings.cpp
 
  ../src/asciireader.cpp
 
  ../src/asciireadersettings.cpp
 
  ../src/framedreader.cpp
 
  ../src/framedreadersettings.cpp
 
  ../src/demoreader.cpp
 
  ../src/demoreadersettings.cpp
 
  ../src/commandedit.cpp
 
  ../src/endiannessbox.cpp
 
  ../src/numberformatbox.cpp
 
  ../src/numberformat.cpp
 
  ${UI_FILES_T}
 
  )
 
qt5_use_modules(TestReaders Widgets Test)
 
add_test(NAME test_readers COMMAND TestReaders)
 

	
 
# test for recroder
 
add_executable(TestRecorder EXCLUDE_FROM_ALL
 
  test_recorder.cpp
 
  ../src/samplepack.cpp
 
  ../src/sink.cpp
 
  ../src/source.cpp
 
  ../src/datarecorder.cpp
 
)
 
qt5_use_modules(TestRecorder Widgets Test)
 
add_test(NAME test_recorder COMMAND TestRecorder)
 

	
 
set(CMAKE_CTEST_COMMAND ctest -V)
 
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
 
add_dependencies(check
 
  Test
tests/test_readers.cpp
Show inline comments
 
@@ -145,80 +145,66 @@ TEST_CASE("reading data with FramedReade
 
    REQUIRE(sink.totalFed == 4);
 
}
 

	
 
TEST_CASE("FramedReader shouldn't read when disabled", "[reader]")
 
{
 
    QBuffer bufferDev;
 
    FramedReader reader(&bufferDev);
 

	
 
    TestSink sink;
 
    reader.connectSink(&sink);
 

	
 
    REQUIRE(sink._numChannels == 1);
 
    REQUIRE(sink._hasX == false);
 

	
 
    bufferDev.open(QIODevice::ReadWrite);
 
    const uint8_t data[] = {0xAA, 0xBB, 4, 0x01, 0x02, 0x03, 0x04};
 
    bufferDev.write((const char*) data, 7);
 
    bufferDev.seek(0);
 

	
 
    QSignalSpy spy(&bufferDev, SIGNAL(readyRead()));
 
    REQUIRE_FALSE(spy.wait(READYREAD_TIMEOUT));
 
    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);
 
    REQUIRE(sink._hasX == false);
 

	
 
    // 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 <QApplication>
 
int main(int argc, char* argv[])
 
{
 
    QApplication a(argc, argv);
 

	
 
    int result = Catch::Session().run( argc, argv );
 

	
 
    return result;
 
}
tests/test_recorder.cpp
Show inline comments
 
@@ -26,82 +26,82 @@
 

	
 
#define TEST_FILE_NAME   "sp_test_recording.csv"
 

	
 
TEST_CASE("test recording single channel", "[recorder]")
 
{
 
    DataRecorder rec;
 
    TestSource source(1, false);
 

	
 
    // temporary file, remove if exists
 
    auto fileName = QDir::tempPath() + QString("/" TEST_FILE_NAME);
 
    if (QFile::exists(fileName)) QFile::remove(fileName);
 

	
 
    // connect source → sink
 
    source.connectSink(&rec);
 

	
 
    // prepare data
 
    QStringList channelNames({"Channel 1"});
 
    SamplePack samples(5, 1);
 
    for (int i = 0; i < 5; i++)
 
    {
 
        samples.data(0)[i] = i+1;
 
    }
 

	
 
    // test
 
    rec.startRecording(fileName, ",", channelNames);
 
    rec.startRecording(fileName, ",", channelNames, false);
 
    source._feed(samples);
 
    rec.stopRecording();
 

	
 
    // read file contents back
 
    QFile recordFile(fileName);
 
    REQUIRE(recordFile.open(QIODevice::ReadOnly | QIODevice::Text));
 
    // NOTE: mind the extra parantheses, otherwise 'catch' macros fail to compile
 
    REQUIRE((recordFile.readLine() == "Channel 1\n"));
 
    for (int i = 0; i < 5; i++)
 
        REQUIRE((recordFile.readLine() == QString("%1\n").arg(i+1)));
 

	
 
    // cleanup
 
    if (QFile::exists(fileName)) QFile::remove(fileName);
 
}
 

	
 
TEST_CASE("test recording multiple channels", "[recorder]")
 
{
 
    DataRecorder rec;
 
    TestSource source(3, false);
 

	
 
    // temporary file, remove if exists
 
    auto fileName = QDir::tempPath() + QString("/" TEST_FILE_NAME);
 
    if (QFile::exists(fileName)) QFile::remove(fileName);
 

	
 
    // connect source → sink
 
    source.connectSink(&rec);
 

	
 
    // prepare data
 
    QStringList channelNames({"Channel 1", "Channel 2", "Channel 3"});
 
    SamplePack samples(5, 3);
 
    for (int ci = 0; ci < 3; ci++)
 
    {
 
        for (int i = 0; i < 5; i++)
 
        {
 
            samples.data(ci)[i] = (ci+1)*(i+1);
 
        }
 
    }
 

	
 
    // test
 
    rec.startRecording(fileName, ",", channelNames);
 
    rec.startRecording(fileName, ",", channelNames, false);
 
    source._feed(samples);
 
    rec.stopRecording();
 

	
 
    // read file contents back
 
    QFile recordFile(fileName);
 
    REQUIRE(recordFile.open(QIODevice::ReadOnly | QIODevice::Text));
 
    // NOTE: mind the extra parantheses, otherwise 'catch' macros fail to compile
 
    REQUIRE((recordFile.readLine() == "Channel 1,Channel 2,Channel 3\n"));
 
    REQUIRE((recordFile.readLine() == "1,2,3\n"));
 
    REQUIRE((recordFile.readLine() == "2,4,6\n"));
 
    REQUIRE((recordFile.readLine() == "3,6,9\n"));
 
    REQUIRE((recordFile.readLine() == "4,8,12\n"));
 
    REQUIRE((recordFile.readLine() == "5,10,15\n"));
 

	
 
    // cleanup
 
    if (QFile::exists(fileName)) QFile::remove(fileName);
 
}
0 comments (0 inline, 0 general)