Skip to content
Snippets Groups Projects
DecoderTest.h 9.07 KiB
Newer Older
// Mantid Repository : https://github.com/mantidproject/mantid
//
// Copyright © 2019 ISIS Rutherford Appleton Laboratory UKRI,
//     NScD Oak Ridge National Laboratory, European Spallation Source
//     & Institut Laue - Langevin
// SPDX - License - Identifier: GPL - 3.0 +

#ifndef ISISREFLECTOMETRY_TEST_DECODER_TEST_H_
#define ISISREFLECTOMETRY_TEST_DECODER_TEST_H_

#include "../../../ISISReflectometry/GUI/Common/Decoder.h"
#include "../ReflMockObjects.h"
#include "CoderCommonTester.h"
#include "MantidAPI/FrameworkManager.h"
#include "MantidQtWidgets/Common/QtJSONUtils.h"

#include <cxxtest/TestSuite.h>

#include <QMap>
#include <QString>
#include <QVariant>

namespace {
const static QString MAINWINDOW_JSON_STRING{
    "{\"batches\": [{\"saveView\": {\"commaRadioButton\": true, "
    "\"spaceRadioButton\": false, \"regexCheckBox\": false, \"savePathEdit\": "
    "\"\", \"saveReductionResultsCheckBox\": false, \"titleCheckBox\": false, "
    "\"filterEdit\": \"\", \"tabRadioButton\": false, \"prefixEdit\": \"\", "
    "\"qResolutionCheckBox\": false, \"fileFormatComboBox\": 0}, \"runsView\": "
    "{\"comboSearchInstrument\": 0, \"runsTable\": {\"projectSave\": true, "
    "\"filterBox\": \"\", \"runsTableModel\": [{\"rows\": "
    "[{\"reductionWorkspaces\": {\"inputRunNumbers\": [\"13460\"], \"iVsQ\": "
    "\"\", \"transPair\": {\"firstTransRuns\": [], \"secondTransRuns\": []}, "
    "\"iVsLambda\": \"\", \"iVsQBinned\": \"\"}, \"transRunNums\": "
    "{\"firstTransRuns\": [], \"secondTransRuns\": []}, "
    "\"scaleFactorPresent\": "
    "false, \"qRangeOutput\": {\"maxPresent\": false, \"stepPresent\": false, "
    "\"minPresent\": false}, \"reductionOptions\": {}, \"theta\": 0.5, "
    "\"runNumbers\": [\"13460\"], \"qRange\": {\"maxPresent\": false, "
    "\"stepPresent\": false, \"minPresent\": false}}], \"name\": \"123\", "
    "\"postprocessedWorkspaceName\": \"\"}]}, \"textSearch\": \"123\"}, "
    "\"eventView\": {\"disabledSlicingButton\": true, \"customEdit\": \"\", "
    "\"logValueButton\": false, \"logValueEdit\": \"\", \"uniformEvenButton\": "
    "false, \"logValueTypeEdit\": \"\", \"uniformButton\": false, "
    "\"uniformEdit\": 1.0, \"customButton\": false, \"uniformEvenEdit\": 1}, "
    "\"experimentView\": {\"perAngleDefaults\": {\"columnsNum\": 9, \"rows\": "
    "[[\"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\"]], \"rowsNum\": "
    "1}, "
    "\"startOverlapEdit\": 10.0, \"analysisModeComboBox\": 0, "
    "\"reductionTypeComboBox\": 0, \"stitchEdit\": \"\", "
    "\"floodWorkspaceWsSelector\": 0, \"includePartialBinsCheckBox\": false, "
    "\"summationTypeComboBox\": 0, \"transScaleRHSCheckBox\": true, "
    "\"debugCheckbox\": false, \"transStitchParamsEdit\": \"\", "
    "\"floodCorComboBox\": 0, \"endOverlapEdit\": 12.0, \"polCorrCheckBox\": "
    "false}, \"instrumentView\": {\"monBgMaxEdit\": 18.0, \"I0MonitorIndex\": "
    "2, "
    "\"lamMinEdit\": 1.5, \"monIntMinEdit\": 4.0, \"intMonCheckBox\": true, "
    "\"monIntMaxEdit\": 10.0, \"detectorCorrectionTypeComboBox\": 0, "
    "\"correctDetectorsCheckBox\": true, \"lamMaxEdit\": 17.0, "
    "\"monBgMinEdit\": "
    "17.0}}, {\"saveView\": {\"commaRadioButton\": true, \"spaceRadioButton\": "
    "false, \"regexCheckBox\": false, \"savePathEdit\": \"\", "
    "\"saveReductionResultsCheckBox\": false, \"titleCheckBox\": false, "
    "\"filterEdit\": \"\", \"tabRadioButton\": false, \"prefixEdit\": \"\", "
    "\"qResolutionCheckBox\": false, \"fileFormatComboBox\": 0}, \"runsView\": "
    "{\"comboSearchInstrument\": 0, \"runsTable\": {\"projectSave\": true, "
    "\"filterBox\": \"\", \"runsTableModel\": [{\"rows\": [{}], \"name\": "
    "\"HiddenGroupName1\", \"postprocessedWorkspaceName\": \"\"}]}, "
    "\"textSearch\": \"\"}, \"eventView\": {\"disabledSlicingButton\": true, "
    "\"customEdit\": \"\", \"logValueButton\": false, \"logValueEdit\": \"\", "
    "\"uniformEvenButton\": false, \"logValueTypeEdit\": \"\", "
    "\"uniformButton\": false, \"uniformEdit\": 1.0, \"customButton\": false, "
    "\"uniformEvenEdit\": 1}, \"experimentView\": {\"perAngleDefaults\": "
    "{\"columnsNum\": 9, \"rows\": [[\"\", \"\", \"\", \"\", \"\", \"\", \"\", "
    "\"\", \"\"]], \"rowsNum\": 1}, \"startOverlapEdit\": 10.0, "
    "\"analysisModeComboBox\": 0, \"reductionTypeComboBox\": 0, "
    "\"stitchEdit\": "
    "\"\", \"floodWorkspaceWsSelector\": 0, \"includePartialBinsCheckBox\": "
    "false, \"summationTypeComboBox\": 0, \"transScaleRHSCheckBox\": true, "
    "\"debugCheckbox\": false, \"transStitchParamsEdit\": \"\", "
    "\"floodCorComboBox\": 0, \"endOverlapEdit\": 12.0, \"polCorrCheckBox\": "
    "false}, \"instrumentView\": {\"monBgMaxEdit\": 18.0, \"I0MonitorIndex\": "
    "2, "
    "\"lamMinEdit\": 1.5, \"monIntMinEdit\": 4.0, \"intMonCheckBox\": true, "
    "\"monIntMaxEdit\": 10.0, \"detectorCorrectionTypeComboBox\": 0, "
    "\"correctDetectorsCheckBox\": true, \"lamMaxEdit\": 17.0, "
    "\"monBgMinEdit\": "
    "17.0}}], \"tag\": \"ISIS Reflectometry\"}"};

const static QString BATCH_JSON_STRING{
    "{\"eventView\":{\"customButton\":false,\"customEdit\":\"\", "
    "\"disabledSlicingButton\":false,\"logValueButton\":false,"
    "\"logValueEdit\":"
    "\"\",\"logValueTypeEdit\":\"\",\"uniformButton\":true,\"uniformEdit\":3,"
    "\"uniformEvenButton\":false,\"uniformEvenEdit\":2},\"experimentView\":{"
    "\"analysisModeComboBox\":1,\"debugCheckbox\":true,\"endOverlapEdit\":13,"
    "\"floodCorComboBox\":1,\"floodWorkspaceWsSelector\":0,"
    "\"includePartialBinsCheckBox\":true,\"perAngleDefaults\":{"
    "\"columnsNum\":"
    "9,\"rows\":[[\"123\",\"123\",\"213\",\"123\",\"123\",\"123\",\"123\","
    "\"123\",\"123\"]],\"rowsNum\":1},\"polCorrCheckBox\":false,"
    "\"reductionTypeComboBox\":2,\"startOverlapEdit\":12,\"stitchEdit\":\"\","
    "\"summationTypeComboBox\":1,\"transScaleRHSCheckBox\":true,"
    "\"transStitchParamsEdit\":\"1\"},\"instrumentView\":{\"I0MonitorIndex\":"
    "3,"
    "\"correctDetectorsCheckBox\":false,\"detectorCorrectionTypeComboBox\":1,"
    "\"intMonCheckBox\":false,\"lamMaxEdit\":18,\"lamMinEdit\":2.5,"
    "\"monBgMaxEdit\":20,\"monBgMinEdit\":19,\"monIntMaxEdit\":11,"
    "\"monIntMinEdit\":5},\"runsView\":{\"comboSearchInstrument\":0,"
    "\"runsTable\":{\"filterBox\":\"123\",\"projectSave\":false,"
    "\"runsTableModel\":[{\"name\":\"123\",\"postprocessedWorkspaceName\":"
    "\"\","
    "\"rows\":[{\"qRange\":{\"max\":0.1,\"maxPresent\":true,\"min\":0.1,"
    "\"minPresent\":true,\"step\":0.1,\"stepPresent\":true},\"qRangeOutput\":"
    "{"
    "\"maxPresent\":false,\"minPresent\":false,\"stepPresent\":false},"
    "\"reductionOptions\":{\"ProcessingInstructions\":\"1-4\"},"
    "\"reductionWorkspaces\":{\"iVsLambda\":\"\",\"iVsQ\":\"\","
    "\"iVsQBinned\":"
    "\"\",\"inputRunNumbers\":[\"13460\"],\"transPair\":{\"firstTransRuns\":["
    "\"123\"],\"secondTransRuns\":[\"1234\"]}},\"runNumbers\":[\"13460\"],"
    "\"scaleFactor\":2,\"scaleFactorPresent\":true,\"theta\":0.5,"
    "\"transRunNums\":{\"firstTransRuns\":[\"123\"],\"secondTransRuns\":["
    "\"1234\"]}}]}]},\"textSearch\":\"1120015\"},\"saveView\":{"
    "\"commaRadioButton\":false,\"fileFormatComboBox\":1,\"filterEdit\":"
    "\"123\",\"prefixEdit\":\"123\",\"qResolutionCheckBox\":true,"
    "\"regexCheckBox\":true,\"savePathEdit\":\"123\","
    "\"saveReductionResultsCheckBox\":false,\"spaceRadioButton\":true,"
    "\"tabRadioButton\":false,\"titleCheckBox\":true}}"};

/**
 * QApplication
 *
 * Uses setUpWorld/tearDownWorld to initialize & finalize
 * QApplication object
 */
class QApplicationHolder : CxxTest::GlobalFixture {
public:
  bool setUpWorld() override {
    m_app = new QApplication(m_argc, m_argv);

    qRegisterMetaType<std::string>("StdString");
    qRegisterMetaType<Mantid::API::Workspace_sptr>("Workspace");

    return true;
  }

