public static void MakeReadOnly_ReadingSucceeds_AllOtherModificationsThrow()
{
string initialValue = "test";
using (SecureString ss = CreateSecureString(initialValue))
{
Assert.False(ss.IsReadOnly());
ss.MakeReadOnly();
Assert.True(ss.IsReadOnly());
// Reads succeed
AssertEquals(initialValue, ss);
Assert.Equal(initialValue.Length, ss.Length);
using (SecureString other = ss.Copy())
{
AssertEquals(initialValue, other);
}
ss.MakeReadOnly(); // ok to call again
// Writes throw
Assert.Throws<InvalidOperationException>(() => ss.AppendChar('a'));
Assert.Throws<InvalidOperationException>(() => ss.Clear());
Assert.Throws<InvalidOperationException>(() => ss.InsertAt(0, 'a'));
Assert.Throws<InvalidOperationException>(() => ss.RemoveAt(0));
Assert.Throws<InvalidOperationException>(() => ss.SetAt(0, 'a'));
}
}