Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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
        }