  bool tearDownWorld() override {
    delete m_app;
    return true;
  }

  int m_argc = 1;
  GNU_DIAG_OFF("pedantic")
  char *m_argv[1] = {"DecoderTest"};
  GNU_DIAG_ON("pedantic")
  QApplication *m_app;
};

static QApplicationHolder MAIN_QAPPLICATION;

namespace MantidQt {
namespace CustomInterfaces {
namespace ISISReflectometry {
class DecoderTest : public CxxTest::TestSuite {
public:
  static DecoderTest *createSuite() { return new DecoderTest(); }
  static void destroySuite(DecoderTest *suite) { delete suite; }

  void setUp() override { Mantid::API::FrameworkManager::Instance(); }

  void test_decode() {
    CoderCommonTester tester;
    Decoder decoder;
    auto map = MantidQt::API::loadJSONFromString(MAINWINDOW_JSON_STRING);
    auto widget = decoder.decode(map, "");

    tester.testMainWindowView(dynamic_cast<QtMainWindowView *>(widget), map);
  }

  void test_decodeBatch() {
    CoderCommonTester tester;
    auto map = MantidQt::API::loadJSONFromString(BATCH_JSON_STRING);
    QtMainWindowView mwv;
    mwv.initLayout();
    auto gui = dynamic_cast<QtBatchView *>(mwv.batches()[0]);
    Decoder decoder;
    decoder.decodeBatch(&mwv, 0, map);
    tester.testBatch(gui, &mwv, map);
} // namespace ISISReflectometry
} // namespace CustomInterfaces
} // namespace MantidQt

#endif /* ISISREFLECTOMETRY_TEST_DECODER_TEST_H_ */