Skip to content

Commit 89c4399

Browse files
authored
Merge pull request #597 from dpaulat/copilot/sub-pr-596
Add ChangedEvent signal tests for SettingsVariable
2 parents 3a14b7e + c97971c commit 89c4399

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

test/source/scwx/qt/settings/settings_variable.test.cpp

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,100 @@ TEST(SettingsVariableTest, String)
103103
EXPECT_EQ(stringVariable.GetValue(), "Value 2");
104104
}
105105

106+
TEST(SettingsVariableTest, ChangedEventSetValue)
107+
{
108+
SettingsVariable<int64_t> intVariable {"int64_t"};
109+
intVariable.SetDefault(10);
110+
intVariable.SetValue(20);
111+
112+
std::optional<ChangedEvent<int64_t>> lastChangedEvent;
113+
std::optional<ChangedEvent<int64_t>> lastStagedEvent;
114+
115+
intVariable.changed_signal().connect(
116+
[&](const ChangedEvent<int64_t>& event) { lastChangedEvent = event; });
117+
intVariable.staged_signal().connect(
118+
[&](const ChangedEvent<int64_t>& event) { lastStagedEvent = event; });
119+
120+
ASSERT_TRUE(intVariable.SetValue(30));
121+
122+
ASSERT_TRUE(lastChangedEvent.has_value());
123+
EXPECT_EQ(lastChangedEvent->oldValue_, 20);
124+
EXPECT_EQ(lastChangedEvent->newValue_, 30);
125+
126+
ASSERT_TRUE(lastStagedEvent.has_value());
127+
EXPECT_EQ(lastStagedEvent->oldValue_, 20);
128+
EXPECT_EQ(lastStagedEvent->newValue_, 30);
129+
130+
// Verify no signal is emitted on invalid SetValue
131+
lastChangedEvent.reset();
132+
lastStagedEvent.reset();
133+
intVariable.SetMinimum(5);
134+
ASSERT_FALSE(intVariable.SetValue(1));
135+
EXPECT_FALSE(lastChangedEvent.has_value());
136+
EXPECT_FALSE(lastStagedEvent.has_value());
137+
}
138+
139+
TEST(SettingsVariableTest, ChangedEventSetValueToDefault)
140+
{
141+
SettingsVariable<int64_t> intVariable {"int64_t"};
142+
intVariable.SetDefault(10);
143+
intVariable.SetValue(20);
144+
145+
std::optional<ChangedEvent<int64_t>> lastChangedEvent;
146+
std::optional<ChangedEvent<int64_t>> lastStagedEvent;
147+
148+
intVariable.changed_signal().connect(
149+
[&](const ChangedEvent<int64_t>& event) { lastChangedEvent = event; });
150+
intVariable.staged_signal().connect(
151+
[&](const ChangedEvent<int64_t>& event) { lastStagedEvent = event; });
152+
153+
intVariable.SetValueToDefault();
154+
155+
ASSERT_TRUE(lastChangedEvent.has_value());
156+
EXPECT_EQ(lastChangedEvent->oldValue_, 20);
157+
EXPECT_EQ(lastChangedEvent->newValue_, 10);
158+
159+
ASSERT_TRUE(lastStagedEvent.has_value());
160+
EXPECT_EQ(lastStagedEvent->oldValue_, 20);
161+
EXPECT_EQ(lastStagedEvent->newValue_, 10);
162+
}
163+
164+
TEST(SettingsVariableTest, ChangedEventStageAndCommit)
165+
{
166+
SettingsVariable<int64_t> intVariable {"int64_t"};
167+
intVariable.SetDefault(10);
168+
intVariable.SetValue(20);
169+
170+
std::optional<ChangedEvent<int64_t>> lastChangedEvent;
171+
std::optional<ChangedEvent<int64_t>> lastStagedEvent;
172+
173+
intVariable.changed_signal().connect(
174+
[&](const ChangedEvent<int64_t>& event) { lastChangedEvent = event; });
175+
intVariable.staged_signal().connect(
176+
[&](const ChangedEvent<int64_t>& event) { lastStagedEvent = event; });
177+
178+
// StageValue should only fire staged_signal, not changed_signal
179+
ASSERT_TRUE(intVariable.StageValue(30));
180+
EXPECT_FALSE(lastChangedEvent.has_value());
181+
ASSERT_TRUE(lastStagedEvent.has_value());
182+
EXPECT_EQ(lastStagedEvent->oldValue_, 20);
183+
EXPECT_EQ(lastStagedEvent->newValue_, 30);
184+
185+
// Commit should fire both signals
186+
lastStagedEvent.reset();
187+
ASSERT_TRUE(intVariable.Commit());
188+
189+
ASSERT_TRUE(lastChangedEvent.has_value());
190+
EXPECT_EQ(lastChangedEvent->oldValue_, 20);
191+
EXPECT_EQ(lastChangedEvent->newValue_, 30);
192+
193+
// The staged signal reports the old staged value (30) and the new current
194+
// value (30) after commit, reflecting that no further staged change remains.
195+
ASSERT_TRUE(lastStagedEvent.has_value());
196+
EXPECT_EQ(lastStagedEvent->oldValue_, 30);
197+
EXPECT_EQ(lastStagedEvent->newValue_, 30);
198+
}
199+
106200
} // namespace settings
107201
} // namespace qt
108202
} // namespace scwx

0 commit comments

Comments
 (0)