Skip to content

Commit 911fbdf

Browse files
committed
More component tests
1 parent d32623b commit 911fbdf

1 file changed

Lines changed: 126 additions & 0 deletions

File tree

tests/yup_gui/yup_Component.cpp

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,35 @@ class ComponentMock : public Component
167167
void transformChanged() override { transformChangedCalled = true; }
168168
};
169169

170+
class RecordingComponentListener : public ComponentListener
171+
{
172+
public:
173+
void componentMoved (Component& component) override
174+
{
175+
++movedCount;
176+
lastMovedComponent = &component;
177+
}
178+
179+
void componentResized (Component& component) override
180+
{
181+
++resizedCount;
182+
lastResizedComponent = &component;
183+
}
184+
185+
void componentBeingDeleted (Component& component) override
186+
{
187+
++deletedCount;
188+
lastDeletedComponent = &component;
189+
}
190+
191+
int movedCount = 0;
192+
int resizedCount = 0;
193+
int deletedCount = 0;
194+
Component* lastMovedComponent = nullptr;
195+
Component* lastResizedComponent = nullptr;
196+
Component* lastDeletedComponent = nullptr;
197+
};
198+
170199
} // namespace
171200

172201
// =============================================================================
@@ -1164,6 +1193,103 @@ TEST_F (ComponentMockTest, MouseListenerMethods)
11641193
mockComponent->removeMouseListener (listener.get());
11651194
}
11661195

1196+
TEST_F (ComponentMockTest, ComponentListenerReceivesMovedCallback)
1197+
{
1198+
RecordingComponentListener listener;
1199+
mockComponent->addComponentListener (&listener);
1200+
1201+
mockComponent->setPosition ({ 10.0f, 20.0f });
1202+
1203+
EXPECT_EQ (1, listener.movedCount);
1204+
EXPECT_EQ (static_cast<Component*> (mockComponent.get()), listener.lastMovedComponent);
1205+
EXPECT_EQ (0, listener.resizedCount);
1206+
}
1207+
1208+
TEST_F (ComponentMockTest, ComponentListenerReceivesResizedCallback)
1209+
{
1210+
RecordingComponentListener listener;
1211+
mockComponent->addComponentListener (&listener);
1212+
1213+
mockComponent->setSize ({ 100.0f, 80.0f });
1214+
1215+
EXPECT_EQ (1, listener.resizedCount);
1216+
EXPECT_EQ (static_cast<Component*> (mockComponent.get()), listener.lastResizedComponent);
1217+
EXPECT_EQ (0, listener.movedCount);
1218+
}
1219+
1220+
TEST_F (ComponentMockTest, ComponentListenerReceivesMovedAndResizedFromSetBounds)
1221+
{
1222+
RecordingComponentListener listener;
1223+
mockComponent->addComponentListener (&listener);
1224+
1225+
mockComponent->setBounds (5.0f, 10.0f, 150.0f, 120.0f);
1226+
1227+
EXPECT_EQ (1, listener.movedCount);
1228+
EXPECT_EQ (1, listener.resizedCount);
1229+
EXPECT_EQ (static_cast<Component*> (mockComponent.get()), listener.lastMovedComponent);
1230+
EXPECT_EQ (static_cast<Component*> (mockComponent.get()), listener.lastResizedComponent);
1231+
}
1232+
1233+
TEST_F (ComponentMockTest, RemovingComponentListenerStopsCallbacks)
1234+
{
1235+
RecordingComponentListener listener;
1236+
mockComponent->addComponentListener (&listener);
1237+
mockComponent->removeComponentListener (&listener);
1238+
1239+
mockComponent->setPosition ({ 10.0f, 20.0f });
1240+
mockComponent->setSize ({ 100.0f, 80.0f });
1241+
1242+
EXPECT_EQ (0, listener.movedCount);
1243+
EXPECT_EQ (0, listener.resizedCount);
1244+
}
1245+
1246+
TEST_F (ComponentMockTest, ComponentListenerIsOnlyAddedOnce)
1247+
{
1248+
RecordingComponentListener listener;
1249+
mockComponent->addComponentListener (&listener);
1250+
mockComponent->addComponentListener (&listener);
1251+
1252+
mockComponent->setPosition ({ 10.0f, 20.0f });
1253+
1254+
EXPECT_EQ (1, listener.movedCount);
1255+
}
1256+
1257+
TEST_F (ComponentMockTest, DestroyedComponentListenerIsSkipped)
1258+
{
1259+
auto listener = std::make_unique<RecordingComponentListener>();
1260+
mockComponent->addComponentListener (listener.get());
1261+
1262+
listener.reset();
1263+
1264+
const Point<float> newPosition (10.0f, 20.0f);
1265+
EXPECT_NO_FATAL_FAILURE (mockComponent->setPosition (newPosition));
1266+
}
1267+
1268+
TEST_F (ComponentMockTest, ComponentListenerReceivesBeingDeletedCallback)
1269+
{
1270+
RecordingComponentListener listener;
1271+
auto component = std::make_unique<ComponentMock> ("delete-notified");
1272+
component->addComponentListener (&listener);
1273+
1274+
auto* componentAddress = static_cast<Component*> (component.get());
1275+
component.reset();
1276+
1277+
EXPECT_EQ (1, listener.deletedCount);
1278+
EXPECT_EQ (componentAddress, listener.lastDeletedComponent);
1279+
}
1280+
1281+
TEST_F (ComponentMockTest, RemovedComponentListenerDoesNotReceiveBeingDeletedCallback)
1282+
{
1283+
RecordingComponentListener listener;
1284+
auto component = std::make_unique<ComponentMock> ("delete-notified");
1285+
component->addComponentListener (&listener);
1286+
component->removeComponentListener (&listener);
1287+
1288+
component.reset();
1289+
1290+
EXPECT_EQ (0, listener.deletedCount);
1291+
}
1292+
11671293
TEST_F (ComponentMockTest, StyleMethods)
11681294
{
11691295
// Test default style

0 commit comments

Comments
 (0)