void Tests::basicTests() { // Some very basic tests to make sure that we have access to the CellML API // Get a bootstrap object and its model loader ObjRef<iface::cellml_api::CellMLBootstrap> cellmlBootstrap = CreateCellMLBootstrap(); ObjRef<iface::cellml_api::DOMModelLoader> modelLoader = cellmlBootstrap->modelLoader(); QVERIFY(cellmlBootstrap); QVERIFY(modelLoader); // Create a CellML 1.0 model ObjRef<iface::cellml_api::Model> cellml10Model = cellmlBootstrap->createModel(L"1.0"); QVERIFY(cellml10Model); // Create a CellML 1.1 model ObjRef<iface::cellml_api::Model> cellml11Model = cellmlBootstrap->createModel(L"1.1"); QVERIFY(cellml11Model); // Create an invalid CellML model ObjRef<iface::cellml_api::Model> invalidCellmlModel; try { invalidCellmlModel = cellmlBootstrap->createModel(L"xxx"); } catch (...) { QVERIFY(!invalidCellmlModel); } // Load an existing model ObjRef<iface::cellml_api::Model> existingModel = modelLoader->loadFromURL(QUrl::fromPercentEncoding(QUrl::fromLocalFile(QFileInfo(OpenCOR::fileName("models/noble_model_1962.cellml")).canonicalFilePath()).toEncoded()).toStdWString()); QVERIFY(existingModel); QCOMPARE(QString::fromStdWString(existingModel->name()), QString("noble_model_1962")); QCOMPARE(QString::fromStdWString(existingModel->cellmlVersion()), QString("1.0")); // Load a non-existing model ObjRef<iface::cellml_api::Model> nonExistingModel; try { nonExistingModel = modelLoader->loadFromURL(L"xxx"); } catch (...) { QVERIFY(!nonExistingModel); } }
int CellmlModelDefinition::loadModel(const std::string &url) { std::cout << "Creating CellML Model Definition from the URL: " << url << std::endl; mUrl = url; if (mUrl.empty()) return -1; std::wstring urlW = s2ws(url); ObjRef<iface::cellml_api::CellMLBootstrap> cb = CreateCellMLBootstrap(); ObjRef<iface::cellml_api::DOMModelLoader> ml = cb->modelLoader(); int code; try { ObjRef<iface::cellml_api::Model> model = ml->loadFromURL(urlW); model->fullyInstantiateImports(); // we have a model, so we can start grabbing hold of the CellML API objects mCapi = new CellmlApiObjects(); mCapi->model = model; code = instantiateCellmlApiObjects(); } catch (...) { std::wcerr << L"Error loading model: " << urlW << std::endl; return -1; } return code; }
bool CellmlFile::doLoad(const QString &pFileName, const QString &pFileContents, ObjRef<iface::cellml_api::Model> *pModel, CellmlFileIssues &pIssues) { // Make sure that pIssues is empty pIssues.clear(); // Get a bootstrap object and its model loader ObjRef<iface::cellml_api::CellMLBootstrap> cellmlBootstrap = CreateCellMLBootstrap(); ObjRef<iface::cellml_api::DOMModelLoader> modelLoader = cellmlBootstrap->modelLoader(); // Try to create the model try { if (pFileContents.isEmpty()) *pModel = modelLoader->loadFromURL(QUrl::fromPercentEncoding(QUrl::fromLocalFile(pFileName).toEncoded()).toStdWString()); else *pModel = modelLoader->createFromText(pFileContents.toStdWString()); } catch (iface::cellml_api::CellMLException &exception) { // Something went wrong with the loading of the model if (pFileContents.isEmpty()) { pIssues << CellmlFileIssue(CellmlFileIssue::Error, QObject::tr("the model could not be loaded (%1)").arg(Core::formatMessage(QString::fromStdWString(exception.explanation)))); } else { pIssues << CellmlFileIssue(CellmlFileIssue::Error, QObject::tr("the model could not be created (%1)").arg(Core::formatMessage(QString::fromStdWString(exception.explanation)))); } return false; } // Update the base URI, should the CellML file be a remote one or its // contents be directly passed onto us Core::FileManager *fileManagerInstance = Core::FileManager::instance(); ObjRef<iface::cellml_api::URI> baseUri = (*pModel)->xmlBase(); if (fileManagerInstance->isRemote(pFileName)) { // We are dealing with a remote file, so its XML base value should point // to its remote location baseUri->asText(fileManagerInstance->url(pFileName).toStdWString()); } else if (!pFileContents.isEmpty()) { // We are dealing with a file which contents was directly passed onto // us, so its XML base value should point to its actual location baseUri->asText(pFileName.toStdWString()); } return true; }