diff --git a/IPXACTmodels/Component/BusInterface.cpp b/IPXACTmodels/Component/BusInterface.cpp index d8ce89155..591419017 100644 --- a/IPXACTmodels/Component/BusInterface.cpp +++ b/IPXACTmodels/Component/BusInterface.cpp @@ -723,7 +723,8 @@ QString BusInterface::getMemoryMapRef() const //----------------------------------------------------------------------------- QString BusInterface::getAddressSpaceRef() const { - if (interfaceMode_ == General::MASTER || interfaceMode_ == General::MIRRORED_MASTER) + if (interfaceMode_ == General::MASTER || interfaceMode_ == General::MIRRORED_MASTER || + interfaceMode_ == General::INITIATOR || interfaceMode_ == General::MIRRORED_INITIATOR) { if (!initiator_) { diff --git a/IPXACTmodels/Component/Component.cpp b/IPXACTmodels/Component/Component.cpp index 2025ecaab..a64fc58d1 100644 --- a/IPXACTmodels/Component/Component.cpp +++ b/IPXACTmodels/Component/Component.cpp @@ -1214,7 +1214,7 @@ QStringList Component::getTargetInterfaces( const QString& memoryMap ) const for (const QSharedPointer busif : *busInterfaces_) { - if (busif->getInterfaceMode() == General::SLAVE && busif->getMemoryMapRef() == memoryMap) + if ((busif->getInterfaceMode() == interfaceModeName) && busif->getMemoryMapRef() == memoryMap) { names.append(busif->name()); } @@ -1226,13 +1226,19 @@ QStringList Component::getTargetInterfaces( const QString& memoryMap ) const //----------------------------------------------------------------------------- // Function: Component::getMasterInterfaces() //----------------------------------------------------------------------------- -QStringList Component::getMasterInterfaces( const QString& addressSpace ) const +QStringList Component::getInitiatorInterfaces( const QString& addressSpace ) const { QStringList names; + General::InterfaceMode initiatorModeName = getRevision() == Document::Revision::Std22 + ? General::INITIATOR : General::MASTER; + + General::InterfaceMode mirroredInitiatorModeName = getRevision() == Document::Revision::Std22 + ? General::MIRRORED_INITIATOR : General::MIRRORED_MASTER; + for (const QSharedPointer busif : *busInterfaces_) { - if ((busif->getInterfaceMode() == General::MASTER || busif->getInterfaceMode() == General::MIRRORED_MASTER) + if ((busif->getInterfaceMode() == initiatorModeName || busif->getInterfaceMode() == mirroredInitiatorModeName) && (busif->getAddressSpaceRef() == addressSpace)) { names.append(busif->name()); @@ -1245,12 +1251,19 @@ QStringList Component::getMasterInterfaces( const QString& addressSpace ) const //----------------------------------------------------------------------------- // Function: Component::getMasterInterfaces() //----------------------------------------------------------------------------- -QStringList Component::getMasterInterfaces() const +QStringList Component::getInitiatorInterfaces() const { QStringList names; + + General::InterfaceMode initiatorModeName = getRevision() == Document::Revision::Std22 + ? General::INITIATOR : General::MASTER; + + General::InterfaceMode mirroredInitiatorModeName = getRevision() == Document::Revision::Std22 + ? General::MIRRORED_INITIATOR : General::MIRRORED_MASTER; + for (QSharedPointer busif : *busInterfaces_) { - if (busif->getInterfaceMode() == General::MASTER || busif->getInterfaceMode() == General::MIRRORED_MASTER) + if (busif->getInterfaceMode() == initiatorModeName || busif->getInterfaceMode() == mirroredInitiatorModeName) { names.append(busif->name()); } diff --git a/IPXACTmodels/Component/Component.h b/IPXACTmodels/Component/Component.h index e88373e8f..eac9b03a9 100644 --- a/IPXACTmodels/Component/Component.h +++ b/IPXACTmodels/Component/Component.h @@ -765,14 +765,14 @@ class IPXACTMODELS_EXPORT Component: public Document * * @return QStringList containing names of the master and mirrored master interfaces. */ - QStringList getMasterInterfaces(const QString& addressSpace) const; + QStringList getInitiatorInterfaces(const QString& addressSpace) const; /*! * Get list of the master and mirrored master interface names. * * @return QStringList containing the interface names. */ - QStringList getMasterInterfaces() const; + QStringList getInitiatorInterfaces() const; /*! * Checks if the component contains bus interfaces. diff --git a/IPXACTmodels/Component/validators/FieldValidator.cpp b/IPXACTmodels/Component/validators/FieldValidator.cpp index d2b8209d2..ff2d20afe 100644 --- a/IPXACTmodels/Component/validators/FieldValidator.cpp +++ b/IPXACTmodels/Component/validators/FieldValidator.cpp @@ -282,17 +282,22 @@ bool FieldValidator::hasValidReserved(QSharedPointer field) const //----------------------------------------------------------------------------- bool FieldValidator::hasValidBitWidth(QSharedPointer field) const { - QString solvedValue = expressionParser_->parseExpression(field->getBitWidth()); + if (field->getFieldDefinitionRef().isEmpty()) + { + QString solvedValue = expressionParser_->parseExpression(field->getBitWidth()); - bool changeOk = true; - quint64 intValue = solvedValue.toULongLong(&changeOk); + bool changeOk = true; + quint64 intValue = solvedValue.toULongLong(&changeOk); - if (changeOk && intValue > 0) - { - return true; + if (changeOk && intValue > 0) + { + return true; + } + + return false; } - return false; + return true; } //----------------------------------------------------------------------------- diff --git a/IPXACTmodels/Component/validators/RegisterFileValidator.cpp b/IPXACTmodels/Component/validators/RegisterFileValidator.cpp index fb8563307..f35dac60b 100644 --- a/IPXACTmodels/Component/validators/RegisterFileValidator.cpp +++ b/IPXACTmodels/Component/validators/RegisterFileValidator.cpp @@ -245,7 +245,7 @@ void RegisterFileValidator::findErrorsInRegisterData(QVector& errors, void RegisterFileValidator::findErrorsInAccessPolicies(QStringList& errors, QSharedPointer selectedRegisterFile, QString const& context) const { - QString registerFileContext = QStringLiteral("register ") + selectedRegisterFile->name() + QStringLiteral(" within ") + context; + QString registerFileContext = QStringLiteral("register file ") + selectedRegisterFile->name() + QStringLiteral(" within ") + context; RegisterBaseValidator::findErrorsInAccessPolicies(errors, selectedRegisterFile, registerFileContext); } diff --git a/KactusAPI/KactusAPI.pri b/KactusAPI/KactusAPI.pri index e81362de7..9533694b2 100644 --- a/KactusAPI/KactusAPI.pri +++ b/KactusAPI/KactusAPI.pri @@ -46,6 +46,7 @@ HEADERS += ./KactusAPI.h \ ./include/IPluginUtility.h \ ./include/IPXactSystemVerilogParser.h \ ./include/LibraryInterface.h \ + ./include/ListHelper.h \ ./include/ListParameterFinder.h \ ./include/MasterPortInterface.h \ ./include/MemoryBlockInterface.h \ @@ -115,7 +116,7 @@ SOURCES += ./KactusAPI.cpp \ ./expressions/SystemVerilogExpressionParser.cpp \ ./interfaces/bus/AbstractionTypeInterface.cpp \ ./interfaces/bus/PortAbstractionInterface.cpp \ - ./include/AccessPolicyInterface.cpp \ + ./interfaces/component/AccessPolicyInterface.cpp \ ./interfaces/component/AddressBlockInterface.cpp \ ./interfaces/component/BusInterfaceInterface.cpp \ ./interfaces/component/BusInterfaceInterfaceFactory.cpp \ diff --git a/KactusAPI/KactusAPI.vcxproj b/KactusAPI/KactusAPI.vcxproj index 9b71cf326..1a96ecf0e 100644 --- a/KactusAPI/KactusAPI.vcxproj +++ b/KactusAPI/KactusAPI.vcxproj @@ -124,7 +124,6 @@ - @@ -132,6 +131,7 @@ + diff --git a/KactusAPI/KactusAPI.vcxproj.filters b/KactusAPI/KactusAPI.vcxproj.filters index 17b7308bf..9f140848a 100644 --- a/KactusAPI/KactusAPI.vcxproj.filters +++ b/KactusAPI/KactusAPI.vcxproj.filters @@ -494,15 +494,15 @@ Source Files\expressions - - Source Files\interfaces\component - Source Files\expressions Source Files\interfaces\component + + Source Files\interfaces\component + diff --git a/KactusAPI/include/AddressBlockInterface.h b/KactusAPI/include/AddressBlockInterface.h index 943951bac..1426ae744 100644 --- a/KactusAPI/include/AddressBlockInterface.h +++ b/KactusAPI/include/AddressBlockInterface.h @@ -166,34 +166,34 @@ class KACTUS2_API AddressBlockInterface : public MemoryBlockInterface * accessPolicyIndex parameter. The default value of -1 returns the address block's access value. 0 and above * returns an indexed access policy's access value. * - * @param [in] blockName Name of the selected address block. - * @param [in] accessPolicyIndex The access policy to get the access value of. + * @param [in] blockName Name of the selected address block. + * @param [in] getAccessPolicyAccess Flag indicating if access is fetched from access policy or directly + * from address block. * * @return Access string of the selected address block or its access policy. */ - std::string getAccessString(std::string const& blockName, int accessPolicyIndex = -1) const; + std::string getAccessString(std::string const& blockName, bool getAccessPolicyAccess = false) const; /*! - * Get the access of the selected address block or one of its access policies specified by the - * accessPolicyIndex parameter. The default value of -1 returns the address block's access value. 0 and above - * returns an indexed access policy's access value. + * Get the access of the selected address block. Used in std14 access editor. * * @param [in] blockName Name of the selected address block. - * @param [in] accessPolicyIndex The access policy to get the access value of. * - * @return Access of the selected address block or its access policy. + * @return Access of the selected address block. */ - AccessTypes::Access getAccess(std::string const& blockName, int accessPolicyIndex = -1) const; + AccessTypes::Access getAccess(std::string const& blockName) const; /*! * Set a new access for the selected address block. * - * @param [in] blockName Name of the selected address block. - * @param [in] newAccess New access value. + * @param [in] blockName Name of the selected address block. + * @param [in] newAccess New access value. + * @param [in] getAccessPolicyAccess Flag indicating if access is set to access policy or directly to + * address block. * * @return True, if successful, false otherwise. */ - bool setAccess(std::string const& blockName, std::string const& newAccess, int accessPolicyIndex = -1) const; + bool setAccess(std::string const& blockName, std::string const& newAccess, bool setAccessPolicyAccess = false) const; /*! * Get the volatile value of the selected address block. diff --git a/KactusAPI/include/RegisterInterface.h b/KactusAPI/include/RegisterInterface.h index 832600ea0..5fb5f1c51 100644 --- a/KactusAPI/include/RegisterInterface.h +++ b/KactusAPI/include/RegisterInterface.h @@ -292,15 +292,15 @@ class KACTUS2_API RegisterInterface : public ParameterizableInterface, public Na bool setVolatile(std::string const& registerName, std::string const& newVolatile); /*! - * Get the access string of the selected register or access policy given by the access policy index. - * Use the default access policy index of -1 to fetch the access value stored directly in the register. + * Get the access string of the selected register or first access policy. * - * @param [in] registerName Name of the selected register. - * @param [in] accessPolicyIndex The index of the selected access policy. + * @param [in] registerName Name of the selected register. + * @param [in] getAccessPolicyAccess Flag indicating if access is fetched from access policy or directly + * from register. Access is fetched from first access policy, if true. * * @return The access string of the selected register. */ - std::string getAccessString(std::string const& registerName) const; + std::string getAccessString(std::string const& registerName, bool getAccessPolicyAccess = false) const; /*! * Get the access of the selected register or access policy given by the access policy index. @@ -315,13 +315,32 @@ class KACTUS2_API RegisterInterface : public ParameterizableInterface, public Na /*! * Set the access value for the selected register or its access policy given by the access policy index. * - * @param [in] registerName Name of the selected register. - * @param [in] newAccess The new access value. - * @param [in] accessPolicyIndex The index of the selected access policy. + * @param [in] registerName Name of the selected register. + * @param [in] newAccess The new access value. + * @param [in] getAccessPolicyAccess Flag indicating if access is set to access policy or directly + * to register. Access is set to first access policy, if true. * * @return True, if successful, false otherwise. */ - bool setAccess(std::string const& registerName, std::string const& newAccess); + bool setAccess(std::string const& registerName, std::string const& newAccess, bool setAccessPolicyAccess = false); + + /*! + * Get the number of access policies for a given register. + * + * @param [in] registerName The name of the register to get the number off access policies of. + * + * @return The number of access policies for the given register. + */ + int getAccessPolicyCount(std::string const& registerName) const; + + /*! + * Adds a new access policy to the selected register. + * + * @param [in] registerName The selected register. + * + * @return True, if operation was successful, otherwise false. + */ + bool addAccessPolicy(std::string const& registerName); /*! * Calculate all the references to the selected ID in the selected item. diff --git a/KactusAPI/include/AccessPolicyInterface.cpp b/KactusAPI/interfaces/component/AccessPolicyInterface.cpp similarity index 100% rename from KactusAPI/include/AccessPolicyInterface.cpp rename to KactusAPI/interfaces/component/AccessPolicyInterface.cpp diff --git a/KactusAPI/interfaces/component/AddressBlockInterface.cpp b/KactusAPI/interfaces/component/AddressBlockInterface.cpp index c57640cf6..d3be09694 100644 --- a/KactusAPI/interfaces/component/AddressBlockInterface.cpp +++ b/KactusAPI/interfaces/component/AddressBlockInterface.cpp @@ -214,20 +214,21 @@ bool AddressBlockInterface::setUsage(std::string const& blockName, std::string c //----------------------------------------------------------------------------- // Function: AddressBlockInterface::getAccessString() //----------------------------------------------------------------------------- -std::string AddressBlockInterface::getAccessString(std::string const& blockName, int accessPolicyIndex /*= -1*/) const +std::string AddressBlockInterface::getAccessString(std::string const& blockName, bool getAccessPolicyAccess /*= false*/) const { if (auto selectedBlock = getAddressBlock(blockName)) { - if (accessPolicyIndex == -1) + if (!getAccessPolicyAccess) { return AccessTypes::access2Str(selectedBlock->getAccess()).toStdString(); } - else if (accessPolicyIndex >= 0) + else { - if (auto accessPolicies = selectedBlock->getAccessPolicies(); - accessPolicyIndex <= accessPolicies->size() - 1) + auto accessPolicies = selectedBlock->getAccessPolicies(); + + if (!accessPolicies->isEmpty()) { - return AccessTypes::access2Str(accessPolicies->at(accessPolicyIndex)->getAccess()).toStdString(); + return AccessTypes::access2Str(accessPolicies->first()->getAccess()).toStdString(); } } } @@ -238,22 +239,11 @@ std::string AddressBlockInterface::getAccessString(std::string const& blockName, //----------------------------------------------------------------------------- // Function: AddressBlockInterface::getAccess() //----------------------------------------------------------------------------- -AccessTypes::Access AddressBlockInterface::getAccess(std::string const& blockName, int accessPolicyIndex /*= -1*/) const +AccessTypes::Access AddressBlockInterface::getAccess(std::string const& blockName) const { if (auto selectedBlock = getAddressBlock(blockName)) { - if (accessPolicyIndex == -1) - { - return selectedBlock->getAccess(); - } - else if (accessPolicyIndex >= 0) - { - if (auto accessPolicies = selectedBlock->getAccessPolicies(); - accessPolicyIndex <= accessPolicies->size() - 1) - { - return accessPolicies->at(accessPolicyIndex)->getAccess(); - } - } + return selectedBlock->getAccess(); } return AccessTypes::ACCESS_COUNT; @@ -262,7 +252,7 @@ AccessTypes::Access AddressBlockInterface::getAccess(std::string const& blockNam //----------------------------------------------------------------------------- // Function: AddressBlockInterface::setAccess() //----------------------------------------------------------------------------- -bool AddressBlockInterface::setAccess(std::string const& blockName, std::string const& newAccess, int accessPolicyIndex /*= -1*/) const +bool AddressBlockInterface::setAccess(std::string const& blockName, std::string const& newAccess, bool setAccessPolicyAccess /*= false*/) const { auto selectedBlock = getAddressBlock(blockName); if (!selectedBlock) @@ -270,30 +260,26 @@ bool AddressBlockInterface::setAccess(std::string const& blockName, std::string return false; } - if (accessPolicyIndex == -1) + if (!setAccessPolicyAccess) { selectedBlock->setAccess(AccessTypes::str2Access(QString::fromStdString(newAccess), AccessTypes::ACCESS_COUNT)); return true; } - else if (accessPolicyIndex >= 0) + else { - if (auto accessPolicies = selectedBlock->getAccessPolicies(); - accessPolicyIndex <= accessPolicies->size() - 1) - { - auto accessPolicy = accessPolicies->at(accessPolicyIndex); - - // Remove if empty. - if (newAccess.empty() && accessPolicy->getModeReferences()->isEmpty() && - accessPolicy->getVendorExtensions()->isEmpty()) - { - selectedBlock->getAccessPolicies()->removeAt(accessPolicyIndex); - return true; - } + auto accessPolicy = selectedBlock->getAccessPolicies()->first(); - accessPolicy->setAccess(AccessTypes::str2Access(QString::fromStdString(newAccess), - AccessTypes::ACCESS_COUNT)); + // Remove access policy, if new access is empty. + if (newAccess.empty() && accessPolicy->getModeReferences()->isEmpty() && + accessPolicy->getVendorExtensions()->isEmpty()) + { + selectedBlock->getAccessPolicies()->clear(); return true; } + + accessPolicy->setAccess(AccessTypes::str2Access(QString::fromStdString(newAccess), + AccessTypes::ACCESS_COUNT)); + return true; } return false; diff --git a/KactusAPI/interfaces/component/RegisterInterface.cpp b/KactusAPI/interfaces/component/RegisterInterface.cpp index 3a6cd242e..8cc796cf9 100644 --- a/KactusAPI/interfaces/component/RegisterInterface.cpp +++ b/KactusAPI/interfaces/component/RegisterInterface.cpp @@ -434,11 +434,21 @@ bool RegisterInterface::setVolatile(std::string const& registerName, std::string //----------------------------------------------------------------------------- // Function: RegisterInterface::getAccessString() //----------------------------------------------------------------------------- -std::string RegisterInterface::getAccessString(std::string const& registerName) const +std::string RegisterInterface::getAccessString(std::string const& registerName, bool getAccessPolicyAccess /*= false*/) const { if (auto selectedRegister = getRegister(registerName)) { - return AccessTypes::access2Str(selectedRegister->getAccess()).toStdString(); + if (!getAccessPolicyAccess) + { + return AccessTypes::access2Str(selectedRegister->getAccess()).toStdString(); + } + else + { + if (auto accessPolicies = selectedRegister->getAccessPolicies(); !accessPolicies->isEmpty()) + { + return AccessTypes::access2Str(accessPolicies->first()->getAccess()).toStdString(); + } + } } return string(""); @@ -460,15 +470,64 @@ AccessTypes::Access RegisterInterface::getAccess(std::string const& registerName //----------------------------------------------------------------------------- // Function: RegisterInterface::setAccess() //----------------------------------------------------------------------------- -bool RegisterInterface::setAccess(std::string const& registerName, std::string const& newAccess) +bool RegisterInterface::setAccess(std::string const& registerName, std::string const& newAccess, bool setAccessPolicyAccess /*= false*/) { - if (auto selectedRegister = getRegister(registerName)) + auto selectedRegister = getRegister(registerName); + if (!selectedRegister) { - auto newAccessType = AccessTypes::str2Access(QString::fromStdString(newAccess), AccessTypes::ACCESS_COUNT); + return false; + } + if (!setAccessPolicyAccess) + { + auto newAccessType = AccessTypes::str2Access(QString::fromStdString(newAccess), AccessTypes::ACCESS_COUNT); selectedRegister->setAccess(newAccessType); return true; } + else + { + auto accessPolicy = selectedRegister->getAccessPolicies()->first(); + + // Remove access policy, if new access is empty. + if (newAccess.empty() && accessPolicy->getModeReferences()->isEmpty() && + accessPolicy->getVendorExtensions()->isEmpty()) + { + selectedRegister->getAccessPolicies()->removeFirst(); + return true; + } + + accessPolicy->setAccess(AccessTypes::str2Access(QString::fromStdString(newAccess), + AccessTypes::ACCESS_COUNT)); + return true; + } + + return false; +} + +//----------------------------------------------------------------------------- +// Function: RegisterInterface::getAccessPolicyCount() +//----------------------------------------------------------------------------- +int RegisterInterface::getAccessPolicyCount(std::string const& registerName) const +{ + if (auto selectedRegister = getRegister(registerName)) + { + return selectedRegister->getAccessPolicies()->size(); + } + + return 0; +} + +//----------------------------------------------------------------------------- +// Function: RegisterInterface::addAccessPolicy() +//----------------------------------------------------------------------------- +bool RegisterInterface::addAccessPolicy(std::string const& registerName) +{ + if (auto selectedRegister = getRegister(registerName)) + { + QSharedPointer newAccessPolicy(new AccessPolicy()); + selectedRegister->getAccessPolicies()->append(newAccessPolicy); + return true; + } return false; } diff --git a/Plugins/MemoryMapHeaderGenerator/globalheadersavemodel.cpp b/Plugins/MemoryMapHeaderGenerator/globalheadersavemodel.cpp index 279fdcf65..4d98ab4f7 100644 --- a/Plugins/MemoryMapHeaderGenerator/globalheadersavemodel.cpp +++ b/Plugins/MemoryMapHeaderGenerator/globalheadersavemodel.cpp @@ -281,7 +281,7 @@ void GlobalHeaderSaveModel::setDesign( QSharedPointer topComp, QShare } // create header for each master interface - QStringList masterInterfaces = comp->getMasterInterfaces(); + QStringList masterInterfaces = comp->getInitiatorInterfaces(); foreach (QString interfaceName, masterInterfaces) { // if the operated interface is not connected to any other instance within the design diff --git a/editors/ComponentEditor/addressSpaces/addressspaceeditor.cpp b/editors/ComponentEditor/addressSpaces/addressspaceeditor.cpp index 2aad1e1f7..ef6055761 100644 --- a/editors/ComponentEditor/addressSpaces/addressspaceeditor.cpp +++ b/editors/ComponentEditor/addressSpaces/addressspaceeditor.cpp @@ -32,7 +32,7 @@ AddressSpaceEditor::AddressSpaceEditor(QSharedPointer component, Libr ItemEditor(component, handler, parent), addrSpace_(addrSpace), nameEditor_(addrSpace, component->getRevision(), this), -generalEditor_(addrSpace, component->getMasterInterfaces(addrSpace_->name()), parameterFinder, expressionParser, +generalEditor_(addrSpace, component->getInitiatorInterfaces(addrSpace_->name()), parameterFinder, expressionParser, component->getRevision(), this), segmentsEditor_(addrSpace, component, handler->getDirectoryPath(component->getVlnv()), parameterFinder, expressionParser, expressionFormatter, this), @@ -103,7 +103,7 @@ localMemMapEditor_(addrSpace, component, handler, parameterFinder, blockInterfac //----------------------------------------------------------------------------- void AddressSpaceEditor::refresh() { - QStringList masterInterfaceList = component()->getMasterInterfaces(addrSpace_->name()); + QStringList masterInterfaceList = component()->getInitiatorInterfaces(addrSpace_->name()); // Block signals from here for the duration of refreshing editors. blockSignals(true); diff --git a/editors/ComponentEditor/addressSpaces/addressspacegeneraleditor.cpp b/editors/ComponentEditor/addressSpaces/addressspacegeneraleditor.cpp index 19009d16c..4b6f0b5f5 100644 --- a/editors/ComponentEditor/addressSpaces/addressspacegeneraleditor.cpp +++ b/editors/ComponentEditor/addressSpaces/addressspacegeneraleditor.cpp @@ -79,15 +79,16 @@ masterInterfaceBindingLabel_(new QLabel(this)) layout->addRow(tr("Range (=size) [AUB], f(x):"), rangeEditor_); layout->addRow(tr("Width [bits], f(x):"), widthEditor_); - if (docRevision != Document::Revision::Std22) + if (docRevision == Document::Revision::Std22) { - layout->addRow(tr("Is present, f(x):"), isPresentEditor_); + layout->addRow(tr("Initiator interface binding(s):"), masterInterfaceBindingLabel_); + isPresentEditor_->setVisible(false); } else { - isPresentEditor_->setVisible(false); + layout->addRow(tr("Is present, f(x):"), isPresentEditor_); + layout->addRow(tr("Master interface binding(s):"), masterInterfaceBindingLabel_); } - layout->addRow(tr("Master interface binding(s):"), masterInterfaceBindingLabel_); refresh(busInterfaceNames); diff --git a/editors/ComponentEditor/addressSpaces/addressspacesmodel.cpp b/editors/ComponentEditor/addressSpaces/addressspacesmodel.cpp index 43eb8ac83..409f67bdf 100644 --- a/editors/ComponentEditor/addressSpaces/addressspacesmodel.cpp +++ b/editors/ComponentEditor/addressSpaces/addressspacesmodel.cpp @@ -132,6 +132,10 @@ QVariant AddressSpacesModel::headerData( int section, Qt::Orientation orientatio } else if (section == AddressSpaceColumns::INTERFACE_BINDING) { + if (component_->getRevision() == Document::Revision::Std22) + { + return tr("Initiator interface\nbinding(s)"); + } return tr("Master interface\nbinding(s)"); } else if (section == AddressSpaceColumns::DESCRIPTION) @@ -183,7 +187,7 @@ QVariant AddressSpacesModel::data(QModelIndex const& index, int role) const } else if (Qt::UserRole == role) { - return component_->getMasterInterfaces(addressSpaces_->at(index.row())->name()); + return component_->getInitiatorInterfaces(addressSpaces_->at(index.row())->name()); } else if (Qt::ForegroundRole == role) { @@ -358,9 +362,9 @@ QVariant AddressSpacesModel::expressionOrValueForIndex(QModelIndex const& index) } else if (index.column() == AddressSpaceColumns::INTERFACE_BINDING) { - QStringList interfaceNames = component_->getMasterInterfaces(addressSpaces_->at(index.row())->name()); + QStringList interfaceNames = component_->getInitiatorInterfaces(addressSpaces_->at(index.row())->name()); - // if no interface refers to the memory map + // if no interface refers to the address space if (interfaceNames.isEmpty()) { return tr("No binding"); diff --git a/editors/ComponentEditor/common/ModeReferenceModel.cpp b/editors/ComponentEditor/common/ModeReferenceModel.cpp index 95642b0c8..30c8a9602 100644 --- a/editors/ComponentEditor/common/ModeReferenceModel.cpp +++ b/editors/ComponentEditor/common/ModeReferenceModel.cpp @@ -96,7 +96,7 @@ QVariant ModeReferenceModel::headerData(int section, Qt::Orientation orientation //----------------------------------------------------------------------------- QVariant ModeReferenceModel::data(const QModelIndex& index, int role /*= Qt::DisplayRole*/) const { - if (role == Qt::DisplayRole || role == Qt::EditRole) + if (role == Qt::DisplayRole || role == Qt::EditRole || role == Qt::ToolTipRole) { if (index.column() == 0) { diff --git a/editors/ComponentEditor/memoryMaps/AccessPoliciesEditor.cpp b/editors/ComponentEditor/memoryMaps/AccessPoliciesEditor.cpp index fde3fbe80..72aa5fd49 100644 --- a/editors/ComponentEditor/memoryMaps/AccessPoliciesEditor.cpp +++ b/editors/ComponentEditor/memoryMaps/AccessPoliciesEditor.cpp @@ -39,10 +39,10 @@ AccessPoliciesEditor::AccessPoliciesEditor(QSharedPointergetModeReferenceInterface(), this); - auto proxy = new QSortFilterProxyModel(this); + proxy_ = new QSortFilterProxyModel(this); - proxy->setSourceModel(model); - view_->setModel(proxy); + proxy_->setSourceModel(model); + view_->setModel(proxy_); view_->setItemDelegate(delegate); view_->setSortingEnabled(true); view_->setItemsDraggable(false); @@ -50,7 +50,7 @@ AccessPoliciesEditor::AccessPoliciesEditor(QSharedPointerupdate(); - interface_->setAccessPolicies(accessPolicies_); + + // Invalidate filter to force table refresh (access values can be changed in upper level editor). + proxy_->invalidate(); } diff --git a/editors/ComponentEditor/memoryMaps/AccessPoliciesEditor.h b/editors/ComponentEditor/memoryMaps/AccessPoliciesEditor.h index ade4a3f8d..9444c3c28 100644 --- a/editors/ComponentEditor/memoryMaps/AccessPoliciesEditor.h +++ b/editors/ComponentEditor/memoryMaps/AccessPoliciesEditor.h @@ -17,6 +17,7 @@ class AccessPolicyInterface; class AccessPolicy; class EditableTableView; +class QSortFilterProxyModel; //----------------------------------------------------------------------------- //! Editor for access policies found in address blocks, registers, register files etc. @@ -55,6 +56,9 @@ class AccessPoliciesEditor : public QGroupBox //! The access policy table view. EditableTableView* view_; + //! The sort filter proxy. + QSortFilterProxyModel* proxy_; + //! Interface for accessing access policies. AccessPolicyInterface* interface_; }; diff --git a/editors/ComponentEditor/memoryMaps/FieldAccessPoliciesEditor.cpp b/editors/ComponentEditor/memoryMaps/FieldAccessPoliciesEditor.cpp index c2b3b1698..55f706412 100644 --- a/editors/ComponentEditor/memoryMaps/FieldAccessPoliciesEditor.cpp +++ b/editors/ComponentEditor/memoryMaps/FieldAccessPoliciesEditor.cpp @@ -33,7 +33,7 @@ view_(new EditableTableView(this)) QVBoxLayout* topLayout = new QVBoxLayout(this); topLayout->addWidget(view_); - auto model = new FieldAccessPoliciesModel(fieldName, parameterFinder, fieldInterface, this); + auto model = new FieldAccessPoliciesModel(fieldName, parameterFinder, fieldInterface, expressionParser, this); auto proxy = new QSortFilterProxyModel(this); ComponentParameterModel* componentParameterModel = new ComponentParameterModel(parameterFinder, this); @@ -50,6 +50,9 @@ view_(new EditableTableView(this)) view_->setAllowElementCopying(true); view_->setItemsDraggable(false); + // Hide type defs until they are implemented + view_->hideColumn(FieldAccessPolicyColumns::TYPE_DEFINITION); + connect(view_, SIGNAL(addItem(QModelIndex const&)), model, SLOT(onAddRow(QModelIndex const&)), Qt::UniqueConnection); connect(view_, SIGNAL(removeItem(QModelIndex const&)), diff --git a/editors/ComponentEditor/memoryMaps/FieldAccessPoliciesModel.cpp b/editors/ComponentEditor/memoryMaps/FieldAccessPoliciesModel.cpp index 5c3e4f977..4c3b7b860 100644 --- a/editors/ComponentEditor/memoryMaps/FieldAccessPoliciesModel.cpp +++ b/editors/ComponentEditor/memoryMaps/FieldAccessPoliciesModel.cpp @@ -20,13 +20,14 @@ using ModeRefList = std::vector >; // Function: FieldAccessPoliciesModel::FieldAccessPoliciesModel() //----------------------------------------------------------------------------- FieldAccessPoliciesModel::FieldAccessPoliciesModel(QString const& fieldName, - QSharedPointer parameterFinder, FieldInterface* fieldInterface, QObject* parent): + QSharedPointer parameterFinder, FieldInterface* fieldInterface, + QSharedPointer expressionParser, QObject* parent) : ReferencingTableModel(parameterFinder, parent), ParameterizableTable(parameterFinder), fieldInterface_(fieldInterface), fieldName_(fieldName.toStdString()) { - + setExpressionParser(expressionParser); } //----------------------------------------------------------------------------- @@ -217,6 +218,10 @@ QVariant FieldAccessPoliciesModel::data(const QModelIndex& index, int role /*= Q return modeRefsVariant; } } + else if (role == Qt::FontRole) + { + return italicForEvaluatedValue(index); + } return QVariant(); } diff --git a/editors/ComponentEditor/memoryMaps/FieldAccessPoliciesModel.h b/editors/ComponentEditor/memoryMaps/FieldAccessPoliciesModel.h index 6f82f369a..92e425b67 100644 --- a/editors/ComponentEditor/memoryMaps/FieldAccessPoliciesModel.h +++ b/editors/ComponentEditor/memoryMaps/FieldAccessPoliciesModel.h @@ -23,8 +23,17 @@ class FieldAccessPoliciesModel : public ReferencingTableModel, public Parameteri public: - FieldAccessPoliciesModel(QString const& fieldName, - QSharedPointer parameterFinder, FieldInterface* fieldInterface, QObject* parent); + /*! + * The constructor. + * + * @param [in] fieldName The name of the field being edited. + * @param [in] parameterFinder Parameter finder to use. + * @param [in] fieldInterface Field interface to access field data. + * @param [in] expressionParser Expression parser to use. + * @param [in] parent Parent object. + */ + FieldAccessPoliciesModel(QString const& fieldName, QSharedPointer parameterFinder, + FieldInterface* fieldInterface, QSharedPointer expressionParser, QObject* parent); virtual ~FieldAccessPoliciesModel() = default; diff --git a/editors/ComponentEditor/memoryMaps/MemoryBlockModel.cpp b/editors/ComponentEditor/memoryMaps/MemoryBlockModel.cpp index 60cabfa8f..0b71338f1 100644 --- a/editors/ComponentEditor/memoryMaps/MemoryBlockModel.cpp +++ b/editors/ComponentEditor/memoryMaps/MemoryBlockModel.cpp @@ -151,6 +151,10 @@ QVariant MemoryBlockModel::data(QModelIndex const& index, int role) const return KactusColors::REGULAR_FIELD; } } + else if (role == Qt::FontRole) + { + return italicForEvaluatedValue(index); + } else { return QVariant(); @@ -281,14 +285,6 @@ void MemoryBlockModel::onRemoveItem( QModelIndex const& index ) emit contentChanged(); } -//----------------------------------------------------------------------------- -// Function: MemoryBlockModel::isValidExpressionColumn() -//----------------------------------------------------------------------------- -bool MemoryBlockModel::isValidExpressionColumn(QModelIndex const& index) const -{ - return index.column() == baseAddressColumn() || index.column() == isPresentColumn(); -} - //----------------------------------------------------------------------------- // Function: MemoryBlockModel::expressionOrValueForIndex() //----------------------------------------------------------------------------- diff --git a/editors/ComponentEditor/memoryMaps/MemoryBlockModel.h b/editors/ComponentEditor/memoryMaps/MemoryBlockModel.h index 7052572c1..2c0738bd9 100644 --- a/editors/ComponentEditor/memoryMaps/MemoryBlockModel.h +++ b/editors/ComponentEditor/memoryMaps/MemoryBlockModel.h @@ -162,15 +162,6 @@ public slots: protected: - /*! - * Checks if the column index is valid for expressions. - * - * @param [in] index The index being evaluated. - * - * @return True, if the column can have expressions, otherwise false. - */ - virtual bool isValidExpressionColumn(QModelIndex const& index) const; - /*! * Gets the expression for the given index, or plain value if there is no expression. * diff --git a/editors/ComponentEditor/memoryMaps/MemoryMapsColumns.h b/editors/ComponentEditor/memoryMaps/MemoryMapsColumns.h index 53f95e017..1ff500d1b 100644 --- a/editors/ComponentEditor/memoryMaps/MemoryMapsColumns.h +++ b/editors/ComponentEditor/memoryMaps/MemoryMapsColumns.h @@ -18,9 +18,9 @@ namespace MemoryMapsColumns enum Column { NAME_COLUMN = 0, - REMAPSTATE_COLUMN, AUB_COLUMN, INTERFACE_COLUMN, + REMAPSTATE_COLUMN, IS_PRESENT, DESCRIPTION_COLUMN, COLUMN_COUNT diff --git a/editors/ComponentEditor/memoryMaps/SubspaceMapModel.cpp b/editors/ComponentEditor/memoryMaps/SubspaceMapModel.cpp index 4cee62cae..1f4e2d4dd 100644 --- a/editors/ComponentEditor/memoryMaps/SubspaceMapModel.cpp +++ b/editors/ComponentEditor/memoryMaps/SubspaceMapModel.cpp @@ -207,6 +207,15 @@ QVariant SubspaceMapModel::valueForIndex(QModelIndex const& index) const return MemoryBlockModel::valueForIndex(index); } +//----------------------------------------------------------------------------- +// Function: SubspaceMapModel::isValidExpressionColumn() +//----------------------------------------------------------------------------- +bool SubspaceMapModel::isValidExpressionColumn(QModelIndex const& index) const +{ + int column = index.column(); + return column == SubspaceMapColumns::BASE || column == SubspaceMapColumns::IS_PRESENT; +} + //----------------------------------------------------------------------------- // Function: SubspaceMapModel::mimeTypes() //----------------------------------------------------------------------------- diff --git a/editors/ComponentEditor/memoryMaps/SubspaceMapModel.h b/editors/ComponentEditor/memoryMaps/SubspaceMapModel.h index 2813c3261..5fb8681a3 100644 --- a/editors/ComponentEditor/memoryMaps/SubspaceMapModel.h +++ b/editors/ComponentEditor/memoryMaps/SubspaceMapModel.h @@ -130,6 +130,15 @@ class SubspaceMapModel : public MemoryBlockModel * @return The data in the given index. */ virtual QVariant valueForIndex(QModelIndex const& index) const override final; + + /*! + * Checks if the column index is valid for expressions. + * + * @param [in] index The index being evaluated. + * + * @return True, if the column can have expressions, otherwise false. + */ + bool isValidExpressionColumn(QModelIndex const& index) const final; private: diff --git a/editors/ComponentEditor/memoryMaps/addressblockeditor.cpp b/editors/ComponentEditor/memoryMaps/addressblockeditor.cpp index 3b04904aa..774599f92 100644 --- a/editors/ComponentEditor/memoryMaps/addressblockeditor.cpp +++ b/editors/ComponentEditor/memoryMaps/addressblockeditor.cpp @@ -49,7 +49,7 @@ registers_(registers) QSharedPointer expressionParser(new IPXactSystemVerilogParser(parameterFinder)); - model_ = new AddressBlockModel(registerInterface, expressionParser, parameterFinder, this); + model_ = new AddressBlockModel(registerInterface, expressionParser, parameterFinder, component->getRevision(), this); ComponentParameterModel* componentParametersModel = new ComponentParameterModel(parameterFinder, this); componentParametersModel->setExpressionParser(expressionParser); @@ -80,7 +80,6 @@ registers_(registers) { view_->hideColumn(AddressBlockColumns::REGISTER_DIMENSION); view_->hideColumn(AddressBlockColumns::VOLATILE); - view_->hideColumn(AddressBlockColumns::REGISTER_ACCESS); view_->hideColumn(AddressBlockColumns::IS_PRESENT); } diff --git a/editors/ComponentEditor/memoryMaps/addressblockmodel.cpp b/editors/ComponentEditor/memoryMaps/addressblockmodel.cpp index 6f2aba498..5e25d4888 100644 --- a/editors/ComponentEditor/memoryMaps/addressblockmodel.cpp +++ b/editors/ComponentEditor/memoryMaps/addressblockmodel.cpp @@ -24,10 +24,12 @@ //----------------------------------------------------------------------------- AddressBlockModel::AddressBlockModel(RegisterInterface* registerInterface, QSharedPointer expressionParser, QSharedPointer parameterFinder, - QObject *parent): + Document::Revision docRevision, QObject *parent): ReferencingTableModel(parameterFinder, parent), ParameterizableTable(parameterFinder), -registerInterface_(registerInterface) +registerInterface_(registerInterface), +accessPolicyInterface_(registerInterface->getAccessPolicyInterface()), +docRevision_(docRevision) { setExpressionParser(expressionParser); } @@ -68,6 +70,14 @@ Qt::ItemFlags AddressBlockModel::flags(QModelIndex const& index) const return Qt::NoItemFlags; } + // Indicate that cell can be colored gray if register has multiple access policies + if (index.column() == AddressBlockColumns::REGISTER_ACCESS && + registerInterface_->getAccessPolicyCount( + registerInterface_->getIndexedItemName(index.row())) > 1) + { + return Qt::ItemIsSelectable | Qt::ItemIsEnabled; + } + return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable; } @@ -187,6 +197,12 @@ QVariant AddressBlockModel::data(QModelIndex const& index, int role) const } else if (role == Qt::BackgroundRole) { + if (index.flags() == (Qt::ItemIsEnabled | Qt::ItemIsSelectable) && + index.column() == AddressBlockColumns::REGISTER_ACCESS) + { + return KactusColors::DISABLED_FIELD; + } + if (index.column() == AddressBlockColumns::NAME || index.column() == AddressBlockColumns::REGISTER_OFFSET || index.column() == AddressBlockColumns::REGISTER_SIZE) @@ -198,6 +214,10 @@ QVariant AddressBlockModel::data(QModelIndex const& index, int role) const return KactusColors::REGULAR_FIELD; } } + else if (role == Qt::FontRole) + { + return italicForEvaluatedValue(index); + } return QVariant(); } @@ -291,6 +311,16 @@ QVariant AddressBlockModel::valueForIndex(QModelIndex const& index) const } else if (index.column() == AddressBlockColumns::REGISTER_ACCESS) { + if (docRevision_ == Document::Revision::Std22) + { + if (index.flags() == (Qt::ItemIsEnabled | Qt::ItemIsSelectable)) + { + return QStringLiteral("[multiple]"); + } + + return QString::fromStdString(registerInterface_->getAccessString(registerName, true)); + } + return QString::fromStdString(registerInterface_->getAccessString(registerName)); } @@ -388,7 +418,23 @@ bool AddressBlockModel::setData(QModelIndex const& index, QVariant const& value, } else if (index.column() == AddressBlockColumns::REGISTER_ACCESS) { - registerInterface_->setAccess(registerName, value.toString().toStdString()); + // Modify the access of the register block by default. + bool setAccessPolicyAccess = false; + + if (docRevision_ == Document::Revision::Std22) + { + // Create access policy first, if one doesn't exist. + if (registerInterface_->getAccessPolicyCount(registerName) == 0 && + value.toString().isEmpty() == false) + { + registerInterface_->addAccessPolicy(registerName); + } + + // Modify first access policy, if std22. + setAccessPolicyAccess = true; + } + + registerInterface_->setAccess(registerName, value.toString().toStdString(), setAccessPolicyAccess); } else { diff --git a/editors/ComponentEditor/memoryMaps/addressblockmodel.h b/editors/ComponentEditor/memoryMaps/addressblockmodel.h index f8a7046f7..c0111f239 100644 --- a/editors/ComponentEditor/memoryMaps/addressblockmodel.h +++ b/editors/ComponentEditor/memoryMaps/addressblockmodel.h @@ -13,6 +13,7 @@ #define ADDRESSBLOCKMODEL_H #include +#include #include #include @@ -21,6 +22,7 @@ #include class RegisterInterface; +class AccessPolicyInterface; //----------------------------------------------------------------------------- //! The model to manage the registers of a single address block or register file. @@ -42,6 +44,7 @@ class AddressBlockModel : public ReferencingTableModel, public ParameterizableTa AddressBlockModel(RegisterInterface* registerInterface, QSharedPointer expressionParser, QSharedPointer parameterFinder, + Document::Revision docRevision, QObject *parent); /*! @@ -288,6 +291,11 @@ public slots: //! Interface for registers. RegisterInterface* registerInterface_; + + //! Interface for register access policies. + AccessPolicyInterface* accessPolicyInterface_; + + Document::Revision docRevision_; }; #endif // ADDRESSBLOCKMODEL_H diff --git a/editors/ComponentEditor/memoryMaps/memorymapmodel.cpp b/editors/ComponentEditor/memoryMaps/memorymapmodel.cpp index 471b2ff18..1fbb9252e 100644 --- a/editors/ComponentEditor/memoryMaps/memorymapmodel.cpp +++ b/editors/ComponentEditor/memoryMaps/memorymapmodel.cpp @@ -59,6 +59,7 @@ Qt::ItemFlags MemoryMapModel::flags(QModelIndex const& index) const std::string addressBlockName = localBlockInterface_->getIndexedItemName(index.row()); + // Disable access field if there is more than one access policy for that address block. if (index.column() == MemoryMapColumns::ACCESS_COLUMN && docRevision_ == Document::Revision::Std22) { if (localBlockInterface_->getAccessPolicyCount(addressBlockName) > 1) @@ -179,7 +180,7 @@ bool MemoryMapModel::setData(QModelIndex const& index, QVariant const& value, in else if (index.column() == MemoryMapColumns::ACCESS_COLUMN) { // Modify the access of the address block by default. - int accessPolicyIndex = -1; + bool setAccessPolicyAccess = false; if (docRevision_ == Document::Revision::Std22) { @@ -191,10 +192,10 @@ bool MemoryMapModel::setData(QModelIndex const& index, QVariant const& value, in } // Modify first access policy, if std22. - accessPolicyIndex = 0; + setAccessPolicyAccess = true; } - if (!localBlockInterface_->setAccess(blockName, value.toString().toStdString(), accessPolicyIndex)) + if (!localBlockInterface_->setAccess(blockName, value.toString().toStdString(), setAccessPolicyAccess)) { return false; } @@ -236,8 +237,10 @@ bool MemoryMapModel::setData(QModelIndex const& index, QVariant const& value, in //----------------------------------------------------------------------------- bool MemoryMapModel::isValidExpressionColumn(QModelIndex const& index) const { - return index.column() == MemoryMapColumns::WIDTH_COLUMN || index.column() == MemoryMapColumns::IS_PRESENT || - MemoryBlockModel::isValidExpressionColumn(index); + int column = index.column(); + + return column == MemoryMapColumns::WIDTH_COLUMN || column == MemoryMapColumns::IS_PRESENT || + column == MemoryMapColumns::BASE_COLUMN || column == MemoryMapColumns::RANGE_COLUMN; } //----------------------------------------------------------------------------- @@ -326,7 +329,7 @@ QVariant MemoryMapModel::valueForIndex(QModelIndex const& index) const return QStringLiteral("[multiple]"); } - return QString::fromStdString(localBlockInterface_->getAccessString(blockName, index.row())); + return QString::fromStdString(localBlockInterface_->getAccessString(blockName, true)); } return QString::fromStdString(localBlockInterface_->getAccessString(blockName)); diff --git a/editors/ComponentEditor/memoryMaps/memorymapmodel.h b/editors/ComponentEditor/memoryMaps/memorymapmodel.h index 4c468a8e8..a208b98a7 100644 --- a/editors/ComponentEditor/memoryMaps/memorymapmodel.h +++ b/editors/ComponentEditor/memoryMaps/memorymapmodel.h @@ -113,7 +113,7 @@ class MemoryMapModel : public MemoryBlockModel * * @return True, if the column can have expressions, otherwise false. */ - virtual bool isValidExpressionColumn(QModelIndex const& index) const override final; + bool isValidExpressionColumn(QModelIndex const& index) const final; /*! * validates the data in the column. diff --git a/editors/ComponentEditor/memoryMaps/memorymapseditor.cpp b/editors/ComponentEditor/memoryMaps/memorymapseditor.cpp index ce367f6ee..079446ef0 100644 --- a/editors/ComponentEditor/memoryMaps/memorymapseditor.cpp +++ b/editors/ComponentEditor/memoryMaps/memorymapseditor.cpp @@ -39,11 +39,14 @@ MemoryMapsEditor::MemoryMapsEditor(MemoryMapInterface* mapInterface, QSharedPoin ItemEditor(component, handler, parent), view_(new MemoryMapsView(this)), proxy_(new EditableTreeSortFilter(this)), -model_(new MemoryMapsModel(parameterFinder, expressionParser, mapInterface, component->getRevision(), this)), +model_(new MemoryMapsModel(parameterFinder, expressionParser, mapInterface, component->getRevision(), + fontMetrics().height() + 8, this)), delegate_(), interface_(mapInterface), component_(component) { + view_->setUniformRowHeights(true); + mapInterface->setMemoryMaps(component); // display a label on top the table diff --git a/editors/ComponentEditor/memoryMaps/memorymapsmodel.cpp b/editors/ComponentEditor/memoryMaps/memorymapsmodel.cpp index 4ddd56919..733419056 100644 --- a/editors/ComponentEditor/memoryMaps/memorymapsmodel.cpp +++ b/editors/ComponentEditor/memoryMaps/memorymapsmodel.cpp @@ -37,12 +37,13 @@ // Function: memorymapsmodel::MemoryMapsModel() //----------------------------------------------------------------------------- MemoryMapsModel::MemoryMapsModel(QSharedPointer parameterFinder, - QSharedPointer expressionParser, MemoryMapInterface* mapInterface, - Document::Revision docRevision, QObject *parent) : + QSharedPointer expressionParser, MemoryMapInterface* mapInterface, + Document::Revision docRevision, const int ROWHEIGHT, QObject *parent): QAbstractItemModel(parent), ParameterizableTable(parameterFinder), mapInterface_(mapInterface), -docRevision_(docRevision) +docRevision_(docRevision), +ROWHEIGHT_(ROWHEIGHT) { setExpressionParser(expressionParser); } @@ -142,6 +143,10 @@ QVariant MemoryMapsModel::headerData(int section, Qt::Orientation orientation, i } else if (section == MemoryMapsColumns::INTERFACE_COLUMN) { + if (docRevision_ == Document::Revision::Std22) + { + return tr("Target interface\nbinding"); + } return tr("Slave interface\nbinding"); } else if (section == MemoryMapsColumns::IS_PRESENT) @@ -253,6 +258,10 @@ QVariant MemoryMapsModel::data(QModelIndex const& index, int role) const return KactusColors::REGULAR_FIELD; } } + else if (index.column() == MemoryMapsColumns::NAME_COLUMN && role == Qt::SizeHintRole) + { + return QSize(40, ROWHEIGHT_); + } return QVariant(); } diff --git a/editors/ComponentEditor/memoryMaps/memorymapsmodel.h b/editors/ComponentEditor/memoryMaps/memorymapsmodel.h index 72869e92b..8f683ecfa 100644 --- a/editors/ComponentEditor/memoryMaps/memorymapsmodel.h +++ b/editors/ComponentEditor/memoryMaps/memorymapsmodel.h @@ -50,11 +50,12 @@ class MemoryMapsModel : public QAbstractItemModel, public ParameterizableTable * @param [in] expressionParser The used expression parser. * @param [in] mapInterface Interface for memory maps. * @param [in] docRevision The IP-XACT standard revision to use. + * @param [in] ROWHEIGHT Height for rows. * @param [in] parent The owner of the model. */ MemoryMapsModel( QSharedPointer parameterFinder, QSharedPointer expressionParser, MemoryMapInterface* mapInterface, - Document::Revision docRevision, QObject *parent); + Document::Revision docRevision, const int ROWHEIGHT, QObject *parent); //! No copying MemoryMapsModel(const MemoryMapsModel& other) = delete; @@ -370,6 +371,9 @@ public slots: //! The IP-XACT standard revision to use. Document::Revision docRevision_; + + //! Height for rows. + const int ROWHEIGHT_; }; #endif // MEMORYMAPSMODEL_H diff --git a/editors/ComponentEditor/memoryMaps/registertablemodel.cpp b/editors/ComponentEditor/memoryMaps/registertablemodel.cpp index 40e5f979c..59bc6507d 100644 --- a/editors/ComponentEditor/memoryMaps/registertablemodel.cpp +++ b/editors/ComponentEditor/memoryMaps/registertablemodel.cpp @@ -249,6 +249,10 @@ QVariant RegisterTableModel::data( const QModelIndex& index, int role /*= Qt::Di return KactusColors::REGULAR_FIELD; } } + else if (role == Qt::FontRole) + { + return italicForEvaluatedValue(index); + } else { return QVariant(); diff --git a/tests/IPXACTmodels/Component/tst_AccessPolicyReader.cpp b/tests/IPXACTmodels/Component/tst_AccessPolicyReader.cpp index 845353e48..e7d508e32 100644 --- a/tests/IPXACTmodels/Component/tst_AccessPolicyReader.cpp +++ b/tests/IPXACTmodels/Component/tst_AccessPolicyReader.cpp @@ -71,9 +71,9 @@ void tst_AccessPolicyReader::readModeRefs() QCOMPARE(accessPolicy->getModeReferences()->size(), 2); QCOMPARE(accessPolicy->getModeReferences()->first()->getReference(), QString("normal")); - QCOMPARE(accessPolicy->getModeReferences()->first()->getPriority(), QString("0")); + QCOMPARE(accessPolicy->getModeReferences()->first()->getPriority(), 0); QCOMPARE(accessPolicy->getModeReferences()->at(1)->getReference(), QString("test")); - QCOMPARE(accessPolicy->getModeReferences()->at(1)->getPriority(), QString("1")); + QCOMPARE(accessPolicy->getModeReferences()->at(1)->getPriority(), 1); } //----------------------------------------------------------------------------- diff --git a/tests/IPXACTmodels/Component/tst_AccessPolicyWriter.cpp b/tests/IPXACTmodels/Component/tst_AccessPolicyWriter.cpp index 1218c208b..74e50cb02 100644 --- a/tests/IPXACTmodels/Component/tst_AccessPolicyWriter.cpp +++ b/tests/IPXACTmodels/Component/tst_AccessPolicyWriter.cpp @@ -67,11 +67,11 @@ void tst_AccessPolicyWriter::cleanup() void tst_AccessPolicyWriter::writeModeRefs() { QSharedPointer modeRef1(new ModeReference()); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); modeRef1->setReference("testMode1"); QSharedPointer modeRef2(new ModeReference()); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); modeRef2->setReference("testMode2"); accessPolicy_->getModeReferences()->append(modeRef1); diff --git a/tests/IPXACTmodels/Component/tst_AddressBlockValidator.cpp b/tests/IPXACTmodels/Component/tst_AddressBlockValidator.cpp index 6252631b7..6c1f78558 100644 --- a/tests/IPXACTmodels/Component/tst_AddressBlockValidator.cpp +++ b/tests/IPXACTmodels/Component/tst_AddressBlockValidator.cpp @@ -24,6 +24,8 @@ #include #include #include +#include +#include #include #include @@ -1067,13 +1069,22 @@ void tst_AddressBlockValidator::testAccessPolicies2022() testBlock->setWidth("10"); QSharedPointer modeRef1(new ModeReference()); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); modeRef1->setReference("ref"); QSharedPointer modeRef2(new ModeReference()); - modeRef2->setPriority("0"); + modeRef2->setPriority(0); modeRef2->setReference("ref1"); + QSharedPointer mode1(new Mode("ref")); + QSharedPointer mode2(new Mode("ref1")); + + QSharedPointer dummyComponent(new Component(VLNV("test", "vendor", "library", "component", "1.0"), Document::Revision::Std22)); + dummyComponent->getModes()->append(mode1); + dummyComponent->getModes()->append(mode2); + + validator->componentChange(dummyComponent); + QSharedPointer accessPolicy1(new AccessPolicy()); QSharedPointer accessPolicy2(new AccessPolicy()); accessPolicy1->getModeReferences()->append(modeRef1); @@ -1088,6 +1099,7 @@ void tst_AddressBlockValidator::testAccessPolicies2022() << "One or more mode references in access policies of address block champloo within test contain duplicate priority values." << "One or more mode references in access policies of address block champloo within test contain duplicate mode reference values." << "In address block testBlock in test, multiple access policies are not allowed if one of them lacks a mode reference." + << "Mode reference in access policies of address block champloo within test has invalid or empty reference value 'ref2'." ); // Test duplicate mode reference priority. @@ -1098,18 +1110,27 @@ void tst_AddressBlockValidator::testAccessPolicies2022() // Test duplicate reference. errors.clear(); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); modeRef2->setReference("ref"); validator->findErrorsIn(errors, testBlock, "8", "test"); QVERIFY(errors.contains(possibleErrors.at(1))); QVERIFY(validator->hasValidAccessPolicies(testBlock) == false); - // Test valid. + // Test invalid (not found in component modes). errors.clear(); modeRef2->setReference("ref2"); + validator->findErrorsIn(errors, testBlock, "8", "test"); + QVERIFY(errors.contains(possibleErrors.back())); + + QVERIFY(validator->hasValidAccessPolicies(testBlock) == false); + + // Finally test valid. + errors.clear(); + modeRef2->setReference("ref1"); + validator->findErrorsIn(errors, testBlock, "8", "test"); QVERIFY(std::none_of(possibleErrors.cbegin(), possibleErrors.cend(), [&errors](QString const& str) { @@ -1117,6 +1138,7 @@ void tst_AddressBlockValidator::testAccessPolicies2022() })); QVERIFY(validator->hasValidAccessPolicies(testBlock)); + } //----------------------------------------------------------------------------- diff --git a/tests/IPXACTmodels/Component/tst_AddressBlockWriter.cpp b/tests/IPXACTmodels/Component/tst_AddressBlockWriter.cpp index e5ac9a811..78ed95c71 100644 --- a/tests/IPXACTmodels/Component/tst_AddressBlockWriter.cpp +++ b/tests/IPXACTmodels/Component/tst_AddressBlockWriter.cpp @@ -433,10 +433,10 @@ void tst_AddressBlockWriter::writeAccessPolicies2022() QSharedPointer modeRef1(new ModeReference()); QSharedPointer modeRef2(new ModeReference()); - modeRef1->setPriority("1"); + modeRef1->setPriority(1); modeRef1->setReference("testMode"); - modeRef2->setPriority("2"); + modeRef2->setPriority(2); modeRef2->setReference("testMode2"); testAccessPolicy1->getModeReferences()->append(modeRef1); diff --git a/tests/IPXACTmodels/Component/tst_AddressSpaceValidator.cpp b/tests/IPXACTmodels/Component/tst_AddressSpaceValidator.cpp index d92d44f96..aa3487c12 100755 --- a/tests/IPXACTmodels/Component/tst_AddressSpaceValidator.cpp +++ b/tests/IPXACTmodels/Component/tst_AddressSpaceValidator.cpp @@ -75,7 +75,7 @@ private slots: bool errorIsNotFoundInErrorList(QString const& expectedError, QVector errorList); - QSharedPointer createValidator(); + QSharedPointer createValidator(Document::Revision docRevision); }; //----------------------------------------------------------------------------- @@ -96,7 +96,7 @@ void tst_AddressSpaceValidator::testHasValidName() QSharedPointer testSpace (new AddressSpace(name)); - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidName(testSpace->name()), isValid); @@ -139,7 +139,7 @@ void tst_AddressSpaceValidator::testHasValidIsPresent() QSharedPointer testSpace (new AddressSpace("TestAddressBlock")); testSpace->setIsPresent(isPresent); - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidIsPresent(testSpace->getIsPresent()), isValid); @@ -184,7 +184,7 @@ void tst_AddressSpaceValidator::testHasValidRange() QSharedPointer testSpace (new AddressSpace("testSpace", range, "0")); - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidRange(testSpace), isValid); @@ -232,7 +232,7 @@ void tst_AddressSpaceValidator::testHasValidWidth() QSharedPointer testSpace (new AddressSpace("testSpace", "10", width)); - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidWidth(testSpace), isValid); @@ -283,7 +283,7 @@ void tst_AddressSpaceValidator::testSegmentHasValidName() QSharedPointer testSpace (new AddressSpace("testSpace", "100")); testSpace->getSegments()->append(testSegment); - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidSegments(testSpace), isValid); @@ -328,7 +328,7 @@ void tst_AddressSpaceValidator::testSegmentsHaveUniqueNames() testSpace->getSegments()->append(segmentOne); testSpace->getSegments()->append(segmentTwo); - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidSegments(testSpace), false); @@ -360,7 +360,7 @@ void tst_AddressSpaceValidator::testSegmentHasValidIsPresent() QSharedPointer testSpace (new AddressSpace("TestAddressBlock", "100")); testSpace->getSegments()->append(testSegment); - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidSegments(testSpace), isValid); if (!isValid) @@ -412,7 +412,7 @@ void tst_AddressSpaceValidator::testSegmentHasValidAddressOffset() testSpace->setRange("50000000000"); } - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidSegments(testSpace), isValid); if (!isValid) @@ -465,7 +465,7 @@ void tst_AddressSpaceValidator::testSegmentHasValidRange() testSpace->setRange("50000000000"); } - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidSegments(testSpace), isValid); if (!isValid) @@ -515,7 +515,7 @@ void tst_AddressSpaceValidator::testSegmentIsContainedWithinAddressSpace() QSharedPointer testSpace (new AddressSpace("Wanpan", spaceRange)); testSpace->getSegments()->append(testSegment); - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidSegments(testSpace), isValid); if (!isValid) @@ -576,7 +576,7 @@ void tst_AddressSpaceValidator::testOverlappingSegments() testSpace->getSegments()->append(segmentOne); testSpace->getSegments()->append(segmentTwo); - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidSegments(testSpace), isValid); if (!isValid) @@ -643,7 +643,7 @@ void tst_AddressSpaceValidator::testHasValidAddressUnitBits() QSharedPointer testSpace (new AddressSpace("TestAddressBlock")); testSpace->setAddressUnitBits(addressUnitBits); - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidAddressUnitBits(testSpace), isValid); if (!isValid) @@ -688,7 +688,7 @@ void tst_AddressSpaceValidator::testHasValidLocalMemoryMap() QSharedPointer testSpace (new AddressSpace("testSpace")); testSpace->setLocalMemoryMap(testLocalMap); - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidLocalMemoryMap(testSpace), false); QVector foundErrors; @@ -719,7 +719,7 @@ void tst_AddressSpaceValidator::testHasValidParameters() QSharedPointer testSpace (new AddressSpace("testSpace")); testSpace->getParameters()->append(testParameter); - QSharedPointer validator = createValidator(); + QSharedPointer validator = createValidator(Document::Revision::Std14); QCOMPARE(validator->hasValidParameters(testSpace), false); QVector errorsFound; @@ -774,21 +774,21 @@ bool tst_AddressSpaceValidator::errorIsNotFoundInErrorList(QString const& expect //----------------------------------------------------------------------------- // Function: tst_AddressSpaceValidator::createValidator() //----------------------------------------------------------------------------- -QSharedPointer tst_AddressSpaceValidator::createValidator() +QSharedPointer tst_AddressSpaceValidator::createValidator(Document::Revision docRevision) { QSharedPointer parser(new SystemVerilogExpressionParser()); QSharedPointer parameterValidator( - new ParameterValidator(parser, QSharedPointer > >())); + new ParameterValidator(parser, QSharedPointer > >(), docRevision)); QSharedPointer enumeratedValueValidator(new EnumeratedValueValidator(parser)); QSharedPointer fieldValidator( new FieldValidator(parser, enumeratedValueValidator, parameterValidator)); QSharedPointer registerValidator( new RegisterValidator(parser, fieldValidator, parameterValidator)); QSharedPointer registerFileValidator(new RegisterFileValidator(parser, - registerValidator, parameterValidator)); + registerValidator, parameterValidator, docRevision)); QSharedPointer addressBlockValidator( - new AddressBlockValidator(parser, registerValidator, registerFileValidator, parameterValidator)); - QSharedPointer subspaceValidator(new SubspaceMapValidator(parser, parameterValidator)); + new AddressBlockValidator(parser, registerValidator, registerFileValidator, parameterValidator, docRevision)); + QSharedPointer subspaceValidator(new SubspaceMapValidator(parser, parameterValidator, docRevision)); QSharedPointer localMemoryMapValidator( new MemoryMapBaseValidator(parser, addressBlockValidator, subspaceValidator)); diff --git a/tests/IPXACTmodels/Component/tst_FieldAccessPolicyReader.cpp b/tests/IPXACTmodels/Component/tst_FieldAccessPolicyReader.cpp index c9e7797d8..7c7152217 100644 --- a/tests/IPXACTmodels/Component/tst_FieldAccessPolicyReader.cpp +++ b/tests/IPXACTmodels/Component/tst_FieldAccessPolicyReader.cpp @@ -80,9 +80,9 @@ void tst_FieldAccessPolicyReader::readModeRefs() QCOMPARE(fieldAccessPolicy->getModeReferences()->size(), 2); QCOMPARE(fieldAccessPolicy->getModeReferences()->first()->getReference(), QString("normal")); - QCOMPARE(fieldAccessPolicy->getModeReferences()->first()->getPriority(), QString("0")); + QCOMPARE(fieldAccessPolicy->getModeReferences()->first()->getPriority(), 0); QCOMPARE(fieldAccessPolicy->getModeReferences()->at(1)->getReference(), QString("test")); - QCOMPARE(fieldAccessPolicy->getModeReferences()->at(1)->getPriority(), QString("1")); + QCOMPARE(fieldAccessPolicy->getModeReferences()->at(1)->getPriority(), 1); } //----------------------------------------------------------------------------- diff --git a/tests/IPXACTmodels/Component/tst_FieldAccessPolicyValidator.cpp b/tests/IPXACTmodels/Component/tst_FieldAccessPolicyValidator.cpp index 22a985341..970e2574a 100644 --- a/tests/IPXACTmodels/Component/tst_FieldAccessPolicyValidator.cpp +++ b/tests/IPXACTmodels/Component/tst_FieldAccessPolicyValidator.cpp @@ -11,6 +11,7 @@ #include #include +#include #include @@ -90,17 +91,17 @@ void tst_FieldAccessPolicyValidator::testDefinitionRefIsValid() QStringList errorList; - validator_.findErrorsIn(errorList, fieldAccessPolicy_, "test"); + validator_.findErrorsIn(errorList, fieldAccessPolicy_, "test", QSharedPointer > >()); QCOMPARE(errorList.size(), 1); // No typedefinitions. - QVERIFY(validator_.validate(fieldAccessPolicy_) == false); + QVERIFY(validator_.validate(fieldAccessPolicy_, QSharedPointer > >()) == false); errorList.clear(); fieldAccessPolicy_->setFieldAccessPolicyTypeDefinitionRef("testTypeDefinitions"); - validator_.findErrorsIn(errorList, fieldAccessPolicy_, "test"); + validator_.findErrorsIn(errorList, fieldAccessPolicy_, "test", QSharedPointer > >()); QCOMPARE(errorList.size(), 0); - QVERIFY(validator_.validate(fieldAccessPolicy_)); + QVERIFY(validator_.validate(fieldAccessPolicy_, QSharedPointer > >())); } //----------------------------------------------------------------------------- @@ -124,7 +125,7 @@ void tst_FieldAccessPolicyValidator::testAccessIsValid() if (!isValid) { QVector errorList; - validator_.findErrorsIn(errorList, fieldAccessPolicy_, "test"); + validator_.findErrorsIn(errorList, fieldAccessPolicy_, "test", QSharedPointer > >()); if (fieldAccessPolicy_->getAccess() == AccessTypes::READ_ONLY && fieldAccessPolicy_->getModifiedWrite() != General::MODIFIED_WRITE_COUNT) @@ -206,7 +207,7 @@ void tst_FieldAccessPolicyValidator::testWriteValueConstraintIsValid() if (!isValid) { QVector foundErrors; - validator_.findErrorsIn(foundErrors, fieldAccessPolicy_, "test"); + validator_.findErrorsIn(foundErrors, fieldAccessPolicy_, "test", QSharedPointer > >()); if (testConstraint->getType() == WriteValueConstraint::TYPE_COUNT) { @@ -297,7 +298,7 @@ void tst_FieldAccessPolicyValidator::testReadResponseIsValid() { QStringList errors; - validator_.findErrorsIn(errors, fieldAccessPolicy_, "test"); + validator_.findErrorsIn(errors, fieldAccessPolicy_, "test", QSharedPointer > >()); QString expectedError = QObject::tr("Invalid read response value for field access policy within test"); @@ -345,7 +346,7 @@ void tst_FieldAccessPolicyValidator::testBroadcastsAreValid() QString expectedErrorField("Field reference in test must contain a reference to a field."); - validator_.findErrorsIn(errors, fieldAccessPolicy_, "test"); + validator_.findErrorsIn(errors, fieldAccessPolicy_, "test", QSharedPointer > >()); QCOMPARE(errors.size(), 2); QVERIFY(errorIsNotFoundInErrorList(expectedErrorChoice, errors) == false); QVERIFY(errorIsNotFoundInErrorList(expectedErrorField, errors) == false); @@ -355,7 +356,7 @@ void tst_FieldAccessPolicyValidator::testBroadcastsAreValid() fieldReference->setReference(fieldRef, FieldReference::FIELD); fieldReference->clearReference(FieldReference::ADDRESS_SPACE); - validator_.findErrorsIn(errors, fieldAccessPolicy_, "test"); + validator_.findErrorsIn(errors, fieldAccessPolicy_, "test", QSharedPointer > >()); QCOMPARE(errors.size(), 0); QVERIFY(validator_.hasValidBroadcasts(fieldAccessPolicy_)); } @@ -377,21 +378,25 @@ void tst_FieldAccessPolicyValidator::testAccessRestrictionsAreValid() fieldAccessPolicy_->getAccessRestrictions()->append(accessRestriction); fieldAccessPolicy_->getAccessRestrictions()->append(accessRestriction2); - // No modes -> error + QSharedPointer > > availableModes(new QList >()); + availableModes->append(QSharedPointer(new Mode("testMode"))); + availableModes->append(QSharedPointer(new Mode("testMode2"))); + + // No mode references set -> error QStringList errors; - validator_.findErrorsIn(errors, fieldAccessPolicy_, "test"); + validator_.findErrorsIn(errors, fieldAccessPolicy_, "test", availableModes); QCOMPARE(errors.size(), 1); errors.clear(); // Duplicate modes in any of the access restrictions -> error modeRef->setReference("testMode"); - modeRef->setPriority("0"); + modeRef->setPriority(0); modeRef2->setReference("testMode"); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); - validator_.findErrorsIn(errors, fieldAccessPolicy_, "test"); + validator_.findErrorsIn(errors, fieldAccessPolicy_, "test", availableModes); QCOMPARE(errors.size(), 1); errors.clear(); @@ -404,14 +409,14 @@ void tst_FieldAccessPolicyValidator::testAccessRestrictionsAreValid() accessRestriction->writeAccessMask_ = QString("asdasd"); // Not valid accessRestriction2->writeAccessMask_ = QString("2'b11"); - validator_.findErrorsIn(errors, fieldAccessPolicy_, "test"); + validator_.findErrorsIn(errors, fieldAccessPolicy_, "test", availableModes); QCOMPARE(errors.size(), 2); errors.clear(); accessRestriction2->readAccessMask_ = QString("'h2"); accessRestriction->writeAccessMask_ = QString("'b1111"); - validator_.findErrorsIn(errors, fieldAccessPolicy_, "test"); + validator_.findErrorsIn(errors, fieldAccessPolicy_, "test", availableModes); QCOMPARE(errors.size(), 0); } @@ -430,7 +435,7 @@ void tst_FieldAccessPolicyValidator::testReserved() if (!isValid) { QStringList foundErrors; - validator_.findErrorsIn(foundErrors, fieldAccessPolicy_, "test"); + validator_.findErrorsIn(foundErrors, fieldAccessPolicy_, "test", QSharedPointer > >()); QString expectedError = QObject::tr("Invalid reserved set for field access policy within %1").arg("test"); if (errorIsNotFoundInErrorList(expectedError, foundErrors)) diff --git a/tests/IPXACTmodels/Component/tst_FieldAccessPolicyWriter.cpp b/tests/IPXACTmodels/Component/tst_FieldAccessPolicyWriter.cpp index 6f19338ee..2d7a53ce2 100644 --- a/tests/IPXACTmodels/Component/tst_FieldAccessPolicyWriter.cpp +++ b/tests/IPXACTmodels/Component/tst_FieldAccessPolicyWriter.cpp @@ -76,11 +76,11 @@ void tst_FieldAccessPolicyWriter::cleanup() void tst_FieldAccessPolicyWriter::writeModeRefs() { QSharedPointer modeRef1(new ModeReference()); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); modeRef1->setReference("testMode1"); QSharedPointer modeRef2(new ModeReference()); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); modeRef2->setReference("testMode2"); fieldAccessPolicy_->getModeReferences()->append(modeRef1); @@ -328,7 +328,7 @@ void tst_FieldAccessPolicyWriter::writeAccessRestrictions() new FieldAccessPolicy::AccessRestriction()); QSharedPointer testModeRef(new ModeReference()); - testModeRef->setPriority("0"); + testModeRef->setPriority(0); testModeRef->setReference("modereference"); accessRestriction->modeRefs_->append(testModeRef); diff --git a/tests/IPXACTmodels/Component/tst_FieldReferenceValidator.cpp b/tests/IPXACTmodels/Component/tst_FieldReferenceValidator.cpp index 6b21b1111..0d1453fbe 100644 --- a/tests/IPXACTmodels/Component/tst_FieldReferenceValidator.cpp +++ b/tests/IPXACTmodels/Component/tst_FieldReferenceValidator.cpp @@ -10,7 +10,7 @@ //----------------------------------------------------------------------------- #include -#include +#include #include diff --git a/tests/IPXACTmodels/Component/tst_FieldValidator.cpp b/tests/IPXACTmodels/Component/tst_FieldValidator.cpp index ae75d3ba2..90ba04174 100644 --- a/tests/IPXACTmodels/Component/tst_FieldValidator.cpp +++ b/tests/IPXACTmodels/Component/tst_FieldValidator.cpp @@ -12,12 +12,13 @@ #include #include #include -#include +#include #include #include #include #include #include +#include #include #include @@ -223,7 +224,7 @@ void tst_FieldValidator::testMemoryArrayIsValid() QList foundErrors; validator.findErrorsIn(foundErrors, testField, "test"); - QString expectedError = QObject::tr("No dimensions defined for memory array in test"); + QString expectedError = QObject::tr("No dimensions defined for memory array in field testField within test"); if (errorIsNotFoundInErrorList(expectedError, foundErrors)) { QFAIL("No error message found"); @@ -1005,10 +1006,10 @@ void tst_FieldValidator::testAccessPolicyModeRefs() testField->setBitWidth("8"); QSharedPointer modeRef1(new ModeReference()); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); modeRef1->setReference("ref"); QSharedPointer modeRef2(new ModeReference()); - modeRef2->setPriority("0"); + modeRef2->setPriority(0); modeRef2->setReference("ref1"); QSharedPointer testFieldAccessPolicy(new FieldAccessPolicy()); @@ -1025,6 +1026,14 @@ void tst_FieldValidator::testAccessPolicyModeRefs() new ParameterValidator(parser, QSharedPointer > >(), Document::Revision::Std22)); FieldValidator validator(parser, enumeratedValueValidator, parameterValidator, Document::Revision::Std22); + QSharedPointer dummyComponent(new Component(VLNV(VLNV::COMPONENT, "vendor", "library", "name", "1.0"), Document::Revision::Std22)); + QSharedPointer mode1(new Mode("ref")); + QSharedPointer mode2(new Mode("ref1")); + dummyComponent->getModes()->append(mode1); + dummyComponent->getModes()->append(mode2); + + validator.componentChange(dummyComponent); + QStringList errors; // Test duplicate priority. @@ -1036,7 +1045,7 @@ void tst_FieldValidator::testAccessPolicyModeRefs() // Test duplicate reference. errors.clear(); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); modeRef2->setReference("ref"); validator.findErrorsIn(errors, testField, "test"); @@ -1047,7 +1056,7 @@ void tst_FieldValidator::testAccessPolicyModeRefs() // Test valid. errors.clear(); - modeRef2->setReference("ref2"); + modeRef2->setReference("ref1"); validator.findErrorsIn(errors, testField, "test"); QCOMPARE(errors.size(), 0); diff --git a/tests/IPXACTmodels/Component/tst_MemoryMapReader.cpp b/tests/IPXACTmodels/Component/tst_MemoryMapReader.cpp index d0ba26572..45874dc15 100644 --- a/tests/IPXACTmodels/Component/tst_MemoryMapReader.cpp +++ b/tests/IPXACTmodels/Component/tst_MemoryMapReader.cpp @@ -406,7 +406,7 @@ void tst_MemoryMapReader::readMemoryRemap2022() QCOMPARE(testMemoryRemap->description(), QString("describedRemap")); QCOMPARE(testMemoryRemap->getModeReferences()->size(), 2); QCOMPARE(testMemoryRemap->getModeReferences()->first()->getReference(), QString("testMode")); - QCOMPARE(testMemoryRemap->getModeReferences()->back()->getPriority(), QString("1")); + QCOMPARE(testMemoryRemap->getModeReferences()->back()->getPriority(), 1); QCOMPARE(testMemoryRemap->getMemoryRemapDefinitionReference(), QString("testRemapDef")); QCOMPARE(testMemoryRemap->getTypeDefinitionsReference(), QString("testDefinitions")); diff --git a/tests/IPXACTmodels/Component/tst_MemoryMapValidator.cpp b/tests/IPXACTmodels/Component/tst_MemoryMapValidator.cpp index 1d4c4ef57..170f07dd6 100755 --- a/tests/IPXACTmodels/Component/tst_MemoryMapValidator.cpp +++ b/tests/IPXACTmodels/Component/tst_MemoryMapValidator.cpp @@ -473,11 +473,11 @@ void tst_MemoryMapValidator::testMemoryRemapsHaveUniqueRemapStates_data() void tst_MemoryMapValidator::testHasValidMemoryRemapModeRefs2022() { QFETCH(QString, modeRef1); - QFETCH(QString, priority1); + QFETCH(int, priority1); QFETCH(QString, modeRef2); - QFETCH(QString, priority2); + QFETCH(int, priority2); QFETCH(QString, modeRef3); - QFETCH(QString, priority3); + QFETCH(int, priority3); QFETCH(QString, invalidRemapName); QFETCH(bool, refsAreValid); QFETCH(bool, prioritiesAreValid); @@ -542,14 +542,7 @@ void tst_MemoryMapValidator::testHasValidMemoryRemapModeRefs2022() } else if (!prioritiesAreValid) { - if ((*invalidRemapIt)->getModeReferences()->first()->getPriority().isEmpty()) - { - expectedError = QObject::tr("Empty mode reference priority set for memory remap %1 in memory map testMap").arg(invalidRemapName); - } - else - { - expectedError = QObject::tr("Duplicate mode reference priority set for memory remap %1 in memory map testMap").arg(invalidRemapName); - } + expectedError = QObject::tr("Duplicate mode reference priority set for memory remap %1 in memory map testMap").arg(invalidRemapName); } if (errorIsNotFoundInErrorList(expectedError, foundErrors)) @@ -565,21 +558,20 @@ void tst_MemoryMapValidator::testHasValidMemoryRemapModeRefs2022() void tst_MemoryMapValidator::testHasValidMemoryRemapModeRefs2022_data() { QTest::addColumn("modeRef1"); - QTest::addColumn("priority1"); + QTest::addColumn("priority1"); QTest::addColumn("modeRef2"); - QTest::addColumn("priority2"); + QTest::addColumn("priority2"); QTest::addColumn("modeRef3"); - QTest::addColumn("priority3"); + QTest::addColumn("priority3"); QTest::addColumn("invalidRemapName"); QTest::addColumn("refsAreValid"); QTest::addColumn("prioritiesAreValid"); - QTest::addRow("Missing mode ref is invalid") << "" << "" << "testmode2" << "2" << "testmode3" << "3" << "testRemap1" << false << true; - QTest::addRow("Duplicate mode ref is invalid") << "testmode" << "0" << "testmode" << "1" << "testmode3" << "3" << "testRemap2" << false << true; - QTest::addRow("Duplicate mode ref priority in same remap is invalid") << "testmode1" << "0" << "testmode2" << "1" << "testmode3" << "1" << "testRemap2" << true << false; - QTest::addRow("Duplicate mode ref priority in different remaps is valid") << "testmode1" << "1" << "testmode2" << "1" << "testmode3" << "3" << "" << true << true; - QTest::addRow("Unique mode refs is valid") << "testmode1" << "0" << "testmode2" << "1" << "testmode3" << "2" << "" << true << true; - QTest::addRow("Empty priority is invalid") << "testmode1" << "" << "testmode2" << "1" << "testmode3" << "2" << "testRemap1" << true << false; + QTest::addRow("Missing mode ref is invalid") << "" << 0 << "testmode2" << 2 << "testmode3" << 3 << "testRemap1" << false << true; + QTest::addRow("Duplicate mode ref is invalid") << "testmode" << 0 << "testmode" << 1 << "testmode3" << 3 << "testRemap2" << false << true; + QTest::addRow("Duplicate mode ref priority in same remap is valid") << "testmode1" << 0 << "testmode2" << 1 << "testmode3" << 1 << "testRemap2" << true << true; + QTest::addRow("Duplicate mode ref priority in different remaps is valid") << "testmode1" << 1 << "testmode2" << 1 << "testmode3" << 3 << "" << true << true; + QTest::addRow("Unique mode refs is valid") << "testmode1" << 0 << "testmode2" << 1 << "testmode3" << 2 << "" << true << true; } //----------------------------------------------------------------------------- diff --git a/tests/IPXACTmodels/Component/tst_MemoryMapWriter.cpp b/tests/IPXACTmodels/Component/tst_MemoryMapWriter.cpp index facce9d26..39fd5f368 100644 --- a/tests/IPXACTmodels/Component/tst_MemoryMapWriter.cpp +++ b/tests/IPXACTmodels/Component/tst_MemoryMapWriter.cpp @@ -349,11 +349,11 @@ void tst_MemoryMapWriter::writeMemoryRemap2022() testMemoryRemap->setTypeDefinitionsReference("testTypeDefs"); QSharedPointer modeRef1(new ModeReference()); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); modeRef1->setReference("testMode"); QSharedPointer modeRef2(new ModeReference()); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); modeRef2->setReference("testMode2"); testMemoryRemap->getModeReferences()->append(modeRef1); diff --git a/tests/IPXACTmodels/Component/tst_RegisterFileValidator.cpp b/tests/IPXACTmodels/Component/tst_RegisterFileValidator.cpp index f3882e50e..74ba4fdbd 100644 --- a/tests/IPXACTmodels/Component/tst_RegisterFileValidator.cpp +++ b/tests/IPXACTmodels/Component/tst_RegisterFileValidator.cpp @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include #include @@ -439,11 +441,11 @@ void tst_RegisterFileValidator::testAccessPoliciesAreValid() QSharedPointer testRegisterFile(new RegisterFile("test", "8", "8")); QSharedPointer modeRef1(new ModeReference()); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); modeRef1->setReference("ref"); QSharedPointer modeRef2(new ModeReference()); - modeRef2->setPriority("0"); + modeRef2->setPriority(0); modeRef2->setReference("ref1"); QSharedPointer accessPolicy1(new AccessPolicy()); @@ -463,12 +465,20 @@ void tst_RegisterFileValidator::testAccessPoliciesAreValid() RegisterFileValidator validator(parser, registerValidator, parameterValidator, Document::Revision::Std22); + QSharedPointer dummyComponent(new Component(VLNV(VLNV::COMPONENT, "vendor", "libray", "name", "1.0"), Document::Revision::Std22)); + QSharedPointer mode1(new Mode("ref")); + QSharedPointer mode2(new Mode("ref1")); + dummyComponent->getModes()->append(mode1); + dummyComponent->getModes()->append(mode2); + + validator.componentChange(dummyComponent); + QStringList errors; QStringList possibleErrors(QStringList() - << "One or more mode references in access policies of register test within test contain duplicate priority values." - << "One or more mode references in access policies of register test within test contain duplicate mode reference values." - << "In register test in test, multiple access policies are not allowed if one of them lacks a mode reference." + << "One or more mode references in access policies of register file test within test contain duplicate priority values." + << "One or more mode references in access policies of register file test within test contain duplicate mode reference values." + << "In register file test in test, multiple access policies are not allowed if one of them lacks a mode reference." ); // Test duplicate mode reference priority. @@ -479,18 +489,31 @@ void tst_RegisterFileValidator::testAccessPoliciesAreValid() // Test duplicate reference. errors.clear(); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); modeRef2->setReference("ref"); validator.findErrorsIn(errors, testRegisterFile, "test", "8", "32"); QVERIFY(errors.contains(possibleErrors.at(1))); QVERIFY(validator.hasValidAccessPolicies(testRegisterFile) == false); - // Test valid. + // Test invalid. errors.clear(); modeRef2->setReference("ref2"); + validator.findErrorsIn(errors, testRegisterFile, "test", "8", "32"); + QVERIFY(std::none_of(possibleErrors.cbegin(), possibleErrors.cend(), [&errors](QString const& str) + { + return errors.contains(str); + })); + + QVERIFY(validator.hasValidAccessPolicies(testRegisterFile) == false); + + // Test valid. + errors.clear(); + + modeRef2->setReference("ref1"); + validator.findErrorsIn(errors, testRegisterFile, "test", "8", "32"); QVERIFY(std::none_of(possibleErrors.cbegin(), possibleErrors.cend(), [&errors](QString const& str) { diff --git a/tests/IPXACTmodels/Component/tst_RegisterReader.cpp b/tests/IPXACTmodels/Component/tst_RegisterReader.cpp index 4d41ad88a..15516a99a 100644 --- a/tests/IPXACTmodels/Component/tst_RegisterReader.cpp +++ b/tests/IPXACTmodels/Component/tst_RegisterReader.cpp @@ -501,14 +501,14 @@ void tst_RegisterReader::readRegisterAccessPolicies2022() auto accessPolicy2 = testRegister->getAccessPolicies()->at(1); QCOMPARE(accessPolicy1->getModeReferences()->size(), 1); - QCOMPARE(accessPolicy1->getModeReferences()->first()->getPriority(), QString("0")); + QCOMPARE(accessPolicy1->getModeReferences()->first()->getPriority(), 0); QCOMPARE(accessPolicy1->getModeReferences()->first()->getReference(), QString("testMode")); QCOMPARE(accessPolicy1->getAccess(), AccessTypes::READ_ONLY); QCOMPARE(accessPolicy2->getModeReferences()->size(), 2); - QCOMPARE(accessPolicy2->getModeReferences()->first()->getPriority(), QString("1")); + QCOMPARE(accessPolicy2->getModeReferences()->first()->getPriority(), 1); QCOMPARE(accessPolicy2->getModeReferences()->first()->getReference(), QString("testMode2")); - QCOMPARE(accessPolicy2->getModeReferences()->at(1)->getPriority(), QString("2")); + QCOMPARE(accessPolicy2->getModeReferences()->at(1)->getPriority(), 2); QCOMPARE(accessPolicy2->getModeReferences()->at(1)->getReference(), QString("testMode3")); } @@ -587,9 +587,9 @@ void tst_RegisterReader::readAlternateRegisters2022() auto modeRefs = alternateRegister->getModeReferences(); QCOMPARE(modeRefs->size(), 2); - QCOMPARE(modeRefs->first()->getPriority(), QString("0")); + QCOMPARE(modeRefs->first()->getPriority(), 0); QCOMPARE(modeRefs->first()->getReference(), QString("testMode")); - QCOMPARE(modeRefs->at(1)->getPriority(), QString("1")); + QCOMPARE(modeRefs->at(1)->getPriority(), 1); QCOMPARE(modeRefs->at(1)->getReference(), QString("testMode2")); auto accessPolicies = alternateRegister->getAccessPolicies(); @@ -599,14 +599,14 @@ void tst_RegisterReader::readAlternateRegisters2022() auto accessPolicy2 = alternateRegister->getAccessPolicies()->at(1); QCOMPARE(accessPolicy1->getModeReferences()->size(), 1); - QCOMPARE(accessPolicy1->getModeReferences()->first()->getPriority(), QString("0")); + QCOMPARE(accessPolicy1->getModeReferences()->first()->getPriority(), 0); QCOMPARE(accessPolicy1->getModeReferences()->first()->getReference(), QString("testMode")); QCOMPARE(accessPolicy1->getAccess(), AccessTypes::READ_ONLY); QCOMPARE(accessPolicy2->getModeReferences()->size(), 2); - QCOMPARE(accessPolicy2->getModeReferences()->first()->getPriority(), QString("1")); + QCOMPARE(accessPolicy2->getModeReferences()->first()->getPriority(), 1); QCOMPARE(accessPolicy2->getModeReferences()->first()->getReference(), QString("testMode2")); - QCOMPARE(accessPolicy2->getModeReferences()->at(1)->getPriority(), QString("2")); + QCOMPARE(accessPolicy2->getModeReferences()->at(1)->getPriority(), 2); QCOMPARE(accessPolicy2->getModeReferences()->at(1)->getReference(), QString("testMode3")); QCOMPARE(alternateRegister->getFields()->size(), 1); @@ -969,14 +969,14 @@ void tst_RegisterReader::readRegisterFileAccessPolicies2022() auto accessPolicy2 = testRegisterFile->getAccessPolicies()->at(1); QCOMPARE(accessPolicy1->getModeReferences()->size(), 1); - QCOMPARE(accessPolicy1->getModeReferences()->first()->getPriority(), QString("0")); + QCOMPARE(accessPolicy1->getModeReferences()->first()->getPriority(), 0); QCOMPARE(accessPolicy1->getModeReferences()->first()->getReference(), QString("testMode")); QCOMPARE(accessPolicy1->getAccess(), AccessTypes::READ_ONLY); QCOMPARE(accessPolicy2->getModeReferences()->size(), 2); - QCOMPARE(accessPolicy2->getModeReferences()->first()->getPriority(), QString("1")); + QCOMPARE(accessPolicy2->getModeReferences()->first()->getPriority(), 1); QCOMPARE(accessPolicy2->getModeReferences()->first()->getReference(), QString("testMode2")); - QCOMPARE(accessPolicy2->getModeReferences()->at(1)->getPriority(), QString("2")); + QCOMPARE(accessPolicy2->getModeReferences()->at(1)->getPriority(), 2); QCOMPARE(accessPolicy2->getModeReferences()->at(1)->getReference(), QString("testMode3")); } diff --git a/tests/IPXACTmodels/Component/tst_RegisterValidator.cpp b/tests/IPXACTmodels/Component/tst_RegisterValidator.cpp index 42d6c9321..864668429 100644 --- a/tests/IPXACTmodels/Component/tst_RegisterValidator.cpp +++ b/tests/IPXACTmodels/Component/tst_RegisterValidator.cpp @@ -20,6 +20,8 @@ #include #include #include +#include +#include #include #include @@ -1258,11 +1260,11 @@ void tst_RegisterValidator::testRegisterAccessPoliciesAreValid2022() QSharedPointer testRegister(new Register("test", "8", "8")); QSharedPointer modeRef1(new ModeReference()); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); modeRef1->setReference("ref"); QSharedPointer modeRef2(new ModeReference()); - modeRef2->setPriority("0"); + modeRef2->setPriority(0); modeRef2->setReference("ref1"); QSharedPointer accessPolicy1(new AccessPolicy()); @@ -1280,11 +1282,20 @@ void tst_RegisterValidator::testRegisterAccessPoliciesAreValid2022() QSharedPointer fieldValidator(new FieldValidator(parser, enumValidator, parameterValidator)); RegisterValidator validator(parser, fieldValidator, parameterValidator, Document::Revision::Std22); + QSharedPointer dummyComponent(new Component(VLNV(VLNV::COMPONENT, "vendor", "library", "name", "version"), Document::Revision::Std22)); + QSharedPointer mode1(new Mode("ref")); + QSharedPointer mode2(new Mode("ref1")); + dummyComponent->getModes()->append(mode1); + dummyComponent->getModes()->append(mode2); + + validator.componentChange(dummyComponent); + QStringList errors; QStringList possibleErrors(QStringList() << "One or more mode references in access policies of register 'test' within test contain duplicate priority values." << "One or more mode references in access policies of register 'test' within test contain duplicate mode reference values." + << "Mode reference in access policies of register 'test' within test has invalid or empty reference value 'ref2'." << "In register test in test, multiple access policies are not allowed if one of them lacks a mode reference." ); @@ -1296,18 +1307,26 @@ void tst_RegisterValidator::testRegisterAccessPoliciesAreValid2022() // Test duplicate reference. errors.clear(); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); modeRef2->setReference("ref"); validator.findErrorsIn(errors, testRegister, "test"); QVERIFY(errors.contains(possibleErrors.at(1))); QVERIFY(validator.hasValidAccessPolicies(testRegister) == false); - // Test valid. + // Test invalid mode ref. errors.clear(); modeRef2->setReference("ref2"); + validator.findErrorsIn(errors, testRegister, "test"); + QVERIFY(errors.contains(possibleErrors.at(2))); + + + // Test valid mode refs. + errors.clear(); + modeRef2->setReference("ref1"); + validator.findErrorsIn(errors, testRegister, "test"); QVERIFY(std::none_of(possibleErrors.cbegin(), possibleErrors.cend(), [&errors](QString const& str) { @@ -1324,13 +1343,11 @@ void tst_RegisterValidator::testModeRefsOfAlternativeRegisetrsAreValid2022() { QSharedPointer registerField(new Field("regField")); registerField->setBitOffset("8"); - registerField->setBitWidth("4"); registerField->setTypeDefinitionsRef("testTypeDefinitions"); registerField->setFieldDefinitionRef("testField"); QSharedPointer altRegisterField(new Field("altRegField")); altRegisterField->setBitOffset("8"); - altRegisterField->setBitWidth("4"); altRegisterField->setTypeDefinitionsRef("testTypeDefinitions2"); altRegisterField->setFieldDefinitionRef("testField2"); @@ -1348,11 +1365,11 @@ void tst_RegisterValidator::testModeRefsOfAlternativeRegisetrsAreValid2022() testRegister->getAlternateRegisters()->append(alternateRegister2); QSharedPointer modeRef1(new ModeReference()); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); modeRef1->setReference("testMode"); QSharedPointer modeRef2(new ModeReference()); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); modeRef2->setReference("testMode2"); QSharedPointer parser(new SystemVerilogExpressionParser()); @@ -1362,6 +1379,14 @@ void tst_RegisterValidator::testModeRefsOfAlternativeRegisetrsAreValid2022() QSharedPointer fieldValidator(new FieldValidator(parser, enumValidator, parameterValidator)); RegisterValidator validator(parser, fieldValidator, parameterValidator, Document::Revision::Std22); + QSharedPointer dummyComponent(new Component(VLNV(VLNV::COMPONENT, "vendor", "library", "name", "version"), Document::Revision::Std22)); + QSharedPointer mode1(new Mode("testMode")); + QSharedPointer mode2(new Mode("testMode2")); + dummyComponent->getModes()->append(mode1); + dummyComponent->getModes()->append(mode2); + + validator.componentChange(dummyComponent); + QStringList errors; // Test no mode refs = error @@ -1383,14 +1408,14 @@ void tst_RegisterValidator::testModeRefsOfAlternativeRegisetrsAreValid2022() errors.clear(); // Test duplicate priority - modeRef1->setPriority("1"); + modeRef1->setPriority(1); validator.findErrorsIn(errors, testRegister, "test"); QCOMPARE(errors.size(), 1); QVERIFY(validator.hasValidAlternateRegisters(testRegister) == false); errors.clear(); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); // Test duplicate reference modeRef1->setReference("testMode2"); @@ -1407,23 +1432,6 @@ void tst_RegisterValidator::testModeRefsOfAlternativeRegisetrsAreValid2022() QCOMPARE(errors.size(), 1); QVERIFY(errors.contains("Mode reference in alternate register testAlternate within register testRegister has invalid or empty reference value 'value with whitespace'.")); QVERIFY(validator.hasValidAlternateRegisters(testRegister) == false); - - errors.clear(); - modeRef1->setReference("testMode"); - - // Test invalid priority value. - modeRef1->setPriority("abc"); - validator.findErrorsIn(errors, testRegister, "test"); - QCOMPARE(errors.size(), 1); - QVERIFY(errors.contains("Mode reference in alternate register testAlternate within register testRegister has invalid or empty priority 'abc'.")); - QVERIFY(validator.hasValidAlternateRegisters(testRegister) == false); - - errors.clear(); - modeRef1->setPriority("-1"); - validator.findErrorsIn(errors, testRegister, "test"); - QCOMPARE(errors.size(), 1); - QVERIFY(errors.contains("Mode reference in alternate register testAlternate within register testRegister has invalid or empty priority '-1'.")); - QVERIFY(validator.hasValidAlternateRegisters(testRegister) == false); } //----------------------------------------------------------------------------- @@ -1436,13 +1444,11 @@ void tst_RegisterValidator::testAlternateRegisterAccessPoliciesAreValid2022() QSharedPointer registerField(new Field("regField")); registerField->setBitOffset("8"); - registerField->setBitWidth("4"); registerField->setTypeDefinitionsRef("testTypeDefinitions"); registerField->setFieldDefinitionRef("testField"); QSharedPointer altRegisterField(new Field("altRegField")); altRegisterField->setBitOffset("8"); - altRegisterField->setBitWidth("4"); altRegisterField->setTypeDefinitionsRef("testTypeDefinitions2"); altRegisterField->setFieldDefinitionRef("testField2"); @@ -1452,15 +1458,15 @@ void tst_RegisterValidator::testAlternateRegisterAccessPoliciesAreValid2022() testRegister->getAlternateRegisters()->append(alternateRegister); QSharedPointer modeRef1(new ModeReference()); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); modeRef1->setReference("ref"); QSharedPointer modeRef2(new ModeReference()); - modeRef2->setPriority("0"); + modeRef2->setPriority(0); modeRef2->setReference("ref1"); QSharedPointer altRegisterModeRef(new ModeReference()); - altRegisterModeRef->setPriority("1000"); + altRegisterModeRef->setPriority(1000); altRegisterModeRef->setReference("superUnique"); QSharedPointer accessPolicy1(new AccessPolicy()); @@ -1479,6 +1485,16 @@ void tst_RegisterValidator::testAlternateRegisterAccessPoliciesAreValid2022() QSharedPointer fieldValidator(new FieldValidator(parser, enumValidator, parameterValidator)); RegisterValidator validator(parser, fieldValidator, parameterValidator, Document::Revision::Std22); + QSharedPointer dummyComponent(new Component(VLNV(VLNV::COMPONENT, "vendor", "library", "name", "version"), Document::Revision::Std22)); + QSharedPointer mode1(new Mode("ref")); + QSharedPointer mode2(new Mode("ref1")); + QSharedPointer mode3(new Mode("superUnique")); + dummyComponent->getModes()->append(mode1); + dummyComponent->getModes()->append(mode2); + dummyComponent->getModes()->append(mode3); + + validator.componentChange(dummyComponent); + QStringList errors; QStringList possibleErrors(QStringList() @@ -1495,17 +1511,17 @@ void tst_RegisterValidator::testAlternateRegisterAccessPoliciesAreValid2022() // Test duplicate reference. errors.clear(); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); modeRef2->setReference("ref"); validator.findErrorsIn(errors, testRegister, "test"); QVERIFY(errors.contains(possibleErrors.at(1))); QVERIFY(validator.hasValidAlternateRegisters(testRegister) == false); - // Test valid. + // Test valid mode ref. errors.clear(); - modeRef2->setReference("ref2"); + modeRef2->setReference("ref1"); validator.findErrorsIn(errors, testRegister, "test"); QVERIFY(std::none_of(possibleErrors.cbegin(), possibleErrors.cend(), [&errors](QString const& str) diff --git a/tests/IPXACTmodels/Component/tst_RegisterWriter.cpp b/tests/IPXACTmodels/Component/tst_RegisterWriter.cpp index 2fb6cbac9..63ba32e7d 100644 --- a/tests/IPXACTmodels/Component/tst_RegisterWriter.cpp +++ b/tests/IPXACTmodels/Component/tst_RegisterWriter.cpp @@ -417,15 +417,15 @@ void tst_RegisterWriter::writeRegisterAlternateRegisters2022() QSharedPointer modeRef1(new ModeReference()); modeRef1->setReference("testMode"); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); QSharedPointer modeRef2(new ModeReference()); modeRef2->setReference("testMode2"); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); QSharedPointer modeRef3(new ModeReference(*modeRef1)); modeRef3->setReference("testMode3"); - modeRef3->setPriority("2"); + modeRef3->setPriority(2); QSharedPointer accessPolicy1(new AccessPolicy()); @@ -620,7 +620,7 @@ void tst_RegisterWriter::writeRegisterAccessPolicies2022() QSharedPointer modeRef1(new ModeReference()); modeRef1->setReference("testMode"); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); QSharedPointer accessPolicy1(new AccessPolicy()); accessPolicy1->getModeReferences()->append(modeRef1); @@ -629,11 +629,11 @@ void tst_RegisterWriter::writeRegisterAccessPolicies2022() QSharedPointer modeRef2(new ModeReference()); modeRef2->setReference("testMode2"); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); QSharedPointer modeRef3(new ModeReference(*modeRef1)); modeRef3->setReference("testMode3"); - modeRef3->setPriority("2"); + modeRef3->setPriority(2); QSharedPointer accessPolicy2(new AccessPolicy()); accessPolicy2->getModeReferences()->append(modeRef2); @@ -996,7 +996,7 @@ void tst_RegisterWriter::writeRegisterFileAccessPolicies2022() QSharedPointer modeRef1(new ModeReference()); modeRef1->setReference("testMode"); - modeRef1->setPriority("0"); + modeRef1->setPriority(0); QSharedPointer accessPolicy1(new AccessPolicy()); accessPolicy1->getModeReferences()->append(modeRef1); @@ -1005,11 +1005,11 @@ void tst_RegisterWriter::writeRegisterFileAccessPolicies2022() QSharedPointer modeRef2(new ModeReference()); modeRef2->setReference("testMode2"); - modeRef2->setPriority("1"); + modeRef2->setPriority(1); QSharedPointer modeRef3(new ModeReference(*modeRef1)); modeRef3->setReference("testMode3"); - modeRef3->setPriority("2"); + modeRef3->setPriority(2); QSharedPointer accessPolicy2(new AccessPolicy()); accessPolicy2->getModeReferences()->append(modeRef2); diff --git a/version.h b/version.h index 82747b106..bf7a66105 100644 --- a/version.h +++ b/version.h @@ -10,20 +10,20 @@ #ifndef VERSIONNO__H #define VERSIONNO__H -#define VERSION_FULL 3.12.997.0 +#define VERSION_FULL 3.12.1047.0 #define VERSION_BASEYEAR 0 #define VERSION_DATE "2023-11-22" -#define VERSION_TIME "10:08:22" +#define VERSION_TIME "11:33:25" #define VERSION_MAJOR 3 #define VERSION_MINOR 12 -#define VERSION_BUILDNO 997 +#define VERSION_BUILDNO 1047 #define VERSION_EXTEND 0 -#define VERSION_FILE 3,12,997,0 -#define VERSION_PRODUCT 3,12,997,0 -#define VERSION_FILESTR "3,12,997,0" -#define VERSION_PRODUCTSTR "3,12,997,0" +#define VERSION_FILE 3,12,1047,0 +#define VERSION_PRODUCT 3,12,1047,0 +#define VERSION_FILESTR "3,12,1047,0" +#define VERSION_PRODUCTSTR "3,12,1047,0" #endif