public void GuardSupportsCloning() { var cloneable = new TestCloneable(); Assert.False(cloneable.IsClone); for (var i = 0; i < 2; i++) { var cloneableArg = Guard.Argument(() => cloneable, i == 1); Assert.False(cloneableArg.Modified); var cloneArg = cloneableArg.Clone(); Assert.Equal(cloneableArg.Name, cloneArg.Name); Assert.True(cloneArg.Value.IsClone); Assert.Equal(cloneableArg.Modified, cloneArg.Modified); Assert.Equal(cloneableArg.Secure, cloneArg.Secure); var modifiedCloneableArg = cloneableArg.Modify(c => new TestCloneable()); Assert.True(modifiedCloneableArg.Modified); Assert.Equal(cloneableArg.Secure, modifiedCloneableArg.Secure); var modifiedCloneArg = modifiedCloneableArg.Clone(); Assert.Equal(modifiedCloneableArg.Name, modifiedCloneArg.Name); Assert.True(modifiedCloneArg.Value.IsClone); Assert.Equal(modifiedCloneableArg.Modified, modifiedCloneArg.Modified); Assert.Equal(modifiedCloneableArg.Secure, modifiedCloneArg.Secure); } }
public void GuardSupportsModifications() { // Modify with value. var untrimmed = " 1 "; var untrimmedArg = Guard.Argument(() => untrimmed); Assert.False(untrimmedArg.Modified); var trimmed = untrimmed.Trim(); var trimmedArg = untrimmedArg.Modify(trimmed); Assert.Equal(untrimmedArg.Name, trimmedArg.Name); Assert.Equal(trimmed, trimmedArg.Value); Assert.True(trimmedArg.Modified); // Modify with converter. var integer = int.Parse(trimmed); var integerArg = trimmedArg.Modify(s => int.Parse(s)); Assert.Equal(trimmedArg.Name, integerArg.Name); Assert.Equal(integer, integerArg.Value); Assert.True(integerArg.Modified); // Wrap. integerArg = trimmedArg.Wrap(s => int.Parse(s)); Assert.Equal(trimmedArg.Name, integerArg.Name); Assert.Equal(integer, integerArg.Value); Assert.True(integerArg.Modified); var str = "A"; Assert.Throws <FormatException>( () => Guard.Argument(() => str).Modify(s => int.Parse(s))); Assert.Throws <ArgumentException>( nameof(str), () => Guard.Argument(() => str).Wrap(s => int.Parse(s))); var message = RandomMessage; var ex = Assert.Throws <ArgumentException>( nameof(str), () => Guard.Argument(() => str).Wrap(s => int.Parse(s), s => { Assert.Same(str, s); return(message); })); Assert.StartsWith(message, ex.Message); // Clone without modification. #if !NETCOREAPP1_0 var cloneable = new TestCloneable(); Assert.False(cloneable.IsCloned); var cloneableArg = Guard.Argument(() => cloneable); Assert.False(cloneableArg.Modified); var clonedArg = cloneableArg.Clone(); Assert.Equal(cloneableArg.Name, clonedArg.Name); Assert.True(clonedArg.Value.IsCloned); Assert.Equal(cloneableArg.Modified, clonedArg.Modified); // Clone with modification. var modifiedCloneableArg = cloneableArg.Modify(c => new TestCloneable()); Assert.True(modifiedCloneableArg.Modified); var modifedClonedArg = modifiedCloneableArg.Clone(); Assert.Equal(modifiedCloneableArg.Name, modifedClonedArg.Name); Assert.True(modifedClonedArg.Value.IsCloned); Assert.Equal(modifiedCloneableArg.Modified, modifedClonedArg.Modified); #endif }