int Commentary::loadModuleData(const int moduleID)
{
    myDebug() << moduleID;
    m_loaded = false;
    m_module = m_map->module(moduleID);
    m_moduleID = moduleID;
    m_moduleType = m_module->moduleType();

    if(m_module->m_commentaryModule.isNull()) {
        m_commentaryModule = m_module->newCommentaryModule(moduleType());
    } else {
        m_commentaryModule = m_module->m_commentaryModule;
    }

    if(m_commentaryModule == nullptr) {
        myWarning() << "invalid module";
        return 1;
    }
    m_commentaryModule->setSettings(m_settings);

    if(m_commentaryModule->loadModuleData(m_moduleID, m_module->path()) != 0) {
        myWarning() << "loading failed";
        return 1;
    }

    m_versification = m_commentaryModule->versification();
    m_loadedModuleID = m_moduleID;
    m_loaded = true;

    return 0;
}
TEST(ModelConstantsTest, SingleDefaultValue){
    nm::ModuleType moduleType("testModuleType");
    moduleType.addInput("myConstant", 0.6f);
    nm::ModuleInput* moduleInput1 = moduleType.getInput("myConstant");
    ASSERT_NE(nullptr, moduleInput1);
    const nm::SignalValue defaultValue = moduleInput1->getDefaultValue();
    EXPECT_EQ(1, defaultValue.getSignalType().dimensionality);
    EXPECT_EQ(0.6f, moduleInput1->getDefaultValue()[0]);
}
TEST(ModelConstantsTest, TripleDefaultValue){
    nm::ModuleType moduleType("testModuleType");
    moduleType.addInput("myConstant", std::vector<float>{1,2,3});
    nm::ModuleInput* moduleInput2 = moduleType.getInput("myConstant");
    ASSERT_NE(nullptr, moduleInput2);
    const nm::SignalValue defaultValue = moduleInput2->getDefaultValue();
    EXPECT_EQ(3, defaultValue.getSignalType().dimensionality);
    EXPECT_EQ(1, defaultValue[0]);
    EXPECT_EQ(2, defaultValue[1]);
    EXPECT_EQ(3, defaultValue[2]);
}
TEST(ModelConstantsTest, DefaultUnlinkedValue){
    nm::ModuleType moduleType("testModuleType");
    moduleType.addInput("myConstant", std::vector<float>{1,2,3});
    nm::Module module(moduleType, "testModule");
    nm::InputLink* inputLink = module.getInput("myConstant");
    ASSERT_NE(nullptr, inputLink);
    nm::SignalValue unlinkedValue = inputLink->getUnlinkedValue();
    EXPECT_EQ(3, unlinkedValue.getSignalType().dimensionality);
    EXPECT_EQ(1, unlinkedValue[0]);
    EXPECT_EQ(2, unlinkedValue[1]);
    EXPECT_EQ(3, unlinkedValue[2]);
}
TEST(ModelConstantsTest, ChangeUnlinkedValue){
    nm::ModuleType moduleType("testModuleType");
    moduleType.addInput("myConstant", std::vector<float>{1,2,3});
    nm::Module module(moduleType, "testModule");
    nm::InputLink* inputLink = module.getInput("myConstant");
    ASSERT_NE(nullptr, inputLink);
    bool touched = false;
    inputLink->unlinkedValueChanged.connect([&](const nm::InputLink&){
        touched = true;
    });
    bool successful = inputLink->setUnlinkedValue(nm::SignalValue{std::vector<float>{4,5,6}});
    EXPECT_EQ(true, successful);
    nm::SignalValue unlinkedValue = inputLink->getUnlinkedValue();
    EXPECT_EQ(3, unlinkedValue.getSignalType().dimensionality);
    EXPECT_EQ(4, unlinkedValue[0]);
    EXPECT_EQ(5, unlinkedValue[1]);
    EXPECT_EQ(6, unlinkedValue[2]);
    EXPECT_EQ(true, touched);
}