Skip to content
Snippets Groups Projects
DecoderTest.h 8.72 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}}"};
} // namespace

/**
 * 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_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(gui, mwv, map);

    tester.testBatch(gui, mwv, map);
  }
};
} // namespace ISISReflectometry
} // namespace CustomInterfaces
} // namespace MantidQt

#endif /* ISISREFLECTOMETRY_TEST_DECODER_TEST_H_ */