⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpresourcetest.cpp

📁 著名开源软件sipX中的sipXPortLib,和其它组件一起工作
💻 CPP
📖 第 1 页 / 共 2 页
字号:

        // add the resource to the flow graph
        res = pFlowGraph->addResource(*pResource1);
        CPPUNIT_ASSERT(res == OS_SUCCESS);
        CPPUNIT_ASSERT(pResource1->getFlowGraph() == pFlowGraph);

        // remove the resource from the flow graph
        res = pFlowGraph->removeResource(*pResource1);
        CPPUNIT_ASSERT(res == OS_SUCCESS);
        CPPUNIT_ASSERT(pResource1->getFlowGraph() == NULL);

        delete pResource1;
        delete pFlowGraph;
    }

    void testInputOutputInfoAndCounts()
    {
        MpFlowGraphBase* pFlowGraph  = 0;
        MpTestResource*  pResource1  = 0;
        MpTestResource*  pResource2  = 0;
        MpTestResource*  pDownstream = 0;
        MpTestResource*  pUpstream   = 0;
        int              downstreamPortIdx;
        int              upstreamPortIdx;
        OsStatus         res;

        pFlowGraph = new MpFlowGraphBase(30, 30);
        pResource1 = new MpTestResource("Test1", 0, 5, 1, 4);
        pResource2 = new MpTestResource("Test2", 0, 5, 1, 4);

        // Initially, there should be no input or output links
        CPPUNIT_ASSERT_EQUAL(0, pResource1->numInputs());
        CPPUNIT_ASSERT_EQUAL(0, pResource1->numOutputs());
        CPPUNIT_ASSERT_EQUAL(0, pResource2->numInputs());
        CPPUNIT_ASSERT_EQUAL(0, pResource2->numOutputs());
        res = pFlowGraph->addResource(*pResource1);
        CPPUNIT_ASSERT(res == OS_SUCCESS);

        res = pFlowGraph->addResource(*pResource2);
        CPPUNIT_ASSERT(res == OS_SUCCESS);

        // add links from
        //   pResource1, output port 0  ->  pResource2, input port 1
        //   pResource1, output port 3  ->  pResource2, input port 2
        res = pFlowGraph->addLink(*pResource1, 0, *pResource2, 1);
        CPPUNIT_ASSERT(res == OS_SUCCESS);

        res = pFlowGraph->addLink(*pResource1, 3, *pResource2, 2);
        CPPUNIT_ASSERT(res == OS_SUCCESS);

        // verify that the number of input and output links are correct
        CPPUNIT_ASSERT_EQUAL(0, pResource1->numInputs());
        CPPUNIT_ASSERT_EQUAL(2, pResource1->numOutputs());
        CPPUNIT_ASSERT_EQUAL(2, pResource2->numInputs());
        CPPUNIT_ASSERT_EQUAL(0, pResource2->numOutputs());

        // verify the input information for the downstream resource
        pResource2->getInputInfo(0, (MpResource*&) pUpstream, upstreamPortIdx);
        CPPUNIT_ASSERT(pUpstream == NULL);    // nothing should be connected on input 0

        pResource2->getInputInfo(1, (MpResource*&) pUpstream, upstreamPortIdx);
        CPPUNIT_ASSERT(pUpstream == pResource1);
        CPPUNIT_ASSERT_EQUAL(0, upstreamPortIdx);

        pResource2->getInputInfo(2, (MpResource*&) pUpstream, upstreamPortIdx);
        CPPUNIT_ASSERT(pUpstream == pResource1);
        CPPUNIT_ASSERT_EQUAL(3, upstreamPortIdx);

        // verify the output information for the upstream resource
        pResource1->getOutputInfo(1, (MpResource*&) pDownstream, downstreamPortIdx);
        CPPUNIT_ASSERT(pDownstream == NULL);  // nothing should be connected on output 1

        pResource1->getOutputInfo(0, (MpResource*&) pDownstream, downstreamPortIdx);
        CPPUNIT_ASSERT(pDownstream == pResource2);
        CPPUNIT_ASSERT_EQUAL(1, downstreamPortIdx);

        pResource1->getOutputInfo(3, (MpResource*&) pDownstream, downstreamPortIdx);
        CPPUNIT_ASSERT(pDownstream == pResource2);
        CPPUNIT_ASSERT_EQUAL(2, downstreamPortIdx);

        // remove the two links
        res = pFlowGraph->removeLink(*pResource1, 0);
        CPPUNIT_ASSERT(res == OS_SUCCESS);
   
        res = pFlowGraph->removeLink(*pResource1, 3);
        CPPUNIT_ASSERT(res == OS_SUCCESS);

        // verify the input information for the downstream resource
        pResource2->getInputInfo(1, (MpResource*&) pUpstream, upstreamPortIdx);
        CPPUNIT_ASSERT(pUpstream == NULL);

        pResource2->getInputInfo(2, (MpResource*&) pUpstream, upstreamPortIdx);
        CPPUNIT_ASSERT(pUpstream == NULL);

        // verify the output information for the upstream resource
        pResource1->getOutputInfo(0, (MpResource*&) pDownstream, downstreamPortIdx);
        CPPUNIT_ASSERT(pDownstream == NULL);

        pResource1->getOutputInfo(3, (MpResource*&) pDownstream, downstreamPortIdx);
        CPPUNIT_ASSERT(pDownstream == NULL);

        // verify the number of input and output links are correct
        CPPUNIT_ASSERT_EQUAL(0, pResource1->numInputs());
        CPPUNIT_ASSERT_EQUAL(0, pResource1->numOutputs());
        CPPUNIT_ASSERT_EQUAL(0, pResource2->numInputs());
        CPPUNIT_ASSERT_EQUAL(0, pResource2->numOutputs());

        // remove the resources from the flow graph
        res = pFlowGraph->removeResource(*pResource1);
        CPPUNIT_ASSERT(res == OS_SUCCESS);

        res = pFlowGraph->removeResource(*pResource2);
        CPPUNIT_ASSERT(res == OS_SUCCESS);
        
        delete pResource1;
        delete pResource2;
        delete pFlowGraph;
    }

    void testIsEnabled()
    {
        MpTestResource*  pResource1  = 0;

        pResource1 = new MpTestResource("Test", 0, 5, 1, 4);
        CPPUNIT_ASSERT(!pResource1->isEnabled());  // should be disabled initially
        
        pResource1->enable();
        CPPUNIT_ASSERT(pResource1->isEnabled());

        pResource1->enable();               // second enable() should be a no-op
        CPPUNIT_ASSERT(pResource1->isEnabled());

        pResource1->disable();
        CPPUNIT_ASSERT(! pResource1->isEnabled());
        
        pResource1->disable();              // second disable() should be a no-op
        CPPUNIT_ASSERT(! pResource1->isEnabled());
        
        delete pResource1;
    }


    void testIsInputOutputConnectedDisconnected()
    {
        MpFlowGraphBase* pFlowGraph  = 0;
        MpTestResource*  pResource1  = 0;
        MpTestResource*  pResource2  = 0;
        OsStatus         res;

        pFlowGraph = new MpFlowGraphBase(30, 30);
        pResource1 = new MpTestResource("Test1", 0, 2, 0, 2);
        pResource2 = new MpTestResource("Test2", 0, 2, 0, 2);
        
        res = pFlowGraph->addResource(*pResource1);
        CPPUNIT_ASSERT(res == OS_SUCCESS);
        
        res = pFlowGraph->addResource(*pResource2);
        CPPUNIT_ASSERT(res == OS_SUCCESS);

        // add link from
        //   pResource1, output port 1  ->  pResource2, input port 1
        res = pFlowGraph->addLink(*pResource1, 1, *pResource2, 1);
        CPPUNIT_ASSERT(res == OS_SUCCESS);

        // verify the link state for the inputs and outputs
        CPPUNIT_ASSERT(!pResource1->isInputConnected(-1)); // check invalid ports
        CPPUNIT_ASSERT(! pResource1->isInputConnected(2));
        CPPUNIT_ASSERT(! pResource1->isInputUnconnected(-1));
        CPPUNIT_ASSERT(! pResource1->isInputUnconnected(2));

        CPPUNIT_ASSERT(! pResource1->isInputConnected(0));  // check valid parts that
        CPPUNIT_ASSERT(! pResource1->isInputConnected(1));  // are not connected
        CPPUNIT_ASSERT(! pResource1->isOutputConnected(0));
        CPPUNIT_ASSERT(  pResource1->isInputUnconnected(0));
        CPPUNIT_ASSERT(  pResource1->isInputUnconnected(1));
        CPPUNIT_ASSERT(  pResource1->isOutputUnconnected(0));
        CPPUNIT_ASSERT(! pResource2->isInputConnected(0));
        CPPUNIT_ASSERT(! pResource2->isOutputConnected(0));
        CPPUNIT_ASSERT(! pResource2->isOutputConnected(1));
        CPPUNIT_ASSERT(  pResource2->isInputUnconnected(0));
        CPPUNIT_ASSERT(  pResource2->isOutputUnconnected(0));
        CPPUNIT_ASSERT(  pResource2->isOutputUnconnected(1));

        CPPUNIT_ASSERT(  pResource1->isOutputConnected(1));  // check connected ports
        CPPUNIT_ASSERT(! pResource1->isOutputUnconnected(1));
        CPPUNIT_ASSERT(  pResource2->isInputConnected(1));
        CPPUNIT_ASSERT(! pResource2->isInputUnconnected(1));

        // remove the link and resources from the flow graph
        res = pFlowGraph->removeLink(*pResource1, 1);
        CPPUNIT_ASSERT(res == OS_SUCCESS);

        res = pFlowGraph->removeResource(*pResource1);
        CPPUNIT_ASSERT(res == OS_SUCCESS);
        
        res = pFlowGraph->removeResource(*pResource2);
        CPPUNIT_ASSERT(res == OS_SUCCESS);

        delete pResource1;
        delete pResource2;
        delete pFlowGraph;
    }
};

CPPUNIT_TEST_SUITE_REGISTRATION(MpResourceTest);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -