diff --git a/tests/import_export/CMakeLists.txt b/tests/import_export/CMakeLists.txt index 242cc894a..82fafb58b 100644 --- a/tests/import_export/CMakeLists.txt +++ b/tests/import_export/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory(ASCII) +add_subdirectory(JSON) add_subdirectory(project) diff --git a/tests/import_export/JSON/CMakeLists.txt b/tests/import_export/JSON/CMakeLists.txt new file mode 100644 index 000000000..93be2e1a2 --- /dev/null +++ b/tests/import_export/JSON/CMakeLists.txt @@ -0,0 +1,35 @@ +add_executable (jsonfiltertest JsonFilterTest.cpp) + +target_link_libraries(jsonfiltertest ${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTSVG_LIBRARY} ${QT_QTSQL_LIBRARIES}) +target_link_libraries(jsonfiltertest KF5::Archive KF5::XmlGui ${GSL_LIBRARIES} ${GSL_CBLAS_LIBRARIES}) + +IF (Qt5SerialPort_FOUND) + target_link_libraries(jsonfiltertest Qt5::SerialPort ) +ENDIF () +IF (KF5SyntaxHighlighting_FOUND) + target_link_libraries(jsonfiltertest KF5::SyntaxHighlighting ) +ENDIF () +#TODO: KF5::NewStuff + +IF (CANTOR_LIBS_FOUND) + target_link_libraries(jsonfiltertest ${CANTOR_LIBS} ) +ENDIF () +IF (HDF5_FOUND) + target_link_libraries(jsonfiltertest ${HDF5_C_LIBRARIES} ) +ENDIF () +IF (FFTW_FOUND) + target_link_libraries(jsonfiltertest ${FFTW_LIBRARIES} ) +ENDIF () +IF (NETCDF_FOUND) + target_link_libraries(jsonfiltertest ${NETCDF_LIBRARY} ) +ENDIF () +IF (CFITSIO_FOUND) + target_link_libraries(jsonfiltertest ${CFITSIO_LIBRARY} ) +ENDIF () +IF (USE_LIBORIGIN) + target_link_libraries(jsonfiltertest liborigin-static ) +ENDIF () + +target_link_libraries(jsonfiltertest labplot2lib) + +add_test(NAME jsonfiltertest COMMAND jsonfiltertest) \ No newline at end of file diff --git a/tests/import_export/JSON/JsonFilterTest.cpp b/tests/import_export/JSON/JsonFilterTest.cpp new file mode 100644 index 000000000..57eb7b19a --- /dev/null +++ b/tests/import_export/JSON/JsonFilterTest.cpp @@ -0,0 +1,161 @@ +#include "JsonFilterTest.h" +#include "backend/datasources/filters/JsonFilter.h" +#include "backend/spreadsheet/Spreadsheet.h" + +void JsonFilterTest::initTestCase() { + const QString currentDir = __FILE__; + m_dataDir = currentDir.left(currentDir.lastIndexOf(QDir::separator())) + QDir::separator() + QLatin1String("data") + QDir::separator(); + + // needed in order to have the signals triggered by SignallingUndoCommand, see LabPlot.cpp + //TODO: redesign/remove this + qRegisterMetaType("const AbstractAspect*"); + qRegisterMetaType("const AbstractColumn*"); +} + +void JsonFilterTest::testArrayWithNameImport() { + Spreadsheet spreadsheet(0, "test", false); + JsonFilter filter; + + const QString fileName = m_dataDir + "array1.json"; + AbstractFileFilter::ImportMode mode = AbstractFileFilter::Replace; + filter.setCreateIndexEnabled(true); + filter.setDataContainerType(JsonFilter::Array); + filter.setDataRowType(QJsonValue::Array); + filter.setDataContainerName("array"); + filter.readDataFromFile(fileName, &spreadsheet, mode); + + QCOMPARE(spreadsheet.columnCount(), 3); + QCOMPARE(spreadsheet.rowCount(), 3); + QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::Integer); + QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::Text); + QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::Numeric); + + QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); + QCOMPARE(spreadsheet.column(0)->integerAt(1), 2); + QCOMPARE(spreadsheet.column(0)->integerAt(2), 3); + + QCOMPARE(spreadsheet.column(1)->textAt(0), "2018-06-01"); + QCOMPARE(spreadsheet.column(1)->textAt(1), "2018-06-02"); + QCOMPARE(spreadsheet.column(1)->textAt(2), "2018-06-03"); + + QCOMPARE(spreadsheet.column(2)->valueAt(0), 0.01); + QCOMPARE(spreadsheet.column(2)->valueAt(1), 0.02); + QCOMPARE(spreadsheet.column(2)->valueAt(2), 0.03); + +} + +void JsonFilterTest::testArrayWithoutNameImport() { + Spreadsheet spreadsheet(0, "test", false); + JsonFilter filter; + + const QString fileName = m_dataDir + "array2.json"; + AbstractFileFilter::ImportMode mode = AbstractFileFilter::Replace; + filter.setCreateIndexEnabled(true); + filter.setDataContainerType(JsonFilter::Array); + filter.setDataRowType(QJsonValue::Array); + filter.setDataContainerName(""); + filter.readDataFromFile(fileName, &spreadsheet, mode); + + QCOMPARE(spreadsheet.columnCount(), 3); + QCOMPARE(spreadsheet.rowCount(), 3); + QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::Integer); + QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::Text); + QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::Numeric); + + QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); + QCOMPARE(spreadsheet.column(0)->integerAt(1), 2); + QCOMPARE(spreadsheet.column(0)->integerAt(2), 3); + + QCOMPARE(spreadsheet.column(1)->textAt(0), "2018-06-01"); + QCOMPARE(spreadsheet.column(1)->textAt(1), "2018-06-02"); + QCOMPARE(spreadsheet.column(1)->textAt(2), "2018-06-03"); + + QCOMPARE(spreadsheet.column(2)->valueAt(0), 0.01); + QCOMPARE(spreadsheet.column(2)->valueAt(1), 0.02); + QCOMPARE(spreadsheet.column(2)->valueAt(2), 0.03); + +} + +void JsonFilterTest::testObjectWithNameImport() { + Spreadsheet spreadsheet(0, "test", false); + JsonFilter filter; + + const QString fileName = m_dataDir + "object1.json"; + AbstractFileFilter::ImportMode mode = AbstractFileFilter::Replace; + filter.setCreateIndexEnabled(true); + filter.setDataContainerType(JsonFilter::Object); + filter.setDataRowType(QJsonValue::Object); + filter.setDataContainerName("object"); + filter.readDataFromFile(fileName, &spreadsheet, mode); + + QCOMPARE(spreadsheet.columnCount(), 5); + QCOMPARE(spreadsheet.rowCount(), 3); + QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::Integer); + QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::Numeric); + QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::Numeric); + QCOMPARE(spreadsheet.column(3)->columnMode(), AbstractColumn::Numeric); + QCOMPARE(spreadsheet.column(4)->columnMode(), AbstractColumn::Text); + + QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); + QCOMPARE(spreadsheet.column(0)->integerAt(1), 2); + QCOMPARE(spreadsheet.column(0)->integerAt(2), 3); + + QCOMPARE(spreadsheet.column(1)->valueAt(0), 1.234); + QCOMPARE(spreadsheet.column(1)->valueAt(1), 111.); + QCOMPARE(spreadsheet.column(1)->valueAt(2), 0.001); + + QCOMPARE(spreadsheet.column(2)->valueAt(0), 2.345); + QCOMPARE(spreadsheet.column(2)->valueAt(1), 222); + QCOMPARE(spreadsheet.column(2)->valueAt(2), 0.002); + + QCOMPARE(spreadsheet.column(3)->valueAt(0), 3.456); + QCOMPARE(spreadsheet.column(3)->valueAt(1), 333); + QCOMPARE(spreadsheet.column(3)->valueAt(2), 0.003); + + QCOMPARE(spreadsheet.column(4)->textAt(0), "field1"); + QCOMPARE(spreadsheet.column(4)->textAt(1), "field2"); + QCOMPARE(spreadsheet.column(4)->textAt(2), "field3"); +} + +void JsonFilterTest::testObjectWithoutNameImport() { + Spreadsheet spreadsheet(0, "test", false); + JsonFilter filter; + + const QString fileName = m_dataDir + "object2.json"; + AbstractFileFilter::ImportMode mode = AbstractFileFilter::Replace; + filter.setCreateIndexEnabled(true); + filter.setDataContainerType(JsonFilter::Object); + filter.setDataRowType(QJsonValue::Object); + filter.setDataContainerName(""); + filter.readDataFromFile(fileName, &spreadsheet, mode); + + QCOMPARE(spreadsheet.columnCount(), 5); + QCOMPARE(spreadsheet.rowCount(), 3); + QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::Integer); + QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::Numeric); + QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::Numeric); + QCOMPARE(spreadsheet.column(3)->columnMode(), AbstractColumn::Numeric); + QCOMPARE(spreadsheet.column(4)->columnMode(), AbstractColumn::Text); + + QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); + QCOMPARE(spreadsheet.column(0)->integerAt(1), 2); + QCOMPARE(spreadsheet.column(0)->integerAt(2), 3); + + QCOMPARE(spreadsheet.column(1)->valueAt(0), 1.234); + QCOMPARE(spreadsheet.column(1)->valueAt(1), 111.); + QCOMPARE(spreadsheet.column(1)->valueAt(2), 0.001); + + QCOMPARE(spreadsheet.column(2)->valueAt(0), 2.345); + QCOMPARE(spreadsheet.column(2)->valueAt(1), 222); + QCOMPARE(spreadsheet.column(2)->valueAt(2), 0.002); + + QCOMPARE(spreadsheet.column(3)->valueAt(0), 3.456); + QCOMPARE(spreadsheet.column(3)->valueAt(1), 333); + QCOMPARE(spreadsheet.column(3)->valueAt(2), 0.003); + + QCOMPARE(spreadsheet.column(4)->textAt(0), "field1"); + QCOMPARE(spreadsheet.column(4)->textAt(1), "field2"); + QCOMPARE(spreadsheet.column(4)->textAt(2), "field3"); +} + +QTEST_MAIN(JsonFilterTest) \ No newline at end of file diff --git a/tests/import_export/JSON/JsonFilterTest.h b/tests/import_export/JSON/JsonFilterTest.h new file mode 100644 index 000000000..9bc0698ae --- /dev/null +++ b/tests/import_export/JSON/JsonFilterTest.h @@ -0,0 +1,21 @@ +#ifndef JSONFILTERTEST_H +#define JSONFILTERTEST_H + +#include + +class JsonFilterTest : public QObject { + Q_OBJECT + +private slots: + void initTestCase(); + + void testArrayWithNameImport(); + void testArrayWithoutNameImport(); + void testObjectWithNameImport(); + void testObjectWithoutNameImport(); +private: + QString m_dataDir; +}; + + +#endif diff --git a/tests/import_export/JSON/data/array1.json b/tests/import_export/JSON/data/array1.json new file mode 100644 index 000000000..eb425c338 --- /dev/null +++ b/tests/import_export/JSON/data/array1.json @@ -0,0 +1,16 @@ +{ + "array": [ + [ + "2018-06-01", + 0.01 + ], + [ + "2018-06-02", + 0.02 + ], + [ + "2018-06-03", + 0.03 + ] + ] +} \ No newline at end of file diff --git a/tests/import_export/JSON/data/array2.json b/tests/import_export/JSON/data/array2.json new file mode 100644 index 000000000..5a15d0d45 --- /dev/null +++ b/tests/import_export/JSON/data/array2.json @@ -0,0 +1,14 @@ +[ + [ + "2018-06-01", + 0.01 + ], + [ + "2018-06-02", + 0.02 + ], + [ + "2018-06-03", + 0.03 + ] +] \ No newline at end of file diff --git a/tests/import_export/JSON/data/object1.json b/tests/import_export/JSON/data/object1.json new file mode 100644 index 000000000..e7b4cccc3 --- /dev/null +++ b/tests/import_export/JSON/data/object1.json @@ -0,0 +1,22 @@ +{ + "object": { + "field1": { + "1": "1.234", + "2": "2.345", + "3": "3.456", + "4": "field1" + }, + "field2": { + "1": "111", + "2": "222", + "3": "333", + "4": "field2" + }, + "field3": { + "1": "0.001", + "2": "0.002", + "3": "0.003", + "4": "field3" + } + } +} \ No newline at end of file diff --git a/tests/import_export/JSON/data/object2.json b/tests/import_export/JSON/data/object2.json new file mode 100644 index 000000000..d71fe8ec6 --- /dev/null +++ b/tests/import_export/JSON/data/object2.json @@ -0,0 +1,20 @@ +{ + "field1": { + "1": "1.234", + "2": "2.345", + "3": "3.456", + "4": "field1" + }, + "field2": { + "1": "111", + "2": "222", + "3": "333", + "4": "field2" + }, + "field3": { + "1": "0.001", + "2": "0.002", + "3": "0.003", + "4": "field3" + } +} \ No newline at end of file