TEST_FIXTURE(SDL_fixture, HierarchalWidgets) { /* Layout |------------------------------| |--------| |A | |E | | |-----------| |-------| | | | | |B | |C | | | | | | | |-------| | | | | | | | | | | | | | | | | | | |-------| | | | | | | |D | | | | | |-----------| |-------| | | | | | | | |------------------------------| |--------| |------------------------------------------| |F | |------------------------------------------| */ UNITTEST_TIME_CONSTRAINT(50); CHECK(SDL_init_ok); if(SDL_init_ok) { Widget* A = new Widget(); Widget* B = new Widget(); Widget* C = new Widget(); Widget* D = new Widget(); Widget* E = new Widget(); Widget* F = new Widget(); A->AddChild(B); A->AddChild(C); A->AddChild(D); A->LinkInnerRight(B); A->LinkInnerLeft(C); A->LinkInnerDown(B); A->LinkInnerUp(B); A->LinkRight(E); E->LinkLeft(A); B->LinkRight(C); C->LinkLeft(B); D->LinkLeft(B); A->LinkDown(F); E->LinkDown(F); F->LinkUp(A); A->SetFocus(); CHECK_EQUAL(true, A->HasFocus()); Widget::GetWidgetWithFocus()->HandleEvent(Event(EventType::KeyDown)); CHECK_EQUAL(true, B->HasFocus()); Widget::GetWidgetWithFocus()->HandleEvent(Event(EventType::KeyDown)); CHECK_EQUAL(true, F->HasFocus()); Widget::GetWidgetWithFocus()->HandleEvent(Event(EventType::KeyUp)); CHECK_EQUAL(true, A->HasFocus()); Widget::GetWidgetWithFocus()->HandleEvent(Event(EventType::KeyUp)); CHECK_EQUAL(true, B->HasFocus()); Widget::GetWidgetWithFocus()->HandleEvent(Event(EventType::KeyUp)); CHECK_EQUAL(true, A->HasFocus()); Widget::GetWidgetWithFocus()->HandleEvent(Event(EventType::KeyRight)); CHECK_EQUAL(true, B->HasFocus()); Widget::GetWidgetWithFocus()->HandleEvent(Event(EventType::KeyRight)); CHECK_EQUAL(true, C->HasFocus()); Widget::GetWidgetWithFocus()->HandleEvent(Event(EventType::KeyRight)); CHECK_EQUAL(true, E->HasFocus()); Widget::ClearRoot(); } }