bool QgsReclassifyByLayerAlgorithm::_prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback * )
{
  std::unique_ptr< QgsFeatureSource >tableSource( parameterAsSource( parameters, QStringLiteral( "INPUT_TABLE" ), context ) );
  if ( !tableSource )
    throw QgsProcessingException( invalidSourceError( parameters, QStringLiteral( "INPUT_TABLE" ) ) );

  QString fieldMin = parameterAsString( parameters, QStringLiteral( "MIN_FIELD" ), context );
  mMinFieldIdx = tableSource->fields().lookupField( fieldMin );
  if ( mMinFieldIdx < 0 )
    throw QgsProcessingException( QObject::tr( "Invalid field specified for MIN_FIELD: %1" ).arg( fieldMin ) );
  QString fieldMax = parameterAsString( parameters, QStringLiteral( "MAX_FIELD" ), context );
  mMaxFieldIdx = tableSource->fields().lookupField( fieldMax );
  if ( mMaxFieldIdx < 0 )
    throw QgsProcessingException( QObject::tr( "Invalid field specified for MAX_FIELD: %1" ).arg( fieldMax ) );
  QString fieldValue = parameterAsString( parameters, QStringLiteral( "VALUE_FIELD" ), context );
  mValueFieldIdx = tableSource->fields().lookupField( fieldValue );
  if ( mValueFieldIdx < 0 )
    throw QgsProcessingException( QObject::tr( "Invalid field specified for VALUE_FIELD: %1" ).arg( fieldValue ) );

  QgsFeatureRequest request;
  request.setFlags( QgsFeatureRequest::NoGeometry );
  request.setSubsetOfAttributes( QgsAttributeList() << mMinFieldIdx << mMaxFieldIdx << mValueFieldIdx );
  mTableIterator = tableSource->getFeatures( request );

  return true;
}
void TestLoading::testDataSets()
{
    TableSource *source = tableSource();
    QVERIFY(source);
                               // y data
    testDataSetCellRegions(0, CellRegion(source, "Sheet1.E5:G5"),
                               // series label
                               CellRegion(source, "Sheet1.D5"),
                               // categories (specified in x-axis)
                               CellRegion(source, "Sheet1.E4:G4"));
}
void TestLoading::initTestCase()
{
    // Fake sheet data from embedding document
    m_sheet.setRowCount(6);
    m_sheet.setColumnCount(8);
    // Categories
    m_sheet.setData(m_sheet.index(3, 4), "Pass");
    m_sheet.setData(m_sheet.index(3, 5), "Fail");
    m_sheet.setData(m_sheet.index(3, 6), "NA");
    // Series label
    m_sheet.setData(m_sheet.index(4, 3), "Week");
    QVERIFY(tableSource());
    tableSource()->add("Sheet1", &m_sheet);
    // No actual data needed

    // Tell the chart it's embedded
    m_chart->setUsesInternalModelOnly(false);

    TestLoadingBase::initTestCase();
}