Skip to content

Commit a8c457f

Browse files
committed
Add test for resetting apartment state
1 parent 0416028 commit a8c457f

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

src/libraries/System.Threading.Thread/tests/ThreadTests.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,20 @@ public static void GetSetApartmentStateTest_ChangeAfterThreadStarted_Windows(
247247
Assert.Equal(ApartmentState.MTA, getApartmentState(t));
248248
Assert.Equal(0, setApartmentState(t, ApartmentState.MTA));
249249
Assert.Equal(ApartmentState.MTA, getApartmentState(t));
250-
Assert.Equal(setType == 0 ? 0 : 2, setApartmentState(t, ApartmentState.STA)); // cannot be changed after thread is started
250+
Assert.Equal(setType == 0 ? 0 : 2, setApartmentState(t, ApartmentState.STA)); // MTA<->STA cannot be changed directly after thread is started
251251
Assert.Equal(ApartmentState.MTA, getApartmentState(t));
252+
253+
if (!PlatformDetection.IsWindowsNanoServer)
254+
{
255+
Assert.Equal(0, setApartmentState(t, ApartmentState.Unknown)); // Compat quirk: MTA<->STA can be changed by going throught Unknown
256+
Assert.Equal(ApartmentState.MTA, getApartmentState(t));
257+
Assert.Equal(0, setApartmentState(t, ApartmentState.STA));
258+
Assert.Equal(ApartmentState.STA, getApartmentState(t));
259+
Assert.Equal(0, setApartmentState(t, ApartmentState.Unknown));
260+
Assert.Equal(ApartmentState.MTA, getApartmentState(t));
261+
Assert.Equal(0, setApartmentState(t, ApartmentState.MTA));
262+
Assert.Equal(ApartmentState.MTA, getApartmentState(t));
263+
}
252264
});
253265
}
254266

0 commit comments

Comments
 (0)