/************************************* * OnTestResult *************************************/ void SHVUnitTestImpl::OnTestResult(SHVEvent* event) { SHVEventQueue* q = TestResultShowSubs->Emit(Modules,event); AllOK = AllOK && ((SHVTestBase*)event->GetObject())->PerformedOK(); if (!IsPerforming()) TestResultShowSubs->Emit(Modules,new SHVEvent(this,-1)); if (q) q->SignalDispatcher(); }
void AmInputTarget::HandleEvents(AmEvent* events) { mQueue->Lock(); if (mQueue->IsPerforming() && IsPerforming()) { mQueue->Unlock(); mQueue->PerformEvents(mTrack, events->CopyChain()); mQueue->Lock(); } if (!mQueue->IsRecording() || !IsRecording()) { mQueue->Unlock(); //printf("Dropping record:\n"); events->PrintChain(); events->DeleteChain(); return; } mQueue->Unlock(); mQueue->RecordEvents(mTrack, events); }
/************************************* * OnMenuEvent *************************************/ void SHVUnitTestImpl::OnMenuEvent(SHVEvent* event) { if (event->GetSubID() == SHVInt(MenuQuit)) { Modules.CloseApp(); } else if (event->GetSubID() == SHVInt(MenuClearLog)) { FormMain->ClearLog(); } else if (event->GetSubID() == SHVInt(MenuPerformAll)) { PerformTestFromString("all"); } else if (!event->GetSubID().IsNull() && event->GetSubID() < SHVInt((int)ActionMenuItems.CalculateCount())) { ActionMenuItem* item = ActionMenuItems[event->GetSubID()]; Performing = true; AllOK = true; if (item->Group) { for (size_t i=0; i<item->Group->Tests.CalculateCount(); i++) item->Group->Tests[i]->Perform(Modules,item->Flag,TestResultSubs); } else if (item->Tester) { item->Tester->Perform(Modules,item->Flag,TestResultSubs); } Performing = false; if (!IsPerforming()) TestResultShowSubs->EmitNow(Modules,new SHVEvent(this,-1)); } }
/************************************* * PerformTestFromString *************************************/ void SHVUnitTestImpl::PerformTestFromString(const SHVString8C str) { int dot = str.Find("."); SHVString8 groupID, testID, actionID; int flag = 0; bool allMode, allGroupMode; SHVListIterator<TestGroupPtr, TestGroup*> testItr(TestGroups); Performing = true; AllOK = true; if (dot > 0) { testID = str.Mid(dot+1); groupID = str.Left(dot); dot = testID.Find("."); if (dot > 0) { actionID = testID.Mid(dot+1); testID = testID.Left(dot); } } else { groupID = str; } allMode = groupID == "all"; allGroupMode = testID == "all"; while (testItr.MoveNext()) { if (testItr.Get()->Group == groupID || allMode) { for (size_t i = 0; i<testItr.Get()->Tests.CalculateCount() && (!flag || allMode || allGroupMode); i++) { if (allMode || allGroupMode || testItr.Get()->Tests[i]->GetID() == testID) { if (actionID.IsEmpty()) { flag = SHVTestBase::FlagAll; } else { for (const SHVTestBase::Action* actions = testItr.Get()->Tests[i]->GetActions(); actions && actions->Flag && !flag; actions++) { if (actionID == actions->ActionID) flag = actions->Flag; } } if (flag) testItr.Get()->Tests[i]->Perform(Modules,flag,TestResultSubs); } } } } if (!flag) { SHVConsole::ErrPrintf8("Invalid test : %s\n For a list of tests, try /list\n", str.GetSafeBuffer()); AllOK = false; if (!Modules.GetConfig().Find(_S("perform"))->ToString().IsEmpty() && Modules.GetConfig().Find(_S("closeafter"))->ToInt().IfNull(0)) { Modules.SetReturnError(AllOK); Modules.CloseApp(); } } Performing = false; if (!IsPerforming() && flag) TestResultShowSubs->EmitNow(Modules,new SHVEvent(this,-1)); }