Пример #1
0
void Chaser_Test::quickChaser()
{
    Fixture* fxi = new Fixture(m_doc);
    fxi->setAddress(0);
    fxi->setUniverse(0);
    fxi->setChannels(1);
    m_doc->addFixture(fxi);

    Chaser* c = new Chaser(m_doc);
    // A really quick chaser
    c->setDuration(0);
    m_doc->addFunction(c);

    Scene* s1 = new Scene(m_doc);
    s1->setValue(fxi->id(), 0, 255);
    m_doc->addFunction(s1);
    c->addStep(s1->id());

    Scene* s2 = new Scene(m_doc);
    s2->setValue(fxi->id(), 0, 127);
    m_doc->addFunction(s2);
    c->addStep(s2->id());

    MasterTimer timer(m_doc);

    QVERIFY(c->isRunning() == false);
    QVERIFY(c->stopped() == true);
    c->start(&timer, FunctionParent::master());

    timer.timerTick();
    for (uint i = 0; i < 12; ++i)
    {
        timer.timerTick();
        QVERIFY(c->isRunning() == true);
        QVERIFY(c->stopped() == false);
        // always one function running while the other is not
        QVERIFY(s1->isRunning() == true || s2->isRunning() == true);
        QVERIFY(s1->stopped() == true || s2->stopped() == true);
    }

    c->stop(FunctionParent::master());

    timer.timerTick();

    QVERIFY(c->isRunning() == false);
    QVERIFY(c->stopped() == true);
    QVERIFY(s1->isRunning() == false);
    QVERIFY(s1->stopped() == true);
    QVERIFY(s2->isRunning() == false);
    QVERIFY(s2->stopped() == true);
}
Пример #2
0
void Chaser_Test::write()
{
    Fixture* fxi = new Fixture(m_doc);
    fxi->setAddress(0);
    fxi->setUniverse(0);
    fxi->setChannels(1);
    m_doc->addFixture(fxi);

    Chaser* c = new Chaser(m_doc);
    c->setDuration(MasterTimer::tick() * 10);
    m_doc->addFunction(c);

    Scene* s1 = new Scene(m_doc);
    s1->setValue(fxi->id(), 0, 255);
    m_doc->addFunction(s1);
    c->addStep(s1->id());

    Scene* s2 = new Scene(m_doc);
    s2->setValue(fxi->id(), 0, 127);
    m_doc->addFunction(s2);
    c->addStep(s2->id());

    MasterTimer timer(m_doc);

    QVERIFY(c->isRunning() == false);
    QVERIFY(c->stopped() == true);
    c->start(&timer);

    timer.timerTick();
    for (uint i = MasterTimer::tick(); i < c->duration(); i += MasterTimer::tick())
    {
        timer.timerTick();
        QVERIFY(c->isRunning() == true);
        QVERIFY(c->stopped() == false);
        QVERIFY(s1->isRunning() == true);
        QVERIFY(s2->isRunning() == false);
    }

    for (uint i = 0; i < c->duration(); i += MasterTimer::tick())
    {
        timer.timerTick();
        QVERIFY(c->isRunning() == true);
        QVERIFY(c->stopped() == false);
        QVERIFY(s1->isRunning() == false);
        QVERIFY(s2->isRunning() == true);
    }
}
Пример #3
0
void Chaser_Test::writeBusZeroSingleShotBackward()
{
	Doc* doc = new Doc(this, m_cache);

	Bus::instance()->setValue(Bus::defaultFade(), 0);
	Bus::instance()->setValue(Bus::defaultHold(), 0);

	Fixture* fxi = new Fixture(doc);
	fxi->setAddress(0);
	fxi->setUniverse(0);
	fxi->setChannels(2);
	doc->addFixture(fxi);

	Scene* s1 = new Scene(doc);
	s1->setName("Scene1");
	s1->setValue(fxi->id(), 0, UCHAR_MAX);
	s1->setValue(fxi->id(), 1, UCHAR_MAX);
	doc->addFunction(s1);

	Scene* s2 = new Scene(doc);
	s2->setName("Scene2");
	s2->setValue(fxi->id(), 0, 0);
	s2->setValue(fxi->id(), 1, 0);
	doc->addFunction(s2);

	Chaser* c = new Chaser(doc);
	c->setName("Chaser");
	c->setRunOrder(Chaser::SingleShot);
	c->setDirection(Chaser::Backward);
	c->addStep(s1->id());
	c->addStep(s2->id());

	s1->arm();
	s2->arm();
	c->arm();

	QByteArray uni;
	MasterTimerStub* mts = new MasterTimerStub(this, NULL, uni);

	QVERIFY(c->stopped() == true);
	mts->startFunction(c);
	QVERIFY(c->stopped() == false);

	/* SingleShot will stop automatically after the last step */
	c->write(mts, &uni);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s2);
	QVERIFY(s2->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s2->stopped() == true);
	mts->stopFunction(s2);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s1);
	QVERIFY(s1->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(c->stopped() == true);
	mts->stopFunction(c);
	QVERIFY(s1->stopped() == true);
	QVERIFY(s2->stopped() == true);

	c->disarm();
	s1->disarm();
	s2->disarm();

	delete mts;
	delete doc;
}
Пример #4
0
void Chaser_Test::writeBusZeroPingPongForward()
{
	Doc* doc = new Doc(this, m_cache);

	Bus::instance()->setValue(Bus::defaultFade(), 0);
	Bus::instance()->setValue(Bus::defaultHold(), 0);

	Fixture* fxi = new Fixture(doc);
	fxi->setAddress(0);
	fxi->setUniverse(0);
	fxi->setChannels(2);
	doc->addFixture(fxi);

	Scene* s1 = new Scene(doc);
	s1->setName("Scene1");
	s1->setValue(fxi->id(), 0, UCHAR_MAX);
	s1->setValue(fxi->id(), 1, UCHAR_MAX);
	doc->addFunction(s1);

	Scene* s2 = new Scene(doc);
	s2->setName("Scene2");
	s2->setValue(fxi->id(), 0, 127);
	s2->setValue(fxi->id(), 1, 127);
	doc->addFunction(s2);

	Scene* s3 = new Scene(doc);
	s3->setName("Scene2");
	s3->setValue(fxi->id(), 0, 0);
	s3->setValue(fxi->id(), 1, 0);
	doc->addFunction(s3);

	Chaser* c = new Chaser(doc);
	c->setName("Chaser");
	c->setRunOrder(Chaser::PingPong);
	c->addStep(s1->id());
	c->addStep(s2->id());
	c->addStep(s3->id());

	s1->arm();
	s2->arm();
	s3->arm();
	c->arm();

	QByteArray uni;
	MasterTimerStub* mts = new MasterTimerStub(this, NULL, uni);

	QVERIFY(c->stopped() == true);
	mts->startFunction(c);
	QVERIFY(c->stopped() == false);

	/* Since hold bus' value is 0 each call to write() starts the next
	   step in chaser. Last step comes first because the chaser is now
	   running backwards. */
	c->write(mts, &uni);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s1);
	QVERIFY(s1->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s1->stopped() == true);
	mts->stopFunction(s1);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s2);
	QVERIFY(s2->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s2->stopped() == true);
	mts->stopFunction(s2);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s3);
	QVERIFY(s3->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s3->stopped() == true);
	mts->stopFunction(s3);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s2);
	QVERIFY(s2->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s2->stopped() == true);
	mts->stopFunction(s2);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s1);
	QVERIFY(s1->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s1->stopped() == true);
	mts->stopFunction(s1);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s2);
	QVERIFY(s2->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s2->stopped() == true);
	mts->stopFunction(s2);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s3);
	QVERIFY(s3->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s3->stopped() == true);
	mts->stopFunction(s3);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s2);
	QVERIFY(s2->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s2->stopped() == true);
	mts->stopFunction(s2);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s1);
	QVERIFY(s1->stopped() == false);

	c->stop();
	QVERIFY(c->stopped() == true);
	mts->stopFunction(c);
	QVERIFY(s1->stopped() == true);
	QVERIFY(s2->stopped() == true);
	QVERIFY(s3->stopped() == true);

	c->disarm();
	s1->disarm();
	s2->disarm();
	s3->disarm();

	delete mts;
	delete doc;
}
Пример #5
0
void Chaser_Test::writeBusZeroLoopForward()
{
	Doc* doc = new Doc(this, m_cache);

	Bus::instance()->setValue(Bus::defaultFade(), 0);
	Bus::instance()->setValue(Bus::defaultHold(), 0);

	Fixture* fxi = new Fixture(doc);
	fxi->setAddress(0);
	fxi->setUniverse(0);
	fxi->setChannels(2);
	doc->addFixture(fxi);

	Scene* s1 = new Scene(doc);
	s1->setName("Scene1");
	s1->setValue(fxi->id(), 0, UCHAR_MAX);
	s1->setValue(fxi->id(), 1, UCHAR_MAX);
	doc->addFunction(s1);

	Scene* s2 = new Scene(doc);
	s2->setName("Scene2");
	s2->setValue(fxi->id(), 0, 0);
	s2->setValue(fxi->id(), 1, 0);
	doc->addFunction(s2);

	Chaser* c = new Chaser(doc);
	c->setName("Chaser");
	c->addStep(s1->id());
	c->addStep(s2->id());

	s1->arm();
	s2->arm();
	c->arm();

	QByteArray uni;
	MasterTimerStub* mts = new MasterTimerStub(this, NULL, uni);

	QVERIFY(c->stopped() == true);
	mts->startFunction(c);
	QVERIFY(c->stopped() == false);

	/* Since hold bus' value is 0 each call to write() starts the next
	   step in chaser. The functions must be manually removed from the
	   stub, which is OK (we're not testing the timer now), as long as
	   the correct step is always marked as stopped. */
	c->write(mts, &uni);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s1);
	QVERIFY(s1->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s1->stopped() == true);
	mts->stopFunction(s1);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s2);
	QVERIFY(s2->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s2->stopped() == true);
	mts->stopFunction(s2);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s1);
	QVERIFY(s1->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s1->stopped() == true);
	mts->stopFunction(s1);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s2);
	QVERIFY(s2->stopped() == false);

	c->write(mts, &uni);
	QVERIFY(s2->stopped() == true);
	mts->stopFunction(s2);
	QVERIFY(c->stopped() == false);
	QVERIFY(mts->m_functionList.size() == 2);
	QVERIFY(mts->m_functionList[0] == c);
	QVERIFY(mts->m_functionList[1] == s1);
	QVERIFY(s1->stopped() == false);

	c->stop();
	mts->stopFunction(c);
	QVERIFY(c->stopped() == true);
	QVERIFY(s1->stopped() == true);
	QVERIFY(s2->stopped() == true);

	c->disarm();
	s1->disarm();
	s2->disarm();

	delete mts;
	delete doc;
}